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 |
1309 union_traces(targ_trace, src_trace); |
1309 union_traces(targ_trace, src_trace); |
1310 } |
1310 } |
1311 } |
1311 } |
1312 } else if (e->state() == CFGEdge::open) { |
1312 } else if (e->state() == CFGEdge::open) { |
1313 // Append traces, even without a fall-thru connection. |
1313 // Append traces, even without a fall-thru connection. |
1314 // But leave root entry at the begining of the block list. |
1314 // But leave root entry at the beginning of the block list. |
1315 if (targ_trace != trace(_cfg._broot)) { |
1315 if (targ_trace != trace(_cfg._broot)) { |
1316 e->set_state(CFGEdge::connected); |
1316 e->set_state(CFGEdge::connected); |
1317 src_trace->append(targ_trace); |
1317 src_trace->append(targ_trace); |
1318 union_traces(src_trace, targ_trace); |
1318 union_traces(src_trace, targ_trace); |
1319 } |
1319 } |
1432 break_loop_after(b); |
1432 break_loop_after(b); |
1433 } |
1433 } |
1434 } |
1434 } |
1435 |
1435 |
1436 // Backbranch to the top of a trace |
1436 // Backbranch to the top of a trace |
1437 // 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 |
1438 // 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. |
1439 for (Block *b = targ_block; b != NULL; b = next(b)) { |
1439 for (Block *b = targ_block; b != NULL; b = next(b)) { |
1440 if (b->has_loop_alignment()) { |
1440 if (b->has_loop_alignment()) { |
1441 break; |
1441 break; |
1442 } |
1442 } |