[lworld] RFR: 8361465: [lworld] testlibrary_tests/ir_framework/tests/TestPhaseIRMatching.java fails

Quan Anh Mai qamai at openjdk.org
Mon Jul 14 12:34:06 UTC 2025


On Mon, 14 Jul 2025 11:55:06 GMT, Marc Chevalier <mchevalier at openjdk.org> wrote:

> The constraint `failOn = IRNode.STORE` on `NoCompilationOutput.badPhase2` in `test/hotspot/jtreg/testlibrary_tests/ir_framework/tests/TestPhaseIRMatching.java` does not fail for the phase `ITER_GVN_AFTER_ELIMINATION`:
> 
> AFTER: ITER_GVN_AFTER_ELIMINATION
>   0  Root  === 0 21  [[ 0 1 3 ]]
>   3  Start  === 3 0  [[ 3 5 6 7 8 9 ]]  #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR, 4:return_address, 5:ir_framework/tests/NoCompilationOutput:NotNull *}
>   5  Parm  === 3  [[ 21 ]] Control !jvms: NoCompilationOutput::badPhase2 @ bci:-1 (line 353)
>   6  Parm  === 3  [[ 21 ]] I_O !jvms: NoCompilationOutput::badPhase2 @ bci:-1 (line 353)
>   7  Parm  === 3  [[ 21 ]] Memory  Memory: @BotPTR *+bot, idx=Bot; !jvms: NoCompilationOutput::badPhase2 @ bci:-1 (line 353)
>   8  Parm  === 3  [[ 21 ]] FramePtr !jvms: NoCompilationOutput::badPhase2 @ bci:-1 (line 353)
>   9  Parm  === 3  [[ 21 ]] ReturnAdr !jvms: NoCompilationOutput::badPhase2 @ bci:-1 (line 353)
>  21  Return  === 5 6 7 8 9  [[ 0 ]]
> 
> which is not surprising given this method has an empty body.
> 
> What is surprising is that `ITER_GVN_AFTER_ELIMINATION` gives some output, which is what the test is about (cf. `@ExpectedFailure(ruleId = 1, hasCompilation = false,`).
> 
> So, if we just remove this phase in the test, we are good... as long as it's legitimate to do so. And I think it is: #1447 added some macro expansions (including an IGVN round with phase `PHASE_ITER_GVN_AFTER_ELIMINATION`) to `Compile::Optimize` just before the escape analysis, one of those being unconditional:
> https://github.com/openjdk/valhalla/blob/7e4c1bc1753bcd9655214eca32c391d28af43267/src/hotspot/share/opto/compile.cpp#L2858-L2867
> And this code being Valhalla-specific, that explains why our test is failing only on Valhalla.
> 
> So the fix is just as simple as not trying to find a failure for this phase.
> 
> I think it's very fine because this test is more about testing IR framework features than making sure this particular phase is missing on this method.
> 
> Thanks,
> Marc

Can you guard the unconditional macro elimination with a condition that there are some macro nodes instead?

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

PR Comment: https://git.openjdk.org/valhalla/pull/1508#issuecomment-3069314271


More information about the valhalla-dev mailing list