| //===- Debugify.h - Attach synthetic debug info to everything -------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file Interface to the `debugify` synthetic debug info testing utility. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_TOOLS_OPT_DEBUGIFY_H |
| #define LLVM_TOOLS_OPT_DEBUGIFY_H |
| |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/ADT/MapVector.h" |
| #include "llvm/IR/PassManager.h" |
| #include "llvm/Support/raw_ostream.h" |
| |
| llvm::ModulePass *createDebugifyModulePass(); |
| llvm::FunctionPass *createDebugifyFunctionPass(); |
| |
| struct NewPMDebugifyPass : public llvm::PassInfoMixin<NewPMDebugifyPass> { |
| llvm::PreservedAnalyses run(llvm::Module &M, llvm::ModuleAnalysisManager &AM); |
| }; |
| |
| /// Track how much `debugify` information has been lost. |
| struct DebugifyStatistics { |
| /// Number of missing dbg.values. |
| unsigned NumDbgValuesMissing = 0; |
| |
| /// Number of dbg.values expected. |
| unsigned NumDbgValuesExpected = 0; |
| |
| /// Number of instructions with empty debug locations. |
| unsigned NumDbgLocsMissing = 0; |
| |
| /// Number of instructions expected to have debug locations. |
| unsigned NumDbgLocsExpected = 0; |
| |
| /// Get the ratio of missing/expected dbg.values. |
| float getMissingValueRatio() const { |
| return float(NumDbgValuesMissing) / float(NumDbgLocsExpected); |
| } |
| |
| /// Get the ratio of missing/expected instructions with locations. |
| float getEmptyLocationRatio() const { |
| return float(NumDbgLocsMissing) / float(NumDbgLocsExpected); |
| } |
| }; |
| |
| /// Map pass names to a per-pass DebugifyStatistics instance. |
| using DebugifyStatsMap = llvm::MapVector<llvm::StringRef, DebugifyStatistics>; |
| |
| /// Export per-pass debugify statistics to the file specified by \p Path. |
| void exportDebugifyStats(llvm::StringRef Path, const DebugifyStatsMap &Map); |
| |
| llvm::ModulePass * |
| createCheckDebugifyModulePass(bool Strip = false, |
| llvm::StringRef NameOfWrappedPass = "", |
| DebugifyStatsMap *StatsMap = nullptr); |
| |
| llvm::FunctionPass * |
| createCheckDebugifyFunctionPass(bool Strip = false, |
| llvm::StringRef NameOfWrappedPass = "", |
| DebugifyStatsMap *StatsMap = nullptr); |
| |
| struct NewPMCheckDebugifyPass |
| : public llvm::PassInfoMixin<NewPMCheckDebugifyPass> { |
| llvm::PreservedAnalyses run(llvm::Module &M, llvm::ModuleAnalysisManager &AM); |
| }; |
| |
| #endif // LLVM_TOOLS_OPT_DEBUGIFY_H |