Index: lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp =================================================================== --- lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp +++ lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp @@ -230,6 +230,7 @@ DbgLabelInstrMap &DbgLabels) { const TargetLowering *TLI = MF->getSubtarget().getTargetLowering(); unsigned SP = TLI->getStackPointerRegisterToSaveRestore(); + unsigned FrameReg = TRI->getFrameRegister(*MF); RegDescribedVarsMap RegVars; DbgValueEntriesMap LiveEntries; for (const auto &MBB : *MF) { @@ -277,7 +278,8 @@ // range. Ignore frame-register defs in the epilogue, we expect // debuggers to understand that stack-locations are destroyed on // frame destruction. - else { + else if (MO.getReg() != FrameReg || + !MI.getFlag(MachineInstr::FrameDestroy)) { for (MCRegAliasIterator AI(MO.getReg(), TRI, true); AI.isValid(); ++AI) clobberRegisterUses(RegVars, *AI, DbgValues, LiveEntries, MI); Index: test/DebugInfo/COFF/pieces.ll =================================================================== --- test/DebugInfo/COFF/pieces.ll +++ test/DebugInfo/COFF/pieces.ll @@ -104,8 +104,9 @@ ; ASM: #APP ; ASM: #NO_APP ; ASM: movl [[offset_o_x]](%rsp), %eax # 4-byte Reload -; ASM: [[spill_o_x_end:\.Ltmp[0-9]+]]: ; ASM: retq +; ASM-NEXT: [[spill_o_x_end:\.Ltmp[0-9]+]]: +; ASM-NEXT: .Lfunc_end4: ; ASM-LABEL: .short 4423 # Record kind: S_GPROC32_ID @@ -231,7 +232,7 @@ ; ASM: .asciz "bitpiece_spill" # Function name ; ASM: .short 4414 # Record kind: S_LOCAL ; ASM: .asciz "o" -; ASM: .cv_def_range [[spill_o_x_start]] [[spill_o_x_end]], "E\021O\001A\000$\000\000\000" +; ASM: .cv_def_range [[spill_o_x_start]] .Lfunc_end4, "E\021O\001A\000$\000\000\000" ; OBJ-LABEL: GlobalProcIdSym { ; OBJ: Kind: S_GPROC32_ID (0x1147) Index: test/DebugInfo/X86/dbg-addr.ll =================================================================== --- test/DebugInfo/X86/dbg-addr.ll +++ test/DebugInfo/X86/dbg-addr.ll @@ -13,8 +13,7 @@ ; DW_AT_start_offset instead. ; DWARF: DW_TAG_variable -; DWARF-NEXT: DW_AT_location (0x00000000 -; DWARF-NEXT: [0x{{.*}}, 0x{{.*}}): DW_OP_breg7 RSP+0) +; DWARF-NEXT: DW_AT_location (DW_OP_fbreg +0) ; DWARF-NEXT: DW_AT_name ("o") Index: test/DebugInfo/X86/debug-loc-offset.mir =================================================================== --- test/DebugInfo/X86/debug-loc-offset.mir +++ test/DebugInfo/X86/debug-loc-offset.mir @@ -1,11 +1,5 @@ # RUN: llc -o - %s -start-after=patchable-function -filetype=obj -O0 -mtriple=i386-unknown-linux-gnu -dwarf-version=4 | llvm-dwarfdump -v - | FileCheck %s -# XFAIL: * -# Marked XFail due to the removal of "ChangingRegs" from -# DbgEntityHistoryCalculator, shortening the checked range to not reach the -# end of the function. Fixed by an about-to-land patch using the FrameDestroy -# flag to identify the end of functions. - # From the code: # # debug-loc-offset1.cc Index: test/DebugInfo/X86/pr19307.mir =================================================================== --- test/DebugInfo/X86/pr19307.mir +++ test/DebugInfo/X86/pr19307.mir @@ -1,11 +1,5 @@ # RUN: llc -o - %s -start-after=patchable-function -O0 | FileCheck %s -# XFAIL: * -# Marked XFail due to the removal of "ChangingRegs" from -# DbgEntityHistoryCalculator, shortening the checked range to not reach the -# end of the function. Fixed by an about-to-land patch using the FrameDestroy -# flag to identify the end of functions. - # Generated from the source file pr19307.cc: # #include # void parse_range(unsigned long long &offset, unsigned long long &limit,