[llvm] 229ab5a - [AArch64] Drop flags from BSP pseudos (#151856)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 7 23:48:00 PDT 2025
Author: David Green
Date: 2025-08-08T07:47:56+01:00
New Revision: 229ab5aa2b11bb8738db2810677abfc89050ad80
URL: https://github.com/llvm/llvm-project/commit/229ab5aa2b11bb8738db2810677abfc89050ad80
DIFF: https://github.com/llvm/llvm-project/commit/229ab5aa2b11bb8738db2810677abfc89050ad80.diff
LOG: [AArch64] Drop flags from BSP pseudos (#151856)
This prevents cases where some of the operands match from hitting
verifier errors with kill flags. These nodes should have been removed
earlier in most cases.
Fixes the direct issue from #149380. #151855 cleans up the codegen.
Added:
Modified:
llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
llvm/test/CodeGen/AArch64/bsp_implicit_ops.mir
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
index 201bfe0a443d6..d6a3d59b7ccfe 100644
--- a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
@@ -1236,14 +1236,20 @@ bool AArch64ExpandPseudo::expandMI(MachineBasicBlock &MBB,
.add(MI.getOperand(3));
transferImpOps(MI, I, I);
} else {
+ unsigned RegState =
+ getRenamableRegState(MI.getOperand(1).isRenamable()) |
+ getKillRegState(
+ MI.getOperand(1).isKill() &&
+ MI.getOperand(1).getReg() != MI.getOperand(2).getReg() &&
+ MI.getOperand(1).getReg() != MI.getOperand(3).getReg());
BuildMI(MBB, MBBI, MI.getDebugLoc(),
TII->get(Opcode == AArch64::BSPv8i8 ? AArch64::ORRv8i8
: AArch64::ORRv16i8))
.addReg(DstReg,
RegState::Define |
getRenamableRegState(MI.getOperand(0).isRenamable()))
- .add(MI.getOperand(1))
- .add(MI.getOperand(1));
+ .addReg(MI.getOperand(1).getReg(), RegState)
+ .addReg(MI.getOperand(1).getReg(), RegState);
auto I2 =
BuildMI(MBB, MBBI, MI.getDebugLoc(),
TII->get(Opcode == AArch64::BSPv8i8 ? AArch64::BSLv8i8
diff --git a/llvm/test/CodeGen/AArch64/bsp_implicit_ops.mir b/llvm/test/CodeGen/AArch64/bsp_implicit_ops.mir
index 23ac67cac6416..805d24475081e 100644
--- a/llvm/test/CodeGen/AArch64/bsp_implicit_ops.mir
+++ b/llvm/test/CodeGen/AArch64/bsp_implicit_ops.mir
@@ -96,3 +96,23 @@ body: |
$q25 = ORRv16i8 $q3, killed $q3
RET_ReallyLR implicit $q22
...
+---
+name: DoubleOp
+tracksRegLiveness: true
+body: |
+ bb.0.entry:
+ liveins: $q2
+
+ ; CHECK-LABEL: name: DoubleOp
+ ; CHECK: liveins: $q2
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: renamable $q0 = MOVIv8i16 1, 0
+ ; CHECK-NEXT: renamable $q1 = ORRv16i8 renamable $q2, renamable $q2
+ ; CHECK-NEXT: renamable $q1 = BSLv16i8 killed renamable $q1, renamable $q2, renamable $q0
+ ; CHECK-NEXT: renamable $q0 = SQADDv8i16 killed renamable $q1, killed renamable $q0
+ ; CHECK-NEXT: RET undef $lr, implicit $q0
+ renamable $q0 = MOVIv8i16 1, 0
+ renamable $q1 = BSPv16i8 killed renamable $q2, renamable $q2, renamable $q0
+ renamable $q0 = SQADDv8i16 killed renamable $q1, killed renamable $q0
+ RET_ReallyLR implicit $q0
+...
More information about the llvm-commits
mailing list