[llvm] [TargetInstrInfo][AArch64] Don't assume register came from operand 0 in canCombine (PR #157210)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 5 17:56:23 PDT 2025
https://github.com/topperc updated https://github.com/llvm/llvm-project/pull/157210
>From 9579c500d3fe1f42751490f00fad17696b929f62 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Fri, 5 Sep 2025 17:16:52 -0700
Subject: [PATCH 1/2] [TargetInstrInfo][AArch64] Don't assume register came
from operand 0 in canCombine
We already have the register number from the user operand. Use it
instead of assuming it must be operand 0 of the producing instruction.
Fixes #157118
---
llvm/lib/CodeGen/TargetInstrInfo.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/CodeGen/TargetInstrInfo.cpp b/llvm/lib/CodeGen/TargetInstrInfo.cpp
index 7ba65f0418a6b..0d7b128fc736e 100644
--- a/llvm/lib/CodeGen/TargetInstrInfo.cpp
+++ b/llvm/lib/CodeGen/TargetInstrInfo.cpp
@@ -996,7 +996,7 @@ static bool canCombine(MachineBasicBlock &MBB, MachineOperand &MO,
(MI->getOpcode() != CombineOpc && CombineOpc != 0))
return false;
// Must only used by the user we combine with.
- if (!MRI.hasOneNonDBGUse(MI->getOperand(0).getReg()))
+ if (!MRI.hasOneNonDBGUse(MO.getReg()))
return false;
return true;
>From 34612950a757f2d7c175973843fb8ba1f9c7be3e Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Fri, 5 Sep 2025 17:55:56 -0700
Subject: [PATCH 2/2] fixup! commit test case
---
llvm/test/CodeGen/AArch64/pr157118.ll | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
create mode 100644 llvm/test/CodeGen/AArch64/pr157118.ll
diff --git a/llvm/test/CodeGen/AArch64/pr157118.ll b/llvm/test/CodeGen/AArch64/pr157118.ll
new file mode 100644
index 0000000000000..cdef46fe8f227
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/pr157118.ll
@@ -0,0 +1,16 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=aarch64 < %s | FileCheck %s
+
+define <8 x i8> @test_vaba_u8(<8 x i8> noundef %a, <8 x i8> noundef %b, <8 x i8> noundef %c) {
+; CHECK-LABEL: test_vaba_u8:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: //APP
+; CHECK-NEXT: //NO_APP
+; CHECK-NEXT: uaba v0.8b, v1.8b, v2.8b
+; CHECK-NEXT: ret
+entry:
+ %0 = tail call <8 x i8> asm sideeffect "", "=w,0"(<8 x i8> %a)
+ %vabd.i = tail call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %b, <8 x i8> %c)
+ %add.i = add <8 x i8> %vabd.i, %0
+ ret <8 x i8> %add.i
+}
More information about the llvm-commits
mailing list