[llvm] [AArch64] Improve scheduling info for WHILE instruction (PR #221930)

David Green via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 8 02:08:58 PDT 2026


https://github.com/davemgreen created https://github.com/llvm/llvm-project/pull/221930

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

This is the V3 equivalent of #219122.

>From 467b4603b354367b2a3920e3e7976cdf736dedea Mon Sep 17 00:00:00 2001
From: David Green <david.green at arm.com>
Date: Tue, 8 Sep 2026 10:07:44 +0100
Subject: [PATCH] [AArch64] Improve scheduling info for WHILE instruction

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

This is the V3 equivalent of #219122.
---
 .../Target/AArch64/AArch64SchedNeoverseV3.td  |  9 +--
 .../AArch64/Neoverse/V3-sve-instructions.s    | 74 +++++++++----------
 2 files changed, 39 insertions(+), 44 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td
index aa24d30b5b33d..1e165e8d33ea3 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;
@@ -1967,9 +1962,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