[llvm] 07151f0 - [X86] SandyBridge DPPS folded instructions use an extra port5 resource
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 22 05:52:53 PDT 2023
Author: Simon Pilgrim
Date: 2023-09-22T13:52:20+01:00
New Revision: 07151f0241d3f893cb36eb2dbc395d4098f74a87
URL: https://github.com/llvm/llvm-project/commit/07151f0241d3f893cb36eb2dbc395d4098f74a87
DIFF: https://github.com/llvm/llvm-project/commit/07151f0241d3f893cb36eb2dbc395d4098f74a87.diff
LOG: [X86] SandyBridge DPPS folded instructions use an extra port5 resource
Noticed while trying to workout some discrepancies between a llvm-mca and uica analysis - confirmed with a llvm-exegesis capture (and matches uops.info numbers)
This appears to be the reason behind Issue #14640 as well (heavy use of port5).
Added:
Modified:
llvm/lib/Target/X86/X86SchedSandyBridge.td
llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
llvm/test/tools/llvm-mca/X86/Generic/resources-sse41.s
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td
index f0b98a64cfdda72..d39d88b9f2dc8ea 100644
--- a/llvm/lib/Target/X86/X86SchedSandyBridge.td
+++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td
@@ -294,9 +294,11 @@ defm : SBWriteResPair<WriteFSqrt64Y, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44
defm : SBWriteResPair<WriteFSqrt64Z, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>; // Unsupported = 1
defm : SBWriteResPair<WriteFSqrt80, [SBPort0,SBFPDivider], 24, [1,24], 1, 6>;
-defm : SBWriteResPair<WriteDPPD, [SBPort0,SBPort1,SBPort5], 9, [1,1,1], 3, 6>;
-defm : SBWriteResPair<WriteDPPS, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4, 6>;
-defm : SBWriteResPair<WriteDPPSY, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4, 7>;
+defm : SBWriteResPair<WriteDPPD, [SBPort0,SBPort1,SBPort5], 9, [1,1,1], 3, 6>;
+defm : X86WriteRes<WriteDPPS, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4>;
+defm : X86WriteRes<WriteDPPSY, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4>;
+defm : X86WriteRes<WriteDPPSLd, [SBPort0,SBPort1,SBPort5,SBPort23], 18, [1,2,2,1], 6>;
+defm : X86WriteRes<WriteDPPSYLd, [SBPort0,SBPort1,SBPort5,SBPort23], 19, [1,2,2,1], 6>;
defm : SBWriteResPair<WriteFSign, [SBPort5], 1>;
defm : SBWriteResPair<WriteFRnd, [SBPort1], 3, [1], 1, 6>;
defm : SBWriteResPair<WriteFRndY, [SBPort1], 3, [1], 1, 7>;
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 3cad666eee94676..045435e9774d6c7 100644
--- a/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
@@ -1189,9 +1189,9 @@ vzeroupper
# CHECK-NEXT: 3 9 1.00 vdppd $22, %xmm0, %xmm1, %xmm2
# CHECK-NEXT: 4 15 1.00 * vdppd $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: 4 12 2.00 vdpps $22, %xmm0, %xmm1, %xmm2
-# CHECK-NEXT: 5 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: 6 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: 4 12 2.00 vdpps $22, %ymm0, %ymm1, %ymm2
-# CHECK-NEXT: 5 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
+# CHECK-NEXT: 6 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
# CHECK-NEXT: 1 1 1.00 vextractf128 $1, %ymm0, %xmm2
# CHECK-NEXT: 1 1 1.00 * vextractf128 $1, %ymm0, (%rax)
# CHECK-NEXT: 2 3 1.00 vextractps $1, %xmm0, %ecx
@@ -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 246.50 317.00 39.00 365.50 179.50 179.50
+# CHECK-NEXT: - 572.00 246.50 317.00 39.00 367.50 179.50 179.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -1897,9 +1897,9 @@ vzeroupper
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - vdppd $22, %xmm0, %xmm1, %xmm2
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 vdppd $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %xmm0, %xmm1, %xmm2
-# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %ymm0, %ymm1, %ymm2
-# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
+# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
# CHECK-NEXT: - - - - - 1.00 - - vextractf128 $1, %ymm0, %xmm2
# CHECK-NEXT: - - - - 1.00 - 0.50 0.50 vextractf128 $1, %ymm0, (%rax)
# CHECK-NEXT: - - 1.00 - - 1.00 - - vextractps $1, %xmm0, %ecx
diff --git a/llvm/test/tools/llvm-mca/X86/Generic/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/Generic/resources-sse41.s
index 08c6ccfde8f42dc..a71df0af2e48969 100644
--- a/llvm/test/tools/llvm-mca/X86/Generic/resources-sse41.s
+++ b/llvm/test/tools/llvm-mca/X86/Generic/resources-sse41.s
@@ -166,7 +166,7 @@ roundss $1, (%rax), %xmm2
# CHECK-NEXT: 3 9 1.00 dppd $22, %xmm0, %xmm2
# CHECK-NEXT: 4 15 1.00 * dppd $22, (%rax), %xmm2
# CHECK-NEXT: 4 12 2.00 dpps $22, %xmm0, %xmm2
-# CHECK-NEXT: 5 18 2.00 * dpps $22, (%rax), %xmm2
+# CHECK-NEXT: 6 18 2.00 * dpps $22, (%rax), %xmm2
# CHECK-NEXT: 2 3 1.00 extractps $1, %xmm0, %ecx
# CHECK-NEXT: 3 5 1.00 * extractps $1, %xmm0, (%rax)
# CHECK-NEXT: 1 1 1.00 insertps $1, %xmm0, %xmm2
@@ -264,7 +264,7 @@ roundss $1, (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
-# CHECK-NEXT: - - 26.00 47.50 5.00 52.50 24.50 24.50
+# CHECK-NEXT: - - 26.00 47.50 5.00 53.50 24.50 24.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -279,7 +279,7 @@ roundss $1, (%rax), %xmm2
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - dppd $22, %xmm0, %xmm2
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 dppd $22, (%rax), %xmm2
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - dpps $22, %xmm0, %xmm2
-# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 dpps $22, (%rax), %xmm2
+# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 dpps $22, (%rax), %xmm2
# CHECK-NEXT: - - 1.00 - - 1.00 - - extractps $1, %xmm0, %ecx
# CHECK-NEXT: - - - - 1.00 1.00 0.50 0.50 extractps $1, %xmm0, (%rax)
# CHECK-NEXT: - - - - - 1.00 - - insertps $1, %xmm0, %xmm2
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 d5d7f9b7fc73b31..e22802cbdc9adc8 100644
--- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
@@ -1189,9 +1189,9 @@ vzeroupper
# CHECK-NEXT: 3 9 1.00 vdppd $22, %xmm0, %xmm1, %xmm2
# CHECK-NEXT: 4 15 1.00 * vdppd $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: 4 12 2.00 vdpps $22, %xmm0, %xmm1, %xmm2
-# CHECK-NEXT: 5 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: 6 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: 4 12 2.00 vdpps $22, %ymm0, %ymm1, %ymm2
-# CHECK-NEXT: 5 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
+# CHECK-NEXT: 6 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
# CHECK-NEXT: 1 1 1.00 vextractf128 $1, %ymm0, %xmm2
# CHECK-NEXT: 1 1 1.00 * vextractf128 $1, %ymm0, (%rax)
# CHECK-NEXT: 2 3 1.00 vextractps $1, %xmm0, %ecx
@@ -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 246.50 317.00 39.00 365.50 179.50 179.50
+# CHECK-NEXT: - 572.00 246.50 317.00 39.00 367.50 179.50 179.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -1897,9 +1897,9 @@ vzeroupper
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - vdppd $22, %xmm0, %xmm1, %xmm2
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 vdppd $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %xmm0, %xmm1, %xmm2
-# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %ymm0, %ymm1, %ymm2
-# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
+# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
# CHECK-NEXT: - - - - - 1.00 - - vextractf128 $1, %ymm0, %xmm2
# CHECK-NEXT: - - - - 1.00 - 0.50 0.50 vextractf128 $1, %ymm0, (%rax)
# CHECK-NEXT: - - 1.00 - - 1.00 - - vextractps $1, %xmm0, %ecx
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s
index fc23c7a0810801b..7086843746b6047 100644
--- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s
+++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s
@@ -166,7 +166,7 @@ roundss $1, (%rax), %xmm2
# CHECK-NEXT: 3 9 1.00 dppd $22, %xmm0, %xmm2
# CHECK-NEXT: 4 15 1.00 * dppd $22, (%rax), %xmm2
# CHECK-NEXT: 4 12 2.00 dpps $22, %xmm0, %xmm2
-# CHECK-NEXT: 5 18 2.00 * dpps $22, (%rax), %xmm2
+# CHECK-NEXT: 6 18 2.00 * dpps $22, (%rax), %xmm2
# CHECK-NEXT: 2 3 1.00 extractps $1, %xmm0, %ecx
# CHECK-NEXT: 3 5 1.00 * extractps $1, %xmm0, (%rax)
# CHECK-NEXT: 1 1 1.00 insertps $1, %xmm0, %xmm2
@@ -264,7 +264,7 @@ roundss $1, (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
-# CHECK-NEXT: - - 26.00 47.50 5.00 52.50 24.50 24.50
+# CHECK-NEXT: - - 26.00 47.50 5.00 53.50 24.50 24.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -279,7 +279,7 @@ roundss $1, (%rax), %xmm2
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - dppd $22, %xmm0, %xmm2
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 dppd $22, (%rax), %xmm2
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - dpps $22, %xmm0, %xmm2
-# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 dpps $22, (%rax), %xmm2
+# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 dpps $22, (%rax), %xmm2
# CHECK-NEXT: - - 1.00 - - 1.00 - - extractps $1, %xmm0, %ecx
# CHECK-NEXT: - - - - 1.00 1.00 0.50 0.50 extractps $1, %xmm0, (%rax)
# CHECK-NEXT: - - - - - 1.00 - - insertps $1, %xmm0, %xmm2
More information about the llvm-commits
mailing list