JIT code generation for Long/Integer.compare

Christian Thalinger christian.thalinger at oracle.com
Thu Sep 24 19:51:15 UTC 2015


One comment about the .ad change:  please don’t introduce new enc_class methods; use ins_encode %{ %} and MacroAssembler instructions instead, like this one:

  ins_encode %{
    Register Rp = $p$$Register;
    Register Rq = $q$$Register;
    Register Ry = $y$$Register;
    Label done;
    __ cmpl(Rp, Rq);
    __ jccb(Assembler::less, done);
    __ xorl(Ry, Ry);
    __ bind(done);
  %}

Should be less painful too :-)

> On Sep 24, 2015, at 8:45 AM, Ian Rogers <irogers at google.com> wrote:
> 
> Below is a patch to add JIT code generation for Long/Integer.compare. It has been reviewed internally by rasbold at google.com <mailto:rasbold at google.com>. I'd like to open a bug for this, get it reviewed, etc. but I lack a JBS account. I'd appreciate help in getting this reviewed and merged.
> 
> Thanks,
> Ian Rogers
> 
> Support JIT code generation for Long/Integer.compare as intrinsics that fold with branches on their result.
> 
> Introduce a CmpI3 ideal node mirroring the CmpL3 node, that implements
> Integer.compare. Allow this to fold with a CmpI node.  Spot Long/Integer.compare
> as CmpL3 and CmpI3 nodes.  Add a CmpI3 implementation for x86-64.  On a
> micro-benchmark loop of:
>     for (int i = 0; i < x.length; i++) {
>       if (compare(x[i], y[i]) < 0) {
>         count++;
>       }
>     }
> Int speed up averages 1.18x, long speed up averages 2.76x, over 30 runs of
> arrays sized at 5,000,000 elements. This can be improved with work on
> instruction selection.
> Raw data:
> Int before:  23129us, 99.5% range: 19935us - 26046us
> Int after:   19557us, 99.5% range: 16972us - 26072us
> Long before: 26935us, 99.5% range: 25776us - 29323us
> Long after:   9749us, 99.5% range: 8850us  - 11968us
> 
> <cmpi3-jdk9-tdiff.patch>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150924/2614fc6f/attachment.html>


More information about the hotspot-compiler-dev mailing list