RFR(S): 8229483: Sinking load out of loop may trigger: assert(found_sfpt) failed: no node in loop that's not input to safepoint
Tobias Hartmann
tobias.hartmann at oracle.com
Wed Aug 28 09:31:01 UTC 2019
Hi Roland,
On 27.08.19 11:23, Roland Westrelin wrote:
> http://cr.openjdk.java.net/~roland/8229483/webrev.00/
I've noticed that field2 in the test is unused.
> The field load in the test case has an early control right below:
>
> barrier = 1;
>
> (it's a volatile store)
>
> and a late control that's conservatively set to be right above:
>
> array[0] = j;
>
> by anti dependence analysis.
>
> The store array[0] is sunk out of the inner loop in the outer strip
> mined loop right above the strip mined loop's safepoint. The load
> initially scheduled in the outer loop is a candidate for being cloned
> and sunk out of loop at the load usages. Because of the anti-dependence
> with the array[0], it is sunk into the outer strip mined loop eventhough
> it is not referenced by the safepoint. That breaks loop strip mining
> verification because the expectation is that any data node in the outer
> strip mined loop is there because it's referenced by the safepoint.
I don't see a field load in the loop, so which load are you referring to?
> The fix simply recognizes this special case when the load is being sunk
> out of loop and makes sure it is not moved in the outer strip mined
> loop.
Wouldn't it be better to relax the verification code if possible? If we ever fix dependency analysis
to be less restrictive (see JDK-8229449), we should move the load out of the loop, right?
> Unrelated to this fix, I wonder if the code at:
>
> http://hg.openjdk.java.net/jdk/jdk/file/cb836bd08d58/src/hotspot/share/opto/loopopts.cpp#l1346
>
> really does what the comment says it does for loads (and really does
> anything useful actually).
I'm not really familiar with that code but maybe file a RFE to investigate this later.
Best regards,
Tobias
More information about the hotspot-compiler-dev
mailing list