diff options
author | Adam Nemet <anemet@apple.com> | 2014-10-27 23:08:37 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2014-10-27 23:08:37 +0000 |
commit | 8d85b0cd3e9c7c95b5d8d1214c77a3374ee9036d (patch) | |
tree | 7301642908c8612977cfa80434276673406e8c5f /llvm/lib | |
parent | 9aad13164ee7c9687a323c73c3533484093e1954 (diff) | |
download | bcm5719-llvm-8d85b0cd3e9c7c95b5d8d1214c77a3374ee9036d.tar.gz bcm5719-llvm-8d85b0cd3e9c7c95b5d8d1214c77a3374ee9036d.zip |
[AVX512] Clean up avx512_perm_imm to use X86VectorVTInfo
No functionality change. No change in X86.td.expanded except that we only set
the CD8 attributes for the memory variants. (This shouldn't be used unless we
have a memory operand.)
llvm-svn: 220736
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index c7adbadbb59..07fe310d039 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -762,39 +762,36 @@ defm VPBROADCASTMB2Q : avx512_mask_broadcast<0x2A, "vpbroadcastmb2q", // AVX-512 - VPERM // // -- immediate form -- -multiclass avx512_perm_imm<bits<8> opc, string OpcodeStr, RegisterClass RC, - SDNode OpNode, PatFrag mem_frag, - X86MemOperand x86memop, ValueType OpVT> { - def ri : AVX512AIi8<opc, MRMSrcReg, (outs RC:$dst), - (ins RC:$src1, i8imm:$src2), +multiclass avx512_perm_imm<bits<8> opc, string OpcodeStr, SDNode OpNode, + X86VectorVTInfo _> { + let ExeDomain = _.ExeDomain in { + def ri : AVX512AIi8<opc, MRMSrcReg, (outs _.RC:$dst), + (ins _.RC:$src1, i8imm:$src2), !strconcat(OpcodeStr, " \t{$src2, $src1, $dst|$dst, $src1, $src2}"), - [(set RC:$dst, - (OpVT (OpNode RC:$src1, (i8 imm:$src2))))]>, + [(set _.RC:$dst, + (_.VT (OpNode _.RC:$src1, (i8 imm:$src2))))]>, EVEX; - def mi : AVX512AIi8<opc, MRMSrcMem, (outs RC:$dst), - (ins x86memop:$src1, i8imm:$src2), + def mi : AVX512AIi8<opc, MRMSrcMem, (outs _.RC:$dst), + (ins _.MemOp:$src1, i8imm:$src2), !strconcat(OpcodeStr, " \t{$src2, $src1, $dst|$dst, $src1, $src2}"), - [(set RC:$dst, - (OpVT (OpNode (mem_frag addr:$src1), - (i8 imm:$src2))))]>, EVEX; + [(set _.RC:$dst, + (_.VT (OpNode (_.MemOpFrag addr:$src1), + (i8 imm:$src2))))]>, + EVEX, EVEX_CD8<_.EltSize, CD8VF>; +} } -defm VPERMQZ : avx512_perm_imm<0x00, "vpermq", VR512, X86VPermi, memopv8i64, - i512mem, v8i64>, EVEX_V512, VEX_W, EVEX_CD8<64, CD8VF>; -let ExeDomain = SSEPackedDouble in -defm VPERMPDZ : avx512_perm_imm<0x01, "vpermpd", VR512, X86VPermi, memopv8f64, - f512mem, v8f64>, EVEX_V512, VEX_W, EVEX_CD8<64, CD8VF>; +defm VPERMQZ : avx512_perm_imm<0x00, "vpermq", X86VPermi, v8i64_info>, + EVEX_V512, VEX_W; +defm VPERMPDZ : avx512_perm_imm<0x01, "vpermpd", X86VPermi, v8f64_info>, + EVEX_V512, VEX_W; -let ExeDomain = SSEPackedSingle in -defm VPERMILPSZ : avx512_perm_imm<0x04, "vpermilps", VR512, X86VPermilpi, - memopv16f32, f512mem, v16f32>, EVEX_V512, - EVEX_CD8<32, CD8VF>; -let ExeDomain = SSEPackedDouble in -defm VPERMILPDZ : avx512_perm_imm<0x05, "vpermilpd", VR512, X86VPermilpi, - memopv8f64, f512mem, v8f64>, EVEX_V512, - VEX_W, EVEX_CD8<64, CD8VF>; +defm VPERMILPSZ : avx512_perm_imm<0x04, "vpermilps", X86VPermilpi, v16f32_info>, + EVEX_V512; +defm VPERMILPDZ : avx512_perm_imm<0x05, "vpermilpd", X86VPermilpi, v8f64_info>, + EVEX_V512, VEX_W; def : Pat<(v16i32 (X86VPermilpi VR512:$src1, (i8 imm:$imm))), (VPERMILPSZri VR512:$src1, imm:$imm)>; |