[llvm] [AArch64] Improve scheduling info for WHILE instruction (PR #221930)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 8 02:09:36 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-aarch64
Author: David Green (davemgreen)
<details>
<summary>Changes</summary>
They should have a throughput of 2, only using a single M microop.
This is the V3 equivalent of #<!-- -->219122.
---
Full diff: https://github.com/llvm/llvm-project/pull/221930.diff
2 Files Affected:
- (modified) llvm/lib/Target/AArch64/AArch64SchedNeoverseV3.td (+2-7)
- (modified) llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-sve-instructions.s (+37-37)
``````````diff
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
``````````
</details>
https://github.com/llvm/llvm-project/pull/221930
More information about the llvm-commits
mailing list