aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Pass.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-01-04 07:47:13 +0000
committerChris Lattner <sabre@nondot.org>2006-01-04 07:47:13 +0000
commit7f7b730d79c27390ea06aa4bfeb542baf4f8892d (patch)
treebd7ff66e31b15bc2736c8256eb033494556593c2 /include/llvm/Pass.h
parent51d6e76ff4cf950b759be389d23e9383a29b1dc9 (diff)
downloadexternal_llvm-7f7b730d79c27390ea06aa4bfeb542baf4f8892d.tar.gz
external_llvm-7f7b730d79c27390ea06aa4bfeb542baf4f8892d.tar.bz2
external_llvm-7f7b730d79c27390ea06aa4bfeb542baf4f8892d.zip
Patch #6's in Saem's refactor-the-passmanager patch series. From him:
This sanitises the world, blows away the specialisations and adds traits per passmanager type -- seemed most natural. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25085 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Pass.h')
-rw-r--r--include/llvm/Pass.h39
1 files changed, 23 insertions, 16 deletions
diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h
index 4730a668a8..90e614d632 100644
--- a/include/llvm/Pass.h
+++ b/include/llvm/Pass.h
@@ -44,7 +44,10 @@ class Module;
class AnalysisUsage;
class PassInfo;
class ImmutablePass;
-template<class UnitType> class PassManagerT;
+template<class Trait> class PassManagerT;
+class BasicBlockPassManager;
+class FunctionPassManagerT;
+class ModulePassManager;
struct AnalysisResolver;
// AnalysisID - Use the PassInfo to identify a pass...
@@ -197,9 +200,10 @@ public:
}
private:
- friend class PassManagerT<Module>;
- friend class PassManagerT<Function>;
- friend class PassManagerT<BasicBlock>;
+ template<typename Trait> friend class PassManagerT;
+ friend class ModulePassManager;
+ friend class FunctionPassManagerT;
+ friend class BasicBlockPassManager;
};
inline std::ostream &operator<<(std::ostream &OS, const Pass &P) {
@@ -220,7 +224,7 @@ public:
virtual bool runPass(Module &M) { return runOnModule(M); }
virtual bool runPass(BasicBlock&) { return false; }
- virtual void addToPassManager(PassManagerT<Module> *PM, AnalysisUsage &AU);
+ virtual void addToPassManager(ModulePassManager *PM, AnalysisUsage &AU);
};
@@ -244,8 +248,9 @@ public:
virtual bool runOnModule(Module &M) { return false; }
private:
- friend class PassManagerT<Module>;
- virtual void addToPassManager(PassManagerT<Module> *PM, AnalysisUsage &AU);
+ template<typename Trait> friend class PassManagerT;
+ friend class ModulePassManager;
+ virtual void addToPassManager(ModulePassManager *PM, AnalysisUsage &AU);
};
//===----------------------------------------------------------------------===//
@@ -286,11 +291,12 @@ public:
bool run(Function &F);
private:
- friend class PassManagerT<Module>;
- friend class PassManagerT<Function>;
- friend class PassManagerT<BasicBlock>;
- virtual void addToPassManager(PassManagerT<Module> *PM, AnalysisUsage &AU);
- virtual void addToPassManager(PassManagerT<Function> *PM, AnalysisUsage &AU);
+ template<typename Trait> friend class PassManagerT;
+ friend class ModulePassManager;
+ friend class FunctionPassManagerT;
+ friend class BasicBlockPassManager;
+ virtual void addToPassManager(ModulePassManager *PM, AnalysisUsage &AU);
+ virtual void addToPassManager(FunctionPassManagerT *PM, AnalysisUsage &AU);
};
@@ -344,10 +350,11 @@ struct BasicBlockPass : public FunctionPass {
virtual bool runPass(BasicBlock &BB);
private:
- friend class PassManagerT<Function>;
- friend class PassManagerT<BasicBlock>;
- virtual void addToPassManager(PassManagerT<Function> *PM, AnalysisUsage &AU);
- virtual void addToPassManager(PassManagerT<BasicBlock> *PM,AnalysisUsage &AU);
+ template<typename Trait> friend class PassManagerT;
+ friend class FunctionPassManagerT;
+ friend class BasicBlockPassManager;
+ virtual void addToPassManager(FunctionPassManagerT *PM, AnalysisUsage &AU);
+ virtual void addToPassManager(BasicBlockPassManager *PM,AnalysisUsage &AU);
};
/// If the user specifies the -time-passes argument on an LLVM tool command line