[llvm] [AArch64][NeoverseV1] Load pair immed offset LDPXi, LDNPXi, LDPX<pre|… (PR #221718)

Julien Villette via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 11 12:46:26 PDT 2026


https://github.com/jvillette38 updated https://github.com/llvm/llvm-project/pull/221718

>From 5d40e30f5c0f90f4423e02d84772e1ff2aec700a Mon Sep 17 00:00:00 2001
From: Julien Villette <julien.villette at sipearl.com>
Date: Tue, 1 Sep 2026 15:04:57 +0200
Subject: [PATCH 1/2] [AArch64][NeoverseV1] Load pair immed offset LDPXi,
 LDNPXi, LDPX<pre|post>, LDPSWi, LDPSW<pre|post>

Verified with dedicated micro benchmarks on Neoverse V1 hardware.

Instruction		      | uop/Latency/RThroughput
--------------------------------------------------------
ldp (X-form, offset)	      |	3/4/1.00
ldpsw (offset)		      | 3/5/0.50
ldp (X-form, pre-post)        | 4/4/1.00
ldpsw (pre-post)	      | 4/5/0.75

ld[n]p X form has the same throughput as 3 ldr X on Neoverse V1, so
consider L[3] resources for these instructions: throughput 3/3.
ld[n]p X form post pre index: L[3] + I[1]: throughput 3/3.
ldpsw has approximatively the throughput of ld[n]p w-form (L[1]) + 2 sxtw (I[2]): throughput 4/2
ldpsw (post/pre index): add on I uop: L[1] + I[3]: throughput 4/3
---
 .../Target/AArch64/AArch64SchedNeoverseV1.td  | 13 ++-
 .../AArch64/Neoverse/V1-basic-instructions.s  | 86 +++++++++----------
 .../llvm-mca/AArch64/Neoverse/V1-writeback.s  | 24 +++---
 3 files changed, 64 insertions(+), 59 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td
index b8bab7ece3a2b..6a88b586bbd75 100644
--- a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td
+++ b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td
@@ -172,8 +172,6 @@ let Latency = 6, NumMicroOps = 2 in
 def V1Write_6c_1B_1M0    : SchedWriteRes<[V1UnitB, V1UnitM0]>;
 let Latency = 3, NumMicroOps = 2 in
 def V1Write_3c_1I_1M     : SchedWriteRes<[V1UnitI, V1UnitM]>;
-let Latency = 5, NumMicroOps = 2 in
-def V1Write_5c_1I_1L     : SchedWriteRes<[V1UnitI, V1UnitL]>;
 let Latency = 7, NumMicroOps = 2 in
 def V1Write_7c_1I_1L     : SchedWriteRes<[V1UnitI, V1UnitL]>;
 let Latency = 6, NumMicroOps = 2 in
@@ -250,8 +248,12 @@ let Latency = 7, NumMicroOps = 3 in
 def V1Write_7c_2M0_1V01     : SchedWriteRes<[V1UnitM0, V1UnitM0, V1UnitV01]>;
 let Latency = 8, NumMicroOps = 3 in
 def V1Write_8c_1L_2V        : SchedWriteRes<[V1UnitL, V1UnitV, V1UnitV]>;
+let Latency = 4, NumMicroOps = 3 in
+def V1Write_4c_3L        : SchedWriteRes<[V1UnitL, V1UnitL, V1UnitL]>;
 let Latency = 6, NumMicroOps = 3 in
 def V1Write_6c_3L           : SchedWriteRes<[V1UnitL, V1UnitL, V1UnitL]>;
+let Latency = 5, NumMicroOps = 3 in
+def V1Write_5c_2I_1L     : SchedWriteRes<[V1UnitI, V1UnitI, V1UnitL]>;
 let Latency = 2, NumMicroOps = 3 in
 def V1Write_2c_1L01_1S_1V   : SchedWriteRes<[V1UnitL01, V1UnitS, V1UnitV]>;
 let Latency = 4, NumMicroOps = 3 in
@@ -725,14 +727,17 @@ def : SchedAlias<WriteAdr,   V1Write_1c_1I>;
 // Load pair, immed offset
 def : SchedAlias<WriteLDHi, V1Write_4c_1L>;
 def : InstRW<[V1Write_4c_1L, V1Write_0c_0Z], (instrs LDPWi, LDNPWi)>;
+def : InstRW<[V1Write_4c_3L, V1Write_0c_0Z], (instrs LDPXi, LDNPXi)>;
 def : InstRW<[WriteAdr, V1Write_4c_1L, V1Write_0c_0Z],
              (instrs LDPWpost, LDPWpre)>;
+def : InstRW<[WriteAdr, V1Write_4c_3L, V1Write_0c_0Z],
+             (instrs LDPXpost, LDPXpre)>;
 
 // Load pair, signed immed offset, signed words
-def : InstRW<[V1Write_5c_1I_1L, V1Write_0c_0Z], (instrs LDPSWi)>;
+def : InstRW<[V1Write_5c_2I_1L, V1Write_0c_0Z], (instrs LDPSWi)>;
 
 // Load pair, immed post or pre-index, signed words
-def : InstRW<[WriteAdr, V1Write_5c_1I_1L, V1Write_0c_0Z],
+def : InstRW<[WriteAdr, V1Write_5c_2I_1L, V1Write_0c_0Z],
              (instrs LDPSWpost, LDPSWpre)>;
 
 
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s
index da6a36c654ee8..49c4d529ed9b9 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s
@@ -1107,12 +1107,12 @@
 # CHECK-NEXT:  2      1     0.50           *            stp	wzr, w9, [sp, #252]
 # CHECK-NEXT:  1      4     0.33    *                   ldp	w2, wzr, [sp, #-256]
 # CHECK-NEXT:  1      4     0.33    *                   ldp	w9, w10, [sp, #4]
-# CHECK-NEXT:  2      5     0.33    *                   ldpsw	x9, x10, [sp, #4]
-# CHECK-NEXT:  2      5     0.33    *                   ldpsw	x9, x10, [x2, #-256]
-# CHECK-NEXT:  2      5     0.33    *                   ldpsw	x20, x30, [sp, #252]
-# CHECK-NEXT:  2      4     0.67    *                   ldp	x21, x29, [x2, #504]
-# CHECK-NEXT:  2      4     0.67    *                   ldp	x22, x23, [x3, #-512]
-# CHECK-NEXT:  2      4     0.67    *                   ldp	x24, x25, [x4, #8]
+# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [sp, #4]
+# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [x2, #-256]
+# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x20, x30, [sp, #252]
+# CHECK-NEXT:  3      4     1.00    *                   ldp	x21, x29, [x2, #504]
+# CHECK-NEXT:  3      4     1.00    *                   ldp	x22, x23, [x3, #-512]
+# CHECK-NEXT:  3      4     1.00    *                   ldp	x24, x25, [x4, #8]
 # CHECK-NEXT:  1      6     0.33    *                   ldp	s29, s28, [sp, #252]
 # CHECK-NEXT:  2      2     0.50           *            stp	s27, s26, [sp, #-256]
 # CHECK-NEXT:  1      6     0.33    *                   ldp	s1, s2, [x3, #44]
@@ -1128,12 +1128,12 @@
 # CHECK-NEXT:  3      1     0.50           *            stp	wzr, w9, [sp], #252
 # CHECK-NEXT:  2      4     0.33    *                   ldp	w2, wzr, [sp], #-256
 # CHECK-NEXT:  2      4     0.33    *                   ldp	w9, w10, [sp], #4
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [sp], #4
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [x2], #-256
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x20, x30, [sp], #252
-# CHECK-NEXT:  3      4     0.67    *                   ldp	x21, x29, [x2], #504
-# CHECK-NEXT:  3      4     0.67    *                   ldp	x22, x23, [x3], #-512
-# CHECK-NEXT:  3      4     0.67    *                   ldp	x24, x25, [x4], #8
+# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [sp], #4
+# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [x2], #-256
+# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x20, x30, [sp], #252
+# CHECK-NEXT:  4      4     1.00    *                   ldp	x21, x29, [x2], #504
+# CHECK-NEXT:  4      4     1.00    *                   ldp	x22, x23, [x3], #-512
+# CHECK-NEXT:  4      4     1.00    *                   ldp	x24, x25, [x4], #8
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s29, s28, [sp], #252
 # CHECK-NEXT:  3      2     0.50           *            stp	s27, s26, [sp], #-256
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s1, s2, [x3], #44
@@ -1147,12 +1147,12 @@
 # CHECK-NEXT:  3      1     0.50           *            stp	wzr, w9, [sp, #252]!
 # CHECK-NEXT:  2      4     0.33    *                   ldp	w2, wzr, [sp, #-256]!
 # CHECK-NEXT:  2      4     0.33    *                   ldp	w9, w10, [sp, #4]!
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [sp, #4]!
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [x2, #-256]!
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x20, x30, [sp, #252]!
-# CHECK-NEXT:  3      4     0.67    *                   ldp	x21, x29, [x2, #504]!
-# CHECK-NEXT:  3      4     0.67    *                   ldp	x22, x23, [x3, #-512]!
-# CHECK-NEXT:  3      4     0.67    *                   ldp	x24, x25, [x4, #8]!
+# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [sp, #4]!
+# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [x2, #-256]!
+# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x20, x30, [sp, #252]!
+# CHECK-NEXT:  4      4     1.00    *                   ldp	x21, x29, [x2, #504]!
+# CHECK-NEXT:  4      4     1.00    *                   ldp	x22, x23, [x3, #-512]!
+# CHECK-NEXT:  4      4     1.00    *                   ldp	x24, x25, [x4, #8]!
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s29, s28, [sp, #252]!
 # CHECK-NEXT:  3      2     0.50           *            stp	s27, s26, [sp, #-256]!
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s1, s2, [x3, #44]!
@@ -1166,9 +1166,9 @@
 # CHECK-NEXT:  2      1     0.50           *            stnp	wzr, w9, [sp, #252]
 # CHECK-NEXT:  1      4     0.33    *                   ldnp	w2, wzr, [sp, #-256]
 # CHECK-NEXT:  1      4     0.33    *                   ldnp	w9, w10, [sp, #4]
-# CHECK-NEXT:  2      4     0.67    *                   ldnp	x21, x29, [x2, #504]
-# CHECK-NEXT:  2      4     0.67    *                   ldnp	x22, x23, [x3, #-512]
-# CHECK-NEXT:  2      4     0.67    *                   ldnp	x24, x25, [x4, #8]
+# CHECK-NEXT:  3      4     1.00    *                   ldnp	x21, x29, [x2, #504]
+# CHECK-NEXT:  3      4     1.00    *                   ldnp	x22, x23, [x3, #-512]
+# CHECK-NEXT:  3      4     1.00    *                   ldnp	x24, x25, [x4, #8]
 # CHECK-NEXT:  1      6     0.33    *                   ldnp	s29, s28, [sp, #252]
 # CHECK-NEXT:  2      2     0.50           *            stnp	s27, s26, [sp, #-256]
 # CHECK-NEXT:  1      6     0.33    *                   ldnp	s1, s2, [x3, #44]
@@ -1273,7 +1273,7 @@
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0.0]  [0.1]  [1.0]  [1.1]  [2.0]  [2.1]  [2.2]  [3]    [4.0]  [4.1]  [5]    [6]    [7.0]  [7.1]  [8]    [9]    [10]   [11]
-# CHECK-NEXT: 13.00  13.00  34.00  34.00  48.00  48.00  48.00  98.67  171.67 171.67 323.50 210.50 143.00 143.00 190.00 56.50  65.50  13.00
+# CHECK-NEXT: 13.00  13.00  34.00  34.00  48.00  48.00  48.00  102.67 175.67 175.67 325.75 212.75 145.25 145.25 190.00 56.50  65.50  13.00
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0.0]  [0.1]  [1.0]  [1.1]  [2.0]  [2.1]  [2.2]  [3]    [4.0]  [4.1]  [5]    [6]    [7.0]  [7.1]  [8]    [9]    [10]   [11]   Instructions:
@@ -2374,12 +2374,12 @@
 # CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -     stp	wzr, w9, [sp, #252]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldp	w2, wzr, [sp, #-256]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldp	w9, w10, [sp, #4]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldpsw	x9, x10, [sp, #4]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldpsw	x9, x10, [x2, #-256]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldpsw	x20, x30, [sp, #252]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67    -      -      -      -      -      -      -      -     ldp	x21, x29, [x2, #504]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67    -      -      -      -      -      -      -      -     ldp	x22, x23, [x3, #-512]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67    -      -      -      -      -      -      -      -     ldp	x24, x25, [x4, #8]
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [sp, #4]
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [x2, #-256]
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x20, x30, [sp, #252]
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldp	x21, x29, [x2, #504]
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldp	x22, x23, [x3, #-512]
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldp	x24, x25, [x4, #8]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldp	s29, s28, [sp, #252]
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -     0.50   0.50    -      -     stp	s27, s26, [sp, #-256]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldp	s1, s2, [x3, #44]
@@ -2395,12 +2395,12 @@
 # CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     stp	wzr, w9, [sp], #252
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w2, wzr, [sp], #-256
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w9, w10, [sp], #4
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [sp], #4
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [x2], #-256
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x20, x30, [sp], #252
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2], #504
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3], #-512
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4], #8
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [sp], #4
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [x2], #-256
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x20, x30, [sp], #252
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2], #504
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3], #-512
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4], #8
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s29, s28, [sp], #252
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25   0.50   0.50    -      -     stp	s27, s26, [sp], #-256
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s1, s2, [x3], #44
@@ -2414,12 +2414,12 @@
 # CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     stp	wzr, w9, [sp, #252]!
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w2, wzr, [sp, #-256]!
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w9, w10, [sp, #4]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [sp, #4]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [x2, #-256]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x20, x30, [sp, #252]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2, #504]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3, #-512]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4, #8]!
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [sp, #4]!
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [x2, #-256]!
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x20, x30, [sp, #252]!
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2, #504]!
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3, #-512]!
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4, #8]!
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s29, s28, [sp, #252]!
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25   0.50   0.50    -      -     stp	s27, s26, [sp, #-256]!
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s1, s2, [x3, #44]!
@@ -2433,9 +2433,9 @@
 # CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -     stnp	wzr, w9, [sp, #252]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldnp	w2, wzr, [sp, #-256]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldnp	w9, w10, [sp, #4]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67    -      -      -      -      -      -      -      -     ldnp	x21, x29, [x2, #504]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67    -      -      -      -      -      -      -      -     ldnp	x22, x23, [x3, #-512]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67    -      -      -      -      -      -      -      -     ldnp	x24, x25, [x4, #8]
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldnp	x21, x29, [x2, #504]
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldnp	x22, x23, [x3, #-512]
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldnp	x24, x25, [x4, #8]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldnp	s29, s28, [sp, #252]
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -     0.50   0.50    -      -     stnp	s27, s26, [sp, #-256]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldnp	s1, s2, [x3, #44]
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s
index 6c182e00e6d0d..d325e8719ce7e 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s
@@ -3233,12 +3233,12 @@ add x0, x27, 1
 # CHECK:      Iterations:        100
 # CHECK-NEXT: Instructions:      1000
 # CHECK-NEXT: Total Cycles:      507
-# CHECK-NEXT: Total uOps:        1900
+# CHECK-NEXT: Total uOps:        2300
 
 # CHECK:      Dispatch Width:    8
-# CHECK-NEXT: uOps Per Cycle:    3.75
+# CHECK-NEXT: uOps Per Cycle:    4.54
 # CHECK-NEXT: IPC:               1.97
-# CHECK-NEXT: Block RThroughput: 3.0
+# CHECK-NEXT: Block RThroughput: 3.5
 
 # CHECK:      Timeline view:
 # CHECK-NEXT:                     01
@@ -3250,10 +3250,10 @@ add x0, x27, 1
 # CHECK-NEXT: [0,3]     D==eE--R  ..   add	x0, x27, #1
 # CHECK-NEXT: [0,4]     .D=eeeeER ..   ldp	x1, x2, [x27, #496]!
 # CHECK-NEXT: [0,5]     .D==eE--R ..   add	x0, x27, #1
-# CHECK-NEXT: [0,6]     .D==eeeeeER.   ldpsw	x1, x2, [x27], #248
-# CHECK-NEXT: [0,7]     .D===eE---R.   add	x0, x27, #1
-# CHECK-NEXT: [0,8]     . D==eeeeeER   ldpsw	x1, x2, [x27, #248]!
-# CHECK-NEXT: [0,9]     . D===eE---R   add	x0, x27, #1
+# CHECK-NEXT: [0,6]     . D=eeeeeER.   ldpsw	x1, x2, [x27], #248
+# CHECK-NEXT: [0,7]     . D==eE---R.   add	x0, x27, #1
+# CHECK-NEXT: [0,8]     .  D=eeeeeER   ldpsw	x1, x2, [x27, #248]!
+# CHECK-NEXT: [0,9]     .  D==eE---R   add	x0, x27, #1
 
 # CHECK:      Average Wait times (based on the timeline view):
 # CHECK-NEXT: [0]: Executions
@@ -3268,11 +3268,11 @@ add x0, x27, 1
 # CHECK-NEXT: 3.     1     3.0    0.0    2.0       add	x0, x27, #1
 # CHECK-NEXT: 4.     1     2.0    0.0    0.0       ldp	x1, x2, [x27, #496]!
 # CHECK-NEXT: 5.     1     3.0    0.0    2.0       add	x0, x27, #1
-# CHECK-NEXT: 6.     1     3.0    0.0    0.0       ldpsw	x1, x2, [x27], #248
-# CHECK-NEXT: 7.     1     4.0    0.0    3.0       add	x0, x27, #1
-# CHECK-NEXT: 8.     1     3.0    0.0    0.0       ldpsw	x1, x2, [x27, #248]!
-# CHECK-NEXT: 9.     1     4.0    0.0    3.0       add	x0, x27, #1
-# CHECK-NEXT:        10    2.7    0.1    1.2       <total>
+# CHECK-NEXT: 6.     1     2.0    0.0    0.0       ldpsw	x1, x2, [x27], #248
+# CHECK-NEXT: 7.     1     3.0    0.0    3.0       add	x0, x27, #1
+# CHECK-NEXT: 8.     1     2.0    0.0    0.0       ldpsw	x1, x2, [x27, #248]!
+# CHECK-NEXT: 9.     1     3.0    0.0    3.0       add	x0, x27, #1
+# CHECK-NEXT:        10    2.3    0.1    1.2       <total>
 
 # CHECK:      [46] Code Region - G47
 

>From b90dfb1f043a6d4ad1ebb2b913abe13b509df815 Mon Sep 17 00:00:00 2001
From: Julien Villette <julien.villette at sipearl.com>
Date: Fri, 11 Sep 2026 15:11:05 +0200
Subject: [PATCH 2/2] [AArch64][NeoverseV1] Fix Load Pair throughput and
 micro-op counts

Measured on Neoverse V1 hardware with unrolled loops of independent
instances, using perf inst_spec/op_spec counters to get the real
micro-op counts.

Instruction          | uops | RThroughput | was
----------------------------------------------------
ldp (X-form, offset) |  1   | 1.00        | 3 uops
ldp (W-form, offset) |  1   | 0.33        | unchanged
ldpsw (offset)       |  3   | 0.67        | 0.50
ldp (X-form, pre/post)| 2   | 1.00        | 4 uops
ldp (W-form, pre/post)| 2   | 0.50        | 0.33
ldpsw (pre/post)     |  4   | 1.00        | 0.75

LD[N]P X-form occupies three load slots but issues as a single
micro-op, so its SchedWriteRes no longer sets NumMicroOps = 3.

Modelling writeback forms on V1UnitL01 matches the measured
throughput and micro-op counts.
---
 .../Target/AArch64/AArch64SchedNeoverseV1.td  | 18 ++--
 .../AArch64/Neoverse/V1-basic-instructions.s  | 98 +++++++++----------
 .../llvm-mca/AArch64/Neoverse/V1-writeback.s  | 28 +++---
 3 files changed, 74 insertions(+), 70 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td
index 6a88b586bbd75..87416a27f79d8 100644
--- a/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td
+++ b/llvm/lib/Target/AArch64/AArch64SchedNeoverseV1.td
@@ -104,8 +104,10 @@ def V1Write_1c_1I      : SchedWriteRes<[V1UnitI]>   { let Latency = 1; }
 def V1Write_1c_1I_1Flg : SchedWriteRes<[V1UnitI, V1UnitFlg]>   { let Latency = 1; }
 def V1Write_4c_1L      : SchedWriteRes<[V1UnitL]>   { let Latency = 4; }
 def V1Write_6c_1L      : SchedWriteRes<[V1UnitL]>   { let Latency = 6; }
+def V1Write_4c_3L      : SchedWriteRes<[V1UnitL, V1UnitL, V1UnitL]> { let Latency = 4; }
 def V1Write_1c_1L01    : SchedWriteRes<[V1UnitL01]> { let Latency = 1; }
 def V1Write_4c_1L01    : SchedWriteRes<[V1UnitL01]> { let Latency = 4; }
+def V1Write_4c_2L01    : SchedWriteRes<[V1UnitL01,V1UnitL01]> { let Latency = 4; }
 def V1Write_6c_1L01    : SchedWriteRes<[V1UnitL01]> { let Latency = 6; }
 def V1Write_2c_1M      : SchedWriteRes<[V1UnitM]>   { let Latency = 2; }
 def V1Write_2c_1M_1Flg : SchedWriteRes<[V1UnitM, V1UnitFlg]>   { let Latency = 2; }
@@ -248,12 +250,14 @@ let Latency = 7, NumMicroOps = 3 in
 def V1Write_7c_2M0_1V01     : SchedWriteRes<[V1UnitM0, V1UnitM0, V1UnitV01]>;
 let Latency = 8, NumMicroOps = 3 in
 def V1Write_8c_1L_2V        : SchedWriteRes<[V1UnitL, V1UnitV, V1UnitV]>;
-let Latency = 4, NumMicroOps = 3 in
-def V1Write_4c_3L        : SchedWriteRes<[V1UnitL, V1UnitL, V1UnitL]>;
 let Latency = 6, NumMicroOps = 3 in
 def V1Write_6c_3L           : SchedWriteRes<[V1UnitL, V1UnitL, V1UnitL]>;
 let Latency = 5, NumMicroOps = 3 in
-def V1Write_5c_2I_1L     : SchedWriteRes<[V1UnitI, V1UnitI, V1UnitL]>;
+def V1Write_5c_1I_2L     : SchedWriteRes<[V1UnitI, V1UnitL, V1UnitL]>;
+let Latency = 5, NumMicroOps = 3 in
+def V1Write_5c_1I_2L01     : SchedWriteRes<[V1UnitI, V1UnitL01, V1UnitL01]>;
+let Latency = 1, NumMicroOps = 3 in
+def V1Write_1c_1I_1L01_1D: SchedWriteRes<[V1UnitI, V1UnitL01, V1UnitD]>;
 let Latency = 2, NumMicroOps = 3 in
 def V1Write_2c_1L01_1S_1V   : SchedWriteRes<[V1UnitL01, V1UnitS, V1UnitV]>;
 let Latency = 4, NumMicroOps = 3 in
@@ -728,16 +732,16 @@ def : SchedAlias<WriteAdr,   V1Write_1c_1I>;
 def : SchedAlias<WriteLDHi, V1Write_4c_1L>;
 def : InstRW<[V1Write_4c_1L, V1Write_0c_0Z], (instrs LDPWi, LDNPWi)>;
 def : InstRW<[V1Write_4c_3L, V1Write_0c_0Z], (instrs LDPXi, LDNPXi)>;
-def : InstRW<[WriteAdr, V1Write_4c_1L, V1Write_0c_0Z],
+def : InstRW<[WriteAdr, V1Write_4c_1L01, V1Write_0c_0Z],
              (instrs LDPWpost, LDPWpre)>;
-def : InstRW<[WriteAdr, V1Write_4c_3L, V1Write_0c_0Z],
+def : InstRW<[WriteAdr, V1Write_4c_2L01, V1Write_0c_0Z],
              (instrs LDPXpost, LDPXpre)>;
 
 // Load pair, signed immed offset, signed words
-def : InstRW<[V1Write_5c_2I_1L, V1Write_0c_0Z], (instrs LDPSWi)>;
+def : InstRW<[V1Write_5c_1I_2L, V1Write_0c_0Z], (instrs LDPSWi)>;
 
 // Load pair, immed post or pre-index, signed words
-def : InstRW<[WriteAdr, V1Write_5c_2I_1L, V1Write_0c_0Z],
+def : InstRW<[WriteAdr, V1Write_5c_1I_2L01, V1Write_0c_0Z],
              (instrs LDPSWpost, LDPSWpre)>;
 
 
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s
index 49c4d529ed9b9..6b29cd8900600 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-basic-instructions.s
@@ -1107,12 +1107,12 @@
 # CHECK-NEXT:  2      1     0.50           *            stp	wzr, w9, [sp, #252]
 # CHECK-NEXT:  1      4     0.33    *                   ldp	w2, wzr, [sp, #-256]
 # CHECK-NEXT:  1      4     0.33    *                   ldp	w9, w10, [sp, #4]
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [sp, #4]
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x9, x10, [x2, #-256]
-# CHECK-NEXT:  3      5     0.50    *                   ldpsw	x20, x30, [sp, #252]
-# CHECK-NEXT:  3      4     1.00    *                   ldp	x21, x29, [x2, #504]
-# CHECK-NEXT:  3      4     1.00    *                   ldp	x22, x23, [x3, #-512]
-# CHECK-NEXT:  3      4     1.00    *                   ldp	x24, x25, [x4, #8]
+# CHECK-NEXT:  3      5     0.67    *                   ldpsw	x9, x10, [sp, #4]
+# CHECK-NEXT:  3      5     0.67    *                   ldpsw	x9, x10, [x2, #-256]
+# CHECK-NEXT:  3      5     0.67    *                   ldpsw	x20, x30, [sp, #252]
+# CHECK-NEXT:  1      4     1.00    *                   ldp	x21, x29, [x2, #504]
+# CHECK-NEXT:  1      4     1.00    *                   ldp	x22, x23, [x3, #-512]
+# CHECK-NEXT:  1      4     1.00    *                   ldp	x24, x25, [x4, #8]
 # CHECK-NEXT:  1      6     0.33    *                   ldp	s29, s28, [sp, #252]
 # CHECK-NEXT:  2      2     0.50           *            stp	s27, s26, [sp, #-256]
 # CHECK-NEXT:  1      6     0.33    *                   ldp	s1, s2, [x3, #44]
@@ -1124,16 +1124,16 @@
 # CHECK-NEXT:  2      2     0.50           *            stp	q3, q5, [sp]
 # CHECK-NEXT:  2      2     0.50           *            stp	q17, q19, [sp, #1008]
 # CHECK-NEXT:  2      6     0.67    *                   ldp	q23, q29, [x1, #-1024]
-# CHECK-NEXT:  2      4     0.33    *                   ldp	w3, w5, [sp], #0
+# CHECK-NEXT:  2      4     0.50    *                   ldp	w3, w5, [sp], #0
 # CHECK-NEXT:  3      1     0.50           *            stp	wzr, w9, [sp], #252
-# CHECK-NEXT:  2      4     0.33    *                   ldp	w2, wzr, [sp], #-256
-# CHECK-NEXT:  2      4     0.33    *                   ldp	w9, w10, [sp], #4
-# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [sp], #4
-# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [x2], #-256
-# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x20, x30, [sp], #252
-# CHECK-NEXT:  4      4     1.00    *                   ldp	x21, x29, [x2], #504
-# CHECK-NEXT:  4      4     1.00    *                   ldp	x22, x23, [x3], #-512
-# CHECK-NEXT:  4      4     1.00    *                   ldp	x24, x25, [x4], #8
+# CHECK-NEXT:  2      4     0.50    *                   ldp	w2, wzr, [sp], #-256
+# CHECK-NEXT:  2      4     0.50    *                   ldp	w9, w10, [sp], #4
+# CHECK-NEXT:  4      5     1.00    *                   ldpsw	x9, x10, [sp], #4
+# CHECK-NEXT:  4      5     1.00    *                   ldpsw	x9, x10, [x2], #-256
+# CHECK-NEXT:  4      5     1.00    *                   ldpsw	x20, x30, [sp], #252
+# CHECK-NEXT:  2      4     1.00    *                   ldp	x21, x29, [x2], #504
+# CHECK-NEXT:  2      4     1.00    *                   ldp	x22, x23, [x3], #-512
+# CHECK-NEXT:  2      4     1.00    *                   ldp	x24, x25, [x4], #8
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s29, s28, [sp], #252
 # CHECK-NEXT:  3      2     0.50           *            stp	s27, s26, [sp], #-256
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s1, s2, [x3], #44
@@ -1143,16 +1143,16 @@
 # CHECK-NEXT:  4      2     1.00           *            stp	q3, q5, [sp], #0
 # CHECK-NEXT:  4      2     1.00           *            stp	q17, q19, [sp], #1008
 # CHECK-NEXT:  3      6     0.67    *                   ldp	q23, q29, [x1], #-1024
-# CHECK-NEXT:  2      4     0.33    *                   ldp	w3, w5, [sp, #0]!
+# CHECK-NEXT:  2      4     0.50    *                   ldp	w3, w5, [sp, #0]!
 # CHECK-NEXT:  3      1     0.50           *            stp	wzr, w9, [sp, #252]!
-# CHECK-NEXT:  2      4     0.33    *                   ldp	w2, wzr, [sp, #-256]!
-# CHECK-NEXT:  2      4     0.33    *                   ldp	w9, w10, [sp, #4]!
-# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [sp, #4]!
-# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x9, x10, [x2, #-256]!
-# CHECK-NEXT:  4      5     0.75    *                   ldpsw	x20, x30, [sp, #252]!
-# CHECK-NEXT:  4      4     1.00    *                   ldp	x21, x29, [x2, #504]!
-# CHECK-NEXT:  4      4     1.00    *                   ldp	x22, x23, [x3, #-512]!
-# CHECK-NEXT:  4      4     1.00    *                   ldp	x24, x25, [x4, #8]!
+# CHECK-NEXT:  2      4     0.50    *                   ldp	w2, wzr, [sp, #-256]!
+# CHECK-NEXT:  2      4     0.50    *                   ldp	w9, w10, [sp, #4]!
+# CHECK-NEXT:  4      5     1.00    *                   ldpsw	x9, x10, [sp, #4]!
+# CHECK-NEXT:  4      5     1.00    *                   ldpsw	x9, x10, [x2, #-256]!
+# CHECK-NEXT:  4      5     1.00    *                   ldpsw	x20, x30, [sp, #252]!
+# CHECK-NEXT:  2      4     1.00    *                   ldp	x21, x29, [x2, #504]!
+# CHECK-NEXT:  2      4     1.00    *                   ldp	x22, x23, [x3, #-512]!
+# CHECK-NEXT:  2      4     1.00    *                   ldp	x24, x25, [x4, #8]!
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s29, s28, [sp, #252]!
 # CHECK-NEXT:  3      2     0.50           *            stp	s27, s26, [sp, #-256]!
 # CHECK-NEXT:  2      6     0.33    *                   ldp	s1, s2, [x3, #44]!
@@ -1166,9 +1166,9 @@
 # CHECK-NEXT:  2      1     0.50           *            stnp	wzr, w9, [sp, #252]
 # CHECK-NEXT:  1      4     0.33    *                   ldnp	w2, wzr, [sp, #-256]
 # CHECK-NEXT:  1      4     0.33    *                   ldnp	w9, w10, [sp, #4]
-# CHECK-NEXT:  3      4     1.00    *                   ldnp	x21, x29, [x2, #504]
-# CHECK-NEXT:  3      4     1.00    *                   ldnp	x22, x23, [x3, #-512]
-# CHECK-NEXT:  3      4     1.00    *                   ldnp	x24, x25, [x4, #8]
+# CHECK-NEXT:  1      4     1.00    *                   ldnp	x21, x29, [x2, #504]
+# CHECK-NEXT:  1      4     1.00    *                   ldnp	x22, x23, [x3, #-512]
+# CHECK-NEXT:  1      4     1.00    *                   ldnp	x24, x25, [x4, #8]
 # CHECK-NEXT:  1      6     0.33    *                   ldnp	s29, s28, [sp, #252]
 # CHECK-NEXT:  2      2     0.50           *            stnp	s27, s26, [sp, #-256]
 # CHECK-NEXT:  1      6     0.33    *                   ldnp	s1, s2, [x3, #44]
@@ -1273,7 +1273,7 @@
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0.0]  [0.1]  [1.0]  [1.1]  [2.0]  [2.1]  [2.2]  [3]    [4.0]  [4.1]  [5]    [6]    [7.0]  [7.1]  [8]    [9]    [10]   [11]
-# CHECK-NEXT: 13.00  13.00  34.00  34.00  48.00  48.00  48.00  102.67 175.67 175.67 325.75 212.75 145.25 145.25 190.00 56.50  65.50  13.00
+# CHECK-NEXT: 13.00  13.00  34.00  34.00  48.00  48.00  48.00  93.67  181.67 181.67 323.50 210.50 143.00 143.00 190.00 56.50  65.50  13.00
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0.0]  [0.1]  [1.0]  [1.1]  [2.0]  [2.1]  [2.2]  [3]    [4.0]  [4.1]  [5]    [6]    [7.0]  [7.1]  [8]    [9]    [10]   [11]   Instructions:
@@ -2374,9 +2374,9 @@
 # CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -     stp	wzr, w9, [sp, #252]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldp	w2, wzr, [sp, #-256]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33    -      -      -      -      -      -      -      -     ldp	w9, w10, [sp, #4]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [sp, #4]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [x2, #-256]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x20, x30, [sp, #252]
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldpsw	x9, x10, [sp, #4]
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldpsw	x9, x10, [x2, #-256]
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldpsw	x20, x30, [sp, #252]
 # CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldp	x21, x29, [x2, #504]
 # CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldp	x22, x23, [x3, #-512]
 # CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00    -      -      -      -      -      -      -      -     ldp	x24, x25, [x4, #8]
@@ -2391,16 +2391,16 @@
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -     0.50   0.50    -      -     stp	q3, q5, [sp]
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -      -      -     0.50   0.50    -      -     stp	q17, q19, [sp, #1008]
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67    -      -      -      -      -      -      -      -     ldp	q23, q29, [x1, #-1024]
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w3, w5, [sp], #0
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w3, w5, [sp], #0
 # CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     stp	wzr, w9, [sp], #252
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w2, wzr, [sp], #-256
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w9, w10, [sp], #4
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [sp], #4
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [x2], #-256
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x20, x30, [sp], #252
-# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2], #504
-# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3], #-512
-# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4], #8
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w2, wzr, [sp], #-256
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w9, w10, [sp], #4
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [sp], #4
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [x2], #-256
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x20, x30, [sp], #252
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2], #504
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3], #-512
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4], #8
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s29, s28, [sp], #252
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25   0.50   0.50    -      -     stp	s27, s26, [sp], #-256
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s1, s2, [x3], #44
@@ -2410,16 +2410,16 @@
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25   0.50   0.50    -      -     stp	q3, q5, [sp], #0
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25   0.50   0.50    -      -     stp	q17, q19, [sp], #1008
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.67   0.67   0.67   0.25   0.25   0.25   0.25    -      -      -      -     ldp	q23, q29, [x1], #-1024
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w3, w5, [sp, #0]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w3, w5, [sp, #0]!
 # CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     stp	wzr, w9, [sp, #252]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w2, wzr, [sp, #-256]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w9, w10, [sp, #4]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [sp, #4]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x9, x10, [x2, #-256]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.75   0.75   0.75   0.75    -      -      -      -     ldpsw	x20, x30, [sp, #252]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2, #504]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3, #-512]!
-# CHECK-NEXT:  -      -      -      -      -      -      -     1.00   1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4, #8]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w2, wzr, [sp, #-256]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25    -      -      -      -     ldp	w9, w10, [sp, #4]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [sp, #4]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x9, x10, [x2, #-256]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.50   0.50   0.50   0.50    -      -      -      -     ldpsw	x20, x30, [sp, #252]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x21, x29, [x2, #504]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x22, x23, [x3, #-512]!
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00   0.25   0.25   0.25   0.25    -      -      -      -     ldp	x24, x25, [x4, #8]!
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s29, s28, [sp, #252]!
 # CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.25   0.25   0.25   0.25   0.50   0.50    -      -     stp	s27, s26, [sp, #-256]!
 # CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33   0.33   0.25   0.25   0.25   0.25    -      -      -      -     ldp	s1, s2, [x3, #44]!
diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s
index d325e8719ce7e..e93b025ed39c3 100644
--- a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s
+++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-writeback.s
@@ -3233,12 +3233,12 @@ add x0, x27, 1
 # CHECK:      Iterations:        100
 # CHECK-NEXT: Instructions:      1000
 # CHECK-NEXT: Total Cycles:      507
-# CHECK-NEXT: Total uOps:        2300
+# CHECK-NEXT: Total uOps:        1900
 
 # CHECK:      Dispatch Width:    8
-# CHECK-NEXT: uOps Per Cycle:    4.54
+# CHECK-NEXT: uOps Per Cycle:    3.75
 # CHECK-NEXT: IPC:               1.97
-# CHECK-NEXT: Block RThroughput: 3.5
+# CHECK-NEXT: Block RThroughput: 4.5
 
 # CHECK:      Timeline view:
 # CHECK-NEXT:                     01
@@ -3248,12 +3248,12 @@ add x0, x27, 1
 # CHECK-NEXT: [0,1]     D=eE--R   ..   add	x0, x27, #1
 # CHECK-NEXT: [0,2]     D=eeeeER  ..   ldp	w1, w2, [x27, #248]!
 # CHECK-NEXT: [0,3]     D==eE--R  ..   add	x0, x27, #1
-# CHECK-NEXT: [0,4]     .D=eeeeER ..   ldp	x1, x2, [x27, #496]!
+# CHECK-NEXT: [0,4]     D==eeeeER ..   ldp	x1, x2, [x27, #496]!
 # CHECK-NEXT: [0,5]     .D==eE--R ..   add	x0, x27, #1
-# CHECK-NEXT: [0,6]     . D=eeeeeER.   ldpsw	x1, x2, [x27], #248
-# CHECK-NEXT: [0,7]     . D==eE---R.   add	x0, x27, #1
-# CHECK-NEXT: [0,8]     .  D=eeeeeER   ldpsw	x1, x2, [x27, #248]!
-# CHECK-NEXT: [0,9]     .  D==eE---R   add	x0, x27, #1
+# CHECK-NEXT: [0,6]     .D==eeeeeER.   ldpsw	x1, x2, [x27], #248
+# CHECK-NEXT: [0,7]     .D===eE---R.   add	x0, x27, #1
+# CHECK-NEXT: [0,8]     . D==eeeeeER   ldpsw	x1, x2, [x27, #248]!
+# CHECK-NEXT: [0,9]     . D===eE---R   add	x0, x27, #1
 
 # CHECK:      Average Wait times (based on the timeline view):
 # CHECK-NEXT: [0]: Executions
@@ -3266,13 +3266,13 @@ add x0, x27, 1
 # CHECK-NEXT: 1.     1     2.0    0.0    2.0       add	x0, x27, #1
 # CHECK-NEXT: 2.     1     2.0    0.0    0.0       ldp	w1, w2, [x27, #248]!
 # CHECK-NEXT: 3.     1     3.0    0.0    2.0       add	x0, x27, #1
-# CHECK-NEXT: 4.     1     2.0    0.0    0.0       ldp	x1, x2, [x27, #496]!
+# CHECK-NEXT: 4.     1     3.0    0.0    0.0       ldp	x1, x2, [x27, #496]!
 # CHECK-NEXT: 5.     1     3.0    0.0    2.0       add	x0, x27, #1
-# CHECK-NEXT: 6.     1     2.0    0.0    0.0       ldpsw	x1, x2, [x27], #248
-# CHECK-NEXT: 7.     1     3.0    0.0    3.0       add	x0, x27, #1
-# CHECK-NEXT: 8.     1     2.0    0.0    0.0       ldpsw	x1, x2, [x27, #248]!
-# CHECK-NEXT: 9.     1     3.0    0.0    3.0       add	x0, x27, #1
-# CHECK-NEXT:        10    2.3    0.1    1.2       <total>
+# CHECK-NEXT: 6.     1     3.0    0.0    0.0       ldpsw	x1, x2, [x27], #248
+# CHECK-NEXT: 7.     1     4.0    0.0    3.0       add	x0, x27, #1
+# CHECK-NEXT: 8.     1     3.0    0.0    0.0       ldpsw	x1, x2, [x27, #248]!
+# CHECK-NEXT: 9.     1     4.0    0.0    3.0       add	x0, x27, #1
+# CHECK-NEXT:        10    2.8    0.1    1.2       <total>
 
 # CHECK:      [46] Code Region - G47
 



More information about the llvm-commits mailing list