X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=include%2Fllvm%2FPass.h;h=ccd6f2728230ab1e54f35a11ddc593172a3e5b58;hp=7b6f169666a7d23f431c113b33cee2608b0c16db;hb=cf0db29df20d9c665da7e82bb261bdd7cf7f1b2b;hpb=79c07d2a36282b09b9c5d0aa65ebf4bff017621b diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h index 7b6f169666a..ccd6f272823 100644 --- a/include/llvm/Pass.h +++ b/include/llvm/Pass.h @@ -83,11 +83,12 @@ class Pass { AnalysisResolver *Resolver; // Used to resolve analysis const void *PassID; PassKind Kind; - void operator=(const Pass&) LLVM_DELETED_FUNCTION; - Pass(const Pass &) LLVM_DELETED_FUNCTION; + void operator=(const Pass&) = delete; + Pass(const Pass &) = delete; public: - explicit Pass(PassKind K, char &pid) : Resolver(0), PassID(&pid), Kind(K) { } + explicit Pass(PassKind K, char &pid) + : Resolver(nullptr), PassID(&pid), Kind(K) { } virtual ~Pass(); @@ -104,6 +105,16 @@ public: return PassID; } + /// doInitialization - Virtual method overridden by subclasses to do + /// any necessary initialization before any pass is run. + /// + virtual bool doInitialization(Module &) { return false; } + + /// doFinalization - Virtual method overriden by subclasses to do any + /// necessary clean up after all passes have run. + /// + virtual bool doFinalization(Module &) { return false; } + /// print - Print out the internal state of the pass. This is called by /// Analyze to print out the contents of an analysis. Otherwise it is not /// necessary to implement this method. Beware that the module pointer MAY be @@ -225,31 +236,21 @@ public: class ModulePass : public Pass { public: /// createPrinterPass - Get a module printer pass. - Pass *createPrinterPass(raw_ostream &O, const std::string &Banner) const; - - /// doInitialization - Virtual method overridden by subclasses to do - /// any necessary initialization. - /// - virtual bool doInitialization() { return false; } + Pass *createPrinterPass(raw_ostream &O, + const std::string &Banner) const override; /// runOnModule - Virtual method overriden by subclasses to process the module /// being operated on. virtual bool runOnModule(Module &M) = 0; - /// doFinalization - Virtual method overriden by subclasses to do any post - /// processing needed after all passes have run. - /// - virtual bool doFinalization() { return false; } - - virtual void assignPassManager(PMStack &PMS, - PassManagerType T); + void assignPassManager(PMStack &PMS, PassManagerType T) override; /// Return what kind of Pass Manager can manage this pass. - virtual PassManagerType getPotentialPassManagerType() const; + PassManagerType getPotentialPassManagerType() const override; explicit ModulePass(char &pid) : Pass(PT_Module, pid) {} // Force out-of-line virtual method. - virtual ~ModulePass(); + ~ModulePass() override; }; @@ -268,17 +269,17 @@ public: /// virtual void initializePass(); - virtual ImmutablePass *getAsImmutablePass() { return this; } + ImmutablePass *getAsImmutablePass() override { return this; } /// ImmutablePasses are never run. /// - bool runOnModule(Module &) { return false; } + bool runOnModule(Module &) override { return false; } explicit ImmutablePass(char &pid) : ModulePass(pid) {} // Force out-of-line virtual method. - virtual ~ImmutablePass(); + ~ImmutablePass() override; }; //===----------------------------------------------------------------------===// @@ -295,28 +296,23 @@ public: explicit FunctionPass(char &pid) : Pass(PT_Function, pid) {} /// createPrinterPass - Get a function printer pass. - Pass *createPrinterPass(raw_ostream &O, const std::string &Banner) const; - - /// doInitialization - Virtual method overridden by subclasses to do - /// any necessary per-module initialization. - /// - virtual bool doInitialization(Module &); + Pass *createPrinterPass(raw_ostream &O, + const std::string &Banner) const override; /// runOnFunction - Virtual method overriden by subclasses to do the /// per-function processing of the pass. /// virtual bool runOnFunction(Function &F) = 0; - /// doFinalization - Virtual method overriden by subclasses to do any post - /// processing needed after all passes have run. - /// - virtual bool doFinalization(Module &); - - virtual void assignPassManager(PMStack &PMS, - PassManagerType T); + void assignPassManager(PMStack &PMS, PassManagerType T) override; /// Return what kind of Pass Manager can manage this pass. - virtual PassManagerType getPotentialPassManagerType() const; + PassManagerType getPotentialPassManagerType() const override; + +protected: + /// skipOptnoneFunction - This function has Attribute::OptimizeNone + /// and most transformation passes should skip it. + bool skipOptnoneFunction(const Function &F) const; }; @@ -336,12 +332,11 @@ public: explicit BasicBlockPass(char &pid) : Pass(PT_BasicBlock, pid) {} /// createPrinterPass - Get a basic block printer pass. - Pass *createPrinterPass(raw_ostream &O, const std::string &Banner) const; + Pass *createPrinterPass(raw_ostream &O, + const std::string &Banner) const override; - /// doInitialization - Virtual method overridden by subclasses to do - /// any necessary per-module initialization. - /// - virtual bool doInitialization(Module &); + using llvm::Pass::doInitialization; + using llvm::Pass::doFinalization; /// doInitialization - Virtual method overridden by BasicBlockPass subclasses /// to do any necessary per-function initialization. @@ -358,16 +353,15 @@ public: /// virtual bool doFinalization(Function &); - /// doFinalization - Virtual method overriden by subclasses to do any post - /// processing needed after all passes have run. - /// - virtual bool doFinalization(Module &); - - virtual void assignPassManager(PMStack &PMS, - PassManagerType T); + void assignPassManager(PMStack &PMS, PassManagerType T) override; /// Return what kind of Pass Manager can manage this pass. - virtual PassManagerType getPotentialPassManagerType() const; + PassManagerType getPotentialPassManagerType() const override; + +protected: + /// skipOptnoneFunction - Containing function has Attribute::OptimizeNone + /// and most transformation passes should skip it. + bool skipOptnoneFunction(const BasicBlock &BB) const; }; /// If the user specifies the -time-passes argument on an LLVM tool command line @@ -375,7 +369,7 @@ public: /// @brief This is the storage for the -time-passes option. extern bool TimePassesIsEnabled; -} // End llvm namespace +} // namespace llvm // Include support files that contain important APIs commonly used by Passes, // but that we want to separate out to make it easier to read the header files.