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

Christian Hagedorn christian.hagedorn at oracle.com
Tue Aug 25 17:42:38 UTC 2020


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.

Best regards,
Christian


More information about the hotspot-compiler-dev mailing list