[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