mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
523601c4da
Add a -debugify-export option to opt. This exports per-pass `debugify` loss statistics to a file in CSV format. For some interesting numbers on debug value loss during an -O2 build of the sqlite3 amalgamation, see the review thread. Differential Revision: https://reviews.llvm.org/D49003 llvm-svn: 337787
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
|