[llvm] d0e87f9 - [X86] Fix Sandy Bridge's WriteLDMXCSR (#203585)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 13 11:05:40 PDT 2026
Author: mike-goutokuji
Date: 2026-06-13T11:05:35-07:00
New Revision: d0e87f95a6fd6b5aa9e46c5ef86f1e6080c04742
URL: https://github.com/llvm/llvm-project/commit/d0e87f95a6fd6b5aa9e46c5ef86f1e6080c04742
DIFF: https://github.com/llvm/llvm-project/commit/d0e87f95a6fd6b5aa9e46c5ef86f1e6080c04742.diff
LOG: [X86] Fix Sandy Bridge's WriteLDMXCSR (#203585)
Using information from uops.info, I corrected some numbers.
Added:
Modified:
llvm/lib/Target/X86/X86SchedSandyBridge.td
llvm/test/tools/llvm-mca/X86/Barcelona/resources-sse1.s
llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
llvm/test/tools/llvm-mca/X86/Generic/resources-sse1.s
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td
index 560a2b12cc221..7b3dad96c535c 100644
--- a/llvm/lib/Target/X86/X86SchedSandyBridge.td
+++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td
@@ -582,8 +582,7 @@ def : WriteRes<WriteCLMulLd, [SBPort015, SBPort23]> {
}
// Load/store MXCSR.
-// FIXME: This is probably wrong. Only STMXCSR should require Port4.
-def : WriteRes<WriteLDMXCSR, [SBPort0,SBPort4,SBPort5,SBPort23]> { let Latency = 5; let NumMicroOps = 4; let ReleaseAtCycles = [1,1,1,1]; }
+def : WriteRes<WriteLDMXCSR, [SBPort0,SBPort5,SBPort23]> { let Latency = 5; let NumMicroOps = 3; let ReleaseAtCycles = [1,1,1]; }
def : WriteRes<WriteSTMXCSR, [SBPort0,SBPort4,SBPort5,SBPort23]> { let Latency = 5; let NumMicroOps = 4; let ReleaseAtCycles = [1,1,1,1]; }
def : WriteRes<WriteSystem, [SBPort015]> { let Latency = 100; }
diff --git a/llvm/test/tools/llvm-mca/X86/Barcelona/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/Barcelona/resources-sse1.s
index 344a0d28e11d6..37afb1d8c199a 100644
--- a/llvm/test/tools/llvm-mca/X86/Barcelona/resources-sse1.s
+++ b/llvm/test/tools/llvm-mca/X86/Barcelona/resources-sse1.s
@@ -230,7 +230,7 @@ xorps (%rax), %xmm2
# CHECK-NEXT: 2 20 14.00 * divps (%rax), %xmm2
# CHECK-NEXT: 1 14 14.00 divss %xmm0, %xmm2
# CHECK-NEXT: 2 20 14.00 * divss (%rax), %xmm2
-# CHECK-NEXT: 4 5 1.00 * * U ldmxcsr (%rax)
+# CHECK-NEXT: 3 5 1.00 * * U ldmxcsr (%rax)
# CHECK-NEXT: 1 1 1.00 * * U maskmovq %mm0, %mm1
# CHECK-NEXT: 1 3 1.00 maxps %xmm0, %xmm2
# CHECK-NEXT: 2 9 1.00 * maxps (%rax), %xmm2
@@ -331,7 +331,7 @@ xorps (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
-# CHECK-NEXT: - 112.00 41.00 55.50 10.00 34.50 33.50 33.50
+# CHECK-NEXT: - 112.00 41.00 55.50 9.00 34.50 33.50 33.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -371,7 +371,7 @@ xorps (%rax), %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - 0.50 0.50 divps (%rax), %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - - - divss %xmm0, %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - 0.50 0.50 divss (%rax), %xmm2
-# CHECK-NEXT: - - 1.00 - 1.00 1.00 0.50 0.50 ldmxcsr (%rax)
+# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 ldmxcsr (%rax)
# CHECK-NEXT: - - - - - 1.00 - - maskmovq %mm0, %mm1
# CHECK-NEXT: - - - 1.00 - - - - maxps %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 maxps (%rax), %xmm2
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 7f07fd56fe60d..1bb6097f052ab 100644
--- a/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s
@@ -1218,7 +1218,7 @@ vzeroupper
# CHECK-NEXT: 2 7 1.00 * vinsertps $1, (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 6 0.50 * vlddqu (%rax), %xmm2
# CHECK-NEXT: 1 7 0.50 * vlddqu (%rax), %ymm2
-# CHECK-NEXT: 4 5 1.00 * * U vldmxcsr (%rax)
+# CHECK-NEXT: 3 5 1.00 * * U vldmxcsr (%rax)
# CHECK-NEXT: 1 1 1.00 * * U vmaskmovdqu %xmm0, %xmm1
# CHECK-NEXT: 3 8 1.00 * vmaskmovpd (%rax), %xmm0, %xmm2
# CHECK-NEXT: 3 9 1.00 * vmaskmovpd (%rax), %ymm0, %ymm2
@@ -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 248.50 319.00 39.00 371.50 179.50 179.50
+# CHECK-NEXT: - 572.00 248.50 319.00 38.00 371.50 179.50 179.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -1926,7 +1926,7 @@ vzeroupper
# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vinsertps $1, (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - - - - - 0.50 0.50 vlddqu (%rax), %xmm2
# CHECK-NEXT: - - - - - - 0.50 0.50 vlddqu (%rax), %ymm2
-# CHECK-NEXT: - - 1.00 - 1.00 1.00 0.50 0.50 vldmxcsr (%rax)
+# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 vldmxcsr (%rax)
# CHECK-NEXT: - - - - 1.00 - 0.50 0.50 vmaskmovdqu %xmm0, %xmm1
# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 vmaskmovpd (%rax), %xmm0, %xmm2
# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 vmaskmovpd (%rax), %ymm0, %ymm2
diff --git a/llvm/test/tools/llvm-mca/X86/Generic/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/Generic/resources-sse1.s
index 344a0d28e11d6..37afb1d8c199a 100644
--- a/llvm/test/tools/llvm-mca/X86/Generic/resources-sse1.s
+++ b/llvm/test/tools/llvm-mca/X86/Generic/resources-sse1.s
@@ -230,7 +230,7 @@ xorps (%rax), %xmm2
# CHECK-NEXT: 2 20 14.00 * divps (%rax), %xmm2
# CHECK-NEXT: 1 14 14.00 divss %xmm0, %xmm2
# CHECK-NEXT: 2 20 14.00 * divss (%rax), %xmm2
-# CHECK-NEXT: 4 5 1.00 * * U ldmxcsr (%rax)
+# CHECK-NEXT: 3 5 1.00 * * U ldmxcsr (%rax)
# CHECK-NEXT: 1 1 1.00 * * U maskmovq %mm0, %mm1
# CHECK-NEXT: 1 3 1.00 maxps %xmm0, %xmm2
# CHECK-NEXT: 2 9 1.00 * maxps (%rax), %xmm2
@@ -331,7 +331,7 @@ xorps (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
-# CHECK-NEXT: - 112.00 41.00 55.50 10.00 34.50 33.50 33.50
+# CHECK-NEXT: - 112.00 41.00 55.50 9.00 34.50 33.50 33.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -371,7 +371,7 @@ xorps (%rax), %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - 0.50 0.50 divps (%rax), %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - - - divss %xmm0, %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - 0.50 0.50 divss (%rax), %xmm2
-# CHECK-NEXT: - - 1.00 - 1.00 1.00 0.50 0.50 ldmxcsr (%rax)
+# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 ldmxcsr (%rax)
# CHECK-NEXT: - - - - - 1.00 - - maskmovq %mm0, %mm1
# CHECK-NEXT: - - - 1.00 - - - - maxps %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 maxps (%rax), %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 781676d70763c..347b6647604d1 100644
--- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
+++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
@@ -1218,7 +1218,7 @@ vzeroupper
# CHECK-NEXT: 2 7 1.00 * vinsertps $1, (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 6 0.50 * vlddqu (%rax), %xmm2
# CHECK-NEXT: 1 7 0.50 * vlddqu (%rax), %ymm2
-# CHECK-NEXT: 4 5 1.00 * * U vldmxcsr (%rax)
+# CHECK-NEXT: 3 5 1.00 * * U vldmxcsr (%rax)
# CHECK-NEXT: 1 1 1.00 * * U vmaskmovdqu %xmm0, %xmm1
# CHECK-NEXT: 3 8 1.00 * vmaskmovpd (%rax), %xmm0, %xmm2
# CHECK-NEXT: 3 9 1.00 * vmaskmovpd (%rax), %ymm0, %ymm2
@@ -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 248.50 319.00 39.00 371.50 179.50 179.50
+# CHECK-NEXT: - 572.00 248.50 319.00 38.00 371.50 179.50 179.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -1926,7 +1926,7 @@ vzeroupper
# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vinsertps $1, (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - - - - - 0.50 0.50 vlddqu (%rax), %xmm2
# CHECK-NEXT: - - - - - - 0.50 0.50 vlddqu (%rax), %ymm2
-# CHECK-NEXT: - - 1.00 - 1.00 1.00 0.50 0.50 vldmxcsr (%rax)
+# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 vldmxcsr (%rax)
# CHECK-NEXT: - - - - 1.00 - 0.50 0.50 vmaskmovdqu %xmm0, %xmm1
# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 vmaskmovpd (%rax), %xmm0, %xmm2
# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 vmaskmovpd (%rax), %ymm0, %ymm2
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s
index 02bfa445e5884..2fbe93039c2ee 100644
--- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s
+++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s
@@ -230,7 +230,7 @@ xorps (%rax), %xmm2
# CHECK-NEXT: 2 20 14.00 * divps (%rax), %xmm2
# CHECK-NEXT: 1 14 14.00 divss %xmm0, %xmm2
# CHECK-NEXT: 2 20 14.00 * divss (%rax), %xmm2
-# CHECK-NEXT: 4 5 1.00 * * U ldmxcsr (%rax)
+# CHECK-NEXT: 3 5 1.00 * * U ldmxcsr (%rax)
# CHECK-NEXT: 1 1 1.00 * * U maskmovq %mm0, %mm1
# CHECK-NEXT: 1 3 1.00 maxps %xmm0, %xmm2
# CHECK-NEXT: 2 9 1.00 * maxps (%rax), %xmm2
@@ -331,7 +331,7 @@ xorps (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
-# CHECK-NEXT: - 112.00 41.00 55.50 10.00 34.50 33.50 33.50
+# CHECK-NEXT: - 112.00 41.00 55.50 9.00 34.50 33.50 33.50
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -371,7 +371,7 @@ xorps (%rax), %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - 0.50 0.50 divps (%rax), %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - - - divss %xmm0, %xmm2
# CHECK-NEXT: - 14.00 1.00 - - - 0.50 0.50 divss (%rax), %xmm2
-# CHECK-NEXT: - - 1.00 - 1.00 1.00 0.50 0.50 ldmxcsr (%rax)
+# CHECK-NEXT: - - 1.00 - - 1.00 0.50 0.50 ldmxcsr (%rax)
# CHECK-NEXT: - - - - - 1.00 - - maskmovq %mm0, %mm1
# CHECK-NEXT: - - - 1.00 - - - - maxps %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 maxps (%rax), %xmm2
More information about the llvm-commits
mailing list