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