https://github.com/jcohen-apple created https://github.com/llvm/llvm-project/pull/226780
Backport 7d16aafe51fdbf03da4cf08c7785d91faecc0d27 Requested by: @jcohen-apple A typo in `AArch64InstrInfo::getAccumulationStartOpcode` caused `SABAv2i32` to be matched instead of `SABDv2i32`. Fixes #225984 Original PR: #226062 >From 4e83186a7017fa965e5473dc59471deb36df77af Mon Sep 17 00:00:00 2001 From: Jonathan Cohen <[email protected]> Date: Thu, 24 Sep 2026 21:39:58 +0300 Subject: [PATCH] [AArch64] Fix accumulator chain opcode for SABAv2i32 (#226062) A typo in `AArch64InstrInfo::getAccumulationStartOpcode` caused `SABAv2i32` to be matched instead of `SABDv2i32`. Fixes #225984 (cherry picked from commit 7d16aafe51fdbf03da4cf08c7785d91faecc0d27) --- 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 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 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
