JIT code generation for Long/Integer.compare
Vitaly Davidovich
vitalyd at gmail.com
Thu Sep 24 23:54:03 UTC 2015
I must admit it's a bit strange seeing this implemented via intrinsic - is
this not possible via normal JIT optimizations? There's nothing really
"intrinsic" about the code. I get that it's easier implementation-wise to
latch on to a well known method, but what about similar code used without
calling compare?
sent from my phone
On Sep 24, 2015 7:11 PM, "Ian Rogers" <irogers at google.com> wrote:
> 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/ecfd3506/attachment.html>
More information about the hotspot-compiler-dev
mailing list