xref: /freebsd/contrib/llvm-project/llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp (revision 6966ac055c3b7a39266fb982493330df7a097997)
1 //===-- WebAssemblyDebugValueManager.cpp - WebAssembly DebugValue Manager -===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 ///
9 /// \file
10 /// This file implements the manager for MachineInstr DebugValues.
11 ///
12 //===----------------------------------------------------------------------===//
13 
14 #include "WebAssemblyDebugValueManager.h"
15 #include "WebAssemblyMachineFunctionInfo.h"
16 #include "llvm/CodeGen/MachineInstr.h"
17 
18 using namespace llvm;
19 
20 WebAssemblyDebugValueManager::WebAssemblyDebugValueManager(
21     MachineInstr *Instr) {
22   Instr->collectDebugValues(DbgValues);
23 }
24 
25 void WebAssemblyDebugValueManager::move(MachineInstr *Insert) {
26   MachineBasicBlock *MBB = Insert->getParent();
27   for (MachineInstr *DBI : reverse(DbgValues))
28     MBB->splice(Insert, DBI->getParent(), DBI);
29 }
30 
31 void WebAssemblyDebugValueManager::updateReg(unsigned Reg) {
32   for (auto *DBI : DbgValues)
33     DBI->getOperand(0).setReg(Reg);
34 }
35 
36 void WebAssemblyDebugValueManager::clone(MachineInstr *Insert,
37                                          unsigned NewReg) {
38   MachineBasicBlock *MBB = Insert->getParent();
39   MachineFunction *MF = MBB->getParent();
40   for (MachineInstr *DBI : reverse(DbgValues)) {
41     MachineInstr *Clone = MF->CloneMachineInstr(DBI);
42     Clone->getOperand(0).setReg(NewReg);
43     MBB->insert(Insert, Clone);
44   }
45 }
46