diff options
Diffstat (limited to 'llvm/lib/IR/Pass.cpp')
-rw-r--r-- | llvm/lib/IR/Pass.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/llvm/lib/IR/Pass.cpp b/llvm/lib/IR/Pass.cpp index e9a0c68495b..4038205e044 100644 --- a/llvm/lib/IR/Pass.cpp +++ b/llvm/lib/IR/Pass.cpp @@ -55,8 +55,13 @@ PassManagerType ModulePass::getPotentialPassManagerType() const { return PMT_ModulePassManager; } +static std::string getDescription(const Module &M) { + return "module (" + M.getName().str() + ")"; +} + bool ModulePass::skipModule(Module &M) const { - return !M.getContext().getOptPassGate().shouldRunPass(this, M); + OptPassGate &Gate = M.getContext().getOptPassGate(); + return Gate.isEnabled() && !Gate.shouldRunPass(this, getDescription(M)); } bool Pass::mustPreserveAnalysisID(char &AID) const { @@ -154,8 +159,13 @@ PassManagerType FunctionPass::getPotentialPassManagerType() const { return PMT_FunctionPassManager; } +static std::string getDescription(const Function &F) { + return "function (" + F.getName().str() + ")"; +} + bool FunctionPass::skipFunction(const Function &F) const { - if (!F.getContext().getOptPassGate().shouldRunPass(this, F)) + OptPassGate &Gate = F.getContext().getOptPassGate(); + if (Gate.isEnabled() && !Gate.shouldRunPass(this, getDescription(F))) return true; if (F.hasFnAttribute(Attribute::OptimizeNone)) { @@ -185,11 +195,17 @@ bool BasicBlockPass::doFinalization(Function &) { return false; } +static std::string getDescription(const BasicBlock &BB) { + return "basic block (" + BB.getName().str() + ") in function (" + + BB.getParent()->getName().str() + ")"; +} + bool BasicBlockPass::skipBasicBlock(const BasicBlock &BB) const { const Function *F = BB.getParent(); if (!F) return false; - if (!F->getContext().getOptPassGate().shouldRunPass(this, BB)) + OptPassGate &Gate = F->getContext().getOptPassGate(); + if (Gate.isEnabled() && !Gate.shouldRunPass(this, getDescription(BB))) return true; if (F->hasFnAttribute(Attribute::OptimizeNone)) { // Report this only once per function. |