RFR: 8366815: C2: Delay Mod/Div by constant transformation [v4]

Emanuel Peter epeter at openjdk.org
Fri Dec 19 07:02:02 UTC 2025


On Mon, 15 Dec 2025 09:33:19 GMT, Hannes Greule <hgreule at openjdk.org> wrote:

>> The test cases show examples of code where `Value()` previously wasn't run because idealization took place before, resulting in less precise type analysis.
>> 
>> Please let me know what you think.
>
> Hannes Greule has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
> 
>  - Merge branch 'master' into delay-divmod-idealization
>  - review
>  - expand comments
>  - delay integral Div/Mod Ideal() until IGVN
>  - test

We are getting some failures for this test, both on `x64` and `aarch64`:
`compiler/igvn/IntegerDivValueTests.java`


Compilation of Failed Method
----------------------------
1) Compilation of "public long compiler.igvn.IntegerDivValueTests.testLongRange(long)":
> Phase "PrintIdeal":
AFTER: print_ideal
  0  Root  === 0 40  [[ 0 1 3 39 ]] inner 
  1  Con  === 0  [[ ]]  #top
  3  Start  === 3 0  [[ 3 5 6 7 8 9 ]]  #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR, 4:return_address, 5:instptr:compiler/igvn/IntegerDivValueTests:NotNull+0,iid=bot, 6:long, 7:half}
  5  Parm  === 3  [[ 40 ]] Control !jvms: IntegerDivValueTests::testLongRange @ bci:-1 (line 306)
  6  Parm  === 3  [[ 40 ]] I_O !jvms: IntegerDivValueTests::testLongRange @ bci:-1 (line 306)
  7  Parm  === 3  [[ 40 ]] Memory  Memory: @ptr:BotPTR+bot, idx=Bot; !jvms: IntegerDivValueTests::testLongRange @ bci:-1 (line 306)
  8  Parm  === 3  [[ 40 ]] FramePtr !jvms: IntegerDivValueTests::testLongRange @ bci:-1 (line 306)
  9  Parm  === 3  [[ 40 ]] ReturnAdr !jvms: IntegerDivValueTests::testLongRange @ bci:-1 (line 306)
 39  ConL  === 0  [[ 40 ]]  #long:1
 40  Return  === 5 6 7 8 9 returns 39  [[ 0 ]] 


Failed IR Rules (1) of Methods (1)
----------------------------------
1) Method "public long compiler.igvn.IntegerDivValueTests.testLongRange(long)" - [Failed IR rules: 1]:
   * @IR rule 1: "@compiler.lib.ir_framework.IR(phase={DEFAULT}, applyIfPlatformAnd={}, applyIfCPUFeatureOr={}, counts={"_#RSHIFT_L#_", "> 0", "_#ADD_L#_", "> 0", "_#AND_L#_", "> 0"}, failOn={"_#DIV#_"}, applyIfPlatform={}, applyIfPlatformOr={}, applyIfOr={}, applyIfCPUFeatureAnd={}, applyIf={}, applyIfCPUFeature={}, applyIfAnd={}, applyIfNot={})"
     > Phase "PrintIdeal":
       - counts: Graph contains wrong number of nodes:
         * Constraint 1: "(\\d+(\\s){2}(RShiftL.*)+(\\s){2}===.*)"
           - Failed comparison: [found] 0 > 0 [given]
           - No nodes matched!
         * Constraint 2: "(\\d+(\\s){2}(AddL.*)+(\\s){2}===.*)"
           - Failed comparison: [found] 0 > 0 [given]
           - No nodes matched!
         * Constraint 3: "(\\d+(\\s){2}(AndL.*)+(\\s){2}===.*)"
           - Failed comparison: [found] 0 > 0 [given]
           - No nodes matched!

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

PR Comment: https://git.openjdk.org/jdk/pull/27886#issuecomment-3673837311


More information about the hotspot-compiler-dev mailing list