equal
deleted
inserted
replaced
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 } |