RFR: 8261671: X86 I2L conversion can be skipped for certain masked positive values [v7]

Vladimir Kozlov kvn at openjdk.java.net
Thu Mar 11 00:39:08 UTC 2021


On Wed, 10 Mar 2021 00:27:20 GMT, Marcus G K Williams <github.com+168222+mgkwill at openjdk.org> wrote:

>> Changes requested by neliasso (Reviewer).
>
> Thanks for the review @neliasso. I tried both of your suggestions. 
> - Rolling the test operations into a 'for' loop worked, it appears my earlier troubles w/ C2 compilation were due to another factor. 
> - Using "-XX:CompileCommand=dontinline,compiler.codegen.BMI2$BMITests::*" did not allow me to manually verify the assembly code was appearing and that the test was valid. Perhaps I'm missing something. See my comment for more detail.
> 
> Thanks again for your review. Please let me know what you think and if you have other suggestions or comments.

I think you become "victim" of JTREG's feature which removes middle of long output:

...
Output overflow:
JT Harness has limited the test output to the text
at the beginning and the end, so that you can see how the
test began, and how it completed.
You need to remove `-XX:+PrintAssembly` option which prints code for ALL compiled method and overflow jtreg output.
You only need `-XX:CompileCommand=print,class::method` which prints assembler for specified method.

An other issue is that `make test` "eats" `$` in class name. I ran command you used:
`make test TEST="jtreg:test/hotspot/jtreg/compiler/codegen/BMI2.java" JTREG="VM_OPTIONS=-XX:+UnlockDiagnosticVMOptions -XX:-TieredCompilation -Xbatch -XX:CompileCommand=print,compiler.codegen.BMI2$BMITests::*"`

and got next message in output .jtr file:

----------System.out:(2/154)----------
CompileCommand: print compiler/codegen/BMI2MITests.* bool print = true
CompileCommand: dontinline compiler/codegen/BMI2$BMITests.* bool dontinline = true
`dontinline` line comes from test `@run` command and it is correct. But class name for `print` is wrong. I tried to use `$` - did not help.

I ran the test with `jtreg`:
jtreg -testjdk:my_jdk -va -javaoptions:'-server -XX:CompileCommand=print,compiler.codegen.BMI2$BMITests::* -XX:-TieredCompilation -Xbatch' compiler/codegen/BMI2.java
And got nice code for 
04c     B4: #   out( B20 ) <- in( B2 )  Freq: 0.0624999
04c     bzhiq RAX, RSI, #32767  # using R10 as TEMP, int & immI_bitmask -> long
057     jmp     B20

05c     B5: #   out( B20 ) <- in( B2 )  Freq: 0.0624999
05c     bzhiq RAX, RSI, #16383  # using R10 as TEMP, int & immI_bitmask -> long
067     jmp     B20

06c     B6: #   out( B20 ) <- in( B2 )  Freq: 0.0624999
06c     bzhiq RAX, RSI, #8191   # using R10 as TEMP, int & immI_bitmask -> long
077     jmp     B20

07c     B7: #   out( B20 ) <- in( B2 )  Freq: 0.0624999
07c     bzhiq RAX, RSI, #4095   # using R10 as TEMP, int & immI_bitmask -> long
087     jmp     B20

08c     B8: #   out( B20 ) <- in( B2 )  Freq: 0.0624999
08c     bzhiq RAX, RSI, #2047   # using R10 as TEMP, int & immI_bitmask -> long
097     jmp,s   B20

099     B9: #   out( B20 ) <- in( B2 )  Freq: 0.0624999
099     bzhiq RAX, RSI, #1023   # using R10 as TEMP, int & immI_bitmask -> long
0a4     jmp,s   B20

0a6     B10: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0a6     bzhiq RAX, RSI, #511    # using R10 as TEMP, int & immI_bitmask -> long
0b1     jmp,s   B20

0b3     B11: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0b3     movzbl  RAX, RSI        # int & 0xFF -> long
0b7     jmp,s   B20

0b9     B12: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0b9     bzhiq RAX, RSI, #127    # using R10 as TEMP, int & immI_bitmask -> long
0c4     jmp,s   B20

0c6     B13: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0c6     bzhiq RAX, RSI, #63     # using R10 as TEMP, int & immI_bitmask -> long
0d1     jmp,s   B20

0d3     B14: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0d3     bzhiq RAX, RSI, #31     # using R10 as TEMP, int & immI_bitmask -> long
0de     jmp,s   B20

0e0     B15: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0e0     bzhiq RAX, RSI, #15     # using R10 as TEMP, int & immI_bitmask -> long
0eb     jmp,s   B20

0ed     B16: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0ed     bzhiq RAX, RSI, #7      # using R10 as TEMP, int & immI_bitmask -> long
0f8     jmp,s   B20

0fa     B17: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
0fa     bzhiq RAX, RSI, #3      # using R10 as TEMP, int & immI_bitmask -> long
105     jmp,s   B20

107     B18: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
107     bzhiq RAX, RSI, #1      # using R10 as TEMP, int & immI_bitmask -> long
112     jmp,s   B20

114     B19: #  out( B20 ) <- in( B2 )  Freq: 0.0624999
114     movzwl  RAX, RSI        # int & 0xFFFF -> long

117     B20: #  out( N1 ) <- in( B19 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 )  Freq: 0.999999
117     addq    rsp, 32 # Destroy frame
        popq    rbp
        cmpq     rsp, poll_offset[r15_thread]
        ja       #safepoint_stub        # Safepoint: poll for GC

129     ret

You patch and test are good!

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

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


More information about the hotspot-compiler-dev mailing list