[llvm] [AArch64] Fix accumulator chain opcode for SABAv2i32 (PR #226062)
Jonathan Cohen via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 24 01:12:27 PDT 2026
https://github.com/jcohen-apple created https://github.com/llvm/llvm-project/pull/226062
A typo in `AArch64InstrInfo::getAccumulationStartOpcode` caused `SABAv2i32` to be matched instead of `SABDv2i32`.
Fixes #225984
>From 56ab62450e0958c3831a6f1e3eb1ee2843340bc5 Mon Sep 17 00:00:00 2001
From: Jonathan Cohen <joncoh at apple.com>
Date: Thu, 24 Sep 2026 11:11:16 +0300
Subject: [PATCH] [AArch64] Fix accumulator chain opcode for SABAv2i32
A typo in `AArch64InstrInfo::getAccumulationStartOpcode` caused `SABAv2i32` to be matched instead of `SABDv2i32`.
Fixes #225984
---
llvm/lib/Target/AArch64/AArch64InstrInfo.cpp | 2 +-
.../aarch64-reassociate-accumulators.ll | 35 +++++++++++++++++++
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
index b8e74f8ad496d9..0b6d049260226c 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -8028,7 +8028,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 d1bcad4724e485..5df1621f94e9e6 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
More information about the llvm-commits
mailing list