JIT code generation for Long/Integer.compare
Ian Rogers
irogers at google.com
Thu Sep 24 23:11:39 UTC 2015
Agreed. The attached patch eliminates the cmpl3_flag enc_class and
implements both cmpl3 and cmpi3 as you suggest.
Thanks,
Ian
On Thu, Sep 24, 2015 at 12:51 PM, Christian Thalinger <
christian.thalinger at oracle.com> wrote:
> 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. 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/42a2652b/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cmpi3-jdk9-tdiff2.patch
Type: text/x-patch
Size: 11828 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150924/42a2652b/cmpi3-jdk9-tdiff2-0001.patch>
More information about the hotspot-compiler-dev
mailing list