summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/X86/X86ScheduleZnver1.td62
-rw-r--r--llvm/test/CodeGen/X86/mmx-schedule.ll2
-rw-r--r--llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s6
3 files changed, 34 insertions, 36 deletions
diff --git a/llvm/lib/Target/X86/X86ScheduleZnver1.td b/llvm/lib/Target/X86/X86ScheduleZnver1.td
index 8c4c960ec96..a6ba4cbb015 100644
--- a/llvm/lib/Target/X86/X86ScheduleZnver1.td
+++ b/llvm/lib/Target/X86/X86ScheduleZnver1.td
@@ -191,8 +191,6 @@ def : WriteRes<WriteFStore, [ZnAGU]>;
def : WriteRes<WriteFMove, [ZnFPU]>;
def : WriteRes<WriteFLoad, [ZnAGU]> { let Latency = 8; }
-defm : ZnWriteResFpuPair<WriteFHAdd, [ZnFPU0], 3>;
-defm : ZnWriteResFpuPair<WriteFHAddY, [ZnFPU0], 3>;
defm : ZnWriteResFpuPair<WriteFAdd, [ZnFPU0], 3>;
defm : ZnWriteResFpuPair<WriteFAddY, [ZnFPU0], 3>;
defm : ZnWriteResFpuPair<WriteFCmp, [ZnFPU0], 3>;
@@ -241,8 +239,6 @@ defm : ZnWriteResFpuPair<WriteVecShiftImmX, [ZnFPU], 1>;
defm : ZnWriteResFpuPair<WriteVecShiftImmY, [ZnFPU], 1>;
defm : ZnWriteResFpuPair<WriteVecLogic, [ZnFPU], 1>;
defm : ZnWriteResFpuPair<WriteVecLogicY, [ZnFPU], 1>;
-defm : ZnWriteResFpuPair<WritePHAdd, [ZnFPU], 1>;
-defm : ZnWriteResFpuPair<WritePHAddY, [ZnFPU], 1>;
defm : ZnWriteResFpuPair<WriteVecALU, [ZnFPU], 1>;
defm : ZnWriteResFpuPair<WriteVecALUY, [ZnFPU], 1>;
defm : ZnWriteResFpuPair<WriteVecIMul, [ZnFPU0], 4>;
@@ -297,26 +293,28 @@ defm : ZnWriteResFpuPair<WriteFShuffle256, [ZnFPU], 100>;
defm : ZnWriteResFpuPair<WriteFVarShuffle256, [ZnFPU], 100>;
// Microcoded Instructions
-let Latency = 100 in {
- def : WriteRes<WriteMicrocoded, []>;
- def : WriteRes<WriteSystem, []>;
- def : WriteRes<WriteMPSAD, []>;
- def : WriteRes<WriteMPSADY, []>;
- def : WriteRes<WriteMPSADLd, []>;
- def : WriteRes<WriteMPSADYLd, []>;
- def : WriteRes<WriteCLMul, []>;
- def : WriteRes<WriteCLMulLd, []>;
- def : WriteRes<WritePCmpIStrM, []>;
- def : WriteRes<WritePCmpIStrMLd, []>;
- def : WriteRes<WritePCmpEStrI, []>;
- def : WriteRes<WritePCmpEStrILd, []>;
- def : WriteRes<WritePCmpEStrM, []>;
- def : WriteRes<WritePCmpEStrMLd, []>;
- def : WriteRes<WritePCmpIStrI, []>;
- def : WriteRes<WritePCmpIStrILd, []>;
- def : WriteRes<WriteLDMXCSR, []>;
- def : WriteRes<WriteSTMXCSR, []>;
- }
+def ZnWriteMicrocoded : SchedWriteRes<[]> {
+ let Latency = 100;
+}
+
+def : SchedAlias<WriteMicrocoded, ZnWriteMicrocoded>;
+def : SchedAlias<WriteSystem, ZnWriteMicrocoded>;
+def : SchedAlias<WriteMPSAD, ZnWriteMicrocoded>;
+def : SchedAlias<WriteMPSADY, ZnWriteMicrocoded>;
+def : SchedAlias<WriteMPSADLd, ZnWriteMicrocoded>;
+def : SchedAlias<WriteMPSADYLd, ZnWriteMicrocoded>;
+def : SchedAlias<WriteCLMul, ZnWriteMicrocoded>;
+def : SchedAlias<WriteCLMulLd, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpIStrM, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpIStrMLd, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpEStrI, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpEStrILd, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpEStrM, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpEStrMLd, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpIStrI, ZnWriteMicrocoded>;
+def : SchedAlias<WritePCmpIStrILd, ZnWriteMicrocoded>;
+def : SchedAlias<WriteLDMXCSR, ZnWriteMicrocoded>;
+def : SchedAlias<WriteSTMXCSR, ZnWriteMicrocoded>;
//=== Regex based InstRW ===//
// Notation:
@@ -1028,13 +1026,10 @@ def : InstRW<[WriteMicrocoded], (instregex "VPGATHER(Q|D)(Q|D)(Y?)rm")>;
// HADD, HSUB PS/PD
// PHADD|PHSUB (S) W/D.
-def : InstRW<[WriteMicrocoded], (instregex "MMX_PHADD(W|D)r(r|m)",
- "MMX_PHADDSWr(r|m)",
- "MMX_PHSUB(W|D)r(r|m)",
- "MMX_PHSUBSWrr",
- "(V?)PH(ADD|SUB)(W|D)(Y?)r(r|m)",
- "(V?)PH(ADD|SUB)SW(Y?)r(r|m)")>;
-
+def : SchedAlias<WritePHAdd, ZnWriteMicrocoded>;
+def : SchedAlias<WritePHAddLd, ZnWriteMicrocoded>;
+def : SchedAlias<WritePHAddY, ZnWriteMicrocoded>;
+def : SchedAlias<WritePHAddYLd, ZnWriteMicrocoded>;
// PCMPGTQ.
def ZnWritePCMPGTQr : SchedWriteRes<[ZnFPU03]>;
@@ -1452,7 +1447,10 @@ def : InstRW<[ZnWriteSHA256RNDS2Ld], (instregex "SHA256RNDS2rm")>;
//-- Arithmetic instructions --//
// HADD, HSUB PS/PD
-def : InstRW<[WriteMicrocoded], (instregex "(V?)H(ADD|SUB)P(S|D)(Y?)r(r|m)")>;
+def : SchedAlias<WriteFHAdd, ZnWriteMicrocoded>;
+def : SchedAlias<WriteFHAddLd, ZnWriteMicrocoded>;
+def : SchedAlias<WriteFHAddY, ZnWriteMicrocoded>;
+def : SchedAlias<WriteFHAddYLd, ZnWriteMicrocoded>;
// MULL SS/SD PS/PD.
// x,x / v,v,v.
diff --git a/llvm/test/CodeGen/X86/mmx-schedule.ll b/llvm/test/CodeGen/X86/mmx-schedule.ll
index 3556a79264e..b57a20d8717 100644
--- a/llvm/test/CodeGen/X86/mmx-schedule.ll
+++ b/llvm/test/CodeGen/X86/mmx-schedule.ll
@@ -3409,7 +3409,7 @@ define i64 @test_phsubsw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize {
; ZNVER1-LABEL: test_phsubsw:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: phsubsw %mm1, %mm0 # sched: [100:?]
-; ZNVER1-NEXT: phsubsw (%rdi), %mm0 # sched: [8:0.50]
+; ZNVER1-NEXT: phsubsw (%rdi), %mm0 # sched: [100:?]
; ZNVER1-NEXT: movq %mm0, %rax # sched: [2:1.00]
; ZNVER1-NEXT: retq # sched: [1:0.50]
%1 = call x86_mmx @llvm.x86.ssse3.phsub.sw(x86_mmx %a0, x86_mmx %a1)
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s
index 95c16187c28..1e1f95539d2 100644
--- a/llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s
+++ b/llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s
@@ -139,7 +139,7 @@ psignw (%rax), %xmm2
# CHECK-NEXT: 1 100 - phsubd %xmm0, %xmm2
# CHECK-NEXT: 1 100 - * phsubd (%rax), %xmm2
# CHECK-NEXT: 1 100 - phsubsw %mm0, %mm2
-# CHECK-NEXT: 1 8 0.50 * phsubsw (%rax), %mm2
+# CHECK-NEXT: 1 100 - * phsubsw (%rax), %mm2
# CHECK-NEXT: 1 100 - phsubsw %xmm0, %xmm2
# CHECK-NEXT: 1 100 - * phsubsw (%rax), %xmm2
# CHECK-NEXT: 1 100 - phsubw %mm0, %mm2
@@ -187,7 +187,7 @@ psignw (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
-# CHECK-NEXT: 10.50 10.50 - - - - - 16.25 8.25 8.25 8.25 -
+# CHECK-NEXT: 10.00 10.00 - - - - - 16.00 8.00 8.00 8.00 -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -224,7 +224,7 @@ psignw (%rax), %xmm2
# CHECK-NEXT: - - - - - - - - - - - - phsubd %xmm0, %xmm2
# CHECK-NEXT: - - - - - - - - - - - - phsubd (%rax), %xmm2
# CHECK-NEXT: - - - - - - - - - - - - phsubsw %mm0, %mm2
-# CHECK-NEXT: 0.50 0.50 - - - - - 0.25 0.25 0.25 0.25 - phsubsw (%rax), %mm2
+# CHECK-NEXT: - - - - - - - - - - - - phsubsw (%rax), %mm2
# CHECK-NEXT: - - - - - - - - - - - - phsubsw %xmm0, %xmm2
# CHECK-NEXT: - - - - - - - - - - - - phsubsw (%rax), %xmm2
# CHECK-NEXT: - - - - - - - - - - - - phsubw %mm0, %mm2
OpenPOWER on IntegriCloud