RFR: 8318049: C2: assert(!failure) failed: Missed optimization opportunity in PhaseIterGVN

Emanuel Peter epeter at openjdk.org
Thu Oct 19 09:56:39 UTC 2023


On Tue, 17 Oct 2023 09:52:28 GMT, Jasmine Karthikeyan <jkarthikeyan at openjdk.org> wrote:

> This patch fixes [JDK-8318049](https://bugs.openjdk.org/browse/JDK-8318049) by informing XorI and XorL nodes in addition to sub and phi nodes when Cast nodes are updated during IGVN. 
> 
> The bug manifests when loop optimizations change the IR:
> ![image](https://github.com/openjdk/jdk/assets/25208576/5274f2cc-a6fb-4ce6-89f4-4a638577901c)
> 
> To the following form:
> ![image](https://github.com/openjdk/jdk/assets/25208576/07bcbec3-f0bb-4d6a-b312-6a459e6b8c0c)
> 
> XorI nodes check for that form in their `Value` call, to do the `x ^ x => 0` transformation, checking through casts. As the cast node didn't inform the Xor when it changes, the transformation doesn't have a chance to run.
> https://github.com/openjdk/jdk/blob/5bd10521eb5e51e76b20e955addd45f76abba6f7/src/hotspot/share/opto/addnode.cpp#L947-L950
> 
> I've attached a reduced version of the test found in the bug. Reviews would be appreciated!

Thanks for the work @jaskarth . A few small suggestions below.

src/hotspot/share/opto/phaseX.cpp line 1603:

> 1601:     // ConstraintCast+ -> Xor
> 1602:     if (use->is_ConstraintCast()) {
> 1603:       auto push_phi_or_sub_uses_to_worklist = [&](Node* n){

Suggestion:

      auto push_the_uses_to_worklist = [&](Node* n){

test/hotspot/jtreg/compiler/c2/TestNotifyCastToXor.java line 28:

> 26:  * @bug 8318049
> 27:  * @summary Test that xor nodes are properly notified when constraint casts change.
> 28:  * @run main/othervm -Xbatch -Xcomp -XX:-TieredCompilation -XX:CompileOnly=compiler.c2.TestNotifyCastToXor::test -XX:VerifyIterativeGVN=10 compiler.c2.TestNotifyCastToXor

The line is a bit long, use multiple lines.
`-Xbatch` is redundant, `-Xcomp` already makes sure things run in the "blocking" mode.

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

Changes requested by epeter (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/16214#pullrequestreview-1687226151
PR Review Comment: https://git.openjdk.org/jdk/pull/16214#discussion_r1365230113
PR Review Comment: https://git.openjdk.org/jdk/pull/16214#discussion_r1365233207


More information about the hotspot-compiler-dev mailing list