equal
deleted
inserted
replaced
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"); |