diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp index 78191ae758fe..55be64ad7da0 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp @@ -24,13 +24,14 @@ WebAssemblyDebugValueManager::WebAssemblyDebugValueManager( // the whole BB, not just contiguous DBG_VALUEs. if (!Instr->getOperand(0).isReg()) return; + CurrentReg = Instr->getOperand(0).getReg(); MachineBasicBlock::iterator DI = *Instr; ++DI; for (MachineBasicBlock::iterator DE = Instr->getParent()->end(); DI != DE; ++DI) { if (DI->isDebugValue() && - DI->getDebugOperandForReg(Instr->getOperand(0).getReg())) + DI->hasDebugOperandForReg(Instr->getOperand(0).getReg())) DbgValues.push_back(&*DI); } } @@ -43,7 +44,9 @@ void WebAssemblyDebugValueManager::move(MachineInstr *Insert) { void WebAssemblyDebugValueManager::updateReg(unsigned Reg) { for (auto *DBI : DbgValues) - DBI->getDebugOperand(0).setReg(Reg); + for (auto &MO : DBI->getDebugOperandsForReg(CurrentReg)) + MO.setReg(Reg); + CurrentReg = Reg; } void WebAssemblyDebugValueManager::clone(MachineInstr *Insert, @@ -52,14 +55,18 @@ void WebAssemblyDebugValueManager::clone(MachineInstr *Insert, MachineFunction *MF = MBB->getParent(); for (MachineInstr *DBI : reverse(DbgValues)) { MachineInstr *Clone = MF->CloneMachineInstr(DBI); - Clone->getDebugOperand(0).setReg(NewReg); + for (auto &MO : Clone->getDebugOperandsForReg(CurrentReg)) + MO.setReg(NewReg); MBB->insert(Insert, Clone); } } void WebAssemblyDebugValueManager::replaceWithLocal(unsigned LocalId) { for (auto *DBI : DbgValues) { - MachineOperand &Op = DBI->getDebugOperand(0); - Op.ChangeToTargetIndex(llvm::WebAssembly::TI_LOCAL, LocalId); + auto IndexType = DBI->isIndirectDebugValue() + ? llvm::WebAssembly::TI_LOCAL_INDIRECT + : llvm::WebAssembly::TI_LOCAL; + for (auto &MO : DBI->getDebugOperandsForReg(CurrentReg)) + MO.ChangeToTargetIndex(IndexType, LocalId); } } |
