[WebAssembly] Fix debug locations for ExplicitLocals pass

Differential Revision: https://reviews.llvm.org/D112487
This commit is contained in:
Wouter van Oortmerssen 2021-10-25 14:00:42 -07:00
parent f7f430c913
commit a66451ebbe
2 changed files with 8 additions and 3 deletions

View File

@ -379,8 +379,13 @@ bool WebAssemblyExplicitLocals::runOnMachineFunction(MachineFunction &MF) {
const TargetRegisterClass *RC = MRI.getRegClass(OldReg);
Register NewReg = MRI.createVirtualRegister(RC);
unsigned Opc = getLocalGetOpcode(RC);
// Use a blank DebugLoc, because InsertPt may be discontinuous from
// the usage of this value, causing non-linear stepping in the
// debugger or function entry points where variables aren't live yet.
// See crbug.com/1251909, crbug.com/1249745
DebugLoc DL;
InsertPt =
BuildMI(MBB, InsertPt, MI.getDebugLoc(), TII->get(Opc), NewReg)
BuildMI(MBB, InsertPt, DL, TII->get(Opc), NewReg)
.addImm(LocalId);
MO.setReg(NewReg);
MFI.stackifyVReg(MRI, NewReg);

View File

@ -101,8 +101,8 @@ attributes #2 = { nounwind }
; CHECK-NEXT: DW_AT_type (0x00000073 "int")
; CHECK-LABEL: DW_TAG_lexical_block
; CHECK-NEXT: DW_AT_low_pc (0x0000001c)
; CHECK-NEXT: DW_AT_high_pc (0x0000002d)
; CHECK-NEXT: DW_AT_low_pc (0x0000001e)
; CHECK-NEXT: DW_AT_high_pc (0x0000002f)
; CHECK-LABEL: DW_TAG_variable
; CHECK-NEXT: DW_AT_location (DW_OP_fbreg +4)