]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / WebAssembly / WebAssemblyDebugValueManager.cpp
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 }