64 lines · cpp
1//=== WebAssemblyNullifyDebugValueLists.cpp - Nullify DBG_VALUE_LISTs ---===//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-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// Nullify DBG_VALUE_LISTs instructions as a temporary measure before we11/// implement DBG_VALUE_LIST handling in WebAssemblyDebugValueManager.12/// See https://github.com/llvm/llvm-project/issues/49705.13/// TODO Correctly handle DBG_VALUE_LISTs14///15//===----------------------------------------------------------------------===//16 17#include "WebAssembly.h"18#include "llvm/CodeGen/MachineFunctionPass.h"19using namespace llvm;20 21#define DEBUG_TYPE "wasm-nullify-dbg-value-lists"22 23namespace {24class WebAssemblyNullifyDebugValueLists final : public MachineFunctionPass {25 StringRef getPassName() const override {26 return "WebAssembly Nullify DBG_VALUE_LISTs";27 }28 29 bool runOnMachineFunction(MachineFunction &MF) override;30 31public:32 static char ID; // Pass identification, replacement for typeid33 WebAssemblyNullifyDebugValueLists() : MachineFunctionPass(ID) {}34};35} // end anonymous namespace36 37char WebAssemblyNullifyDebugValueLists::ID = 0;38INITIALIZE_PASS(WebAssemblyNullifyDebugValueLists, DEBUG_TYPE,39 "WebAssembly Nullify DBG_VALUE_LISTs", false, false)40 41FunctionPass *llvm::createWebAssemblyNullifyDebugValueLists() {42 return new WebAssemblyNullifyDebugValueLists();43}44 45bool WebAssemblyNullifyDebugValueLists::runOnMachineFunction(46 MachineFunction &MF) {47 LLVM_DEBUG(dbgs() << "********** Nullify DBG_VALUE_LISTs **********\n"48 "********** Function: "49 << MF.getName() << '\n');50 bool Changed = false;51 // Our backend, including WebAssemblyDebugValueManager, currently cannot52 // handle DBG_VALUE_LISTs correctly. So this makes them undefined, which will53 // appear as "optimized out".54 for (auto &MBB : MF) {55 for (auto &MI : MBB) {56 if (MI.getOpcode() == TargetOpcode::DBG_VALUE_LIST) {57 MI.setDebugValueUndef();58 Changed = true;59 }60 }61 }62 return Changed;63}64