[PATCH] 8217561 : X86: Add floating-point Math.min/max intrinsics
B. Blaser
bsrbnd at gmail.com
Wed Feb 6 11:03:41 UTC 2019
Hi Jatin,
On Mon, 4 Feb 2019 at 19:57, Bhateja, Jatin <jatin.bhateja at intel.com> wrote:
>
> Hi All,
>
> Please find the link to updated patch.
>
> http://cr.openjdk.java.net/~sviswanathan/Jatin/8217561/webrev.02/
>
> It contains fix to stop unnecessary register to register copy when source and destination are same,
> test case updated to reflect correct copyright year and has been tested over both 32 and 64 bit variants.
>
> Regards,
> Jatin
I like your patch and I guess it works but I still disapprove the test
case parameters.
Try this:
diff --git a/src/hotspot/share/opto/library_call.cpp
b/src/hotspot/share/opto/library_call.cpp
--- a/src/hotspot/share/opto/library_call.cpp
+++ b/src/hotspot/share/opto/library_call.cpp
@@ -6640,6 +6640,7 @@
default: fatal_unexpected_iid(id); break;
}
set_result(_gvn.transform(n));
+printf("#### inline_fp_min_max ####\n");
return true;
}
or add 'printf()' in:
void Assembler::vmaxpd(XMMRegister dst, XMMRegister nds, XMMRegister
src, int vector_len) {
printf("#### vmaxpd ####\n");
and run the test case:
$ make test TEST="jtreg:test/hotspot/jtreg/compiler/intrinsics/math/TestFpMinMaxIntrinsics.java"
Then, check the test report:
command: main -XX:+UnlockDiagnosticVMOptions -Xcomp
-XX:-TieredCompilation -XX:+IgnoreUnrecognizedVMOptions
-XX:CompileOnly=java/lang/Math
compiler.intrinsics.math.TestFpMinMaxIntrinsics
reason: User specified action: run main/othervm
-XX:+UnlockDiagnosticVMOptions -Xcomp -XX:-TieredCompilation
-XX:+IgnoreUnrecognizedVMOptions -XX:CompileOnly=java/lang/Math
compiler.intrinsics.math.TestFpMinMaxIntrinsics
Mode: othervm [/othervm specified]
elapsed time (seconds): 0.671
----------configuration:(0/0)----------
----------System.out:(0/0)----------
----------System.err:(1/15)----------
STATUS:Passed.
We don't see any 'printf()' meaning that the intrinsic isn't inlined!
Now that you added enough iterations in your main loop (>10K as
Vladimir said), add the following line to the test case:
* @run main/othervm compiler.intrinsics.math.TestFpMinMaxIntrinsics
rerun the test and check again the report:
command: main compiler.intrinsics.math.TestFpMinMaxIntrinsics
reason: User specified action: run main/othervm
compiler.intrinsics.math.TestFpMinMaxIntrinsics
Mode: othervm [/othervm specified]
elapsed time (seconds): 0.068
----------configuration:(0/0)----------
----------System.out:(24/584)----------
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### vmaxpd ####
#### vmaxpd ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### vmaxpd ####
#### vmaxpd ####
#### vmaxpd ####
#### vmaxpd ####
#### vmaxpd ####
#### vmaxpd ####
----------System.err:(1/15)----------
STATUS:Passed.
The intrinsic is clearly inlined now.
As I said earlier, you have to enable the compilation of the caller
(TestFpMinMaxIntrinsics::dTest) to inline the intrinsic in its
generated code and I guess this is what Nils meant.
The problem with the current parameters is that
'-XX:CompileOnly=java/lang/Math' prevents the compilation of
'TestFpMinMaxIntrinsics::dTest', so simply try to replace it with:
-XX:CompileOnly=compiler.intrinsics.math.TestFpMinMaxIntrinsics::dTest
and rerun the test:
command: main -XX:+UnlockDiagnosticVMOptions -Xcomp
-XX:-TieredCompilation -XX:+IgnoreUnrecognizedVMOptions
-XX:CompileOnly=compiler.intrinsics.math.TestFpMinMaxIntrinsics::dTest
compiler.intrinsics.math.TestFpMinMaxIntrinsics
reason: User specified action: run main/othervm
-XX:+UnlockDiagnosticVMOptions -Xcomp -XX:-TieredCompilation
-XX:+IgnoreUnrecognizedVMOptions
-XX:CompileOnly=compiler.intrinsics.math.TestFpMinMaxIntrinsics::dTest
compiler.intrinsics.math.TestFpMinMaxIntrinsics
Mode: othervm [/othervm specified]
elapsed time (seconds): 0.634
----------configuration:(0/0)----------
----------System.out:(8/180)----------
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### vmaxpd ####
#### vmaxpd ####
#### inline_fp_min_max ####
#### inline_fp_min_max ####
#### vmaxpd ####
#### vmaxpd ####
----------System.err:(1/15)----------
STATUS:Passed.
The intrinsic is also inlined!
But, playing with these parameters is tricky as Vladimir said, so I
suggest you simply add:
* @run main/othervm compiler.intrinsics.math.TestFpMinMaxIntrinsics
with a loop of more than 10K iterations.
Got it?
I'll run test-tier1 on x86_64 (xeon) but I don't work anymore on
x86_32, so I let Oracle comment on this part as I'm not sure how much
do they still use it?
Regards,
Bernard
More information about the hotspot-compiler-dev
mailing list