[llvm] [AArch64] Improve scheduling info for WHILE instruction (PR #219122)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 26 22:54:05 PDT 2026
https://github.com/davemgreen updated https://github.com/llvm/llvm-project/pull/219122
>From 7989c7ec4f6c16677dce3fec8aae7557a367d58d Mon Sep 17 00:00:00 2001
From: David Green <david.green at arm.com>
Date: Thu, 27 Aug 2026 06:53:52 +0100
Subject: [PATCH] [AArch64] Improve scheduling info for WHILE instruction
They should have a throughput of 2, only using a single M microop.
---
.../AArch64/AArch64SchedNeoverseV3AE.td | 9 +--
.../AArch64/Neoverse/V3AE-sve-instructions.s | 74 +++++++++----------
2 files changed, 39 insertions(+), 44 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3AE.td b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3AE.td
index 29f8fa783467a..2dc0c89798ffd 100644
--- a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3AE.td
+++ b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV3AE.td
@@ -168,11 +168,6 @@ def V3AEWrite_1c_2M : SchedWriteRes<[V3AEUnitM, V3AEUnitM]> {
let NumMicroOps = 2;
}
-def V3AEWrite_3c_2M : SchedWriteRes<[V3AEUnitM, V3AEUnitM]> {
- let Latency = 3;
- let NumMicroOps = 2;
-}
-
def V3AEWrite_4c_2M : SchedWriteRes<[V3AEUnitM, V3AEUnitM]> {
let Latency = 4;
let NumMicroOps = 2;
@@ -1895,9 +1890,9 @@ def : InstRW<[V3AEWrite_2or3c_1M], (instrs BRKNS_PPzP, BRKPAS_PPzPP,
BRKPBS_PPzPP)>;
// Loop control, based on GPR
-def : InstRW<[V3AEWrite_3c_2M],
+def : InstRW<[V3AEWrite_2c_1M],
(instregex "^WHILE(GE|GT|HI|HS|LE|LO|LS|LT)_P(WW|XX)_[BHSD]")>;
-def : InstRW<[V3AEWrite_3c_2M], (instregex "^WHILE(RW|WR)_PXX_[BHSD]")>;
+def : InstRW<[V3AEWrite_2c_1M], (instregex "^WHILE(RW|WR)_PXX_[BHSD]")>;
// Loop terminate
def : InstRW<[V3AEWrite_1c_2M], (instregex "^CTERM(EQ|NE)_(WW|XX)")>;
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-sve-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-sve-instructions.s
index bed7fb4e6eafb..364d89fda4fa0 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-sve-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-sve-instructions.s
@@ -3368,24 +3368,24 @@
# CHECK-NEXT: 1 2 0.50 uzp2 z31.d, z31.d, z31.d
# CHECK-NEXT: 1 2 0.50 uzp2 z31.h, z31.h, z31.h
# CHECK-NEXT: 1 2 0.50 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.50 xar z0.b, z0.b, z1.b, #1
@@ -3456,7 +3456,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]
-# CHECK-NEXT: - - - - - - - - - 245.00 245.00 651.00 400.88 303.88 41.88 41.88 41.88 41.88 41.88 41.88 406.00 2380.50 1905.50
+# CHECK-NEXT: - - - - - - - - - 245.00 245.00 651.00 391.88 294.88 41.88 41.88 41.88 41.88 41.88 41.88 406.00 2380.50 1905.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] Instructions:
@@ -6818,24 +6818,24 @@
# CHECK-NEXT: - - - - - - - - - - - - - - - - - - - - - 0.50 0.50 uzp2 z31.d, z31.d, z31.d
# CHECK-NEXT: - - - - - - - - - - - - - - - - - - - - - 0.50 0.50 uzp2 z31.h, z31.h, z31.h
# CHECK-NEXT: - - - - - - - - - - - - - - - - - - - - - 0.50 0.50 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.50 0.50 xar z0.b, z0.b, z1.b, #1
More information about the llvm-commits
mailing list