Skip to content

Commit

Permalink
Fix minor deficiency in machine-sink.
Browse files Browse the repository at this point in the history
Register uses that are MRI->isConstantPhysReg() should not inhibit
sinking transformation.

Reviewed By: StephenTozer

Differential Revision: https://reviews.llvm.org/D111531
  • Loading branch information
markuslavin committed Nov 12, 2021
1 parent c265170 commit 4e94e25
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
3 changes: 2 additions & 1 deletion llvm/lib/CodeGen/MachineSink.cpp
Expand Up @@ -1324,7 +1324,8 @@ bool MachineSinking::SinkInstruction(MachineInstr &MI, bool &SawStore,
// "zombie" define of that preg. E.g., EFLAGS. (<rdar://problem/8030636>)
for (unsigned I = 0, E = MI.getNumOperands(); I != E; ++I) {
const MachineOperand &MO = MI.getOperand(I);
if (!MO.isReg()) continue;
if (!MO.isReg() || MO.isUse())
continue;
Register Reg = MO.getReg();
if (Reg == 0 || !Register::isPhysicalRegister(Reg))
continue;
Expand Down
33 changes: 33 additions & 0 deletions llvm/test/CodeGen/RISCV/MachineSink-implicit-x0.mir
@@ -0,0 +1,33 @@
# RUN: llc -mtriple=riscv32 %s -run-pass=machine-sink -o - | FileCheck %s

# Verify that sinking of '%20:gpr = LUI 1, implicit $x0' is not inhibited by
# the implicit use of '$x0'.
# Register '$x0' is a 'MRI->isConstantPhysReg()' on RISCV and such uses should
# not inhibit sinking transformation even though they are livein to the block
# they are to be sunk into (inhibit under such conditions should only happen
# for defines).

---
name: f
tracksRegLiveness: true
body: |
; CHECK-LABEL: bb.1:
; CHECK-NEXT: successors: %bb.3(0x80000000)
; CHECK-NEXT: liveins: $x0
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[LUI:%[0-9]+]]:gpr = LUI 1, implicit $x0
bb.0:
liveins: $x10
%10:gpr = COPY $x10
%20:gpr = LUI 1, implicit $x0
BEQ %10, %10, %bb.2
PseudoBR %bb.1
bb.1:
liveins: $x0
%30:gpr = ADDI %20, 5
PseudoBR %bb.3
bb.2:
PseudoBR %bb.3
bb.3:
PseudoRET
...

0 comments on commit 4e94e25

Please sign in to comment.