[llvm] [AArch64] Mark Armv8.4-a LDAPUR* instructions as mayLoad (PR #171142)

Cullen Rhodes via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 8 06:54:14 PST 2025


https://github.com/c-rhodes created https://github.com/llvm/llvm-project/pull/171142

Thanks to @cofibrant for spotting.

>From 597623cd7596a53ce420ba87c6b4a73107291e9c Mon Sep 17 00:00:00 2001
From: Cullen Rhodes <cullen.rhodes at arm.com>
Date: Mon, 8 Dec 2025 13:55:49 +0000
Subject: [PATCH] [AArch64] Mark Armv8.4-a LDAPUR* instructions as mayLoad

Thanks to @cofibrant for spotting.
---
 llvm/lib/Target/AArch64/AArch64InstrFormats.td         |  1 +
 .../AArch64/Neoverse/N2-rcpc-immo-instructions.s       | 10 +++++-----
 .../AArch64/Neoverse/N3-rcpc-immo-instructions.s       | 10 +++++-----
 .../AArch64/Neoverse/V1-rcpc-immo-instructions.s       | 10 +++++-----
 .../AArch64/Neoverse/V2-rcpc-immo-instructions.s       | 10 +++++-----
 .../AArch64/Neoverse/V3-rcpc-immo-instructions.s       | 10 +++++-----
 .../AArch64/Neoverse/V3AE-rcpc-immo-instructions.s     | 10 +++++-----
 7 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64InstrFormats.td b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
index 4d2e740779961..6017f5b1abea0 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrFormats.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
@@ -4384,6 +4384,7 @@ class BaseLoadStoreUnscale<bits<2> sz, bit V, bits<2> opc, dag oops, dag iops,
 // Armv8.4 LDAPR & STLR with Immediate Offset instruction
 multiclass BaseLoadUnscaleV84<string asm, bits<2> sz, bits<2> opc,
                               DAGOperand regtype > {
+  let mayLoad = 1 in
   def i : BaseLoadStoreUnscale<sz, 0, opc, (outs regtype:$Rt),
                                (ins GPR64sp:$Rn, simm9:$offset), asm, []>,
           Sched<[WriteST]> {
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/N2-rcpc-immo-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/N2-rcpc-immo-instructions.s
index cd3d7e0bf1b57..fac107ddc5326 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/N2-rcpc-immo-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/N2-rcpc-immo-instructions.s
@@ -14,11 +14,11 @@
 # CHECK-NEXT:  2      1     0.50    *                   ldapur	x20, [x13]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurb	w13, [x17]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurh	w3, [x22]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	w7, [x8]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	x29, [x7]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	w17, [x19]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	x3, [x3]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursw	x3, [x18]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	w7, [x8]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	x29, [x7]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	w17, [x19]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	x3, [x3]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursw	x3, [x18]
 # CHECK-NEXT:  2      1     0.50           *            stlur	w3, [x27]
 # CHECK-NEXT:  2      1     0.50           *            stlur	x23, [x25]
 # CHECK-NEXT:  2      1     0.50           *            stlurb	w30, [x17]
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/N3-rcpc-immo-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/N3-rcpc-immo-instructions.s
index 6faa5e1f4db1b..3442dd4eaff67 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/N3-rcpc-immo-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/N3-rcpc-immo-instructions.s
@@ -14,11 +14,11 @@
 # CHECK-NEXT:  2      1     0.50    *                   ldapur	x20, [x13]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurb	w13, [x17]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurh	w3, [x22]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	w7, [x8]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	x29, [x7]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	w17, [x19]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	x3, [x3]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursw	x3, [x18]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	w7, [x8]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	x29, [x7]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	w17, [x19]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	x3, [x3]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursw	x3, [x18]
 # CHECK-NEXT:  2      1     0.50           *            stlur	w3, [x27]
 # CHECK-NEXT:  2      1     0.50           *            stlur	x23, [x25]
 # CHECK-NEXT:  2      1     0.50           *            stlurb	w30, [x17]
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-rcpc-immo-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-rcpc-immo-instructions.s
index 5c9b43a0e5121..76380b499c907 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-rcpc-immo-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-rcpc-immo-instructions.s
@@ -14,11 +14,11 @@
 # CHECK-NEXT:  2      1     0.50    *                   ldapur	x20, [x13]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurb	w13, [x17]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurh	w3, [x22]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	w7, [x8]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	x29, [x7]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	w17, [x19]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	x3, [x3]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursw	x3, [x18]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	w7, [x8]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	x29, [x7]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	w17, [x19]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	x3, [x3]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursw	x3, [x18]
 # CHECK-NEXT:  2      1     0.50           *            stlur	w3, [x27]
 # CHECK-NEXT:  2      1     0.50           *            stlur	x23, [x25]
 # CHECK-NEXT:  2      1     0.50           *            stlurb	w30, [x17]
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V2-rcpc-immo-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V2-rcpc-immo-instructions.s
index 71fd689522215..a099fb965a7a0 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V2-rcpc-immo-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V2-rcpc-immo-instructions.s
@@ -14,11 +14,11 @@
 # CHECK-NEXT:  2      1     0.50    *                   ldapur	x20, [x13]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurb	w13, [x17]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurh	w3, [x22]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	w7, [x8]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	x29, [x7]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	w17, [x19]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	x3, [x3]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursw	x3, [x18]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	w7, [x8]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	x29, [x7]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	w17, [x19]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	x3, [x3]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursw	x3, [x18]
 # CHECK-NEXT:  2      1     0.50           *            stlur	w3, [x27]
 # CHECK-NEXT:  2      1     0.50           *            stlur	x23, [x25]
 # CHECK-NEXT:  2      1     0.50           *            stlurb	w30, [x17]
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-rcpc-immo-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-rcpc-immo-instructions.s
index a48978ce8b94d..78542b8b93702 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-rcpc-immo-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3-rcpc-immo-instructions.s
@@ -14,11 +14,11 @@
 # CHECK-NEXT:  2      1     0.50    *                   ldapur	x20, [x13]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurb	w13, [x17]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurh	w3, [x22]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	w7, [x8]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	x29, [x7]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	w17, [x19]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	x3, [x3]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursw	x3, [x18]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	w7, [x8]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	x29, [x7]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	w17, [x19]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	x3, [x3]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursw	x3, [x18]
 # CHECK-NEXT:  2      1     0.50           *            stlur	w3, [x27]
 # CHECK-NEXT:  2      1     0.50           *            stlur	x23, [x25]
 # CHECK-NEXT:  2      1     0.50           *            stlurb	w30, [x17]
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-rcpc-immo-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-rcpc-immo-instructions.s
index f801a18bc7a06..1021f80306adb 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-rcpc-immo-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V3AE-rcpc-immo-instructions.s
@@ -14,11 +14,11 @@
 # CHECK-NEXT:  2      1     0.50    *                   ldapur	x20, [x13]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurb	w13, [x17]
 # CHECK-NEXT:  2      1     0.50    *                   ldapurh	w3, [x22]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	w7, [x8]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursb	x29, [x7]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	w17, [x19]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursh	x3, [x3]
-# CHECK-NEXT:  2      1     0.50                  U     ldapursw	x3, [x18]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	w7, [x8]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursb	x29, [x7]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	w17, [x19]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursh	x3, [x3]
+# CHECK-NEXT:  2      1     0.50    *             U     ldapursw	x3, [x18]
 # CHECK-NEXT:  2      1     0.50           *            stlur	w3, [x27]
 # CHECK-NEXT:  2      1     0.50           *            stlur	x23, [x25]
 # CHECK-NEXT:  2      1     0.50           *            stlurb	w30, [x17]



More information about the llvm-commits mailing list