X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FVMCore%2FPass.cpp;h=85c4dec5fe722876aba27eb79f1a533512f219e2;hb=4d7a75a9e31a1b45e68b9cd3f50f18bd90dd0850;hp=b673484f214400e0c14d6dc6b86e52f27b16258f;hpb=1c28b42310b183a141fa3b40d07a6cfbdb97ee02;p=oota-llvm.git diff --git a/lib/VMCore/Pass.cpp b/lib/VMCore/Pass.cpp index b673484f214..85c4dec5fe7 100644 --- a/lib/VMCore/Pass.cpp +++ b/lib/VMCore/Pass.cpp @@ -13,6 +13,7 @@ #include "Support/TypeInfo.h" #include #include +#include #include #include @@ -297,6 +298,15 @@ void Pass::dump() const { print(std::cerr, 0); } +//===----------------------------------------------------------------------===// +// ImmutablePass Implementation +// +void ImmutablePass::addToPassManager(PassManagerT *PM, + AnalysisUsage &AU) { + PM->addPass(this, AU); +} + + //===----------------------------------------------------------------------===// // FunctionPass Implementation // @@ -341,18 +351,20 @@ void FunctionPass::addToPassManager(PassManagerT *PM, // function. // bool BasicBlockPass::runOnFunction(Function &F) { - bool Changed = false; + bool Changed = doInitialization(F); for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) Changed |= runOnBasicBlock(*I); - return Changed; + return Changed | doFinalization(F); } // To run directly on the basic block, we initialize, runOnBasicBlock, then // finalize. // bool BasicBlockPass::run(BasicBlock &BB) { - Module &M = *BB.getParent()->getParent(); - return doInitialization(M) | runOnBasicBlock(BB) | doFinalization(M); + Function &F = *BB.getParent(); + Module &M = *F.getParent(); + return doInitialization(M) | doInitialization(F) | runOnBasicBlock(BB) | + doFinalization(F) | doFinalization(M); } void BasicBlockPass::addToPassManager(PassManagerT *PM,