| //===- 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 |