Skip to content

Commit 2484060

Browse files
authored
[RISCV] Clear kill flags after replaceRegWith in RISCVFoldMemOffset. (#136762)
Any kill flags that were present for the old register are not valid for the replacement and the replacement may have extended the live range of the replacement register.
1 parent 4e679ea commit 2484060

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

Diff for: llvm/lib/Target/RISCV/RISCVFoldMemOffset.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ bool RISCVFoldMemOffset::runOnMachineFunction(MachineFunction &MF) {
274274
MemMI->getOperand(2).setImm(NewOffset);
275275

276276
MRI.replaceRegWith(MI.getOperand(0).getReg(), MI.getOperand(1).getReg());
277+
MRI.clearKillFlags(MI.getOperand(1).getReg());
277278
MI.eraseFromParent();
278279
}
279280
}

Diff for: llvm/test/CodeGen/RISCV/fold-mem-offset.mir

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2+
# RUN: llc %s -mtriple=riscv32 -run-pass=riscv-fold-mem-offset -verify-machineinstrs -o - | FileCheck %s
3+
4+
---
5+
name: crash
6+
tracksRegLiveness: true
7+
noPhis: false
8+
isSSA: true
9+
noVRegs: false
10+
hasFakeUses: false
11+
body: |
12+
bb.0:
13+
liveins: $x10, $x11
14+
15+
; CHECK-LABEL: name: crash
16+
; CHECK: liveins: $x10, $x11
17+
; CHECK-NEXT: {{ $}}
18+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x11
19+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x10
20+
; CHECK-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 3
21+
; CHECK-NEXT: [[ADD:%[0-9]+]]:gpr = ADD killed [[SLLI]], [[COPY1]]
22+
; CHECK-NEXT: [[LUI:%[0-9]+]]:gpr = LUI 23
23+
; CHECK-NEXT: [[ADD1:%[0-9]+]]:gpr = ADD [[ADD]], [[LUI]]
24+
; CHECK-NEXT: [[ADD2:%[0-9]+]]:gpr = ADD [[ADD]], [[LUI]]
25+
; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW killed [[ADD2]], 1792
26+
; CHECK-NEXT: [[LW1:%[0-9]+]]:gpr = LW killed [[ADD1]], 1796
27+
; CHECK-NEXT: $x10 = COPY [[LW]]
28+
; CHECK-NEXT: $x11 = COPY [[LW1]]
29+
; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
30+
%1:gpr = COPY $x11
31+
%0:gpr = COPY $x10
32+
%3:gpr = SLLI %1, 3
33+
%4:gpr = ADD killed %3, %0
34+
%5:gpr = LUI 23
35+
%6:gpr = ADDI %5, 1792
36+
%7:gpr = ADD %4, killed %6
37+
%8:gpr = ADD %4, %5
38+
%9:gpr = LW killed %8, 1792
39+
%10:gpr = LW killed %7, 4
40+
$x10 = COPY %9
41+
$x11 = COPY %10
42+
PseudoRET implicit $x10, implicit $x11
43+
...

0 commit comments

Comments
 (0)