90 lines
3.4 KiB
C++
90 lines
3.4 KiB
C++
///===- 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<VarID, DILocation *> &InlinedAtsMap,
|
|
VarID Var) override;
|
|
|
|
/// Override base class method to run on #dbg_values specifically.
|
|
void visitEveryDebugRecord(
|
|
DenseSet<VarID> &VarIDSet,
|
|
DenseMap<StringRef, DenseMap<VarID, DILocation *>> &InlinedAtsMap,
|
|
StringRef FuncName, bool Before) override;
|
|
|
|
template <typename IRUnitT> static const IRUnitT *unwrapIR(Any IR);
|
|
};
|
|
|
|
} // namespace llvm
|
|
|
|
#endif
|