From: Craig Topper Date: Sat, 27 Dec 2014 18:51:06 +0000 (+0000) Subject: [x86] Prevent instruction selection of AVX512 cmp.ps/pd/ss/sd intrinsics with illegal... X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=d840bf4ba960542daa07bd22264dd29fba34c9c1 [x86] Prevent instruction selection of AVX512 cmp.ps/pd/ss/sd intrinsics with illegal immediates. Forgot to do this when I did SSE/SSE2/AVX/AVX2. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224887 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 49ed151a326..6c060857457 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -1198,16 +1198,18 @@ def : Pat<(v8i32 (vselect (v8i1 VK8WM:$mask), (v8i32 VR256X:$src1), // avx512_cmp_scalar - AVX512 CMPSS and CMPSD multiclass avx512_cmp_scalar { def rr : AVX512Ii8<0xC2, MRMSrcReg, - (outs VK1:$dst), (ins RC:$src1, RC:$src2, CC:$cc), asm, - [(set VK1:$dst, (OpNode (VT RC:$src1), RC:$src2, imm:$cc))], + (outs VK1:$dst), (ins RC:$src1, RC:$src2, AVXCC:$cc), asm, + [(set VK1:$dst, (X86cmpms (VT RC:$src1), + RC:$src2, i8immZExt5:$cc))], IIC_SSE_ALU_F32S_RR>, EVEX_4V; def rm : AVX512Ii8<0xC2, MRMSrcMem, - (outs VK1:$dst), (ins RC:$src1, x86memop:$src2, CC:$cc), asm, - [(set VK1:$dst, (OpNode (VT RC:$src1), - (ld_frag addr:$src2), imm:$cc))], IIC_SSE_ALU_F32P_RM>, EVEX_4V; + (outs VK1:$dst), (ins RC:$src1, x86memop:$src2, AVXCC:$cc), asm, + [(set VK1:$dst, (X86cmpms (VT RC:$src1), + (ld_frag addr:$src2), i8immZExt5:$cc))], IIC_SSE_ALU_F32P_RM>, + EVEX_4V; let isAsmParserOnly = 1, hasSideEffects = 0 in { def rri_alt : AVX512Ii8<0xC2, MRMSrcReg, (outs VK1:$dst), (ins RC:$src1, RC:$src2, i8imm:$cc), @@ -1219,11 +1221,11 @@ multiclass avx512_cmp_scalar, XS; -defm VCMPSDZ : avx512_cmp_scalar, XD, VEX_W; @@ -1374,7 +1376,7 @@ multiclass avx512_icmp_cc opc, string Suffix, SDNode OpNode, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), [(set _.KRC:$dst, (OpNode (_.VT _.RC:$src1), (_.VT (bitconvert (_.LdFrag addr:$src2))), - imm:$cc))], + i8immZExt5:$cc))], IIC_SSE_ALU_F32P_RM>, EVEX_4V; def rrik : AVX512AIi8 opc, string Suffix, SDNode OpNode, "$dst {${mask}}, $src1, $src2}"), [(set _.KRC:$dst, (and _.KRCWM:$mask, (OpNode (_.VT _.RC:$src1), (_.VT _.RC:$src2), - imm:$cc)))], + i8immZExt5:$cc)))], IIC_SSE_ALU_F32P_RR>, EVEX_4V, EVEX_K; let mayLoad = 1 in def rmik : AVX512AIi8 opc, string Suffix, SDNode OpNode, [(set _.KRC:$dst, (and _.KRCWM:$mask, (OpNode (_.VT _.RC:$src1), (_.VT (bitconvert (_.LdFrag addr:$src2))), - imm:$cc)))], + i8immZExt5:$cc)))], IIC_SSE_ALU_F32P_RM>, EVEX_4V, EVEX_K; // Accept explicit immediate argument form instead of comparison code. @@ -1440,7 +1442,7 @@ multiclass avx512_icmp_cc_rmb opc, string Suffix, SDNode OpNode, "$dst, $src1, ${src2}", _.BroadcastStr, "}"), [(set _.KRC:$dst, (OpNode (_.VT _.RC:$src1), (X86VBroadcast (_.ScalarLdFrag addr:$src2)), - imm:$cc))], + i8immZExt5:$cc))], IIC_SSE_ALU_F32P_RM>, EVEX_4V, EVEX_B; def rmibk : AVX512AIi8 opc, string Suffix, SDNode OpNode, [(set _.KRC:$dst, (and _.KRCWM:$mask, (OpNode (_.VT _.RC:$src1), (X86VBroadcast (_.ScalarLdFrag addr:$src2)), - imm:$cc)))], + i8immZExt5:$cc)))], IIC_SSE_ALU_F32P_RM>, EVEX_4V, EVEX_K, EVEX_B; } @@ -1527,7 +1529,8 @@ multiclass avx512_cmp_packed; + [(set KRC:$dst, (X86cmpm (vt RC:$src1), (vt RC:$src2), + i8immZExt5:$cc))], d>; def rrib: AVX512PIi8<0xC2, MRMSrcReg, (outs KRC:$dst), (ins RC:$src1, RC:$src2, AVXCC:$cc), !strconcat("vcmp${cc}", suffix, @@ -1538,7 +1541,7 @@ multiclass avx512_cmp_packed; + (X86cmpm (vt RC:$src1), (memop addr:$src2), i8immZExt5:$cc))], d>; // Accept explicit immediate argument form instead of comparison code. let isAsmParserOnly = 1, hasSideEffects = 0 in {