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