[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