Jitted array-length checks before entering a loop
Nassim Halli
nassim.halli at gmail.com
Mon Sep 28 13:37:54 UTC 2015
Hi guys,
I have a question relative to some code generated by the C2 compiler.
When I look at the assembly codes for this method:
static void compiledMethod (Atype[] data) {
int n = data.length
for (int i = 0; i < n; ++i)
data[i].amethod();
}
I get the this assembly on Linux X86_64 before entering the loop (not OSR):
# data is in rbx
mov 0xc(%rbx),%r9d
# data.length is in r9d
test %r9d,%r9d
jle END_OF_LOOP
test %r9d,%r9d
jbe BB0
mov %r9d,%r11d
dec %r11d
cmp %r9d,%r11d
jae BB0
It seems to me the second and third check are useless and the corresponding
branches are never taken.
Could you please tell me more about these checks, If and why are they
required ?
Thanks a lot.
Nassim H.
*Test conditions:*
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
Default options.
Linux, Intel Sandy Bridge core i5-2000
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150928/faf542d2/attachment.html>
More information about the hotspot-compiler-dev
mailing list