Skip to content

Commit

Permalink
RegisterCoalescer: Fix iterating through use operands.
Browse files Browse the repository at this point in the history
Fixes a minor bug when trying to iterate through use operands when
updating debug use operands.

Extends a test to include above.

Differential Revision: https://reviews.llvm.org/D104576
  • Loading branch information
Hendrik Greving committed Jun 21, 2021
1 parent 186f2ac commit 9699442
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
4 changes: 3 additions & 1 deletion llvm/lib/CodeGen/RegisterCoalescer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1557,7 +1557,9 @@ bool RegisterCoalescer::reMaterializeTrivialDef(const CoalescerPair &CP,
// If the virtual SrcReg is completely eliminated, update all DBG_VALUEs
// to describe DstReg instead.
if (MRI->use_nodbg_empty(SrcReg)) {
for (MachineOperand &UseMO : MRI->use_operands(SrcReg)) {
for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(SrcReg);
UI != MRI->use_end();) {
MachineOperand &UseMO = *UI++;
MachineInstr *UseMI = UseMO.getParent();
if (UseMI->isDebugValue()) {
if (Register::isPhysicalRegister(DstReg))
Expand Down
17 changes: 10 additions & 7 deletions llvm/test/DebugInfo/MIR/X86/regcoalescer.mir
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@
!16 = !{!7}
!17 = !{!18}
!18 = !DILocalVariable(name: "bazinga", scope: !14, file: !1, line: 13, type: !7)
!19 = !DILocation(line: 14, column: 11, scope: !14)
!20 = !DILocation(line: 13, column: 7, scope: !14)
!21 = !DILocation(line: 16, column: 3, scope: !14)
!19 = !DILocalVariable(name: "bazinga2", scope: !14, file: !1, line: 13, type: !7)
!20 = !DILocation(line: 14, column: 11, scope: !14)
!21 = !DILocation(line: 13, column: 7, scope: !14)
!22 = !DILocation(line: 16, column: 3, scope: !14)

...
---
Expand All @@ -39,12 +40,14 @@ registers:
- { id: 0, class: gr32, preferred-register: '' }
body: |
bb.0.entry:
%0 = MOV32r0 implicit-def dead $eflags, debug-location !19
DBG_VALUE %0, _, !18, !DIExpression(), debug-location !20
$eax = COPY killed %0, debug-location !21
RET 0, killed $eax, debug-location !21
%0 = MOV32r0 implicit-def dead $eflags, debug-location !20
DBG_VALUE %0, _, !18, !DIExpression(), debug-location !21
DBG_VALUE %0, _, !19, !DIExpression(), debug-location !22
$eax = COPY killed %0, debug-location !22
RET 0, killed $eax, debug-location !22
...

# CHECK: $eax = MOV32r0
# CHECK-NEXT: DBG_VALUE $eax
# CHECK-NEXT: DBG_VALUE $eax

0 comments on commit 9699442

Please sign in to comment.