RFR(M): 8073480: C2 should optimize explicit range checks
roland.westrelin at oracle.com
Thu Mar 12 17:36:13 UTC 2015
>>> And here is the same on jdk9/hs-rt with your patch applied:
>>> 0x0000000110355f40: movslq %r10d,%r9
>>> 0x0000000110355f43: add 0x10(%r8,%r9,4),%eax ;*iadd
>>> ; - arrays.ArrayTest::u_loop at 22 (line 65)
>>> 0x0000000110355f48: inc %r10d ;*iinc
>>> ; - arrays.ArrayTest::u_loop at 24 (line 64)
>>> 0x0000000110355f4b: cmp %r11d,%r10d
>>> 0x0000000110355f4e: jl 0x0000000110355f40 ;*if_icmpge
>>> ; - arrays.ArrayTest::u_loop at 12 (line 64)
>>> I wish we could get rid of those pesky "movslq" instructions :-) but IIUC that is tricky.
>> Are the movslq there only for the u_loop() case? Can you send me your test case. I’ll see if I can make them go away.
> Do you still want a testcase? I have a JMH nanobenchmark that reproduces
> exactly this behavior.
Thanks for offering a test case but the issue you spotted is different from the one here where there’s an explicit range check is the code before a memory access. In that case we can use the explicit range check to remove integer to long conversion.
More information about the hotspot-compiler-dev