X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FPassAnalysisSupport.h;h=490c5bf12c64637068b886669f937d38d29ef9a8;hb=87944916a4764dabc2f89cbec0a6c7e439c28530;hp=e59399d48fe73eb74486b4d530ac735f88ebcb7e;hpb=a59cbb2043c08f3cfb8fb379f0d336e21e070be8;p=oota-llvm.git diff --git a/include/llvm/PassAnalysisSupport.h b/include/llvm/PassAnalysisSupport.h index e59399d48fe..490c5bf12c6 100644 --- a/include/llvm/PassAnalysisSupport.h +++ b/include/llvm/PassAnalysisSupport.h @@ -25,37 +25,45 @@ // class AnalysisUsage { // Sets of analyses required and preserved by a pass - std::vector Required, Preserved, Provided; + std::vector Required, Preserved; bool PreservesAll; public: AnalysisUsage() : PreservesAll(false) {} - // addRequires - Add the specified ID to the required set of the usage info + // addRequired - Add the specified ID to the required set of the usage info // for a pass. // - AnalysisUsage &addRequired(AnalysisID ID) { + AnalysisUsage &addRequiredID(AnalysisID ID) { Required.push_back(ID); return *this; } + template + AnalysisUsage &addRequired() { + assert(Pass::getClassPassInfo() && "Pass class not registered!"); + Required.push_back(Pass::getClassPassInfo()); + return *this; + } - // addPreserves - Add the specified ID to the set of analyses preserved by + // addPreserved - Add the specified ID to the set of analyses preserved by // this pass // - AnalysisUsage &addPreserved(AnalysisID ID) { + AnalysisUsage &addPreservedID(AnalysisID ID) { Preserved.push_back(ID); return *this; } - void addProvided(AnalysisID ID) { - Provided.push_back(ID); + template + AnalysisUsage &addPreserved() { + assert(Pass::getClassPassInfo() && "Pass class not registered!"); + Preserved.push_back(Pass::getClassPassInfo()); + return *this; } - // PreservesAll - Set by analyses that do not transform their input at all + // setPreservesAll - Set by analyses that do not transform their input at all void setPreservesAll() { PreservesAll = true; } bool preservesAll() const { return PreservesAll; } - // preservesCFG - This function should be called to by the pass, iff they do - // not: + // preservesCFG - This function should be called by the pass, iff they do not: // // 1. Add or remove basic blocks from the function // 2. Modify terminator instructions in any way. @@ -67,31 +75,32 @@ public: const std::vector &getRequiredSet() const { return Required; } const std::vector &getPreservedSet() const { return Preserved; } - const std::vector &getProvidedSet() const { return Provided; } }; //===----------------------------------------------------------------------===// -// AnalysisResolver - Simple interface implemented by PassManagers objects that +// AnalysisResolver - Simple interface implemented by PassManager objects that // is used to pull analysis information out of them. // struct AnalysisResolver { virtual Pass *getAnalysisOrNullUp(AnalysisID ID) const = 0; virtual Pass *getAnalysisOrNullDown(AnalysisID ID) const = 0; - Pass *getAnalysis(AnalysisID ID) { + Pass *getAnalysis(AnalysisID ID) const { Pass *Result = getAnalysisOrNullUp(ID); assert(Result && "Pass has an incorrect analysis uses set!"); return Result; } // getAnalysisToUpdate - Return an analysis result or null if it doesn't exist - Pass *getAnalysisToUpdate(AnalysisID ID) { - Pass *Result = getAnalysisOrNullUp(ID); - return Result; + Pass *getAnalysisToUpdate(AnalysisID ID) const { + return getAnalysisOrNullUp(ID); } + // Methods for introspecting into pass manager objects... virtual unsigned getDepth() const = 0; + virtual unsigned getNumContainedPasses() const = 0; + virtual const Pass *getContainedPass(unsigned N) const = 0; virtual void markPassUsed(AnalysisID P, Pass *User) = 0;