1 //===-- WebAssemblyDebugValueManager.cpp - WebAssembly DebugValue Manager -===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// 10 /// \file 11 /// This file implements the manager for MachineInstr DebugValues. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #include "WebAssemblyDebugValueManager.h" 16 #include "WebAssemblyMachineFunctionInfo.h" 17 #include "llvm/CodeGen/MachineInstr.h" 18 19 using namespace llvm; 20 21 WebAssemblyDebugValueManager::WebAssemblyDebugValueManager( 22 MachineInstr *Instr) { 23 Instr->collectDebugValues(DbgValues); 24 } 25 26 void WebAssemblyDebugValueManager::move(MachineInstr *Insert) { 27 MachineBasicBlock *MBB = Insert->getParent(); 28 for (MachineInstr *DBI : reverse(DbgValues)) 29 MBB->splice(Insert, DBI->getParent(), DBI); 30 } 31 32 void WebAssemblyDebugValueManager::updateReg(unsigned Reg) { 33 for (auto *DBI : DbgValues) 34 DBI->getOperand(0).setReg(Reg); 35 } 36 37 void WebAssemblyDebugValueManager::clone(MachineInstr *Insert, 38 unsigned NewReg) { 39 MachineBasicBlock *MBB = Insert->getParent(); 40 MachineFunction *MF = MBB->getParent(); 41 for (MachineInstr *DBI : reverse(DbgValues)) { 42 MachineInstr *Clone = MF->CloneMachineInstr(DBI); 43 Clone->getOperand(0).setReg(NewReg); 44 MBB->insert(Insert, Clone); 45 } 46 } 47