76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
| //===- 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
 |