equal
deleted
inserted
replaced
1391 Node* phi = NULL; |
1391 Node* phi = NULL; |
1392 for (DUIterator_Fast jmax, j = fast_outs(jmax); j < jmax; j++) { |
1392 for (DUIterator_Fast jmax, j = fast_outs(jmax); j < jmax; j++) { |
1393 Node* uu = fast_out(j); |
1393 Node* uu = fast_out(j); |
1394 if (uu->is_Phi()) { |
1394 if (uu->is_Phi()) { |
1395 Node* be = uu->in(LoopNode::LoopBackControl); |
1395 Node* be = uu->in(LoopNode::LoopBackControl); |
1396 while (be->is_Store() && old_new[be->_idx] != NULL) { |
1396 if (be->is_Store() && old_new[be->_idx] != NULL) { |
1397 ShouldNotReachHere(); |
1397 assert(false, "store on the backedge + sunk stores: unsupported"); |
1398 be = be->in(MemNode::Memory); |
1398 // drop outer loop |
|
1399 IfNode* outer_le = outer_loop_end(); |
|
1400 Node* iff = igvn->transform(new IfNode(outer_le->in(0), outer_le->in(1), outer_le->_prob, outer_le->_fcnt)); |
|
1401 igvn->replace_node(outer_le, iff); |
|
1402 inner_cl->clear_strip_mined(); |
|
1403 return; |
1399 } |
1404 } |
1400 if (be == last || be == first->in(MemNode::Memory)) { |
1405 if (be == last || be == first->in(MemNode::Memory)) { |
1401 assert(phi == NULL, "only one phi"); |
1406 assert(phi == NULL, "only one phi"); |
1402 phi = uu; |
1407 phi = uu; |
1403 } |
1408 } |
1446 igvn->replace_input_of(first, MemNode::Memory, phi); |
1451 igvn->replace_input_of(first, MemNode::Memory, phi); |
1447 } else { |
1452 } else { |
1448 // Or fix the outer loop fix to include |
1453 // Or fix the outer loop fix to include |
1449 // that chain of stores. |
1454 // that chain of stores. |
1450 Node* be = phi->in(LoopNode::LoopBackControl); |
1455 Node* be = phi->in(LoopNode::LoopBackControl); |
1451 while (be->is_Store() && old_new[be->_idx] != NULL) { |
1456 assert(!(be->is_Store() && old_new[be->_idx] != NULL), "store on the backedge + sunk stores: unsupported"); |
1452 ShouldNotReachHere(); |
|
1453 be = be->in(MemNode::Memory); |
|
1454 } |
|
1455 if (be == first->in(MemNode::Memory)) { |
1457 if (be == first->in(MemNode::Memory)) { |
1456 if (be == phi->in(LoopNode::LoopBackControl)) { |
1458 if (be == phi->in(LoopNode::LoopBackControl)) { |
1457 igvn->replace_input_of(phi, LoopNode::LoopBackControl, last); |
1459 igvn->replace_input_of(phi, LoopNode::LoopBackControl, last); |
1458 } else { |
1460 } else { |
1459 igvn->replace_input_of(be, MemNode::Memory, last); |
1461 igvn->replace_input_of(be, MemNode::Memory, last); |