Index: lib/CodeGen/LiveDebugVariables.cpp =================================================================== --- lib/CodeGen/LiveDebugVariables.cpp +++ lib/CodeGen/LiveDebugVariables.cpp @@ -1087,6 +1087,7 @@ // index is no longer available. That means the user value is in a // non-existent sub-register, and %noreg is exactly what we want. Loc.substPhysReg(VRM.getPhys(VirtReg), TRI); + Loc.setIsRenamable(); } else if (VRM.getStackSlot(VirtReg) != VirtRegMap::NO_STACK_SLOT) { // Retrieve the stack slot offset. unsigned SpillSize; Index: lib/CodeGen/MachineCopyPropagation.cpp =================================================================== --- lib/CodeGen/MachineCopyPropagation.cpp +++ lib/CodeGen/MachineCopyPropagation.cpp @@ -307,6 +307,11 @@ bool MachineCopyPropagation::isForwardableRegClassCopy(const MachineInstr &Copy, const MachineInstr &UseI, unsigned UseIdx) { + // Debug values have no register classes to be examined + if (UseI.isDebugValue()) { + assert(UseI.getOperand(UseIdx).isReg()); + return true; + } unsigned CopySrcReg = Copy.getOperand(1).getReg(); @@ -612,7 +617,7 @@ // Update matching debug values. assert(MaybeDead->isCopy()); - MaybeDead->changeDebugValuesDefReg(MaybeDead->getOperand(1).getReg()); + //MaybeDead->changeDebugValuesDefReg(MaybeDead->getOperand(1).getReg()); MaybeDead->eraseFromParent(); Changed = true; Index: test/CodeGen/MIR/X86/pr38773.mir =================================================================== --- test/CodeGen/MIR/X86/pr38773.mir +++ test/CodeGen/MIR/X86/pr38773.mir @@ -98,7 +98,7 @@ renamable $ecx = COPY $eax ; CHECK: IDIV32r killed renamable $ecx ; CHECK-NEXT: DBG_VALUE $eax, $noreg, !12, !DIExpression(), debug-location !13 - DBG_VALUE $ecx, $noreg, !12, !DIExpression(), debug-location !13 + DBG_VALUE renamable $ecx, $noreg, !12, !DIExpression(), debug-location !13 $eax = COPY killed renamable $ecx RET 0, $eax