src/share/vm/opto/lcm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/lcm.cpp	Tue Jul 26 19:26:59 2011
--- new/src/share/vm/opto/lcm.cpp	Tue Jul 26 19:26:59 2011

*** 323,333 **** --- 323,333 ---- cfg->_bbs.map(val->_idx,this); // DecodeN on x86 may kill flags. Check for flag-killing projections // that also need to be hoisted. for (DUIterator_Fast jmax, j = val->fast_outs(jmax); j < jmax; j++) { Node* n = val->fast_out(j); ! if( n->Opcode() == Op_MachProj ) { ! if( n->is_MachProj() ) { cfg->_bbs[n->_idx]->find_remove(n); this->add_inst(n); cfg->_bbs.map(n->_idx,this); } }
*** 345,355 **** --- 345,355 ---- // Check for flag-killing projections that also need to be hoisted // Should be DU safe because no edge updates. for (DUIterator_Fast jmax, j = best->fast_outs(jmax); j < jmax; j++) { Node* n = best->fast_out(j); ! if( n->Opcode() == Op_MachProj ) { ! if( n->is_MachProj() ) { cfg->_bbs[n->_idx]->find_remove(n); add_inst(n); cfg->_bbs.map(n->_idx,this); } }
*** 537,547 **** --- 537,547 ---- Node* call = NULL; for (DUIterator_Fast imax, i = this_call->fast_outs(imax); i < imax; i++) { Node* m = this_call->fast_out(i); if( bbs[m->_idx] == this && // Local-block user m != this_call && // Not self-start node ! m->is_Call() ) ! m->is_MachCall() ) call = m; break; } if (call == NULL) return; // No next call (e.g., block end is near) // Set next-call for all inputs to this call
*** 555,565 **** --- 555,565 ---- // Schedule all the users of the call right now. All the users are // projection Nodes, so they must be scheduled next to the call. // Collect all the defined registers. for (DUIterator_Fast imax, i = mcall->fast_outs(imax); i < imax; i++) { Node* n = mcall->fast_out(i); ! assert( n->Opcode()==Op_MachProj, "" ); ! assert( n->is_MachProj(), "" ); --ready_cnt[n->_idx]; assert( !ready_cnt[n->_idx], "" ); // Schedule next to call _nodes.map(node_cnt++, n); // Collect defined registers
*** 973,984 **** --- 973,984 ---- // End of region to clone uint end = end_idx(); if( !_nodes[end]->is_Catch() ) return; // Start of region to clone uint beg = end; ! while( _nodes[beg-1]->Opcode() != Op_MachProj || ! !_nodes[beg-1]->in(0)->is_Call() ) { ! while(!_nodes[beg-1]->is_MachProj() || ! !_nodes[beg-1]->in(0)->is_MachCall() ) { beg--; assert(beg > 0,"Catch cleanup walking beyond block boundary"); } // Range of inserted instructions is [beg, end) if( beg == end ) return;

src/share/vm/opto/lcm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File