[llvm-branch-commits] [llvm] release/23.x: [AArch64] Fix accumulator chain opcode for SABAv2i32 (#226062) (PR #226780)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sun Sep 27 05:00:21 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: Jonathan Cohen (jcohen-apple)

<details>
<summary>Changes</summary>

Backport 7d16aafe51fdbf03da4cf08c7785d91faecc0d27

Requested by: @<!-- -->jcohen-apple

A typo in `AArch64InstrInfo::getAccumulationStartOpcode` caused `SABAv2i32` to be matched instead of `SABDv2i32`.

Fixes #<!-- -->225984
Original PR: #<!-- -->226062


---
Full diff: https://github.com/llvm/llvm-project/pull/226780.diff


2 Files Affected:

- (modified) llvm/lib/Target/AArch64/AArch64InstrInfo.cpp (+1-1) 
- (modified) llvm/test/CodeGen/AArch64/aarch64-reassociate-accumulators.ll (+35) 


``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
index 018ac03f6295d..ce055fdaf7c6d 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -7914,7 +7914,7 @@ unsigned AArch64InstrInfo::getAccumulationStartOpcode(
   case AArch64::SABAv16i8:
     return AArch64::SABDv16i8;
   case AArch64::SABAv2i32:
-    return AArch64::SABAv2i32;
+    return AArch64::SABDv2i32;
   case AArch64::SABAv4i16:
     return AArch64::SABDv4i16;
   case AArch64::SABAv4i32:
diff --git a/llvm/test/CodeGen/AArch64/aarch64-reassociate-accumulators.ll b/llvm/test/CodeGen/AArch64/aarch64-reassociate-accumulators.ll
index d1bcad4724e48..5df1621f94e9e 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-reassociate-accumulators.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-reassociate-accumulators.ll
@@ -250,6 +250,41 @@ exit:
   ret i32 %reduce
 }
 
+define i32 @saba_v2i32_accumulation(ptr %ptr1, ptr %ptr2) {
+; CHECK-LABEL: saba_v2i32_accumulation:
+; CHECK:    sabd.2s v0, v0, v2
+; CHECK:    sabd.2s v1, v1, v3
+; CHECK:    sabd.2s v2, v2, v5
+; CHECK:    saba.2s v0, v4, v6
+; CHECK:    saba.2s v1, v7, v17
+; CHECK:    saba.2s v2, v16, v18
+; CHECK:    saba.2s v0, v19, v21
+; CHECK:    saba.2s v1, v20, v22
+; CHECK:    add.2s v0, v2, v0
+; CHECK:    add.2s v0, v0, v1
+; CHECK:    addp.2s v0, v0, v0
+entry:
+  br label %loop
+
+loop:
+
+  %i = phi i32 [ 0, %entry ], [ %next_i, %loop ]
+  %acc_phi = phi <2 x i32> [ zeroinitializer, %entry ], [ %acc_next, %loop ]
+  %ptr1_i = getelementptr i32, ptr %ptr1, i32 %i
+  %ptr2_i = getelementptr i32, ptr %ptr2, i32 %i
+  %a = load <2 x i32>, ptr %ptr1_i, align 1
+  %b = load <2 x i32>, ptr %ptr2_i, align 1
+  %vabd = tail call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %a, <2 x i32> %b)
+  %acc_next = add <2 x i32> %acc_phi, %vabd
+  %next_i = add i32 %i, 2
+  %cmp = icmp slt i32 %next_i, 16
+  br i1 %cmp, label %loop, label %exit
+
+exit:
+  %reduce = call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %acc_next)
+  ret i32 %reduce
+}
+
 define i8 @uaba_v8i8_accumulation(ptr %ptr1, ptr %ptr2) {
 ; CHECK-LABEL: uaba_v8i8_accumulation:
 ; CHECK:    uabd.8b v0, v0, v2

``````````

</details>


https://github.com/llvm/llvm-project/pull/226780


More information about the llvm-branch-commits mailing list