diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/X86/X86InstrSSE.td | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td index b0aeb3f524..8ce974d6fa 100644 --- a/lib/Target/X86/X86InstrSSE.td +++ b/lib/Target/X86/X86InstrSSE.td @@ -7755,24 +7755,26 @@ let ExeDomain = SSEPackedSingle in defm VPERMPS : avx2_perm<0x16, "vpermps", memopv8f32, int_x86_avx2_permps>; multiclass avx2_perm_imm<bits<8> opc, string OpcodeStr, PatFrag mem_frag, - Intrinsic Int> { + SDNode OpNode, ValueType OpVT> { def Yri : AVX2AIi8<opc, MRMSrcReg, (outs VR256:$dst), (ins VR256:$src1, i8imm:$src2), !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), - [(set VR256:$dst, (Int VR256:$src1, imm:$src2))]>, VEX; + [(set VR256:$dst, + (OpVT (OpNode VR256:$src1, (i8 imm:$src2))))]>, VEX; def Ymi : AVX2AIi8<opc, MRMSrcMem, (outs VR256:$dst), (ins i256mem:$src1, i8imm:$src2), !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), - [(set VR256:$dst, (Int (mem_frag addr:$src1), imm:$src2))]>, + [(set VR256:$dst, + (OpVT (OpNode (mem_frag addr:$src1), (i8 imm:$src2))))]>, VEX; } -defm VPERMQ : avx2_perm_imm<0x00, "vpermq", memopv4i64, int_x86_avx2_permq>, +defm VPERMQ : avx2_perm_imm<0x00, "vpermq", memopv4i64, X86VPermq, v4i64>, VEX_W; let ExeDomain = SSEPackedDouble in -defm VPERMPD : avx2_perm_imm<0x01, "vpermpd", memopv4f64, int_x86_avx2_permpd>, +defm VPERMPD : avx2_perm_imm<0x01, "vpermpd", memopv4f64, X86VPermpd, v4f64>, VEX_W; let Predicates = [HasAVX2] in { @@ -7780,22 +7782,11 @@ def : Pat<(v8i32 (X86VPermd VR256:$src1, VR256:$src2)), (VPERMDYrr VR256:$src1, VR256:$src2)>; def : Pat<(v8f32 (X86VPermps VR256:$src1, VR256:$src2)), (VPERMPSYrr VR256:$src1, VR256:$src2)>; - -def : Pat<(v4i64 (X86VPermq VR256:$src1, (i8 imm:$imm))), - (VPERMQYri VR256:$src1, imm:$imm)>; -def : Pat<(v4f64 (X86VPermpd VR256:$src1, (i8 imm:$imm))), - (VPERMPDYri VR256:$src1, imm:$imm)>; -def : Pat<(v8i32 (X86VPermps VR256:$src1, (bc_v8i32 (memopv4i64 addr:$src2)))), +def : Pat<(v8i32 (X86VPermd VR256:$src1, (bc_v8i32 (memopv4i64 addr:$src2)))), (VPERMDYrm VR256:$src1, addr:$src2)>; def : Pat<(v8f32 (X86VPermps VR256:$src1, (memopv8f32 addr:$src2))), (VPERMPSYrm VR256:$src1, addr:$src2)>; - -def : Pat<(v4i64 (X86VPermq (memopv4i64 addr:$src1), (i8 imm:$imm))), - (VPERMQYmi addr:$src1, imm:$imm)>; -def : Pat<(v4f64 (X86VPermpd (memopv4f64 addr:$src1), (i8 imm:$imm))), - (VPERMPDYmi addr:$src1, imm:$imm)>; - } //===----------------------------------------------------------------------===// |