| //===-- WebAssemblyDebugValueManager.cpp - WebAssembly DebugValue Manager -===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file |
| /// This file implements the manager for MachineInstr DebugValues. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #include "WebAssemblyDebugValueManager.h" |
| #include "WebAssembly.h" |
| #include "WebAssemblyMachineFunctionInfo.h" |
| #include "llvm/CodeGen/MachineInstr.h" |
| |
| using namespace llvm; |
| |
| WebAssemblyDebugValueManager::WebAssemblyDebugValueManager( |
| MachineInstr *Instr) { |
| Instr->collectDebugValues(DbgValues); |
| } |
| |
| void WebAssemblyDebugValueManager::move(MachineInstr *Insert) { |
| MachineBasicBlock *MBB = Insert->getParent(); |
| for (MachineInstr *DBI : reverse(DbgValues)) |
| MBB->splice(Insert, DBI->getParent(), DBI); |
| } |
| |
| void WebAssemblyDebugValueManager::updateReg(unsigned Reg) { |
| for (auto *DBI : DbgValues) |
| DBI->getOperand(0).setReg(Reg); |
| } |
| |
| void WebAssemblyDebugValueManager::clone(MachineInstr *Insert, |
| unsigned NewReg) { |
| MachineBasicBlock *MBB = Insert->getParent(); |
| MachineFunction *MF = MBB->getParent(); |
| for (MachineInstr *DBI : reverse(DbgValues)) { |
| MachineInstr *Clone = MF->CloneMachineInstr(DBI); |
| Clone->getOperand(0).setReg(NewReg); |
| MBB->insert(Insert, Clone); |
| } |
| } |
| |
| void WebAssemblyDebugValueManager::replaceWithLocal(unsigned LocalId) { |
| for (auto *DBI : DbgValues) { |
| MachineOperand &Op = DBI->getOperand(0); |
| Op.ChangeToTargetIndex(llvm::WebAssembly::TI_LOCAL_START, LocalId); |
| } |
| } |