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