forked from OSchip/llvm-project
[NFC][X86] Split VPMOV* AVX2 instructions into their own sched class
At least on all three Zen's, all such instructions cleanly map into this new class with no overrides needed.
This commit is contained in:
parent
122c0e61f1
commit
7727cc242d
|
@ -4944,7 +4944,7 @@ multiclass SS41I_pmovx_rm_all<bits<8> opc, string OpcodeStr,
|
|||
VEX, VEX_WIG;
|
||||
let Predicates = [HasAVX2, prd] in
|
||||
defm V#NAME#Y : SS41I_pmovx_rrrm<opc, !strconcat("v", OpcodeStr), MemYOp,
|
||||
VR256, VR128, WriteShuffle256>,
|
||||
VR256, VR128, WriteVPMOV256>,
|
||||
VEX, VEX_L, VEX_WIG;
|
||||
}
|
||||
|
||||
|
|
|
@ -582,6 +582,7 @@ def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def Writ
|
|||
defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3, [1], 1, 6>; // Fp 256-bit width vector shuffles.
|
||||
defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3, [1], 1, 6>; // Fp 256-bit width vector variable shuffles.
|
||||
defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3, [1], 1, 6>; // 256-bit width vector shuffles.
|
||||
defm : BWWriteResPair<WriteVPMOV256, [BWPort5], 3, [1], 1, 6>; // 256-bit width packed vector width-changing move.
|
||||
defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3, [1], 1, 6>; // 256-bit width vector variable shuffles.
|
||||
|
||||
// Old microcoded instructions that nobody use.
|
||||
|
|
|
@ -432,6 +432,7 @@ defm : HWWriteResPair<WriteBlend, [HWPort5], 1, [1], 1, 6>;
|
|||
defm : HWWriteResPair<WriteBlendY, [HWPort5], 1, [1], 1, 7>;
|
||||
defm : HWWriteResPair<WriteBlendZ, [HWPort5], 1, [1], 1, 7>; // Unsupported = 1
|
||||
defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3, [1], 1, 7>;
|
||||
defm : HWWriteResPair<WriteVPMOV256, [HWPort5], 3, [1], 1, 7>;
|
||||
defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3, [1], 1, 7>;
|
||||
defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2], 2, 6>;
|
||||
defm : HWWriteResPair<WriteVarBlendY, [HWPort5], 2, [2], 2, 7>;
|
||||
|
|
|
@ -573,6 +573,7 @@ def : WriteRes<WriteNop, []>;
|
|||
defm : SBWriteResPair<WriteFShuffle256, [SBPort5], 1, [1], 1, 7>;
|
||||
defm : SBWriteResPair<WriteFVarShuffle256, [SBPort5], 1, [1], 1, 7>;
|
||||
defm : SBWriteResPair<WriteShuffle256, [SBPort5], 1, [1], 1, 7>;
|
||||
defm : SBWriteResPair<WriteVPMOV256, [SBPort5], 1, [1], 1, 7>;
|
||||
defm : SBWriteResPair<WriteVarShuffle256, [SBPort5], 1, [1], 1, 7>;
|
||||
defm : SBWriteResPair<WriteFMA, [SBPort01], 5>;
|
||||
defm : SBWriteResPair<WriteFMAX, [SBPort01], 5>;
|
||||
|
|
|
@ -582,6 +582,7 @@ def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def Wri
|
|||
defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
|
||||
defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
|
||||
defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
|
||||
defm : SKLWriteResPair<WriteVPMOV256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width packed vector width-changing move.
|
||||
defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
|
||||
|
||||
// Old microcoded instructions that nobody use.
|
||||
|
|
|
@ -583,6 +583,7 @@ def : WriteRes<WriteSystem, [SKXPort0156]> { let Latency = 100; } // def Wri
|
|||
defm : SKXWriteResPair<WriteFShuffle256, [SKXPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
|
||||
defm : SKXWriteResPair<WriteFVarShuffle256, [SKXPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
|
||||
defm : SKXWriteResPair<WriteShuffle256, [SKXPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
|
||||
defm : SKXWriteResPair<WriteVPMOV256, [SKXPort5], 3, [1], 1, 7>; // 256-bit width packed vector width-changing move.
|
||||
defm : SKXWriteResPair<WriteVarShuffle256, [SKXPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
|
||||
|
||||
// Old microcoded instructions that nobody use.
|
||||
|
|
|
@ -488,6 +488,7 @@ def WriteSystem : SchedWrite;
|
|||
defm WriteFShuffle256 : X86SchedWritePair<ReadAfterVecYLd>; // Fp 256-bit width vector shuffles.
|
||||
defm WriteFVarShuffle256 : X86SchedWritePair<ReadAfterVecYLd>; // Fp 256-bit width variable shuffles.
|
||||
defm WriteShuffle256 : X86SchedWritePair<ReadAfterVecYLd>; // 256-bit width vector shuffles.
|
||||
defm WriteVPMOV256 : X86SchedWritePair<ReadAfterVecYLd>; // 256-bit width packed vector width-changing move.
|
||||
defm WriteVarShuffle256 : X86SchedWritePair<ReadAfterVecYLd>; // 256-bit width vector variable shuffles.
|
||||
defm WriteVarVecShift : X86SchedWritePair<ReadAfterVecXLd>; // Variable vector shifts.
|
||||
defm WriteVarVecShiftY : X86SchedWritePair<ReadAfterVecYLd>; // Variable vector shifts (YMM).
|
||||
|
|
|
@ -429,6 +429,7 @@ defm : X86WriteResPairUnsupported<WriteVarBlend>;
|
|||
defm : X86WriteResPairUnsupported<WriteVarBlendY>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarBlendZ>;
|
||||
defm : X86WriteResPairUnsupported<WriteShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVPMOV256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShift>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShiftY>;
|
||||
|
|
|
@ -1196,6 +1196,7 @@ defm : PdWriteResYMMPair<WriteVecTestY, [PdFPU01, PdFPFMA, PdEX0], 1, [2, 4
|
|||
defm : X86WriteResPairUnsupported<WriteVecTestZ>;
|
||||
|
||||
defm : PdWriteResXMMPair<WriteShuffle256, [PdFPU01, PdFPMAL]>;
|
||||
defm : PdWriteResXMMPair<WriteVPMOV256, [PdFPU01, PdFPMAL]>;
|
||||
defm : PdWriteResXMMPair<WriteVarShuffle256, [PdFPU01, PdFPMAL]>;
|
||||
|
||||
defm : PdWriteResXMMPair<WriteVarVecShift, [PdFPU01, PdFPMAL], 3, [1, 2]>;
|
||||
|
|
|
@ -733,6 +733,7 @@ defm : JWriteResFpuPair<WriteVecTest, [JFPU0, JFPA, JALU0], 3>;
|
|||
defm : JWriteResYMMPair<WriteVecTestY, [JFPU01, JFPX, JFPA, JALU0], 4, [2, 2, 2, 1], 3>;
|
||||
defm : X86WriteResPairUnsupported<WriteVecTestZ>;
|
||||
defm : X86WriteResPairUnsupported<WriteShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVPMOV256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarShuffle256>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -436,6 +436,7 @@ defm : X86WriteResPairUnsupported<WriteFVarBlendZ>;
|
|||
defm : X86WriteResPairUnsupported<WriteFShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVPMOV256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarShuffle256>;
|
||||
defm : SLMWriteResPair<WriteVarVecShift, [SLM_FPC_RSV0], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShiftY>;
|
||||
|
|
|
@ -437,6 +437,7 @@ defm : ZnWriteResFpuPair<WriteBlend, [ZnFPU01], 1>;
|
|||
defm : ZnWriteResFpuPair<WriteBlendY, [ZnFPU01], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteBlendZ>;
|
||||
defm : ZnWriteResFpuPair<WriteShuffle256, [ZnFPU], 2>;
|
||||
defm : ZnWriteResFpuPair<WriteVPMOV256, [ZnFPU12], 1, [1], 2>;
|
||||
defm : ZnWriteResFpuPair<WriteVarShuffle256, [ZnFPU], 2>;
|
||||
defm : ZnWriteResFpuPair<WritePSADBW, [ZnFPU0], 3>;
|
||||
defm : ZnWriteResFpuPair<WritePSADBWX, [ZnFPU0], 3>;
|
||||
|
@ -1019,11 +1020,6 @@ def : InstRW<[ZnWriteFPU12m], (instrs MMX_PACKSSDWirm,
|
|||
MMX_PACKSSWBirm,
|
||||
MMX_PACKUSWBirm)>;
|
||||
|
||||
// VPMOVSX/ZX BW BD BQ WD WQ DQ.
|
||||
// y <- x.
|
||||
def : InstRW<[ZnWriteFPU12Y], (instregex "VPMOV(SX|ZX)(BW|BD|BQ|WD|WQ|DQ)Yrr")>;
|
||||
def : InstRW<[ZnWriteFPU12Ym], (instregex "VPMOV(SX|ZX)(BW|BD|BQ|WD|WQ|DQ)Yrm")>;
|
||||
|
||||
def ZnWriteFPU013 : SchedWriteRes<[ZnFPU013]> ;
|
||||
def ZnWriteFPU013Y : SchedWriteRes<[ZnFPU013]> {
|
||||
let Latency = 2;
|
||||
|
|
|
@ -419,6 +419,7 @@ defm : Zn2WriteResFpuPair<WriteBlend, [Zn2FPU01], 1>;
|
|||
defm : Zn2WriteResFpuPair<WriteBlendY, [Zn2FPU01], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteBlendZ>;
|
||||
defm : Zn2WriteResFpuPair<WriteShuffle256, [Zn2FPU], 2>;
|
||||
defm : Zn2WriteResFpuPair<WriteVPMOV256, [Zn2FPU12], 4, [1], 2, 4>;
|
||||
defm : Zn2WriteResFpuPair<WriteVarShuffle256, [Zn2FPU], 2>;
|
||||
defm : Zn2WriteResFpuPair<WritePSADBW, [Zn2FPU0], 3>;
|
||||
defm : Zn2WriteResFpuPair<WritePSADBWX, [Zn2FPU0], 3>;
|
||||
|
@ -1029,11 +1030,6 @@ def : InstRW<[Zn2WriteFPU12m], (instrs MMX_PACKSSDWirm,
|
|||
MMX_PACKSSWBirm,
|
||||
MMX_PACKUSWBirm)>;
|
||||
|
||||
// VPMOVSX/ZX BW BD BQ WD WQ DQ.
|
||||
// y <- x.
|
||||
def : InstRW<[Zn2WriteFPU12Y], (instregex "VPMOV(SX|ZX)(BW|BD|BQ|WD|WQ|DQ)Yrr")>;
|
||||
def : InstRW<[Zn2WriteFPU12Ym], (instregex "VPMOV(SX|ZX)(BW|BD|BQ|WD|WQ|DQ)Yrm")>;
|
||||
|
||||
def Zn2WriteFPU013 : SchedWriteRes<[Zn2FPU013]> ;
|
||||
def Zn2WriteFPU013Y : SchedWriteRes<[Zn2FPU013]> ;
|
||||
def Zn2WriteFPU013m : SchedWriteRes<[Zn2AGU, Zn2FPU013]> {
|
||||
|
|
Loading…
Reference in New Issue