forked from OSchip/llvm-project
[WebAssembly] Fix debug locations for ExplicitLocals pass
This is a reworked version of the reverted patch: https://reviews.llvm.org/D112487 Note that a) it doesn't need the test changes anymore, and b) I checked at least locally it passes other.test_pthread_lsan_leak Differential Revision: https://reviews.llvm.org/D113208
This commit is contained in:
parent
5de4864f74
commit
a320f877ce
|
@ -379,9 +379,14 @@ bool WebAssemblyExplicitLocals::runOnMachineFunction(MachineFunction &MF) {
|
|||
const TargetRegisterClass *RC = MRI.getRegClass(OldReg);
|
||||
Register NewReg = MRI.createVirtualRegister(RC);
|
||||
unsigned Opc = getLocalGetOpcode(RC);
|
||||
InsertPt =
|
||||
BuildMI(MBB, InsertPt, MI.getDebugLoc(), TII->get(Opc), NewReg)
|
||||
.addImm(LocalId);
|
||||
// Use a InsertPt as our DebugLoc, since MI may be discontinuous from
|
||||
// the where this local is being inserted, causing non-linear stepping
|
||||
// in the debugger or function entry points where variables aren't live
|
||||
// yet. Alternative is previous instruction, but that is strictly worse
|
||||
// since it can point at the previous statement.
|
||||
// See crbug.com/1251909, crbug.com/1249745
|
||||
InsertPt = BuildMI(MBB, InsertPt, InsertPt->getDebugLoc(),
|
||||
TII->get(Opc), NewReg).addImm(LocalId);
|
||||
MO.setReg(NewReg);
|
||||
MFI.stackifyVReg(MRI, NewReg);
|
||||
Changed = true;
|
||||
|
|
Loading…
Reference in New Issue