forked from OSchip/llvm-project
[NFC][Debugify] Rename OptCustomPassManager into DebugifyCustomPassManager
In addition, move the definition of the class into the Debugify.h, so we can use it from different levels. The motivation for this is D82547. Differential Revision: https://reviews.llvm.org/D83391
This commit is contained in:
parent
3ad0181169
commit
30b015dbe9
|
@ -13,8 +13,11 @@
|
|||
#ifndef LLVM_TRANSFORM_UTILS_DEBUGIFY_H
|
||||
#define LLVM_TRANSFORM_UTILS_DEBUGIFY_H
|
||||
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/MapVector.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Bitcode/BitcodeWriterPass.h"
|
||||
#include "llvm/IR/IRPrintingPasses.h"
|
||||
#include "llvm/IR/LegacyPassManager.h"
|
||||
#include "llvm/IR/PassManager.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -89,4 +92,55 @@ struct NewPMCheckDebugifyPass
|
|||
llvm::PreservedAnalyses run(llvm::Module &M, llvm::ModuleAnalysisManager &AM);
|
||||
};
|
||||
|
||||
namespace llvm {
|
||||
/// DebugifyCustomPassManager wraps each pass with the debugify passes if
|
||||
/// needed.
|
||||
/// NOTE: We support legacy custom pass manager only.
|
||||
/// TODO: Add New PM support for custom pass manager.
|
||||
class DebugifyCustomPassManager : public legacy::PassManager {
|
||||
DebugifyStatsMap DIStatsMap;
|
||||
bool EnableDebugifyEach = false;
|
||||
|
||||
public:
|
||||
using super = legacy::PassManager;
|
||||
|
||||
void add(Pass *P) override {
|
||||
// Wrap each pass with (-check)-debugify passes if requested, making
|
||||
// exceptions for passes which shouldn't see -debugify instrumentation.
|
||||
bool WrapWithDebugify = EnableDebugifyEach && !P->getAsImmutablePass() &&
|
||||
!isIRPrintingPass(P) && !isBitcodeWriterPass(P);
|
||||
if (!WrapWithDebugify) {
|
||||
super::add(P);
|
||||
return;
|
||||
}
|
||||
|
||||
// Apply -debugify/-check-debugify before/after each pass and collect
|
||||
// debug info loss statistics.
|
||||
PassKind Kind = P->getPassKind();
|
||||
StringRef Name = P->getPassName();
|
||||
|
||||
// TODO: Implement Debugify for LoopPass.
|
||||
switch (Kind) {
|
||||
case PT_Function:
|
||||
super::add(createDebugifyFunctionPass());
|
||||
super::add(P);
|
||||
super::add(createCheckDebugifyFunctionPass(true, Name, &DIStatsMap));
|
||||
break;
|
||||
case PT_Module:
|
||||
super::add(createDebugifyModulePass());
|
||||
super::add(P);
|
||||
super::add(createCheckDebugifyModulePass(true, Name, &DIStatsMap));
|
||||
break;
|
||||
default:
|
||||
super::add(P);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void enableDebugifyEach() { EnableDebugifyEach = true; }
|
||||
|
||||
const DebugifyStatsMap &getDebugifyStatsMap() const { return DIStatsMap; }
|
||||
};
|
||||
} // namespace llvm
|
||||
|
||||
#endif // LLVM_TRANSFORM_UTILS_DEBUGIFY_H
|
||||
|
|
|
@ -22,13 +22,11 @@
|
|||
#include "llvm/Analysis/TargetLibraryInfo.h"
|
||||
#include "llvm/Analysis/TargetTransformInfo.h"
|
||||
#include "llvm/AsmParser/Parser.h"
|
||||
#include "llvm/Bitcode/BitcodeWriterPass.h"
|
||||
#include "llvm/CodeGen/CommandFlags.h"
|
||||
#include "llvm/CodeGen/TargetPassConfig.h"
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DebugInfo.h"
|
||||
#include "llvm/IR/IRPrintingPasses.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/LLVMRemarkStreamer.h"
|
||||
#include "llvm/IR/LegacyPassManager.h"
|
||||
|
@ -325,48 +323,6 @@ cl::opt<std::string> CSProfileGenFile(
|
|||
cl::desc("Path to the instrumented context sensitive profile."),
|
||||
cl::Hidden);
|
||||
|
||||
class OptCustomPassManager : public legacy::PassManager {
|
||||
DebugifyStatsMap DIStatsMap;
|
||||
|
||||
public:
|
||||
using super = legacy::PassManager;
|
||||
|
||||
void add(Pass *P) override {
|
||||
// Wrap each pass with (-check)-debugify passes if requested, making
|
||||
// exceptions for passes which shouldn't see -debugify instrumentation.
|
||||
bool WrapWithDebugify = DebugifyEach && !P->getAsImmutablePass() &&
|
||||
!isIRPrintingPass(P) && !isBitcodeWriterPass(P);
|
||||
if (!WrapWithDebugify) {
|
||||
super::add(P);
|
||||
return;
|
||||
}
|
||||
|
||||
// Apply -debugify/-check-debugify before/after each pass and collect
|
||||
// debug info loss statistics.
|
||||
PassKind Kind = P->getPassKind();
|
||||
StringRef Name = P->getPassName();
|
||||
|
||||
// TODO: Implement Debugify for LoopPass.
|
||||
switch (Kind) {
|
||||
case PT_Function:
|
||||
super::add(createDebugifyFunctionPass());
|
||||
super::add(P);
|
||||
super::add(createCheckDebugifyFunctionPass(true, Name, &DIStatsMap));
|
||||
break;
|
||||
case PT_Module:
|
||||
super::add(createDebugifyModulePass());
|
||||
super::add(P);
|
||||
super::add(createCheckDebugifyModulePass(true, Name, &DIStatsMap));
|
||||
break;
|
||||
default:
|
||||
super::add(P);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const DebugifyStatsMap &getDebugifyStatsMap() const { return DIStatsMap; }
|
||||
};
|
||||
|
||||
static inline void addPass(legacy::PassManagerBase &PM, Pass *P) {
|
||||
// Add the pass to the pass manager...
|
||||
PM.add(P);
|
||||
|
@ -776,8 +732,12 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
|
||||
// Create a PassManager to hold and optimize the collection of passes we are
|
||||
// about to build.
|
||||
OptCustomPassManager Passes;
|
||||
// about to build. If the -debugify-each option is set, wrap each pass with
|
||||
// the (-check)-debugify passes.
|
||||
DebugifyCustomPassManager Passes;
|
||||
if (DebugifyEach)
|
||||
Passes.enableDebugifyEach();
|
||||
|
||||
bool AddOneTimeDebugifyPasses = EnableDebugify && !DebugifyEach;
|
||||
|
||||
// Add an appropriate TargetLibraryInfo pass for the module's triple.
|
||||
|
|
Loading…
Reference in New Issue