Skip to content

Commit 72b9deb

Browse files
committedJan 3, 2019
[CodeGen] Skip over dbg-instr in twoaddr pass
A DBG_VALUE between a two-address instruction and a following COPY would prevent rescheduleMIBelowKill optimization inside TwoAddressInstructionPass. Differential Revision: https://reviews.llvm.org/D55987 llvm-svn: 350289
1 parent 74e7d26 commit 72b9deb

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed
 

‎llvm/lib/CodeGen/TwoAddressInstructionPass.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -929,9 +929,12 @@ rescheduleMIBelowKill(MachineBasicBlock::iterator &mi,
929929
MachineBasicBlock::iterator Begin = MI;
930930
MachineBasicBlock::iterator AfterMI = std::next(Begin);
931931
MachineBasicBlock::iterator End = AfterMI;
932-
while (End->isCopy() &&
933-
regOverlapsSet(Defs, End->getOperand(1).getReg(), TRI)) {
934-
Defs.push_back(End->getOperand(0).getReg());
932+
while (End != MBB->end()) {
933+
End = skipDebugInstructionsForward(End, MBB->end());
934+
if (End->isCopy() && regOverlapsSet(Defs, End->getOperand(1).getReg(), TRI))
935+
Defs.push_back(End->getOperand(0).getReg());
936+
else
937+
break;
935938
++End;
936939
}
937940

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# RUN: llc -run-pass=livevars,twoaddressinstruction -mtriple=x86_64-- -o - %s | FileCheck %s
2+
---
3+
name: foo
4+
tracksRegLiveness: true
5+
body: |
6+
bb.0:
7+
liveins: $edi
8+
9+
%0:gr32 = COPY killed $edi
10+
%1:gr32 = COPY killed %0
11+
%4:gr32 = XOR32ri8 %1, 1, implicit-def dead $eflags
12+
DBG_VALUE %4
13+
%5:gr32 = COPY %4
14+
PUSH32r killed %1, implicit-def $esp, implicit $esp
15+
$eax = COPY killed %5
16+
RETQ implicit killed $eax
17+
18+
...
19+
20+
# Verify that the DBG_VALUE instruction does not inhibit
21+
# TwoAddressInstructionPass::rescheduleMIBelowKill optimization
22+
23+
# CHECK: PUSH32r %1, implicit-def $esp, implicit $esp
24+
# CHECK-NEXT: %2:gr32 = COPY killed %1
25+
# CHECK-NEXT: %2:gr32 = XOR32ri8 %2, 1, implicit-def dead $eflags
26+
# CHECK-NEXT: DBG_VALUE %2
27+
# CHECK-NEXT: %3:gr32 = COPY killed %2

0 commit comments

Comments
 (0)
Please sign in to comment.