[16] RFR(M): 8249607: C2: assert(!had_error) failed: bad dominance
Vladimir Kozlov
vladimir.kozlov at oracle.com
Thu Aug 27 17:23:52 UTC 2020
On 8/27/20 12:53 AM, Christian Hagedorn wrote:
> On 25.08.20 19:42, Christian Hagedorn wrote:
>> On 25.08.20 16:13, Roland Westrelin wrote:
>>>
>>>> In the testcase, a LoadSNode is cloned in
>>>> PhaseIdealLoop::split_if_with_blocks_post() for each use such that they
>>>> can float out of a loop. To ensure that these loads cannot float back
>>>> into the loop, we pin them by setting their control input [1]. In the
>>>> testcase, all 3 new clones are pinned to a loop exit node that is part
>>>> of an outer strip mined loop (see [2]).
>>>
>>> Do I understand this right, that all 3 clones are pinned with the same
>>> control? So they common and only of them is kept?
>>
>> Yes, exactly. All are pinned to the inner loop exit node. But at the time we hit the assertion failure, we still got
>> one cloned load (903 LoadS) that is an input to the store (575 StoreI) that's going into the outer strip mined loop
>> safepoint, and one load (901 LoadS) that is triggering the dominance failure. LoadS 902 was removed at some point in
>> between due to other optimizations.
>
> As Roland and I have discussed offline, it seems to be better and safer to do a simpler fix that does not change the
> original behavior of the optimization. The new fix suggests not yank AddP nodes (which are inputs to the cloned
> LoadSNodes in the testcase) and also to not yank gc barriers. In the testcase, the cloned LoadSNodes are still pinned at
> the loop exit but now they can be optimized and common up to one node during igvn that only belongs to the safepoint in
> the outer strip mined loop (i.e. no load after the loop anymore). The load is still successfully removed from the inner
> loop:
>
> http://cr.openjdk.java.net/~chagedorn/8249607/webrev.02/
>
> I left the improved dominance failure dumping as it is.
Good.
>
> We think that it would be a good idea to revisit this cloning optimization in an RFE and also consider webrev.01 there
> as it seems to be more like an enhancement for loop strip mining rather than a bug fix. I filed [1] which summarizes
> some thoughts about it.
>
> What do others think about that?
I agree with that.
Thanks,
Vladimir
>
> Best regards,
> Christian
>
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8252372
More information about the hotspot-compiler-dev
mailing list