Skip to content

Commit 313bf28

Browse files
authored
[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.
1 parent c388690 commit 313bf28

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,7 @@ bool MVETPAndVPTOptimisations::ReplaceConstByVPNOTs(MachineBasicBlock &MBB,
958958

959959
unsigned NotImm = ~Imm & 0xffff;
960960
if (LastVPTReg != 0 && LastVPTReg != VPR && LastVPTImm == Imm) {
961+
MRI->clearKillFlags(LastVPTReg);
961962
Instr.getOperand(PIdx + 1).setReg(LastVPTReg);
962963
if (MRI->use_empty(VPR)) {
963964
DeadInstructions.insert(Copy);

llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2-
# 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
2+
# 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
33

44
---
55
name: vcmp_with_opposite_cond
@@ -1021,3 +1021,26 @@ body: |
10211021
%16:mqpr = MVE_VORR %15, %15, 1, %10, $noreg, undef %16
10221022
%17:mqpr = MVE_VORR %16, %16, 1, %11, $noreg, undef %17
10231023
...
1024+
---
1025+
name: reuse_kill_flags
1026+
alignment: 4
1027+
body: |
1028+
bb.0:
1029+
; CHECK-LABEL: name: reuse_kill_flags
1030+
; CHECK: [[t2MOVi:%[0-9]+]]:tgpreven = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
1031+
; CHECK-NEXT: [[COPY:%[0-9]+]]:vccr = COPY [[t2MOVi]]
1032+
; CHECK-NEXT: [[DEF:%[0-9]+]]:mqpr = IMPLICIT_DEF
1033+
; CHECK-NEXT: [[MVE_VORR:%[0-9]+]]:mqpr = MVE_VORR [[DEF]], [[DEF]], 1, [[COPY]], $noreg, undef [[MVE_VORR]]
1034+
; CHECK-NEXT: [[DEF1:%[0-9]+]]:mqpr = IMPLICIT_DEF
1035+
; CHECK-NEXT: [[MVE_VORR1:%[0-9]+]]:mqpr = MVE_VORR [[DEF1]], [[DEF1]], 1, killed [[COPY]], $noreg, undef [[MVE_VORR1]]
1036+
; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit [[DEF1]]
1037+
%0:tgpreven = t2MOVi 0, 14, $noreg, $noreg
1038+
%1:vccr = COPY %0:tgpreven
1039+
%2:mqpr = IMPLICIT_DEF
1040+
%3:mqpr = MVE_VORR %2:mqpr, %2:mqpr, 1, killed %1, $noreg, undef %3
1041+
%4:vccr = COPY %0:tgpreven
1042+
%5:mqpr = IMPLICIT_DEF
1043+
%6:mqpr = MVE_VORR %5:mqpr, %5:mqpr, 1, killed %4, $noreg, undef %6
1044+
tBX_RET 14 /* CC::al */, $noreg, implicit %5:mqpr
1045+
1046+
...

0 commit comments

Comments
 (0)