RFR: 8327147: Improve performance of Math ceil, floor, and rint for x86 [v2]

Sandhya Viswanathan sviswanathan at openjdk.org
Wed Mar 6 22:04:56 UTC 2024


On Tue, 5 Mar 2024 22:37:49 GMT, Dean Long <dlong at openjdk.org> wrote:

>> Srinivas Vamsi Parasa has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   unify the implementation
>
> So if we can still generate the non-AVX encoding of
> 
> `roundsd dst, src, mode`
> 
> isn't there still a false dependency problem with `dst`?

@dean-long You bring up a very good point. The SSE instruction (roundsd dst, src, mode) also has a false dependency problem. This can be demonstrated by adding the following benchmark to MathBench.java:

diff --git a/test/micro/org/openjdk/bench/java/lang/MathBench.java b/test/micro/org/openjdk/bench/java/lang/MathBench.java
index c7dde019154..feb472bba3d 100644
--- a/test/micro/org/openjdk/bench/java/lang/MathBench.java
+++ b/test/micro/org/openjdk/bench/java/lang/MathBench.java
@@ -141,6 +141,11 @@ public double  ceilDouble() {
         return  Math.ceil(double4Dot1);
     }

+    @Benchmark
+    public double  useAfterCeilDouble() {
+        return  Math.ceil(double4Dot1) + Math.floor(double4Dot1);
+    }
+
     @Benchmark
     public double  copySignDouble() {
         return  Math.copySign(double81, doubleNegative12);

The fix would be to do a pxor on  dst before the SSE roundsd instruction, something like below:


diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad
index cf4aef83df2..eb6701f82a7 100644
--- a/src/hotspot/cpu/x86/x86.ad
+++ b/src/hotspot/cpu/x86/x86.ad
@@ -3874,6 +3874,9 @@ instruct roundD_reg(legRegD dst, legRegD src, immU8 rmode) %{
   ins_cost(150);
   ins_encode %{
     assert(UseSSE >= 4, "required");
+    if ((UseAVX == 0) && ($dst$$XMMRegister != $src$$XMMRegister)) {
+      __ pxor($dst$$XMMRegister, $dst$$XMMRegister);
+    }
     __ roundsd($dst$$XMMRegister, $src$$XMMRegister, $rmode$$constant);
   %}
   ins_pipe(pipe_slow);

-------------

PR Comment: https://git.openjdk.org/jdk/pull/18089#issuecomment-1981879809


More information about the hotspot-compiler-dev mailing list