summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Courbet <courbet@google.com>2018-10-01 08:37:48 +0000
committerClement Courbet <courbet@google.com>2018-10-01 08:37:48 +0000
commita933fb237e1051d3cc130d44ce21770e15f5b753 (patch)
treea3a4f480a9e5f721e9060cb1c05384a0c3edf176
parentdac60b9837d7540822179f716dc0a8a911f2c7da (diff)
downloadbcm5719-llvm-a933fb237e1051d3cc130d44ce21770e15f5b753.tar.gz
bcm5719-llvm-a933fb237e1051d3cc130d44ce21770e15f5b753.zip
[X86][Sched] Update scheduling information for VZEROALL on HWS, BDW, SKX, SNB.
Summary: While looking at PR35606, I found out that the scheduling info is incorrect. One can check that it's really a P5+P6 and not a 2*P56 with: echo -e 'vzeroall\nvandps %xmm1, %xmm2, %xmm3' | ./bin/llvm-exegesis -mode=uops -snippets-file=- (vandps executes on P5 only) Reviewers: craig.topper, RKSimon Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D52541 llvm-svn: 343447
-rwxr-xr-xllvm/lib/Target/X86/X86SchedBroadwell.td8
-rw-r--r--llvm/lib/Target/X86/X86SchedHaswell.td8
-rw-r--r--llvm/lib/Target/X86/X86SchedSandyBridge.td7
-rwxr-xr-xllvm/lib/Target/X86/X86SchedSkylakeServer.td8
-rw-r--r--llvm/test/CodeGen/X86/avx-schedule.ll10
-rw-r--r--llvm/test/tools/llvm-mca/X86/Broadwell/resources-avx1.s6
-rw-r--r--llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s6
-rw-r--r--llvm/test/tools/llvm-mca/X86/Haswell/resources-avx1.s6
-rw-r--r--llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s6
-rw-r--r--llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-avx1.s6
10 files changed, 39 insertions, 32 deletions
diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td
index c1c4ba258a3..2a98f984ed1 100755
--- a/llvm/lib/Target/X86/X86SchedBroadwell.td
+++ b/llvm/lib/Target/X86/X86SchedBroadwell.td
@@ -1374,10 +1374,10 @@ def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPo
}
def: InstRW<[BWWriteResGroup153], (instrs CMPXCHG8B)>;
-def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
- let Latency = 16;
- let NumMicroOps = 16;
- let ResourceCycles = [16];
+def BWWriteResGroup154 : SchedWriteRes<[BWPort5,BWPort6]> {
+ let Latency = 8;
+ let NumMicroOps = 20;
+ let ResourceCycles = [1,1];
}
def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td
index 0fcc5e9c104..d1449ba0a0a 100644
--- a/llvm/lib/Target/X86/X86SchedHaswell.td
+++ b/llvm/lib/Target/X86/X86SchedHaswell.td
@@ -1617,10 +1617,10 @@ def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort2
}
def: InstRW<[HWWriteResGroup144], (instrs INSB, INSL, INSW)>;
-def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
- let Latency = 16;
- let NumMicroOps = 16;
- let ResourceCycles = [16];
+def HWWriteResGroup145 : SchedWriteRes<[HWPort5, HWPort6]> {
+ let Latency = 8;
+ let NumMicroOps = 20;
+ let ResourceCycles = [1,1];
}
def: InstRW<[HWWriteResGroup145], (instrs VZEROALL)>;
diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td
index e2f3067d1e8..3196f2a8f12 100644
--- a/llvm/lib/Target/X86/X86SchedSandyBridge.td
+++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td
@@ -1104,6 +1104,13 @@ def SBWriteResGroup131 : SchedWriteRes<[SBPort0,SBPort1,SBPort23]> {
}
def: InstRW<[SBWriteResGroup131], (instregex "DIV(R?)_FI(16|32)m")>;
+def SBWriteResGroupVzeroall : SchedWriteRes<[SBPort5]> {
+ let Latency = 9;
+ let NumMicroOps = 20;
+ let ResourceCycles = [2];
+}
+def: InstRW<[SBWriteResGroupVzeroall], (instrs VZEROALL)>;
+
def: InstRW<[WriteZero], (instrs CLC)>;
// Intruction variants handled by the renamer. These might not need execution
diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
index 4d25dd3e504..6c597f9db3c 100755
--- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td
+++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
@@ -2086,10 +2086,10 @@ def SKXWriteResGroup199 : SchedWriteRes<[SKXPort4,SKXPort23,SKXPort237,SKXPort06
}
def: InstRW<[SKXWriteResGroup199], (instrs CMPXCHG8B)>;
-def SKXWriteResGroup200 : SchedWriteRes<[SKXPort0156]> {
- let Latency = 16;
- let NumMicroOps = 16;
- let ResourceCycles = [16];
+def SKXWriteResGroup200 : SchedWriteRes<[SKXPort1, SKXPort05, SKXPort6]> {
+ let Latency = 12;
+ let NumMicroOps = 34;
+ let ResourceCycles = [1, 4, 5];
}
def: InstRW<[SKXWriteResGroup200], (instrs VZEROALL)>;
diff --git a/llvm/test/CodeGen/X86/avx-schedule.ll b/llvm/test/CodeGen/X86/avx-schedule.ll
index 25c9a3af78d..58a351071ed 100644
--- a/llvm/test/CodeGen/X86/avx-schedule.ll
+++ b/llvm/test/CodeGen/X86/avx-schedule.ll
@@ -5339,22 +5339,22 @@ define <8 x float> @test_xorps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a
define void @test_zeroall() {
; GENERIC-LABEL: test_zeroall:
; GENERIC: # %bb.0:
-; GENERIC-NEXT: vzeroall # sched: [100:0.33]
+; GENERIC-NEXT: vzeroall # sched: [9:2.00]
; GENERIC-NEXT: retq # sched: [1:1.00]
;
; SANDY-LABEL: test_zeroall:
; SANDY: # %bb.0:
-; SANDY-NEXT: vzeroall # sched: [100:0.33]
+; SANDY-NEXT: vzeroall # sched: [9:2.00]
; SANDY-NEXT: retq # sched: [1:1.00]
;
; HASWELL-LABEL: test_zeroall:
; HASWELL: # %bb.0:
-; HASWELL-NEXT: vzeroall # sched: [16:16.00]
+; HASWELL-NEXT: vzeroall # sched: [8:1.00]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
; BROADWELL-LABEL: test_zeroall:
; BROADWELL: # %bb.0:
-; BROADWELL-NEXT: vzeroall # sched: [16:16.00]
+; BROADWELL-NEXT: vzeroall # sched: [8:1.00]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
; SKYLAKE-LABEL: test_zeroall:
@@ -5364,7 +5364,7 @@ define void @test_zeroall() {
;
; SKX-LABEL: test_zeroall:
; SKX: # %bb.0:
-; SKX-NEXT: vzeroall # sched: [16:4.00]
+; SKX-NEXT: vzeroall # sched: [12:5.00]
; SKX-NEXT: retq # sched: [7:1.00]
;
; BTVER2-LABEL: test_zeroall:
diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-avx1.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-avx1.s
index 36ecc069cf6..9b8fc63c2e5 100644
--- a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-avx1.s
@@ -1719,7 +1719,7 @@ vzeroupper
# CHECK-NEXT: 2 6 1.00 * vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 1 1.00 vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: 2 7 1.00 * vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: 16 16 16.00 * * U vzeroall
+# CHECK-NEXT: 20 8 1.00 * * U vzeroall
# CHECK-NEXT: 4 4 1.00 * * U vzeroupper
# CHECK: Resources:
@@ -1736,7 +1736,7 @@ vzeroupper
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 257.00 216.33 236.33 176.17 176.17 38.00 442.33 2.00 12.67
+# CHECK-NEXT: - 257.00 216.33 236.33 176.17 176.17 38.00 427.33 3.00 12.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -2429,5 +2429,5 @@ vzeroupper
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - - - - - - 1.00 - - vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: - - - - - - - 16.00 - - vzeroall
+# CHECK-NEXT: - - - - - - - 1.00 1.00 - vzeroall
# CHECK-NEXT: - - 1.08 1.08 - - - 1.08 0.75 - vzeroupper
diff --git a/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s b/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
index 6e67fa89131..f0bf9e27294 100644
--- a/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
@@ -1719,7 +1719,7 @@ vzeroupper
# CHECK-NEXT: 2 7 1.00 * vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 1 1.00 vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: 2 8 1.00 * vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: 1 100 0.33 * * U vzeroall
+# CHECK-NEXT: 20 9 2.00 * * U vzeroall
# CHECK-NEXT: 1 100 0.33 * * U vzeroupper
# CHECK: Resources:
@@ -1734,7 +1734,7 @@ vzeroupper
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
-# CHECK-NEXT: - 572.00 247.17 317.67 39.00 364.17 179.50 179.50
+# CHECK-NEXT: - 572.00 246.83 317.33 39.00 365.83 179.50 179.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -2427,5 +2427,5 @@ vzeroupper
# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - - - - 1.00 - - vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: - - 0.33 0.33 - 0.33 - - vzeroall
+# CHECK-NEXT: - - - - - 2.00 - - vzeroall
# CHECK-NEXT: - - 0.33 0.33 - 0.33 - - vzeroupper
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-avx1.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-avx1.s
index 0158e5322ff..28d6c67b676 100644
--- a/llvm/test/tools/llvm-mca/X86/Haswell/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/Haswell/resources-avx1.s
@@ -1719,7 +1719,7 @@ vzeroupper
# CHECK-NEXT: 2 7 1.00 * vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 1 1.00 vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: 2 8 1.00 * vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: 16 16 16.00 * * U vzeroall
+# CHECK-NEXT: 20 8 1.00 * * U vzeroall
# CHECK-NEXT: 4 4 1.00 * * U vzeroupper
# CHECK: Resources:
@@ -1736,7 +1736,7 @@ vzeroupper
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 336.00 215.67 237.67 176.17 176.17 38.00 445.67 2.00 12.67
+# CHECK-NEXT: - 336.00 215.67 237.67 176.17 176.17 38.00 430.67 3.00 12.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -2429,5 +2429,5 @@ vzeroupper
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - - - - - - 1.00 - - vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: - - - - - - - 16.00 - - vzeroall
+# CHECK-NEXT: - - - - - - - 1.00 1.00 - vzeroall
# CHECK-NEXT: - - 1.08 1.08 - - - 1.08 0.75 - vzeroupper
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
index 1620d8c8617..eadc1416ef3 100644
--- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
@@ -1719,7 +1719,7 @@ vzeroupper
# CHECK-NEXT: 2 7 1.00 * vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 1 1.00 vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: 2 8 1.00 * vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: 1 100 0.33 * * U vzeroall
+# CHECK-NEXT: 20 9 2.00 * * U vzeroall
# CHECK-NEXT: 1 100 0.33 * * U vzeroupper
# CHECK: Resources:
@@ -1734,7 +1734,7 @@ vzeroupper
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
-# CHECK-NEXT: - 572.00 247.17 317.67 39.00 364.17 179.50 179.50
+# CHECK-NEXT: - 572.00 246.83 317.33 39.00 365.83 179.50 179.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -2427,5 +2427,5 @@ vzeroupper
# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - - - - 1.00 - - vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: - - 0.33 0.33 - 0.33 - - vzeroall
+# CHECK-NEXT: - - - - - 2.00 - - vzeroall
# CHECK-NEXT: - - 0.33 0.33 - 0.33 - - vzeroupper
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-avx1.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-avx1.s
index 07c4064a807..5e3f4f01242 100644
--- a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-avx1.s
@@ -1719,7 +1719,7 @@ vzeroupper
# CHECK-NEXT: 2 7 0.50 * vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 1 0.33 vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: 2 8 0.50 * vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: 16 16 4.00 * * U vzeroall
+# CHECK-NEXT: 34 12 5.00 * * U vzeroall
# CHECK-NEXT: 4 4 1.00 * * U vzeroupper
# CHECK: Resources:
@@ -1736,7 +1736,7 @@ vzeroupper
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 123.00 320.50 200.50 173.17 173.17 34.00 341.00 6.00 12.67
+# CHECK-NEXT: - 123.00 318.50 197.50 173.17 173.17 34.00 339.00 7.00 12.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -2429,5 +2429,5 @@ vzeroupper
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 0.33 - - vxorps (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 0.33 - - vxorps %ymm0, %ymm1, %ymm2
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 0.33 - - vxorps (%rax), %ymm1, %ymm2
-# CHECK-NEXT: - - 4.00 4.00 - - - 4.00 4.00 - vzeroall
+# CHECK-NEXT: - - 2.00 1.00 - - - 2.00 5.00 - vzeroall
# CHECK-NEXT: - - 1.08 1.08 - - - 1.08 0.75 - vzeroupper
OpenPOWER on IntegriCloud