[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