xref: /src/contrib/llvm-project/llvm/lib/Target/WebAssembly/WebAssemblyNullifyDebugValueLists.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1344a3780SDimitry Andric //=== WebAssemblyNullifyDebugValueLists.cpp - Nullify DBG_VALUE_LISTs   ---===//
2344a3780SDimitry Andric //
3344a3780SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4344a3780SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5344a3780SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6344a3780SDimitry Andric //
7344a3780SDimitry Andric //===----------------------------------------------------------------------===//
8344a3780SDimitry Andric ///
9344a3780SDimitry Andric /// \file
10344a3780SDimitry Andric /// Nullify DBG_VALUE_LISTs instructions as a temporary measure before we
11344a3780SDimitry Andric /// implement DBG_VALUE_LIST handling in WebAssemblyDebugValueManager.
127fa27ce4SDimitry Andric /// See https://github.com/llvm/llvm-project/issues/49705.
13344a3780SDimitry Andric /// TODO Correctly handle DBG_VALUE_LISTs
14344a3780SDimitry Andric ///
15344a3780SDimitry Andric //===----------------------------------------------------------------------===//
16344a3780SDimitry Andric 
17344a3780SDimitry Andric #include "WebAssembly.h"
18344a3780SDimitry Andric #include "WebAssemblySubtarget.h"
19145449b1SDimitry Andric #include "llvm/CodeGen/MachineFunctionPass.h"
20344a3780SDimitry Andric using namespace llvm;
21344a3780SDimitry Andric 
22344a3780SDimitry Andric #define DEBUG_TYPE "wasm-nullify-dbg-value-lists"
23344a3780SDimitry Andric 
24344a3780SDimitry Andric namespace {
25344a3780SDimitry Andric class WebAssemblyNullifyDebugValueLists final : public MachineFunctionPass {
getPassName() const26344a3780SDimitry Andric   StringRef getPassName() const override {
27344a3780SDimitry Andric     return "WebAssembly Nullify DBG_VALUE_LISTs";
28344a3780SDimitry Andric   }
29344a3780SDimitry Andric 
30344a3780SDimitry Andric   bool runOnMachineFunction(MachineFunction &MF) override;
31344a3780SDimitry Andric 
32344a3780SDimitry Andric public:
33344a3780SDimitry Andric   static char ID; // Pass identification, replacement for typeid
WebAssemblyNullifyDebugValueLists()34344a3780SDimitry Andric   WebAssemblyNullifyDebugValueLists() : MachineFunctionPass(ID) {}
35344a3780SDimitry Andric };
36344a3780SDimitry Andric } // end anonymous namespace
37344a3780SDimitry Andric 
38344a3780SDimitry Andric char WebAssemblyNullifyDebugValueLists::ID = 0;
39344a3780SDimitry Andric INITIALIZE_PASS(WebAssemblyNullifyDebugValueLists, DEBUG_TYPE,
40344a3780SDimitry Andric                 "WebAssembly Nullify DBG_VALUE_LISTs", false, false)
41344a3780SDimitry Andric 
createWebAssemblyNullifyDebugValueLists()42344a3780SDimitry Andric FunctionPass *llvm::createWebAssemblyNullifyDebugValueLists() {
43344a3780SDimitry Andric   return new WebAssemblyNullifyDebugValueLists();
44344a3780SDimitry Andric }
45344a3780SDimitry Andric 
runOnMachineFunction(MachineFunction & MF)46344a3780SDimitry Andric bool WebAssemblyNullifyDebugValueLists::runOnMachineFunction(
47344a3780SDimitry Andric     MachineFunction &MF) {
48344a3780SDimitry Andric   LLVM_DEBUG(dbgs() << "********** Nullify DBG_VALUE_LISTs **********\n"
49344a3780SDimitry Andric                        "********** Function: "
50344a3780SDimitry Andric                     << MF.getName() << '\n');
517fa27ce4SDimitry Andric   bool Changed = false;
52344a3780SDimitry Andric   // Our backend, including WebAssemblyDebugValueManager, currently cannot
537fa27ce4SDimitry Andric   // handle DBG_VALUE_LISTs correctly. So this makes them undefined, which will
547fa27ce4SDimitry Andric   // appear as "optimized out".
557fa27ce4SDimitry Andric   for (auto &MBB : MF) {
567fa27ce4SDimitry Andric     for (auto &MI : MBB) {
577fa27ce4SDimitry Andric       if (MI.getOpcode() == TargetOpcode::DBG_VALUE_LIST) {
587fa27ce4SDimitry Andric         MI.setDebugValueUndef();
597fa27ce4SDimitry Andric         Changed = true;
60344a3780SDimitry Andric       }
617fa27ce4SDimitry Andric     }
627fa27ce4SDimitry Andric   }
637fa27ce4SDimitry Andric   return Changed;
64344a3780SDimitry Andric }
65