1441 |
1441 |
1442 // Don't allow the control input to be a CFG splitting node. |
1442 // Don't allow the control input to be a CFG splitting node. |
1443 // Such nodes should only have ProjNodes as outs, e.g. IfNode |
1443 // Such nodes should only have ProjNodes as outs, e.g. IfNode |
1444 // should only have IfTrueNode and IfFalseNode (4985384). |
1444 // should only have IfTrueNode and IfFalseNode (4985384). |
1445 x_ctrl = find_non_split_ctrl(x_ctrl); |
1445 x_ctrl = find_non_split_ctrl(x_ctrl); |
|
1446 |
|
1447 IdealLoopTree* x_loop = get_loop(x_ctrl); |
|
1448 Node* x_head = x_loop->_head; |
|
1449 if (x_head->is_Loop() && (x_head->is_OuterStripMinedLoop() || x_head->as_Loop()->is_strip_mined()) && is_dominator(n_ctrl, x_head)) { |
|
1450 // Anti dependence analysis is sometimes too |
|
1451 // conservative: a store in the outer strip mined loop |
|
1452 // can prevent a load from floating out of the outer |
|
1453 // strip mined loop but the load may not be referenced |
|
1454 // from the safepoint: loop strip mining verification |
|
1455 // code reports a problem in that case. Make sure the |
|
1456 // load is not moved in the outer strip mined loop in |
|
1457 // that case. |
|
1458 x_ctrl = x_head->as_Loop()->skip_strip_mined()->in(LoopNode::EntryControl); |
|
1459 } |
1446 assert(dom_depth(n_ctrl) <= dom_depth(x_ctrl), "n is later than its clone"); |
1460 assert(dom_depth(n_ctrl) <= dom_depth(x_ctrl), "n is later than its clone"); |
1447 |
1461 |
1448 x->set_req(0, x_ctrl); |
1462 x->set_req(0, x_ctrl); |
1449 } |
1463 } |
1450 register_new_node(x, x_ctrl); |
1464 register_new_node(x, x_ctrl); |