[llvm] r319310 - [X86][SSE] Merged sse2_unpack and sse2_unpack PUNPCK instruction templates. NFCI.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 29 04:12:27 PST 2017
Author: rksimon
Date: Wed Nov 29 04:12:27 2017
New Revision: 319310
URL: http://llvm.org/viewvc/llvm-project?rev=319310&view=rev
Log:
[X86][SSE] Merged sse2_unpack and sse2_unpack PUNPCK instruction templates. NFCI.
Modified:
llvm/trunk/lib/Target/X86/X86InstrSSE.td
Modified: llvm/trunk/lib/Target/X86/X86InstrSSE.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrSSE.td?rev=319310&r1=319309&r2=319310&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrSSE.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrSSE.td Wed Nov 29 04:12:27 2017
@@ -4048,102 +4048,100 @@ def SSE_PUNPCK : OpndItins<
let ExeDomain = SSEPackedInt in {
multiclass sse2_unpack<bits<8> opc, string OpcodeStr, ValueType vt,
- SDNode OpNode, OpndItins itins, PatFrag ld_frag,
- bit Is2Addr = 1> {
+ SDNode OpNode, RegisterClass RC, X86MemOperand x86memop,
+ OpndItins itins, PatFrag ld_frag, bit Is2Addr = 1> {
def rr : PDI<opc, MRMSrcReg,
- (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
+ (outs RC:$dst), (ins RC:$src1, RC:$src2),
!if(Is2Addr,
!strconcat(OpcodeStr,"\t{$src2, $dst|$dst, $src2}"),
!strconcat(OpcodeStr,"\t{$src2, $src1, $dst|$dst, $src1, $src2}")),
- [(set VR128:$dst, (vt (OpNode VR128:$src1, VR128:$src2)))],
+ [(set RC:$dst, (vt (OpNode RC:$src1, RC:$src2)))],
itins.rr>, Sched<[itins.Sched]>;
def rm : PDI<opc, MRMSrcMem,
- (outs VR128:$dst), (ins VR128:$src1, i128mem:$src2),
+ (outs RC:$dst), (ins RC:$src1, x86memop:$src2),
!if(Is2Addr,
!strconcat(OpcodeStr,"\t{$src2, $dst|$dst, $src2}"),
!strconcat(OpcodeStr,"\t{$src2, $src1, $dst|$dst, $src1, $src2}")),
- [(set VR128:$dst, (vt (OpNode VR128:$src1,
+ [(set RC:$dst, (vt (OpNode RC:$src1,
(bitconvert (ld_frag addr:$src2)))))],
itins.rm>,
Sched<[itins.Sched.Folded, ReadAfterLd]>;
}
-multiclass sse2_unpack_y<bits<8> opc, string OpcodeStr, ValueType vt,
- SDNode OpNode, OpndItins itins> {
- def Yrr : PDI<opc, MRMSrcReg,
- (outs VR256:$dst), (ins VR256:$src1, VR256:$src2),
- !strconcat(OpcodeStr,"\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
- [(set VR256:$dst, (vt (OpNode VR256:$src1, VR256:$src2)))],
- itins.rr>, Sched<[itins.Sched]>;
- def Yrm : PDI<opc, MRMSrcMem,
- (outs VR256:$dst), (ins VR256:$src1, i256mem:$src2),
- !strconcat(OpcodeStr,"\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
- [(set VR256:$dst, (vt (OpNode VR256:$src1,
- (bitconvert (loadv4i64 addr:$src2)))))],
- itins.rm>, Sched<[itins.Sched.Folded, ReadAfterLd]>;
-}
-
-
let Predicates = [HasAVX, NoVLX_Or_NoBWI] in {
- defm VPUNPCKLBW : sse2_unpack<0x60, "vpunpcklbw", v16i8, X86Unpckl,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
- defm VPUNPCKLWD : sse2_unpack<0x61, "vpunpcklwd", v8i16, X86Unpckl,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
- defm VPUNPCKHBW : sse2_unpack<0x68, "vpunpckhbw", v16i8, X86Unpckh,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
- defm VPUNPCKHWD : sse2_unpack<0x69, "vpunpckhwd", v8i16, X86Unpckh,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
+ defm VPUNPCKLBW : sse2_unpack<0x60, "vpunpcklbw", v16i8, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
+ defm VPUNPCKLWD : sse2_unpack<0x61, "vpunpcklwd", v8i16, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
+ defm VPUNPCKHBW : sse2_unpack<0x68, "vpunpckhbw", v16i8, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
+ defm VPUNPCKHWD : sse2_unpack<0x69, "vpunpckhwd", v8i16, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
}
+
let Predicates = [HasAVX, NoVLX] in {
- defm VPUNPCKLDQ : sse2_unpack<0x62, "vpunpckldq", v4i32, X86Unpckl,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
- defm VPUNPCKLQDQ : sse2_unpack<0x6C, "vpunpcklqdq", v2i64, X86Unpckl,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
- defm VPUNPCKHDQ : sse2_unpack<0x6A, "vpunpckhdq", v4i32, X86Unpckh,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
- defm VPUNPCKHQDQ : sse2_unpack<0x6D, "vpunpckhqdq", v2i64, X86Unpckh,
- SSE_PUNPCK, loadv2i64, 0>, VEX_4V, VEX_WIG;
+ defm VPUNPCKLDQ : sse2_unpack<0x62, "vpunpckldq", v4i32, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>,
+ VEX_4V, VEX_WIG;
+ defm VPUNPCKLQDQ : sse2_unpack<0x6C, "vpunpcklqdq", v2i64, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>,
+ VEX_4V, VEX_WIG;
+ defm VPUNPCKHDQ : sse2_unpack<0x6A, "vpunpckhdq", v4i32, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>,
+ VEX_4V, VEX_WIG;
+ defm VPUNPCKHQDQ : sse2_unpack<0x6D, "vpunpckhqdq", v2i64, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, loadv2i64, 0>,
+ VEX_4V, VEX_WIG;
}
let Predicates = [HasAVX2, NoVLX_Or_NoBWI] in {
- defm VPUNPCKLBW : sse2_unpack_y<0x60, "vpunpcklbw", v32i8, X86Unpckl, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
- defm VPUNPCKLWD : sse2_unpack_y<0x61, "vpunpcklwd", v16i16, X86Unpckl, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
- defm VPUNPCKHBW : sse2_unpack_y<0x68, "vpunpckhbw", v32i8, X86Unpckh, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
- defm VPUNPCKHWD : sse2_unpack_y<0x69, "vpunpckhwd", v16i16, X86Unpckh, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKLBWY : sse2_unpack<0x60, "vpunpcklbw", v32i8, X86Unpckl, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKLWDY : sse2_unpack<0x61, "vpunpcklwd", v16i16, X86Unpckl, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKHBWY : sse2_unpack<0x68, "vpunpckhbw", v32i8, X86Unpckh, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKHWDY : sse2_unpack<0x69, "vpunpckhwd", v16i16, X86Unpckh, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
}
+
let Predicates = [HasAVX2, NoVLX] in {
- defm VPUNPCKLDQ : sse2_unpack_y<0x62, "vpunpckldq", v8i32, X86Unpckl, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
- defm VPUNPCKLQDQ : sse2_unpack_y<0x6C, "vpunpcklqdq", v4i64, X86Unpckl, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
- defm VPUNPCKHDQ : sse2_unpack_y<0x6A, "vpunpckhdq", v8i32, X86Unpckh, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
- defm VPUNPCKHQDQ : sse2_unpack_y<0x6D, "vpunpckhqdq", v4i64, X86Unpckh, SSE_PUNPCK>,
- VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKLDQY : sse2_unpack<0x62, "vpunpckldq", v8i32, X86Unpckl, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKLQDQY : sse2_unpack<0x6C, "vpunpcklqdq", v4i64, X86Unpckl, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKHDQY : sse2_unpack<0x6A, "vpunpckhdq", v8i32, X86Unpckh, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
+ defm VPUNPCKHQDQY : sse2_unpack<0x6D, "vpunpckhqdq", v4i64, X86Unpckh, VR256,
+ i256mem, SSE_PUNPCK, loadv4i64, 0>,
+ VEX_4V, VEX_L, VEX_WIG;
}
let Constraints = "$src1 = $dst" in {
- defm PUNPCKLBW : sse2_unpack<0x60, "punpcklbw", v16i8, X86Unpckl, SSE_PUNPCK,
- memopv2i64>;
- defm PUNPCKLWD : sse2_unpack<0x61, "punpcklwd", v8i16, X86Unpckl, SSE_PUNPCK,
- memopv2i64>;
- defm PUNPCKLDQ : sse2_unpack<0x62, "punpckldq", v4i32, X86Unpckl, SSE_PUNPCK,
- memopv2i64>;
- defm PUNPCKLQDQ : sse2_unpack<0x6C, "punpcklqdq", v2i64, X86Unpckl, SSE_PUNPCK,
- memopv2i64>;
-
- defm PUNPCKHBW : sse2_unpack<0x68, "punpckhbw", v16i8, X86Unpckh, SSE_PUNPCK,
- memopv2i64>;
- defm PUNPCKHWD : sse2_unpack<0x69, "punpckhwd", v8i16, X86Unpckh, SSE_PUNPCK,
- memopv2i64>;
- defm PUNPCKHDQ : sse2_unpack<0x6A, "punpckhdq", v4i32, X86Unpckh, SSE_PUNPCK,
- memopv2i64>;
- defm PUNPCKHQDQ : sse2_unpack<0x6D, "punpckhqdq", v2i64, X86Unpckh, SSE_PUNPCK,
- memopv2i64>;
+ defm PUNPCKLBW : sse2_unpack<0x60, "punpcklbw", v16i8, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
+ defm PUNPCKLWD : sse2_unpack<0x61, "punpcklwd", v8i16, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
+ defm PUNPCKLDQ : sse2_unpack<0x62, "punpckldq", v4i32, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
+ defm PUNPCKLQDQ : sse2_unpack<0x6C, "punpcklqdq", v2i64, X86Unpckl, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
+
+ defm PUNPCKHBW : sse2_unpack<0x68, "punpckhbw", v16i8, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
+ defm PUNPCKHWD : sse2_unpack<0x69, "punpckhwd", v8i16, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
+ defm PUNPCKHDQ : sse2_unpack<0x6A, "punpckhdq", v4i32, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
+ defm PUNPCKHQDQ : sse2_unpack<0x6D, "punpckhqdq", v2i64, X86Unpckh, VR128,
+ i128mem, SSE_PUNPCK, memopv2i64>;
}
} // ExeDomain = SSEPackedInt
More information about the llvm-commits
mailing list