RFR: 8265938: C2's conditional move optimization does not handle top Phi

Vladimir Kozlov kvn at openjdk.java.net
Tue Apr 27 16:06:36 UTC 2021


On Tue, 27 Apr 2021 08:41:09 GMT, Tobias Hartmann <thartmann at openjdk.org> wrote:

>> C2's CCP optimization sets the type of a PhiNode to TOP because it became dead after loop unrolling. Now since that node is not reachable from the bottom due to an infinite loop at the end of the method, CCP does not enqueue the PhiNode for IGVN. As a result, the dead subgraph is not removed. During loop opts, the conditional move optimization fails on the PhiNode because its type is top. The expected behavior is to simply bail out with "COMPILE SKIPPED: infinite loop (retry at different tier)".
>> 
>> I suggest to fix this by simply handling a TOP Phi in the conditional move optimization code.
>> 
>> This issue was reported by John Jiang (johnsjiang at tencent.com).
>> 
>> Thanks,
>> Tobias
>
> Thanks for the reviews and suggestions.
> 
> @vnkozlov, how did you run the test? The exact same code is also used in `compiler/loopopts/TestStrangeControl.java` and we never had problems with that test not exiting.
> 
> @iignatev Thanks, I've updated the test(s) accordingly.

@TobiHartmann I ran test locally (not with jtreg). TestStrangeControl.java has the same issue when run standalone.
I think JTREG may kill process when main thread exits or something like that.

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

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


More information about the hotspot-compiler-dev mailing list