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
This commit is contained in:
Chris Lattner
2006-01-04 07:47:13 +00:00
parent 51d6e76ff4
commit 7f7b730d79
4 changed files with 187 additions and 251 deletions

View File

@@ -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

View File

@@ -23,10 +23,12 @@ class Pass;
class ModulePass;
class Module;
class ModuleProvider;
template<class UnitType> class PassManagerT;
class ModulePassManager;
class FunctionPassManagerT;
class BasicBlockPassManager;
class PassManager {
PassManagerT<Module> *PM; // This is a straightforward Pimpl class
ModulePassManager *PM; // This is a straightforward Pimpl class
public:
PassManager();
~PassManager();
@@ -49,7 +51,7 @@ class ImmutablePass;
class Function;
class FunctionPassManager {
PassManagerT<Function> *PM; // This is a straightforward Pimpl class
FunctionPassManagerT *PM; // This is a straightforward Pimpl class
ModuleProvider *MP;
public:
FunctionPassManager(ModuleProvider *P);