diff options
author | David Green <david.green@arm.com> | 2024-03-27 16:04:48 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-27 16:04:48 +0000 |
commit | 313bf28f98f714a0bd8f74a3beb4631d94428f89 (patch) | |
tree | 6100dc51d054a1224f1229f3adef7720f9c0c15f | |
parent | c388690a8b96cbdfa8c38a1e050088201da648e5 (diff) | |
download | llvm-313bf28f98f714a0bd8f74a3beb4631d94428f89.zip llvm-313bf28f98f714a0bd8f74a3beb4631d94428f89.tar.gz llvm-313bf28f98f714a0bd8f74a3beb4631d94428f89.tar.bz2 |
[ARM][MVE] Remove kill flags when reusing VPR register. (#86300)
The vpr register may no longer be killed where it was, so we should be
removing the kill flags.
-rw-r--r-- | llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp | 1 | ||||
-rw-r--r-- | llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir | 25 |
2 files changed, 25 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp b/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp index 5c113cc..e8d2cba 100644 --- a/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp +++ b/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp @@ -958,6 +958,7 @@ bool MVETPAndVPTOptimisations::ReplaceConstByVPNOTs(MachineBasicBlock &MBB, unsigned NotImm = ~Imm & 0xffff; if (LastVPTReg != 0 && LastVPTReg != VPR && LastVPTImm == Imm) { + MRI->clearKillFlags(LastVPTReg); Instr.getOperand(PIdx + 1).setReg(LastVPTReg); if (MRI->use_empty(VPR)) { DeadInstructions.insert(Copy); diff --git a/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir b/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir index f28311e..f9b175e 100644 --- a/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir +++ b/llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir @@ -1,5 +1,5 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py -# RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+armv8.1-m.main,+hwdiv,+mve.fp,+ras,+thumb-mode -run-pass arm-mve-vpt-opts %s -o - | FileCheck %s +# RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+armv8.1-m.main,+hwdiv,+mve.fp,+ras,+thumb-mode -run-pass arm-mve-vpt-opts -verify-machineinstrs %s -o - | FileCheck %s --- name: vcmp_with_opposite_cond @@ -1021,3 +1021,26 @@ body: | %16:mqpr = MVE_VORR %15, %15, 1, %10, $noreg, undef %16 %17:mqpr = MVE_VORR %16, %16, 1, %11, $noreg, undef %17 ... +--- +name: reuse_kill_flags +alignment: 4 +body: | + bb.0: + ; CHECK-LABEL: name: reuse_kill_flags + ; CHECK: [[t2MOVi:%[0-9]+]]:tgpreven = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg + ; CHECK-NEXT: [[COPY:%[0-9]+]]:vccr = COPY [[t2MOVi]] + ; CHECK-NEXT: [[DEF:%[0-9]+]]:mqpr = IMPLICIT_DEF + ; CHECK-NEXT: [[MVE_VORR:%[0-9]+]]:mqpr = MVE_VORR [[DEF]], [[DEF]], 1, [[COPY]], $noreg, undef [[MVE_VORR]] + ; CHECK-NEXT: [[DEF1:%[0-9]+]]:mqpr = IMPLICIT_DEF + ; CHECK-NEXT: [[MVE_VORR1:%[0-9]+]]:mqpr = MVE_VORR [[DEF1]], [[DEF1]], 1, killed [[COPY]], $noreg, undef [[MVE_VORR1]] + ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit [[DEF1]] + %0:tgpreven = t2MOVi 0, 14, $noreg, $noreg + %1:vccr = COPY %0:tgpreven + %2:mqpr = IMPLICIT_DEF + %3:mqpr = MVE_VORR %2:mqpr, %2:mqpr, 1, killed %1, $noreg, undef %3 + %4:vccr = COPY %0:tgpreven + %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 + +... |