[16] RFR(M): 8249607: C2: assert(!had_error) failed: bad dominance

Christian Hagedorn christian.hagedorn at oracle.com
Fri Aug 28 08:10:08 UTC 2020


Hi Vladimir

On 27.08.20 19:23, Vladimir Kozlov wrote:
> 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.

Thank you for your review!

>>
>> 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.

Great!

Best regards,
Christian

> Thanks,
> Vladimir
> 
>>
>> Best regards,
>> Christian
>>
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-8252372


More information about the hotspot-compiler-dev mailing list