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 Andric WebAssemblyDebugValueManager::WebAssemblyDebugValueManager(
22*b5893f02SDimitry Andric     MachineInstr *Instr) {
23*b5893f02SDimitry Andric   Instr->collectDebugValues(DbgValues);
24*b5893f02SDimitry Andric }
25*b5893f02SDimitry Andric 
move(MachineInstr * Insert)26*b5893f02SDimitry Andric void 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 Andric void 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 Andric void 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