[llvm] 2061c23 - [AArch64] Improve scheduling info for WHILE instruction (#221930)

via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 9 05:27:33 PDT 2026


Author: David Green
Date: 2026-09-09T13:27:28+01:00
New Revision: 2061c23717d5cc14215b41e4fbde578375150c79

URL: https://github.com/llvm/llvm-project/commit/2061c23717d5cc14215b41e4fbde578375150c79
DIFF: https://github.com/llvm/llvm-project/commit/2061c23717d5cc14215b41e4fbde578375150c79.diff

LOG: [AArch64] Improve scheduling info for WHILE instruction (#221930)

They should have a throughput of 2, only using a single M microop.

This is the V3 equivalent of #219122.

Added: 
    

Modified: 
    llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td
    llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-sve-instructions.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td
index 194cd5a0ce60c..4fbaba8aa6c73 100644
--- a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td
+++ b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td
@@ -180,11 +180,6 @@ def V3Write_1c_2M : SchedWriteRes<[V3UnitM, V3UnitM]> {
   let NumMicroOps = 2;
 }
 
-def V3Write_3c_2M : SchedWriteRes<[V3UnitM, V3UnitM]> {
-  let Latency     = 3;
-  let NumMicroOps = 2;
-}
-
 def V3Write_4c_2M : SchedWriteRes<[V3UnitM, V3UnitM]> {
   let Latency     = 4;
   let NumMicroOps = 2;
@@ -1968,9 +1963,9 @@ def : InstRW<[V3Write_2or3c_1M], (instrs BRKNS_PPzP, BRKPAS_PPzPP,
                                          BRKPBS_PPzPP)>;
 
 // Loop control, based on GPR
-def : InstRW<[V3Write_3c_2M],
+def : InstRW<[V3Write_2c_1M],
              (instregex "^WHILE(GE|GT|HI|HS|LE|LO|LS|LT)_P(WW|XX)_[BHSD]")>;
-def : InstRW<[V3Write_3c_2M], (instregex "^WHILE(RW|WR)_PXX_[BHSD]")>;
+def : InstRW<[V3Write_2c_1M], (instregex "^WHILE(RW|WR)_PXX_[BHSD]")>;
 
 // Loop terminate
 def : InstRW<[V3Write_1c_2M], (instregex "^CTERM(EQ|NE)_(WW|XX)")>;

diff  --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-sve-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-sve-instructions.s
index c7b00303189d0..7a797de1d5b06 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-sve-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-sve-instructions.s
@@ -3369,24 +3369,24 @@
 # CHECK-NEXT:  1      2     0.25                        uzp2	z31.d, z31.d, z31.d
 # CHECK-NEXT:  1      2     0.25                        uzp2	z31.h, z31.h, z31.h
 # CHECK-NEXT:  1      2     0.25                        uzp2	z31.s, z31.s, z31.s
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.b, w0, wzr
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.b, wzr, w0
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.b, x0, xzr
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.b, xzr, x0
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.d, w0, wzr
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.d, x0, xzr
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.h, w0, wzr
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.h, x0, xzr
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.s, w0, wzr
-# CHECK-NEXT:  2      3     1.00                        whilege	p15.s, x0, xzr
-# CHECK-NEXT:  2      3     1.00                        whilerw	p15.b, x30, x30
-# CHECK-NEXT:  2      3     1.00                        whilerw	p15.d, x30, x30
-# CHECK-NEXT:  2      3     1.00                        whilerw	p15.h, x30, x30
-# CHECK-NEXT:  2      3     1.00                        whilerw	p15.s, x30, x30
-# CHECK-NEXT:  2      3     1.00                        whilewr	p15.b, x30, x30
-# CHECK-NEXT:  2      3     1.00                        whilewr	p15.d, x30, x30
-# CHECK-NEXT:  2      3     1.00                        whilewr	p15.h, x30, x30
-# CHECK-NEXT:  2      3     1.00                        whilewr	p15.s, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.b, w0, wzr
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.b, wzr, w0
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.b, x0, xzr
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.b, xzr, x0
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.d, w0, wzr
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.d, x0, xzr
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.h, w0, wzr
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.h, x0, xzr
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.s, w0, wzr
+# CHECK-NEXT:  1      2     0.50                        whilege	p15.s, x0, xzr
+# CHECK-NEXT:  1      2     0.50                        whilerw	p15.b, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilerw	p15.d, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilerw	p15.h, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilerw	p15.s, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilewr	p15.b, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilewr	p15.d, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilewr	p15.h, x30, x30
+# CHECK-NEXT:  1      2     0.50                        whilewr	p15.s, x30, x30
 # CHECK-NEXT:  1      2     1.00           *      U     wrffr	p0.b
 # CHECK-NEXT:  1      2     1.00           *      U     wrffr	p15.b
 # CHECK-NEXT:  1      2     0.25                        xar	z0.b, z0.b, z1.b, #1
@@ -3459,7 +3459,7 @@
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0.0]  [0.1]  [0.2]  [1.0]  [1.1]  [2.0]  [2.1]  [2.2]  [2.3]  [3.0]  [3.1]  [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   [13]   [14]   [15]   [16]   [17]
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     245.00 245.00 696.50 401.88 303.88 41.88  41.88  41.88  41.88  41.88  41.88  451.50 1610.00 1268.50 817.00 681.50
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     245.00 245.00 696.50 392.88 294.88 41.88  41.88  41.88  41.88  41.88  41.88  451.50 1610.00 1268.50 817.00 681.50
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0.0]  [0.1]  [0.2]  [1.0]  [1.1]  [2.0]  [2.1]  [2.2]  [2.3]  [3.0]  [3.1]  [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   [13]   [14]   [15]   [16]   [17]   Instructions:
@@ -6822,24 +6822,24 @@
 # CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     0.25   0.25   0.25   0.25   uzp2	z31.d, z31.d, z31.d
 # CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     0.25   0.25   0.25   0.25   uzp2	z31.h, z31.h, z31.h
 # CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     0.25   0.25   0.25   0.25   uzp2	z31.s, z31.s, z31.s
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, w0, wzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, wzr, w0
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, x0, xzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, xzr, x0
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.d, w0, wzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.d, x0, xzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.h, w0, wzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.h, x0, xzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.s, w0, wzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.s, x0, xzr
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.b, x30, x30
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.d, x30, x30
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.h, x30, x30
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.s, x30, x30
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.b, x30, x30
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.d, x30, x30
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.h, x30, x30
-# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00   1.00    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.s, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, w0, wzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, wzr, w0
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, x0, xzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.b, xzr, x0
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.d, w0, wzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.d, x0, xzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.h, w0, wzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.h, x0, xzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.s, w0, wzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilege	p15.s, x0, xzr
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.b, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.d, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.h, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilerw	p15.s, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.b, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.d, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.h, x30, x30
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -     whilewr	p15.s, x30, x30
 # CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00    -      -      -      -      -      -      -      -      -      -      -      -     wrffr	p0.b
 # CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     1.00    -      -      -      -      -      -      -      -      -      -      -      -     wrffr	p15.b
 # CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     0.25   0.25   0.25   0.25   xar	z0.b, z0.b, z1.b, #1


        


More information about the llvm-commits mailing list