RFR: 8268019: C2: assert(no_dead_loop) failed: dead loop detected

Vladimir Kozlov kvn at openjdk.java.net
Fri Jul 23 15:54:04 UTC 2021


On Fri, 23 Jul 2021 08:26:06 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:

>> src/hotspot/share/opto/ifnode.cpp line 118:
>> 
>>> 116:   // No intervening control, like a simple Call
>>> 117:   Node* r = iff->in(0);
>>> 118:   if (!r->is_Region() || r->is_Loop() || phi->region() != r) {
>> 
>> May be also add ` || r->as_Region()->is_copy() || igvn->_worklist.member(r)` checks.
>
> Could we then possibly miss a split if opportunity when bailing out with `igvn->_worklist.member(r)`? Should we readd the `If` node to the worklist in this case? We could also think about adding `igvn->_worklist.member(r)` further down when we are really sure that we could do a split if.

My thinking is that Region could go away after it is processed (when input[s] are dead/top). Why bother to split through it?

I am concern that you are checking dead inputs by hand in these changes - input's transformation to Top should put Region node on worklist. Can you do experiment without your dead inputs check and only checking worklist?

I think the issue (as usual) is the order of processing of worklist. That is why I suggested this check.
Yes, you can delay worklist checking to see if we should put If node back on worklist only when we can do split if.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4860


More information about the hotspot-compiler-dev mailing list