///===- DroppedVariableStatsIR.h - Opt Diagnostics -*- C++ -*--------------===// /// /// Part of the LLVM Project, under the Apache License v2.0 with LLVM /// Exceptions. See https://llvm.org/LICENSE.txt for license information. /// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /// ///===---------------------------------------------------------------------===// /// \file /// Dropped Variable Statistics for Debug Information. Reports any number /// of #dbg_value that get dropped due to an optimization pass. /// ///===---------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_DROPPEDVARIABLESTATSIR_H #define LLVM_CODEGEN_DROPPEDVARIABLESTATSIR_H #include "llvm/IR/DroppedVariableStats.h" #include "llvm/Support/Compiler.h" namespace llvm { class Any; class StringRef; class PassInstrumentationCallbacks; class Function; class Module; class DILocation; /// A class to collect and print dropped debug information due to LLVM IR /// optimization passes. After every LLVM IR pass is run, it will print how many /// #dbg_values were dropped due to that pass. class LLVM_ABI DroppedVariableStatsIR : public DroppedVariableStats { public: DroppedVariableStatsIR(bool DroppedVarStatsEnabled) : llvm::DroppedVariableStats(DroppedVarStatsEnabled) {} void runBeforePass(StringRef P, Any IR); void runAfterPass(StringRef P, Any IR); void registerCallbacks(PassInstrumentationCallbacks &PIC); private: const Function *Func; void runAfterPassFunction(StringRef PassID, const Function *F); void runAfterPassModule(StringRef PassID, const Module *M); /// Populate DebugVariablesBefore, DebugVariablesAfter, InlinedAts before or /// after a pass has run to facilitate dropped variable calculation for an /// llvm::Function. void runOnFunction(StringRef PassID, const Function *F, bool Before); /// Iterate over all Instructions in a Function and report any dropped debug /// information. void calculateDroppedVarStatsOnFunction(const Function *F, StringRef PassID, StringRef FuncOrModName, StringRef PassLevel); /// Populate DebugVariablesBefore, DebugVariablesAfter, InlinedAts before or /// after a pass has run to facilitate dropped variable calculation for an /// llvm::Module. Calls runOnFunction on every Function in the Module. void runOnModule(StringRef PassID, const Module *M, bool Before); /// Iterate over all Functions in a Module and report any dropped debug /// information. Will call calculateDroppedVarStatsOnFunction on every /// Function. void calculateDroppedVarStatsOnModule(const Module *M, StringRef PassID, StringRef FuncOrModName, StringRef PassLevel); /// Override base class method to run on an llvm::Function specifically. void visitEveryInstruction(unsigned &DroppedCount, DenseMap &InlinedAtsMap, VarID Var) override; /// Override base class method to run on #dbg_values specifically. void visitEveryDebugRecord( DenseSet &VarIDSet, DenseMap> &InlinedAtsMap, StringRef FuncName, bool Before) override; template static const IRUnitT *unwrapIR(Any IR); }; } // namespace llvm #endif