Print this page
rev 6874 : 8059780: SPECjvm2008-MPEG performance regressions on x64 platforms
Summary: Back-out 8052081 changes made in lcm.cpp.
Reviewed-by: iveresov, roland

Split Split Close
Expand all
Collapse all
          --- old/src/share/vm/opto/lcm.cpp
          +++ new/src/share/vm/opto/lcm.cpp
↓ open down ↓ 476 lines elided ↑ open up ↑
 477  477      // of induction variable increments to after the other
 478  478      // uses of the phi are scheduled.
 479  479      Node *n = worklist[i];      // Get Node on worklist
 480  480  
 481  481      int iop = n->is_Mach() ? n->as_Mach()->ideal_Opcode() : 0;
 482  482      if( n->is_Proj() ||         // Projections always win
 483  483          n->Opcode()== Op_Con || // So does constant 'Top'
 484  484          iop == Op_CreateEx ||   // Create-exception must start block
 485  485          iop == Op_CheckCastPP
 486  486          ) {
 487      -      // select the node n
 488      -      // remove n from worklist and retain the order of remaining nodes
 489      -      worklist.remove((uint)i);
      487 +      worklist.map(i,worklist.pop());
 490  488        return n;
 491  489      }
 492  490  
 493  491      // Final call in a block must be adjacent to 'catch'
 494  492      Node *e = block->end();
 495  493      if( e->is_Catch() && e->in(0)->in(0) == n )
 496  494        continue;
 497  495  
 498  496      // Memory op for an implicit null check has to be at the end of the block
 499  497      if( e->is_MachNullCheck() && e->in(1) == n )
↓ open down ↓ 65 lines elided ↑ open up ↑
 565  563        choice  = n_choice;
 566  564        latency = n_latency;
 567  565        score   = n_score;
 568  566        idx     = i;               // Also keep index in worklist
 569  567      }
 570  568    } // End of for all ready nodes in worklist
 571  569  
 572  570    assert(idx >= 0, "index should be set");
 573  571    Node *n = worklist[(uint)idx];      // Get the winner
 574  572  
 575      -  // select the node n
 576      -  // remove n from worklist and retain the order of remaining nodes
 577      -  worklist.remove((uint)idx);
      573 +  worklist.map((uint)idx, worklist.pop());     // Compress worklist
 578  574    return n;
 579  575  }
 580  576  
 581  577  
 582  578  //------------------------------set_next_call----------------------------------
 583  579  void PhaseCFG::set_next_call(Block* block, Node* n, VectorSet& next_call) {
 584  580    if( next_call.test_set(n->_idx) ) return;
 585  581    for( uint i=0; i<n->len(); i++ ) {
 586  582      Node *m = n->in(i);
 587  583      if( !m ) continue;  // must see all nodes in block that precede call
↓ open down ↓ 578 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX