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