RegisterCoalescer: Fix iterating through use operands.

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
This commit is contained in:
Hendrik Greving 2021-06-18 15:16:38 -07:00
parent 186f2ac612
commit 96994427f2
2 changed files with 13 additions and 8 deletions

View File

@ -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))

View File

@ -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)
...
---
@ -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