From: Craig Topper Date: Sun, 10 Feb 2019 02:34:31 +0000 (+0000) Subject: [X86] Move some vector InstAliases out from under unnecessary 'let Predicates'. NFCI X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fbb9298f75d3cfae4b7b9f8e114ae758ada4f44d;p=llvm [X86] Move some vector InstAliases out from under unnecessary 'let Predicates'. NFCI We don't have any assembler predicates for vector ISAs so this isn't necessary. It just adds extra lines and identation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353631 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index e1d2b961281..0fba8cb4d09 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -7659,12 +7659,12 @@ multiclass avx512_cvt_s_int_round opc, X86VectorVTInfo SrcVT, [(set DstVT.RC:$dst, (OpNode (SrcVT.VT SrcVT.ScalarIntMemCPat:$src)))]>, EVEX, VEX_LIG, Sched<[sched.Folded, sched.ReadAfterFold]>; - - def : InstAlias<"v" # asm # aliasStr # "\t{$src, $dst|$dst, $src}", - (!cast(NAME # "rr_Int") DstVT.RC:$dst, SrcVT.RC:$src), 0, "att">; - def : InstAlias<"v" # asm # aliasStr # "\t{$rc, $src, $dst|$dst, $src, $rc}", - (!cast(NAME # "rrb_Int") DstVT.RC:$dst, SrcVT.RC:$src, AVX512RC:$rc), 0, "att">; } // Predicates = [HasAVX512] + + def : InstAlias<"v" # asm # aliasStr # "\t{$src, $dst|$dst, $src}", + (!cast(NAME # "rr_Int") DstVT.RC:$dst, SrcVT.RC:$src), 0, "att">; + def : InstAlias<"v" # asm # aliasStr # "\t{$rc, $src, $dst|$dst, $src, $rc}", + (!cast(NAME # "rrb_Int") DstVT.RC:$dst, SrcVT.RC:$src, AVX512RC:$rc), 0, "att">; } multiclass avx512_cvt_s_int_round_aliases opc, X86VectorVTInfo SrcVT, @@ -7673,11 +7673,9 @@ multiclass avx512_cvt_s_int_round_aliases opc, X86VectorVTInfo SrcVT, X86FoldableSchedWrite sched, string asm, string aliasStr> : avx512_cvt_s_int_round { - let Predicates = [HasAVX512] in { - def : InstAlias<"v" # asm # aliasStr # "\t{$src, $dst|$dst, $src}", - (!cast(NAME # "rm_Int") DstVT.RC:$dst, - SrcVT.IntScalarMemOp:$src), 0, "att">; - } // Predicates = [HasAVX512] + def : InstAlias<"v" # asm # aliasStr # "\t{$src, $dst|$dst, $src}", + (!cast(NAME # "rm_Int") DstVT.RC:$dst, + SrcVT.IntScalarMemOp:$src), 0, "att">; } // Convert float/double to signed/unsigned int 32/64 @@ -7824,12 +7822,12 @@ let Predicates = [HasAVX512] in { [(set _DstRC.RC:$dst, (OpNodeInt (_SrcRC.VT _SrcRC.ScalarIntMemCPat:$src)))]>, EVEX, VEX_LIG, Sched<[sched.Folded, sched.ReadAfterFold]>; +} //HasAVX512 def : InstAlias(NAME # "rr_Int") _DstRC.RC:$dst, _SrcRC.RC:$src), 0, "att">; def : InstAlias(NAME # "rrb_Int") _DstRC.RC:$dst, _SrcRC.RC:$src), 0, "att">; -} //HasAVX512 } multiclass avx512_cvt_s_all_unsigned opc, string asm, @@ -7840,12 +7838,10 @@ multiclass avx512_cvt_s_all_unsigned opc, string asm, string aliasStr> : avx512_cvt_s_all { -let Predicates = [HasAVX512] in { def : InstAlias(NAME # "rm_Int") _DstRC.RC:$dst, _SrcRC.IntScalarMemOp:$src), 0, "att">; } -} defm VCVTTSS2SIZ: avx512_cvt_s_all<0x2C, "vcvttss2si", f32x_info, i32x_info, fp_to_sint, X86cvtts2Int, X86cvtts2IntRnd, WriteCvtSS2I, @@ -8103,16 +8099,16 @@ multiclass avx512_cvtpd2ps opc, string OpcodeStr, X86SchedWriteWidths sc EVEX_V128; defm Z256 : avx512_vcvt_fp, EVEX_V256; - - def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; - def : InstAlias(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0, "intel">; - def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; - def : InstAlias(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0, "intel">; } + + def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; + def : InstAlias(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0, "intel">; + def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; + def : InstAlias(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0, "intel">; } defm VCVTPD2PS : avx512_cvtpd2ps<0x5A, "vcvtpd2ps", SchedWriteCvtPD2PS>, @@ -8305,16 +8301,16 @@ multiclass avx512_cvttpd2dq opc, string OpcodeStr, SDNode OpNode, VK2WM>, EVEX_V128; defm Z256 : avx512_vcvt_fp, EVEX_V256; - - def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; - def : InstAlias(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0, "intel">; - def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; - def : InstAlias(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0, "intel">; } + + def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; + def : InstAlias(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0, "intel">; + def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; + def : InstAlias(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0, "intel">; } // Convert Double to Signed/Unsigned Doubleword @@ -8336,16 +8332,16 @@ multiclass avx512_cvtpd2dq opc, string OpcodeStr, SDNode OpNode, VK2WM>, EVEX_V128; defm Z256 : avx512_vcvt_fp, EVEX_V256; - - def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; - def : InstAlias(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0, "intel">; - def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; - def : InstAlias(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0, "intel">; } + + def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; + def : InstAlias(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0, "intel">; + def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; + def : InstAlias(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0, "intel">; } // Convert Double to Signed/Unsigned Quardword @@ -8456,16 +8452,16 @@ multiclass avx512_cvtqq2ps opc, string OpcodeStr, SDNode OpNode, defm Z256 : avx512_vcvt_fp, EVEX_V256, NotEVEX2VEXConvertible; - - def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; - def : InstAlias(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0, "intel">; - def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; - def : InstAlias(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0, "intel">; } + + def : InstAlias(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>; + def : InstAlias(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0, "intel">; + def : InstAlias(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>; + def : InstAlias(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0, "intel">; } defm VCVTDQ2PD : avx512_cvtdq2pd<0xE6, "vcvtdq2pd", sint_to_fp, X86VSintToFP, diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td index b8b6d1bee69..15212d7345a 100644 --- a/lib/Target/X86/X86InstrSSE.td +++ b/lib/Target/X86/X86InstrSSE.td @@ -934,12 +934,12 @@ defm VCVTSI2SD : sse12_vcvt_avx<0x2A, GR32, FR64, i32mem, "cvtsi2sd{l}", defm VCVTSI642SD : sse12_vcvt_avx<0x2A, GR64, FR64, i64mem, "cvtsi2sd{q}", WriteCvtI2SD>, XD, VEX_4V, VEX_W, VEX_LIG; -let Predicates = [UseAVX] in { - def : InstAlias<"vcvtsi2ss\t{$src, $src1, $dst|$dst, $src1, $src}", - (VCVTSI2SSrm FR64:$dst, FR64:$src1, i32mem:$src), 0, "att">; - def : InstAlias<"vcvtsi2sd\t{$src, $src1, $dst|$dst, $src1, $src}", - (VCVTSI2SDrm FR64:$dst, FR64:$src1, i32mem:$src), 0, "att">; +def : InstAlias<"vcvtsi2ss\t{$src, $src1, $dst|$dst, $src1, $src}", + (VCVTSI2SSrm FR64:$dst, FR64:$src1, i32mem:$src), 0, "att">; +def : InstAlias<"vcvtsi2sd\t{$src, $src1, $dst|$dst, $src1, $src}", + (VCVTSI2SDrm FR64:$dst, FR64:$src1, i32mem:$src), 0, "att">; +let Predicates = [UseAVX] in { def : Pat<(f32 (sint_to_fp (loadi32 addr:$src))), (VCVTSI2SSrm (f32 (IMPLICIT_DEF)), addr:$src)>; def : Pat<(f32 (sint_to_fp (loadi64 addr:$src))), @@ -1143,7 +1143,7 @@ defm CVTDQ2PS : sse12_cvt_p<0x5B, VR128, i128mem, v4f32, v4i32, memop, SSEPackedSingle, WriteCvtI2PS>, PS, Requires<[UseSSE2]>; -let Predicates = [UseAVX] in { +// AVX aliases def : InstAlias<"vcvtss2si{l}\t{$src, $dst|$dst, $src}", (VCVTSS2SIrr_Int GR32:$dst, VR128:$src), 0, "att">; def : InstAlias<"vcvtss2si{l}\t{$src, $dst|$dst, $src}", @@ -1160,8 +1160,8 @@ def : InstAlias<"vcvtsd2si{q}\t{$src, $dst|$dst, $src}", (VCVTSD2SI64rr_Int GR64:$dst, VR128:$src), 0, "att">; def : InstAlias<"vcvtsd2si{q}\t{$src, $dst|$dst, $src}", (VCVTSD2SI64rm_Int GR64:$dst, sdmem:$src), 0, "att">; -} +// SSE aliases def : InstAlias<"cvtss2si{l}\t{$src, $dst|$dst, $src}", (CVTSS2SIrr_Int GR32:$dst, VR128:$src), 0, "att">; def : InstAlias<"cvtss2si{l}\t{$src, $dst|$dst, $src}", @@ -1476,15 +1476,11 @@ def VCVTPD2DQrr : SDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src), VEX, Sched<[WriteCvtPD2I]>, VEX_WIG; // XMM only -def : InstAlias<"vcvtpd2dqx\t{$src, $dst|$dst, $src}", - (VCVTPD2DQrr VR128:$dst, VR128:$src), 0>; def VCVTPD2DQrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src), "vcvtpd2dq{x}\t{$src, $dst|$dst, $src}", [(set VR128:$dst, (v4i32 (X86cvtp2Int (loadv2f64 addr:$src))))]>, VEX, Sched<[WriteCvtPD2ILd]>, VEX_WIG; -def : InstAlias<"vcvtpd2dqx\t{$src, $dst|$dst, $src}", - (VCVTPD2DQrm VR128:$dst, f128mem:$src), 0, "intel">; // YMM only def VCVTPD2DQYrr : SDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR256:$src), @@ -1497,11 +1493,16 @@ def VCVTPD2DQYrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src), [(set VR128:$dst, (v4i32 (X86cvtp2Int (loadv4f64 addr:$src))))]>, VEX, VEX_L, Sched<[WriteCvtPD2IYLd]>, VEX_WIG; +} + +def : InstAlias<"vcvtpd2dqx\t{$src, $dst|$dst, $src}", + (VCVTPD2DQrr VR128:$dst, VR128:$src), 0>; +def : InstAlias<"vcvtpd2dqx\t{$src, $dst|$dst, $src}", + (VCVTPD2DQrm VR128:$dst, f128mem:$src), 0, "intel">; def : InstAlias<"vcvtpd2dqy\t{$src, $dst|$dst, $src}", (VCVTPD2DQYrr VR128:$dst, VR256:$src), 0>; def : InstAlias<"vcvtpd2dqy\t{$src, $dst|$dst, $src}", (VCVTPD2DQYrm VR128:$dst, f256mem:$src), 0, "intel">; -} def CVTPD2DQrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src), "cvtpd2dq\t{$src, $dst|$dst, $src}", @@ -1569,32 +1570,23 @@ let Predicates = [UseSSE2] in { (CVTTPS2DQrm addr:$src)>; } -let Predicates = [HasAVX, NoVLX] in +// The assembler can recognize rr 256-bit instructions by seeing a ymm +// register, but the same isn't true when using memory operands instead. +// Provide other assembly rr and rm forms to address this explicitly. +let Predicates = [HasAVX, NoVLX] in { +// XMM only def VCVTTPD2DQrr : VPDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src), "cvttpd2dq\t{$src, $dst|$dst, $src}", [(set VR128:$dst, (v4i32 (X86cvttp2si (v2f64 VR128:$src))))]>, VEX, Sched<[WriteCvtPD2I]>, VEX_WIG; - -// The assembler can recognize rr 256-bit instructions by seeing a ymm -// register, but the same isn't true when using memory operands instead. -// Provide other assembly rr and rm forms to address this explicitly. - -// XMM only -def : InstAlias<"vcvttpd2dqx\t{$src, $dst|$dst, $src}", - (VCVTTPD2DQrr VR128:$dst, VR128:$src), 0>; - -let Predicates = [HasAVX, NoVLX] in def VCVTTPD2DQrm : VPDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src), "cvttpd2dq{x}\t{$src, $dst|$dst, $src}", [(set VR128:$dst, (v4i32 (X86cvttp2si (loadv2f64 addr:$src))))]>, VEX, Sched<[WriteCvtPD2ILd]>, VEX_WIG; -def : InstAlias<"vcvttpd2dqx\t{$src, $dst|$dst, $src}", - (VCVTTPD2DQrm VR128:$dst, f128mem:$src), 0, "intel">; // YMM only -let Predicates = [HasAVX, NoVLX] in { def VCVTTPD2DQYrr : VPDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR256:$src), "cvttpd2dq\t{$src, $dst|$dst, $src}", [(set VR128:$dst, @@ -1605,7 +1597,12 @@ def VCVTTPD2DQYrm : VPDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src), [(set VR128:$dst, (v4i32 (X86cvttp2si (loadv4f64 addr:$src))))]>, VEX, VEX_L, Sched<[WriteCvtPD2IYLd]>, VEX_WIG; -} +} // Predicates = [HasAVX, NoVLX] + +def : InstAlias<"vcvttpd2dqx\t{$src, $dst|$dst, $src}", + (VCVTTPD2DQrr VR128:$dst, VR128:$src), 0>; +def : InstAlias<"vcvttpd2dqx\t{$src, $dst|$dst, $src}", + (VCVTTPD2DQrm VR128:$dst, f128mem:$src), 0, "intel">; def : InstAlias<"vcvttpd2dqy\t{$src, $dst|$dst, $src}", (VCVTTPD2DQYrr VR128:$dst, VR256:$src), 0>; def : InstAlias<"vcvttpd2dqy\t{$src, $dst|$dst, $src}", @@ -1719,25 +1716,17 @@ let Predicates = [UseSSE2] in { // The assembler can recognize rr 256-bit instructions by seeing a ymm // register, but the same isn't true when using memory operands instead. // Provide other assembly rr and rm forms to address this explicitly. -let Predicates = [HasAVX, NoVLX] in +let Predicates = [HasAVX, NoVLX] in { +// XMM only def VCVTPD2PSrr : VPDI<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src), "cvtpd2ps\t{$src, $dst|$dst, $src}", [(set VR128:$dst, (X86vfpround (v2f64 VR128:$src)))]>, VEX, Sched<[WriteCvtPD2PS]>, VEX_WIG; - -// XMM only -def : InstAlias<"vcvtpd2psx\t{$src, $dst|$dst, $src}", - (VCVTPD2PSrr VR128:$dst, VR128:$src), 0>; -let Predicates = [HasAVX, NoVLX] in def VCVTPD2PSrm : VPDI<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src), "cvtpd2ps{x}\t{$src, $dst|$dst, $src}", [(set VR128:$dst, (X86vfpround (loadv2f64 addr:$src)))]>, VEX, Sched<[WriteCvtPD2PS.Folded]>, VEX_WIG; -def : InstAlias<"vcvtpd2psx\t{$src, $dst|$dst, $src}", - (VCVTPD2PSrm VR128:$dst, f128mem:$src), 0, "intel">; -// YMM only -let Predicates = [HasAVX, NoVLX] in { def VCVTPD2PSYrr : VPDI<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR256:$src), "cvtpd2ps\t{$src, $dst|$dst, $src}", [(set VR128:$dst, (X86vfpround VR256:$src))]>, @@ -1746,7 +1735,12 @@ def VCVTPD2PSYrm : VPDI<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src), "cvtpd2ps{y}\t{$src, $dst|$dst, $src}", [(set VR128:$dst, (X86vfpround (loadv4f64 addr:$src)))]>, VEX, VEX_L, Sched<[WriteCvtPD2PSY.Folded]>, VEX_WIG; -} +} // Predicates = [HasAVX, NoVLX] + +def : InstAlias<"vcvtpd2psx\t{$src, $dst|$dst, $src}", + (VCVTPD2PSrr VR128:$dst, VR128:$src), 0>; +def : InstAlias<"vcvtpd2psx\t{$src, $dst|$dst, $src}", + (VCVTPD2PSrm VR128:$dst, f128mem:$src), 0, "intel">; def : InstAlias<"vcvtpd2psy\t{$src, $dst|$dst, $src}", (VCVTPD2PSYrr VR128:$dst, VR256:$src), 0>; def : InstAlias<"vcvtpd2psy\t{$src, $dst|$dst, $src}",