diff options
| author | Craig Topper <craig.topper@gmail.com> | 2017-01-30 06:59:06 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2017-01-30 06:59:06 +0000 |
| commit | f6df4a6978bd12d40bf5e484d840128666dadede (patch) | |
| tree | 3d70b89fad3e60b789362723663f41bf34b81828 /llvm/lib/Target | |
| parent | b065ecf4f03c420f9ccb980e70c3b02c20a7a3c0 (diff) | |
| download | bcm5719-llvm-f6df4a6978bd12d40bf5e484d840128666dadede.tar.gz bcm5719-llvm-f6df4a6978bd12d40bf5e484d840128666dadede.zip | |
[AVX-512] Remove duplicate CodeGenOnly patterns for scalar register broadcast. We can use COPY_TO_REGCLASS like AVX does.
This causes stack spill slots be oversized sometimes, but the same should already be happening with AVX.
llvm-svn: 293464
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 40 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 5 | ||||
| -rwxr-xr-x | llvm/lib/Target/X86/X86InstrTablesInfo.h | 3 |
3 files changed, 14 insertions, 34 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 2a2ab660c91..d58a93eed85 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -846,32 +846,20 @@ def VEXTRACTPSZmr : AVX512AIi8<0x17, MRMDestMem, (outs), // broadcast with a scalar argument. multiclass avx512_broadcast_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo DestInfo, X86VectorVTInfo SrcInfo> { - - let isCodeGenOnly = 1 in { - def r_s : I< opc, MRMSrcReg, (outs DestInfo.RC:$dst), - (ins SrcInfo.FRC:$src), OpcodeStr#"\t{$src, $dst|$dst, $src}", - [(set DestInfo.RC:$dst, (DestInfo.VT (X86VBroadcast SrcInfo.FRC:$src)))]>, - Requires<[HasAVX512]>, T8PD, EVEX; - - let Constraints = "$src0 = $dst" in - def rk_s : I< opc, MRMSrcReg, (outs DestInfo.RC:$dst), - (ins DestInfo.RC:$src0, DestInfo.KRCWM:$mask, SrcInfo.FRC:$src), - OpcodeStr#"\t{$src, $dst {${mask}} |$dst {${mask}}, $src}", - [(set DestInfo.RC:$dst, - (vselect DestInfo.KRCWM:$mask, - (DestInfo.VT (X86VBroadcast SrcInfo.FRC:$src)), - DestInfo.RC:$src0))]>, - Requires<[HasAVX512]>, T8PD, EVEX, EVEX_K; - - def rkz_s : I< opc, MRMSrcReg, (outs DestInfo.RC:$dst), - (ins DestInfo.KRCWM:$mask, SrcInfo.FRC:$src), - OpcodeStr#"\t{$src, $dst {${mask}} {z}|$dst {${mask}} {z}, $src}", - [(set DestInfo.RC:$dst, - (vselect DestInfo.KRCWM:$mask, - (DestInfo.VT (X86VBroadcast SrcInfo.FRC:$src)), - DestInfo.ImmAllZerosV))]>, - Requires<[HasAVX512]>, T8PD, EVEX, EVEX_KZ; - } // let isCodeGenOnly = 1 in + def : Pat<(DestInfo.VT (X86VBroadcast SrcInfo.FRC:$src)), + (!cast<Instruction>(NAME#DestInfo.ZSuffix#r) + (COPY_TO_REGCLASS SrcInfo.FRC:$src, SrcInfo.RC))>; + def : Pat<(DestInfo.VT (vselect DestInfo.KRCWM:$mask, + (X86VBroadcast SrcInfo.FRC:$src), + DestInfo.RC:$src0)), + (!cast<Instruction>(NAME#DestInfo.ZSuffix#rk) + DestInfo.RC:$src0, DestInfo.KRCWM:$mask, + (COPY_TO_REGCLASS SrcInfo.FRC:$src, SrcInfo.RC))>; + def : Pat<(DestInfo.VT (vselect DestInfo.KRCWM:$mask, + (X86VBroadcast SrcInfo.FRC:$src), + DestInfo.ImmAllZerosV)), + (!cast<Instruction>(NAME#DestInfo.ZSuffix#rkz) + DestInfo.KRCWM:$mask, (COPY_TO_REGCLASS SrcInfo.FRC:$src, SrcInfo.RC))>; } multiclass avx512_broadcast_rm<bits<8> opc, string OpcodeStr, diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index 46a7604ec69..856fbf78037 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -867,9 +867,7 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) // AVX-512 foldable instructions { X86::VBROADCASTSSZr, X86::VBROADCASTSSZm, TB_NO_REVERSE }, - { X86::VBROADCASTSSZr_s, X86::VBROADCASTSSZm, TB_NO_REVERSE }, { X86::VBROADCASTSDZr, X86::VBROADCASTSDZm, TB_NO_REVERSE }, - { X86::VBROADCASTSDZr_s, X86::VBROADCASTSDZm, TB_NO_REVERSE }, { X86::VMOV64toPQIZrr, X86::VMOVQI2PQIZrm, 0 }, { X86::VMOVZPQILo2PQIZrr,X86::VMOVQI2PQIZrm, TB_NO_REVERSE }, { X86::VMOVDI2SSZrr, X86::VMOVDI2SSZrm, 0 }, @@ -907,9 +905,7 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) // AVX-512 foldable instructions (256-bit versions) { X86::VBROADCASTSSZ256r, X86::VBROADCASTSSZ256m, TB_NO_REVERSE }, - { X86::VBROADCASTSSZ256r_s, X86::VBROADCASTSSZ256m, TB_NO_REVERSE }, { X86::VBROADCASTSDZ256r, X86::VBROADCASTSDZ256m, TB_NO_REVERSE }, - { X86::VBROADCASTSDZ256r_s, X86::VBROADCASTSDZ256m, TB_NO_REVERSE }, { X86::VMOVAPDZ256rr, X86::VMOVAPDZ256rm, TB_ALIGN_32 }, { X86::VMOVAPSZ256rr, X86::VMOVAPSZ256rm, TB_ALIGN_32 }, { X86::VMOVDQA32Z256rr, X86::VMOVDQA32Z256rm, TB_ALIGN_32 }, @@ -942,7 +938,6 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) // AVX-512 foldable instructions (128-bit versions) { X86::VBROADCASTSSZ128r, X86::VBROADCASTSSZ128m, TB_NO_REVERSE }, - { X86::VBROADCASTSSZ128r_s, X86::VBROADCASTSSZ128m, TB_NO_REVERSE }, { X86::VMOVAPDZ128rr, X86::VMOVAPDZ128rm, TB_ALIGN_16 }, { X86::VMOVAPSZ128rr, X86::VMOVAPSZ128rm, TB_ALIGN_16 }, { X86::VMOVDQA32Z128rr, X86::VMOVDQA32Z128rm, TB_ALIGN_16 }, diff --git a/llvm/lib/Target/X86/X86InstrTablesInfo.h b/llvm/lib/Target/X86/X86InstrTablesInfo.h index 415a891bfd9..09e635c9dff 100755 --- a/llvm/lib/Target/X86/X86InstrTablesInfo.h +++ b/llvm/lib/Target/X86/X86InstrTablesInfo.h @@ -296,7 +296,6 @@ static const X86EvexToVexCompressTableEntry X86EvexToVex128CompressTable[] = { { X86::VANDPSZ128rr , X86::VANDPSrr }, { X86::VBROADCASTSSZ128m , X86::VBROADCASTSSrm }, { X86::VBROADCASTSSZ128r , X86::VBROADCASTSSrr }, - { X86::VBROADCASTSSZ128r_s , X86::VBROADCASTSSrr }, { X86::VCVTDQ2PDZ128rm , X86::VCVTDQ2PDrm }, { X86::VCVTDQ2PDZ128rr , X86::VCVTDQ2PDrr }, { X86::VCVTDQ2PSZ128rm , X86::VCVTDQ2PSrm }, @@ -727,10 +726,8 @@ static const X86EvexToVexCompressTableEntry X86EvexToVex128CompressTable[] = { { X86::VANDPSZ256rr , X86::VANDPSYrr }, { X86::VBROADCASTSDZ256m , X86::VBROADCASTSDYrm }, { X86::VBROADCASTSDZ256r , X86::VBROADCASTSDYrr }, - { X86::VBROADCASTSDZ256r_s , X86::VBROADCASTSDYrr }, { X86::VBROADCASTSSZ256m , X86::VBROADCASTSSYrm }, { X86::VBROADCASTSSZ256r , X86::VBROADCASTSSYrr }, - { X86::VBROADCASTSSZ256r_s , X86::VBROADCASTSSYrr }, { X86::VCVTDQ2PDZ256rm , X86::VCVTDQ2PDYrm }, { X86::VCVTDQ2PDZ256rr , X86::VCVTDQ2PDYrr }, { X86::VCVTDQ2PSZ256rm , X86::VCVTDQ2PSYrm }, |

