[16] RFR(S): 8251525: AARCH64: Faster Math.signum(fp)
Dmitry Chuyko
dmitry.chuyko at bell-sw.com
Fri Aug 14 17:14:54 UTC 2020
Hi Vladimir,
Thank you for the comments. Here is a version with simplified node
definitions:
http://cr.openjdk.java.net/~dchuyko/8251525/webrev.01/
-Dmitry
On 8/13/20 2:51 PM, Vladimir Ivanov wrote:
> Hi Dmitry,
>
> Some comments on shared code changes:
>
> src/hotspot/share/opto/library_call.cpp:
>
> + case vmIntrinsics::_dsignum:
> + return UseSignumIntrinsic &&
> (Matcher::match_rule_supported(Op_SignumD) ? inline_double_math(id) :
> false);
>
> There's no need in repeating UseSignumIntrinsic and
> (Matcher::match_rule_supported(Op_SignumD) checks.
> C2Compiler::is_intrinsic_supported() already covers taht.
>
>
> src/hotspot/share/opto/signum.hpp:
>
> 32 class SignumNode : public Node {
> 33 public:
> 34 SignumNode(Node* in) : Node(0, in) {}
> 35 virtual int Opcode() const;
> 36 virtual const Type *bottom_type() const { return NULL; }
> 37 virtual uint ideal_reg() const { return Op_RegD; }
> 38 };
>
> Any particular reason to keep SignumNode? I don't see any and would
> just drop it.
>
> Also, having a dedicated header file just for a couple of nodes with
> trivial implementations looks like an overkill. As an alternative
> location, intrinsicnode.cpp should be a better option.
>
> Best regards,
> Vladimir Ivanov
>
> On 13.08.2020 14:04, Dmitry Chuyko wrote:
>> Hello,
>>
>> Please review a faster version of Math.signum() for AArch64.
>>
>> Two new intrinsics (double and float) are introduced in general code,
>> with appropriate new nodes. New JTreg test is added to cover the
>> intrinsic case (enabled only for aarch64).
>>
>> AArch64 implementation uses FACGT (compare abslute fp values) and BSL
>> (fp bit selection) to avoid branches and moves to non-fp registers
>> and back.
>>
>> Performance results show ~30% better time in the benchmark with a
>> black hole [1] on Cortex. E.g. on random numbers 4.8 ns/op --> 3.5
>> ns/op, overhead is 2.9 ns/op.
>>
>> rfe: https://bugs.openjdk.java.net/browse/JDK-8251525
>> webrev: http://cr.openjdk.java.net/~dchuyko/8251525/webrev.00/
>> testing: jck, jtreg including new dedicated test
>>
>> -Dmitry
>>
>> [1] https://cr.openjdk.java.net/~dchuyko/8249198/DoubleSignum.java
>>
More information about the hotspot-compiler-dev
mailing list