src/hotspot/share/opto/loopnode.cpp
changeset 58516 d376d86b0a01
parent 58471 bada0782842a
child 58679 9c3209ff7550
child 58962 2dcfc28a314d
equal deleted inserted replaced
58515:8f849d3ec1e5 58516:d376d86b0a01
   988               wq.push(u);
   988               wq.push(u);
   989             }
   989             }
   990           }
   990           }
   991         }
   991         }
   992         assert(found_sfpt, "no node in loop that's not input to safepoint");
   992         assert(found_sfpt, "no node in loop that's not input to safepoint");
   993       }
       
   994     }
       
   995 
       
   996     if (UseZGC && !inner_out->in(0)->is_CountedLoopEnd()) {
       
   997       // In some very special cases there can be a load that has no other uses than the
       
   998       // counted loop safepoint. Then its loadbarrier will be placed between the inner
       
   999       // loop exit and the safepoint. This is very rare
       
  1000 
       
  1001       Node* ifnode = inner_out->in(1)->in(0);
       
  1002       // Region->IfTrue->If == Region->Iffalse->If
       
  1003       if (ifnode == inner_out->in(2)->in(0)) {
       
  1004         inner_out = ifnode->in(0);
       
  1005       }
   993       }
  1006     }
   994     }
  1007 
   995 
  1008     CountedLoopEndNode* cle = inner_out->in(0)->as_CountedLoopEnd();
   996     CountedLoopEndNode* cle = inner_out->in(0)->as_CountedLoopEnd();
  1009     assert(cle == inner->loopexit_or_null(), "mismatch");
   997     assert(cle == inner->loopexit_or_null(), "mismatch");