xref: /freebsd/contrib/llvm-project/llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp (revision aae38d10b4eebf81c0942947e8b83a9bb8651d88)
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