[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