src/hotspot/share/opto/loopnode.cpp
changeset 48528 b329894ee5a2
parent 48527 0769bb301c7a
child 48595 5d699d81c10c
equal deleted inserted replaced
48527:0769bb301c7a 48528:b329894ee5a2
  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);