X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=include%2Fllvm%2FPass.h;h=9dc8643343def079626982e93392a70a3f70502f;hb=80a75bfae980df96f969f1c05b0c4a80ce975240;hp=d678df6430b9da06f789268e9ed10f0df43ab175;hpb=eae540a037d17d218767f21b6d3b45f395df4619;p=oota-llvm.git diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h index d678df6430b..9dc8643343d 100644 --- a/include/llvm/Pass.h +++ b/include/llvm/Pass.h @@ -29,13 +29,13 @@ #ifndef LLVM_PASS_H #define LLVM_PASS_H +#include "llvm/Support/DataTypes.h" #include "llvm/Support/Streams.h" #include #include #include #include #include -#include namespace llvm { @@ -46,8 +46,6 @@ class Module; class AnalysisUsage; class PassInfo; class ImmutablePass; -class BasicBlockPassManager; -class ModulePassManager; class PMStack; class AnalysisResolver; class PMDataManager; @@ -87,7 +85,8 @@ class Pass { void operator=(const Pass&); // DO NOT IMPLEMENT Pass(const Pass &); // DO NOT IMPLEMENT public: - Pass(intptr_t pid) : Resolver(0), PassID(pid) {} + explicit Pass(intptr_t pid) : Resolver(0), PassID(pid) {} + explicit Pass(const void *pid) : Resolver(0), PassID((intptr_t)pid) {} virtual ~Pass(); /// getPassName - Return a nice clean name for a pass. This usually @@ -133,8 +132,14 @@ public: } // Access AnalysisResolver - inline void setResolver(AnalysisResolver *AR) { Resolver = AR; } - inline AnalysisResolver *getResolver() { return Resolver; } + inline void setResolver(AnalysisResolver *AR) { + assert (!Resolver && "Resolver is already set"); + Resolver = AR; + } + inline AnalysisResolver *getResolver() { + assert (Resolver && "Resolver is not set"); + return Resolver; + } /// getAnalysisUsage - This function should be overriden by passes that need /// analysis information to do their job. If a pass specifies that it uses a @@ -158,12 +163,16 @@ public: /// virtual void releaseMemory() {} + /// verifyAnalysis() - This member can be implemented by a analysis pass to + /// check state of analysis information. + virtual void verifyAnalysis() const {} + // dumpPassStructure - Implement the -debug-passes=PassStructure option virtual void dumpPassStructure(unsigned Offset = 0); template static const PassInfo *getClassPassInfo() { - return lookupPassInfo((intptr_t)&AnalysisClass::ID); + return lookupPassInfo(intptr_t(&AnalysisClass::ID)); } // lookupPassInfo - Return the pass info object for the specified pass class, @@ -232,7 +241,8 @@ public: return PMT_ModulePassManager; } - ModulePass(intptr_t pid) : Pass(pid) {} + explicit ModulePass(intptr_t pid) : Pass(pid) {} + explicit ModulePass(const void *pid) : Pass(pid) {} // Force out-of-line virtual method. virtual ~ModulePass(); }; @@ -255,9 +265,11 @@ public: /// ImmutablePasses are never run. /// - virtual bool runOnModule(Module &M) { return false; } + bool runOnModule(Module &M) { return false; } - ImmutablePass(intptr_t pid) : ModulePass(pid) {} + explicit ImmutablePass(intptr_t pid) : ModulePass(pid) {} + explicit ImmutablePass(const void *pid) : ModulePass(pid) {} + // Force out-of-line virtual method. virtual ~ImmutablePass(); }; @@ -273,7 +285,8 @@ public: /// class FunctionPass : public Pass { public: - FunctionPass(intptr_t pid) : Pass(pid) {} + explicit FunctionPass(intptr_t pid) : Pass(pid) {} + explicit FunctionPass(const void *pid) : Pass(pid) {} /// doInitialization - Virtual method overridden by subclasses to do /// any necessary per-module initialization. @@ -324,7 +337,8 @@ public: /// class BasicBlockPass : public Pass { public: - BasicBlockPass(intptr_t pid) : Pass(pid) {} + explicit BasicBlockPass(intptr_t pid) : Pass(pid) {} + explicit BasicBlockPass(const void *pid) : Pass(pid) {} /// doInitialization - Virtual method overridden by subclasses to do /// any necessary per-module initialization.