hotspot/src/share/vm/opto/block.cpp
changeset 2154 72a9b7284ccf
parent 2105 347008ce7984
parent 2131 98f9cef66a34
child 3186 11ba3d09bd0e
equal deleted inserted replaced
2106:ec595a5e793e 2154:72a9b7284ccf
   179 
   179 
   180   return not_empty;
   180   return not_empty;
   181 }
   181 }
   182 
   182 
   183 //------------------------------has_uncommon_code------------------------------
   183 //------------------------------has_uncommon_code------------------------------
   184 // Return true if the block's code implies that it is not likely to be
   184 // Return true if the block's code implies that it is likely to be
   185 // executed infrequently.  Check to see if the block ends in a Halt or
   185 // executed infrequently.  Check to see if the block ends in a Halt or
   186 // a low probability call.
   186 // a low probability call.
   187 bool Block::has_uncommon_code() const {
   187 bool Block::has_uncommon_code() const {
   188   Node* en = end();
   188   Node* en = end();
   189 
   189 
   907               !(b->head()->is_Loop() && n->is_Phi()) &&
   907               !(b->head()->is_Loop() && n->is_Phi()) &&
   908               // See (+++) comment in reg_split.cpp
   908               // See (+++) comment in reg_split.cpp
   909               !(n->jvms() != NULL && n->jvms()->is_monitor_use(k)) ) {
   909               !(n->jvms() != NULL && n->jvms()->is_monitor_use(k)) ) {
   910             assert( b->find_node(def) < j, "uses must follow definitions" );
   910             assert( b->find_node(def) < j, "uses must follow definitions" );
   911           }
   911           }
       
   912           if( def->is_SafePointScalarObject() ) {
       
   913             assert(_bbs[def->_idx] == b, "SafePointScalarObject Node should be at the same block as its SafePoint node");
       
   914             assert(_bbs[def->_idx] == _bbs[def->in(0)->_idx], "SafePointScalarObject Node should be at the same block as its control edge");
       
   915           }
   912         }
   916         }
   913       }
   917       }
   914     }
   918     }
   915 
   919 
   916     j = b->end_idx();
   920     j = b->end_idx();
  1305           union_traces(targ_trace, src_trace);
  1309           union_traces(targ_trace, src_trace);
  1306         }
  1310         }
  1307       }
  1311       }
  1308     } else if (e->state() == CFGEdge::open) {
  1312     } else if (e->state() == CFGEdge::open) {
  1309       // Append traces, even without a fall-thru connection.
  1313       // Append traces, even without a fall-thru connection.
  1310       // But leave root entry at the begining of the block list.
  1314       // But leave root entry at the beginning of the block list.
  1311       if (targ_trace != trace(_cfg._broot)) {
  1315       if (targ_trace != trace(_cfg._broot)) {
  1312         e->set_state(CFGEdge::connected);
  1316         e->set_state(CFGEdge::connected);
  1313         src_trace->append(targ_trace);
  1317         src_trace->append(targ_trace);
  1314         union_traces(src_trace, targ_trace);
  1318         union_traces(src_trace, targ_trace);
  1315       }
  1319       }
  1428         break_loop_after(b);
  1432         break_loop_after(b);
  1429       }
  1433       }
  1430     }
  1434     }
  1431 
  1435 
  1432     // Backbranch to the top of a trace
  1436     // Backbranch to the top of a trace
  1433     // Scroll foward through the trace from the targ_block. If we find
  1437     // Scroll forward through the trace from the targ_block. If we find
  1434     // a loop head before another loop top, use the the loop head alignment.
  1438     // a loop head before another loop top, use the the loop head alignment.
  1435     for (Block *b = targ_block; b != NULL; b = next(b)) {
  1439     for (Block *b = targ_block; b != NULL; b = next(b)) {
  1436       if (b->has_loop_alignment()) {
  1440       if (b->has_loop_alignment()) {
  1437         break;
  1441         break;
  1438       }
  1442       }