[llvm] [ARM] Remove kill flags in ReplaceConstByVPNOTs. (PR #140082)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Thu May 15 08:28:16 PDT 2025
https://github.com/davemgreen created https://github.com/llvm/llvm-project/pull/140082
This is similar to #86300. The vpr register on this branch might be killed before we reuse it.
>From 88310786ecb6ce6187bcccc282fc1c7c0e2d5ed0 Mon Sep 17 00:00:00 2001
From: David Green <david.green at arm.com>
Date: Thu, 15 May 2025 16:23:09 +0100
Subject: [PATCH] [ARM] Remove kill flags in ReplaceConstByVPNOTs.
This is similar to #86300. The vpr register on this branch might be killed
before we reuse it.
---
.../ARM/MVETPAndVPTOptimisationsPass.cpp | 1 +
.../CodeGen/Thumb2/mve-vpt-optimisations.mir | 25 ++++++++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp b/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp
index 18d5c232378a7..0b4e7dfebe369 100644
--- a/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp
+++ b/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp
@@ -984,6 +984,7 @@ bool MVETPAndVPTOptimisations::ReplaceConstByVPNOTs(MachineBasicBlock &MBB,
if (MRI->hasOneUse(GPR))
DeadInstructions.insert(MRI->getVRegDef(GPR));
}
+ MRI->clearKillFlags(LastVPTReg);
LLVM_DEBUG(dbgs() << "Adding VPNot: " << *VPNot << " to replace use at "
<< Instr);
VPR = NewVPR;
diff --git a/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir b/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir
index f9b175ed80fbf..e174934abdbfc 100644
--- a/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir
+++ b/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir
@@ -1042,5 +1042,28 @@ body: |
%5:mqpr = IMPLICIT_DEF
%6:mqpr = MVE_VORR %5:mqpr, %5:mqpr, 1, killed %4, $noreg, undef %6
tBX_RET 14 /* CC::al */, $noreg, implicit %5:mqpr
-
+...
+---
+name: kill_flags_2
+alignment: 4
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: kill_flags_2
+ ; CHECK: [[COPY:%[0-9]+]]:mqpr = COPY $q0
+ ; CHECK-NEXT: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vccr = COPY [[t2MOVi]]
+ ; CHECK-NEXT: [[MVE_VHADDs8_:%[0-9]+]]:mqpr = MVE_VHADDs8 [[COPY]], [[COPY]], 1, [[COPY1]], $noreg, [[COPY]]
+ ; CHECK-NEXT: [[MVE_VPNOT:%[0-9]+]]:vccr = MVE_VPNOT [[COPY1]], 0, $noreg, $noreg
+ ; CHECK-NEXT: [[MVE_VSLIimm8_:%[0-9]+]]:mqpr = MVE_VSLIimm8 [[MVE_VHADDs8_]], [[COPY]], 0, 1, [[MVE_VPNOT]], $noreg
+ ; CHECK-NEXT: $q0 = COPY [[MVE_VSLIimm8_]]
+ ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $q0
+ %0:mqpr = COPY $q0
+ %1:rgpr = t2MOVi 0, 14, $noreg, $noreg
+ %2:vccr = COPY %1:rgpr
+ %3:mqpr = MVE_VHADDs8 %0:mqpr, %0:mqpr, 1, killed %2:vccr, $noreg, %0:mqpr
+ %4:rgpr = t2MOVi16 65535, 14, $noreg
+ %5:vccr = COPY %4:rgpr
+ %6:mqpr = MVE_VSLIimm8 %3:mqpr, %0:mqpr, 0, 1, killed %5:vccr, $noreg
+ $q0 = COPY %6:mqpr
+ tBX_RET 14, $noreg, implicit $q0
...
More information about the llvm-commits
mailing list