1343171Sdim//===-- WebAssemblyDebugValueManager.cpp - WebAssembly DebugValue Manager -===//
2343171Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6343171Sdim//
7343171Sdim//===----------------------------------------------------------------------===//
8343171Sdim///
9343171Sdim/// \file
10343171Sdim/// This file implements the manager for MachineInstr DebugValues.
11343171Sdim///
12343171Sdim//===----------------------------------------------------------------------===//
13343171Sdim
14343171Sdim#include "WebAssemblyDebugValueManager.h"
15360784Sdim#include "WebAssembly.h"
16343171Sdim#include "WebAssemblyMachineFunctionInfo.h"
17343171Sdim#include "llvm/CodeGen/MachineInstr.h"
18343171Sdim
19343171Sdimusing namespace llvm;
20343171Sdim
21343171SdimWebAssemblyDebugValueManager::WebAssemblyDebugValueManager(
22343171Sdim    MachineInstr *Instr) {
23343171Sdim  Instr->collectDebugValues(DbgValues);
24343171Sdim}
25343171Sdim
26343171Sdimvoid WebAssemblyDebugValueManager::move(MachineInstr *Insert) {
27343171Sdim  MachineBasicBlock *MBB = Insert->getParent();
28343171Sdim  for (MachineInstr *DBI : reverse(DbgValues))
29343171Sdim    MBB->splice(Insert, DBI->getParent(), DBI);
30343171Sdim}
31343171Sdim
32343171Sdimvoid WebAssemblyDebugValueManager::updateReg(unsigned Reg) {
33343171Sdim  for (auto *DBI : DbgValues)
34343171Sdim    DBI->getOperand(0).setReg(Reg);
35343171Sdim}
36343171Sdim
37343171Sdimvoid WebAssemblyDebugValueManager::clone(MachineInstr *Insert,
38343171Sdim                                         unsigned NewReg) {
39343171Sdim  MachineBasicBlock *MBB = Insert->getParent();
40343171Sdim  MachineFunction *MF = MBB->getParent();
41343171Sdim  for (MachineInstr *DBI : reverse(DbgValues)) {
42343171Sdim    MachineInstr *Clone = MF->CloneMachineInstr(DBI);
43343171Sdim    Clone->getOperand(0).setReg(NewReg);
44343171Sdim    MBB->insert(Insert, Clone);
45343171Sdim  }
46343171Sdim}
47360784Sdim
48360784Sdimvoid WebAssemblyDebugValueManager::replaceWithLocal(unsigned LocalId) {
49360784Sdim  for (auto *DBI : DbgValues) {
50360784Sdim    MachineOperand &Op = DBI->getOperand(0);
51360784Sdim    Op.ChangeToTargetIndex(llvm::WebAssembly::TI_LOCAL_START, LocalId);
52360784Sdim  }
53360784Sdim}
54