-
Bug
-
Resolution: Fixed
-
P3
-
11, 12, 13
-
b07
-
x86_64
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8227522 | 11.0.6-oracle | Sandhya Viswanathan | P3 | Resolved | Fixed | b01 |
JDK-8229257 | 11.0.5 | Sandhya Viswanathan | P3 | Resolved | Fixed | b03 |
x86.ad has checks like "ifndef LP64". Those do not work reliably. On x86_64, it is not defined for ADLC compilation, making the code always take the "not defined" branch. Note that the same file uses "ifdef _LP64" (note the underscore) at the same file.
If you fix that with proper "ifndef _LP64":
diff -r 2360f73c5514 src/hotspot/cpu/x86/x86.ad
--- a/src/hotspot/cpu/x86/x86.ad Fri Jan 18 09:32:02 2019 +0100
+++ b/src/hotspot/cpu/x86/x86.ad Fri Jan 18 10:02:35 2019 +0100
@@ -1685,5 +1685,5 @@
case Op_VecD:
case Op_VecX:
-#ifndef LP64
+#ifndef _LP64
__ movdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo]));
#else
@@ -1697,5 +1697,5 @@
break;
case Op_VecY:
-#ifndef LP64
+#ifndef _LP64
__ vmovdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo]));
#else
@@ -1758,5 +1758,5 @@
break;
case Op_VecX:
-#ifndef LP64
+#ifndef _LP64
__ movdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset));
#else
@@ -1770,5 +1770,5 @@
break;
case Op_VecY:
-#ifndef LP64
+#ifndef _LP64
__ vmovdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset));
#else
@@ -1796,5 +1796,5 @@
break;
case Op_VecX:
-#ifndef LP64
+#ifndef _LP64
__ movdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg]));
#else
@@ -1808,5 +1808,5 @@
break;
case Op_VecY:
-#ifndef LP64
+#ifndef _LP64
__ vmovdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg]));
#else
...then the build starts to fail on Linux x86_64 with:
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/assembler_x86.hpp:2135:8: note: candidate expects 3 arguments, 4 provided
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/assembler_x86.hpp:2136:8: note: candidate: void Assembler::vextracti32x4(Address, XMMRegister, uint8_t)
void vextracti32x4(Address dst, XMMRegister src, uint8_t imm8);
^~~~~~~~~~~~~
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/assembler_x86.hpp:2136:8: note: candidate expects 3 arguments, 4 provided
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/x86.ad:1817:143: error: no matching function for call to 'MacroAssembler::vextracti64x4(Address, XMMRegister, XMMRegister, int)'
__ vextracti64x4(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg]), as_XMMRegister(Matcher::_regEncode[reg]), 0x0);
^
There is no 4-argument vextracti64x4 to be seen, indeed.
So, not only the LP64 is not taken, it does not even compile.
If you fix that with proper "ifndef _LP64":
diff -r 2360f73c5514 src/hotspot/cpu/x86/x86.ad
--- a/src/hotspot/cpu/x86/x86.ad Fri Jan 18 09:32:02 2019 +0100
+++ b/src/hotspot/cpu/x86/x86.ad Fri Jan 18 10:02:35 2019 +0100
@@ -1685,5 +1685,5 @@
case Op_VecD:
case Op_VecX:
-#ifndef LP64
+#ifndef _LP64
__ movdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo]));
#else
@@ -1697,5 +1697,5 @@
break;
case Op_VecY:
-#ifndef LP64
+#ifndef _LP64
__ vmovdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo]));
#else
@@ -1758,5 +1758,5 @@
break;
case Op_VecX:
-#ifndef LP64
+#ifndef _LP64
__ movdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset));
#else
@@ -1770,5 +1770,5 @@
break;
case Op_VecY:
-#ifndef LP64
+#ifndef _LP64
__ vmovdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset));
#else
@@ -1796,5 +1796,5 @@
break;
case Op_VecX:
-#ifndef LP64
+#ifndef _LP64
__ movdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg]));
#else
@@ -1808,5 +1808,5 @@
break;
case Op_VecY:
-#ifndef LP64
+#ifndef _LP64
__ vmovdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg]));
#else
...then the build starts to fail on Linux x86_64 with:
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/assembler_x86.hpp:2135:8: note: candidate expects 3 arguments, 4 provided
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/assembler_x86.hpp:2136:8: note: candidate: void Assembler::vextracti32x4(Address, XMMRegister, uint8_t)
void vextracti32x4(Address dst, XMMRegister src, uint8_t imm8);
^~~~~~~~~~~~~
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/assembler_x86.hpp:2136:8: note: candidate expects 3 arguments, 4 provided
/home/shade/trunks/jdk-jdk/src/hotspot/cpu/x86/x86.ad:1817:143: error: no matching function for call to 'MacroAssembler::vextracti64x4(Address, XMMRegister, XMMRegister, int)'
__ vextracti64x4(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg]), as_XMMRegister(Matcher::_regEncode[reg]), 0x0);
^
There is no 4-argument vextracti64x4 to be seen, indeed.
So, not only the LP64 is not taken, it does not even compile.
- backported by
-
JDK-8227522 Incorrect LP64 guard in x86.ad after JDK-8210764 (Update avx512 implementation)
-
- Resolved
-
-
JDK-8229257 Incorrect LP64 guard in x86.ad after JDK-8210764 (Update avx512 implementation)
-
- Resolved
-
- relates to
-
JDK-8210764 Update avx512 implementation
-
- Resolved
-