[aarch64-port-dev ] RFR: 8153837 : aarch64: handle special cases for MaxINode & MinINode
Felix Yang
felix.yang at linaro.org
Mon Apr 11 11:47:32 UTC 2016
Hi,
Thanks for reviewing the patch.
I find that the cases the patch tries to catch here are the result of
loop transformations.
And it's hard to produce a test case to for it simply using the
Math.min/max API. (Seems C2 will not create a MaxINode/MinINode for a call
for these APIs)
But I do noticed some JTReg hotspot test cases that already generates
the pattern.
Example JTReg test cases:
hotspot/test/compiler/rangechecks/TestExplicitRangeChecks.java
hotspot/test/compiler/rangechecks/TestBadFoldCompare.java
hotspot/test/compiler/rangechecks/PowerOf2SizedArraysChecks.java
hotspot/test/compiler/rangechecks/TestRangeCheckSmearing.java
For the first test, I saw the following instructions in C1 JIT code:
$ grep "csel" JTwork/compiler/rangechecks/TestExplicitRangeChecks.jtr |
grep zr | grep gt
0x0000007f9e127e8c: csel w14, w10, wzr, gt
0x0000007f9e129568: csel w11, w12, wzr, gt ;*aload_1 {reexecute=0
rethrow=0 return_oop=0}
0x0000007f9e147c78: csel w12, w11, wzr, gt
0x0000007f9e15c75c: csel w12, w13, wzr, gt
0x0000007f9e1689e4: csel w16, w22, wzr, gt
0x0000007f9e18a570: csel w13, w11, wzr, gt
0x0000007f7e13e278: csel w12, w11, wzr, gt
0x0000007f7e14f55c: csel w13, w13, wzr, gt
$ grep "csinc" JTwork/compiler/rangechecks/TestExplicitRangeChecks.jtr
0x0000007f9e112860: csinc w12, w12, wzr, gt
0x0000007f9e120e40: csinc w11, w11, wzr, gt
0x0000007f7e114de0: csinc w12, w12, wzr, gt
0x0000007f7e123440: csinc w11, w11, wzr, gt
I also searched the C2 JIT code of specJBB2005 & Spark Terasort and I
saw the following csel/csinc/csinv generated with the patch:
1. Spark Terasort:
0x0000007f990ec898: csinc w14, w0, wzr, le
0x0000007f990f3a40: csinv w13, w11, wzr, ge
0x0000007f990f3a94: csinv w11, w13, wzr, ge
0x0000007f9912c1a8: csinc w14, w13, wzr, le
0x0000007f9912afe8: csinc w12, w10, wzr, le ;*aload_1
0x0000007f99137f90: csinv w12, w12, wzr, ge
0x0000007f99137fe4: csinv w13, w12, wzr, ge
0x0000007f99132ff8: csinc w11, w10, wzr, le ;*aload_1
0x0000007f9917fdfc: csinc w12, w15, wzr, le
0x0000007f991a5e3c: csinv w11, w11, wzr, ge
0x0000007f991a5e90: csinv w12, w11, wzr, ge
0x0000007f991133bc: csinc w0, w12, wzr, le
0x0000007f9918e548: csinc w12, w18, wzr, le ;*aload_0
0x0000007f991639f8: csinc w16, w12, wzr, le
0x0000007f99115508: csinc w3, w13, wzr, le
0x0000007f991d7e38: csinc w13, w14, wzr, le ;*aload_1
0x0000007f992f7e48: csinc w12, w13, wzr, le ;*aload_0
0x0000007f992dd578: csinv w13, w10, wzr, ge
0x0000007f992e7370: csinv w17, w14, wzr, ge
0x0000007f99222ec8: csinc w12, w13, wzr, le ;*aload_0
0x0000007f993ae208: csinc w10, w15, wzr, le
0x0000007f99405604: csinc w10, w13, wzr, le
0x0000007f9931da84: csinc w11, w13, wzr, le
0x0000007f9941eb04: csinv w15, w11, wzr, ge ;*lload_0
0x0000007f9941ec4c: csinv w15, w14, wzr, ge ;*iload
0x0000007f994a3110: csinc w11, w13, wzr, le
0x0000007f990e78d8: csel w11, w11, wzr, gt
0x0000007f990dc8e0: csel w11, w12, wzr, gt
0x0000007f990dc8f0: csel w11, w11, wzr, gt
0x0000007f990f5f00: csel w12, w12, wzr, gt
0x0000007f990ff83c: csel w11, w10, wzr, gt
0x0000007f9914e0dc: csel w13, w12, wzr, gt
0x0000007f991504f0: csel w10, w11, wzr, gt
0x0000007f9918cbac: csel w20, w20, wzr, gt
0x0000007f991a32dc: csel w10, w10, wzr, gt
0x0000007f990f3a64: csel w13, w13, wzr, gt
0x0000007f990f3ad0: csel w10, w10, wzr, gt
0x0000007f99114d98: csel w16, w14, wzr, gt
0x0000007f991f0434: csel w0, w10, wzr, gt
0x0000007f9920753c: csel w10, w11, wzr, gt
0x0000007f9920754c: csel w10, w10, wzr, gt
0x0000007f99213270: csel w12, w12, wzr, gt
0x0000007f9923a9f8: csel w18, w15, wzr, gt
0x0000007f99210ad4: csel w11, w11, wzr, gt
0x0000007f9926a524: csel w12, w11, wzr, gt
0x0000007f9929e3d0: csel w10, w11, wzr, gt
0x0000007f9929e3ec: csel w11, w11, wzr, gt
0x0000007f992a6c90: csel w11, w12, wzr, gt
0x0000007f99214044: csel w13, w11, wzr, gt
0x0000007f99242d04: csel w11, w12, wzr, gt
0x0000007f99420260: csel w10, w11, wzr, gt ;*checkcast
0x0000007f993b1d14: csel w12, w12, wzr, gt
0x0000007f993fe15c: csel w11, w11, wzr, gt ;*checkcast
0x0000007f99460688: csel w10, w11, wzr, gt
2. specJBB2005:
0x0000007f7e1233e0: csinc w12, w12, wzr, gt
0x0000007f7e1632f8: csinc w10, w10, wzr, gt
0x0000007f7e1c8a1c: csinv w10, w2, wzr, ge
0x0000007f7e14d2cc: csel w0, w12, wzr, gt
0x0000007f7e19982c: csel w10, w10, wzr, gt ;*baload {reexecute=0
rethrow=0 return_oop=0}
0x0000007f7e1bad4c: csel w12, w3, wzr, gt
0x0000007f7e27e25c: csel w10, w10, wzr, gt ;*baload {reexecute=0
rethrow=0 return_oop=0}
So the patch got tested for the most part and is not causing us trouble.
On 8 April 2016 at 22:42, Andrew Haley <aph at redhat.com> wrote:
> On 04/08/2016 03:36 PM, Felix Yang wrote:
> > Is it OK?
>
> It looks good, but I'm surely going to need a jtreg test case
> which exercises all these patterns in C2.
>
> Thanks,
>
> Andrew.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160411/87dcd596/attachment.html>
More information about the hotspot-compiler-dev
mailing list