brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 2306255 Raw
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