summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2012-04-15 22:43:31 +0000
committerCraig Topper <craig.topper@gmail.com>2012-04-15 22:43:31 +0000
commit2cb1e9dc7da53bae7f1530216b297edd25909933 (patch)
treed9c2d235401bd24edd2eb469e7d3b4d40772afb1 /lib
parentfb22ede033f792196643bad0ceafe473366ddf41 (diff)
downloadllvm-2cb1e9dc7da53bae7f1530216b297edd25909933.tar.gz
llvm-2cb1e9dc7da53bae7f1530216b297edd25909933.tar.bz2
llvm-2cb1e9dc7da53bae7f1530216b297edd25909933.tar.xz
Remove AVX2 vpermq and vpermpd intrinsics. These can now be handled with normal shuffle vectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154778 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/X86/X86InstrSSE.td25
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)>;
-
}
//===----------------------------------------------------------------------===//