RFR: 8263303: C2 compilation fails with assert(found_sfpt) failed: no node in loop that's not input to safepoint

Christian Hagedorn chagedorn at openjdk.java.net
Wed Jun 9 08:50:15 UTC 2021


On Tue, 1 Jun 2021 08:30:48 GMT, Roland Westrelin <roland at openjdk.org> wrote:

> The loop strip mining verification code catches a node which is pinned
> in the outer strip mined loop but not referenced from the safepoint
> node.
> 
> The test case is an example of how this could happen. The array[i]
> load is referenced from the safepoint initially through:
> 
> (j - 10) * array[i]
> 
> It is sunk out of the inner loop and pinned in the outer loop. A
> following loop opts round causes j - 10 to constant fold to 0 and as a
> consequence the array load is no longer referenced from the safepoint
> but pinned in the outer strip mined loop.
> 
> I tried to find a way to preserve the invariant that all nodes in the
> outer strip mined loop are referenced from the safepoint but found no
> robust way for that. So the fix removes that part of the verification
> code.
> 
> This requires loop cloning code to be adjusted for nodes pinned in the
> outer strip mined loop but not referenced from the safepoint.

That's reasonable. Looks good to me!

test/hotspot/jtreg/compiler/loopstripmining/TestPinnedUseInOuterLSMUnusedBySfpt.java line 2:

> 1: // rr record ~/jdk-jdk/build/linux-x86_64-server-fastdebug/images/jdk/bin/java -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:+PrintCompilation -XX:CompileOnly=TestPinnedUseInOuterLSM::test -XX:CompileCommand=quiet -XX:PrintIdealGraphFile=graph.xml -XX:PrintIdealGraphLevel=2 -XX:+UseG1GC -XX:+TraceLoopOpts -XX:LoopUnrollLimit=0 TestPinnedUseInOuterLSM
> 2: 

Probably a leftover, can be removed

-------------

Marked as reviewed by chagedorn (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/4278


More information about the hotspot-compiler-dev mailing list