diff options
author | Owen Anderson <resistor@mac.com> | 2010-07-20 08:26:15 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-07-20 08:26:15 +0000 |
commit | 8be3291f5942e3ae4a5d66c480e7aabe2f771031 (patch) | |
tree | c8c82d984f9dc21c27426099f79bd412a2ff95c9 /include/llvm | |
parent | 29e9daa75019e6ee7b3305f7ef11a2cd85b96b55 (diff) | |
download | external_llvm-8be3291f5942e3ae4a5d66c480e7aabe2f771031.zip external_llvm-8be3291f5942e3ae4a5d66c480e7aabe2f771031.tar.gz external_llvm-8be3291f5942e3ae4a5d66c480e7aabe2f771031.tar.bz2 |
Speculatively revert r108813, in an attempt to get the self-host buildbots working again. I don't see why this patch
would cause them to fail the way they are, but none of the other intervening patches seem likely either.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108818 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r-- | include/llvm/Pass.h | 17 | ||||
-rw-r--r-- | include/llvm/PassAnalysisSupport.h | 18 | ||||
-rw-r--r-- | include/llvm/PassManagers.h | 2 | ||||
-rw-r--r-- | include/llvm/PassSupport.h | 90 | ||||
-rw-r--r-- | include/llvm/Support/PassNameParser.h | 12 |
5 files changed, 63 insertions, 76 deletions
diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h index be73a10..5a58931 100644 --- a/include/llvm/Pass.h +++ b/include/llvm/Pass.h @@ -41,7 +41,6 @@ class BasicBlock; class Function; class Module; class AnalysisUsage; -class StaticPassInfo; class PassInfo; class ImmutablePass; class PMStack; @@ -51,7 +50,7 @@ class raw_ostream; class StringRef; // AnalysisID - Use the PassInfo to identify a pass... -typedef const StaticPassInfo* AnalysisID; +typedef const PassInfo* AnalysisID; /// Different types of internal pass managers. External pass managers /// (PassManager and FunctionPassManager) are not represented here. @@ -105,7 +104,7 @@ public: /// getPassInfo - Return the PassInfo data structure that corresponds to this /// pass... If the pass has not been registered, this will return null. /// - const StaticPassInfo *getPassInfo() const; + const PassInfo *getPassInfo() const; /// 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 @@ -160,7 +159,7 @@ public: /// an analysis interface through multiple inheritance. If needed, it should /// override this to adjust the this pointer as needed for the specified pass /// info. - virtual void *getAdjustedAnalysisPointer(const StaticPassInfo *); + virtual void *getAdjustedAnalysisPointer(const PassInfo *); virtual ImmutablePass *getAsImmutablePass(); virtual PMDataManager *getAsPMDataManager(); @@ -172,17 +171,17 @@ public: virtual void dumpPassStructure(unsigned Offset = 0); template<typename AnalysisClass> - static const StaticPassInfo *getClassPassInfo() { + static const PassInfo *getClassPassInfo() { return lookupPassInfo(intptr_t(&AnalysisClass::ID)); } // lookupPassInfo - Return the pass info object for the specified pass class, // or null if it is not known. - static const StaticPassInfo *lookupPassInfo(intptr_t TI); + static const PassInfo *lookupPassInfo(intptr_t TI); // lookupPassInfo - Return the pass info object for the pass with the given // argument string, or null if it is not known. - static const StaticPassInfo *lookupPassInfo(StringRef Arg); + static const PassInfo *lookupPassInfo(StringRef Arg); /// getAnalysisIfAvailable<AnalysisType>() - Subclasses use this function to /// get analysis information that might be around, for example to update it. @@ -214,10 +213,10 @@ public: AnalysisType &getAnalysis(Function &F); // Defined in PassAnalysisSupport.h template<typename AnalysisType> - AnalysisType &getAnalysisID(const StaticPassInfo *PI) const; + AnalysisType &getAnalysisID(const PassInfo *PI) const; template<typename AnalysisType> - AnalysisType &getAnalysisID(const StaticPassInfo *PI, Function &F); + AnalysisType &getAnalysisID(const PassInfo *PI, Function &F); }; diff --git a/include/llvm/PassAnalysisSupport.h b/include/llvm/PassAnalysisSupport.h index e24ccde..977d4f4 100644 --- a/include/llvm/PassAnalysisSupport.h +++ b/include/llvm/PassAnalysisSupport.h @@ -86,7 +86,7 @@ public: // linked in. Be careful about spelling! // AnalysisUsage &addPreserved(StringRef Arg) { - const StaticPassInfo *PI = Pass::lookupPassInfo(Arg); + const PassInfo *PI = Pass::lookupPassInfo(Arg); // If the pass exists, preserve it. Otherwise silently do nothing. if (PI) Preserved.push_back(PI); return *this; @@ -130,7 +130,7 @@ public: inline PMDataManager &getPMDataManager() { return PM; } // Find pass that is implementing PI. - Pass *findImplPass(const StaticPassInfo *PI) { + Pass *findImplPass(const PassInfo *PI) { Pass *ResultPass = 0; for (unsigned i = 0; i < AnalysisImpls.size() ; ++i) { if (AnalysisImpls[i].first == PI) { @@ -142,10 +142,10 @@ public: } // Find pass that is implementing PI. Initialize pass for Function F. - Pass *findImplPass(Pass *P, const StaticPassInfo *PI, Function &F); + Pass *findImplPass(Pass *P, const PassInfo *PI, Function &F); - void addAnalysisImplsPair(const StaticPassInfo *PI, Pass *P) { - std::pair<const StaticPassInfo*, Pass*> pir = std::make_pair(PI,P); + void addAnalysisImplsPair(const PassInfo *PI, Pass *P) { + std::pair<const PassInfo*, Pass*> pir = std::make_pair(PI,P); AnalysisImpls.push_back(pir); } @@ -160,7 +160,7 @@ public: // AnalysisImpls - This keeps track of which passes implements the interfaces // that are required by the current pass (to implement getAnalysis()). - std::vector<std::pair<const StaticPassInfo*, Pass*> > AnalysisImpls; + std::vector<std::pair<const PassInfo*, Pass*> > AnalysisImpls; private: // PassManager that is used to resolve analysis info @@ -179,7 +179,7 @@ template<typename AnalysisType> AnalysisType *Pass::getAnalysisIfAvailable() const { assert(Resolver && "Pass not resident in a PassManager object!"); - const StaticPassInfo *PI = getClassPassInfo<AnalysisType>(); + const PassInfo *PI = getClassPassInfo<AnalysisType>(); if (PI == 0) return 0; Pass *ResultPass = Resolver->getAnalysisIfAvailable(PI, true); @@ -203,7 +203,7 @@ AnalysisType &Pass::getAnalysis() const { } template<typename AnalysisType> -AnalysisType &Pass::getAnalysisID(const StaticPassInfo *PI) const { +AnalysisType &Pass::getAnalysisID(const PassInfo *PI) const { assert(PI && "getAnalysis for unregistered pass!"); assert(Resolver&&"Pass has not been inserted into a PassManager object!"); // PI *must* appear in AnalysisImpls. Because the number of passes used @@ -233,7 +233,7 @@ AnalysisType &Pass::getAnalysis(Function &F) { } template<typename AnalysisType> -AnalysisType &Pass::getAnalysisID(const StaticPassInfo *PI, Function &F) { +AnalysisType &Pass::getAnalysisID(const PassInfo *PI, Function &F) { assert(PI && "getAnalysis for unregistered pass!"); assert(Resolver && "Pass has not been inserted into a PassManager object!"); // PI *must* appear in AnalysisImpls. Because the number of passes used diff --git a/include/llvm/PassManagers.h b/include/llvm/PassManagers.h index c4593e6..81b7e7a 100644 --- a/include/llvm/PassManagers.h +++ b/include/llvm/PassManagers.h @@ -302,7 +302,7 @@ public: /// through getAnalysis interface. virtual void addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass); - virtual Pass *getOnTheFlyPass(Pass *P, const StaticPassInfo *PI, Function &F); + virtual Pass *getOnTheFlyPass(Pass *P, const PassInfo *PI, Function &F); /// Initialize available analysis information. void initializeAnalysisInfo() { diff --git a/include/llvm/PassSupport.h b/include/llvm/PassSupport.h index c396b87..09abe93 100644 --- a/include/llvm/PassSupport.h +++ b/include/llvm/PassSupport.h @@ -22,7 +22,6 @@ #define LLVM_PASS_SUPPORT_H #include "Pass.h" -#include "llvm/Config/config.h" namespace llvm { @@ -34,24 +33,45 @@ class TargetMachine; /// getPassInfo() method. These objects are set up by the RegisterPass<> /// template, defined below. /// - -struct StaticPassInfo { +class PassInfo { +public: typedef Pass* (*NormalCtor_t)(); struct InterfaceInfo { - const StaticPassInfo *interface; + const PassInfo *interface; const InterfaceInfo *next; }; - const char *PassName; // Nice name for Pass - const char *PassArgument; // Command Line argument to run this pass - intptr_t PassID; - bool IsCFGOnlyPass; // Pass only looks at the CFG. - bool IsAnalysis; // True if an analysis pass. - bool IsAnalysisGroup; // True if an analysis group. - InterfaceInfo *ItfImpl;// Interfaces implemented by this pass +private: + const char *const PassName; // Nice name for Pass + const char *const PassArgument; // Command Line argument to run this pass + const intptr_t PassID; + const bool IsCFGOnlyPass; // Pass only looks at the CFG. + const bool IsAnalysis; // True if an analysis pass. + const bool IsAnalysisGroup; // True if an analysis group. + const InterfaceInfo *ItfImpl;// Interfaces implemented by this pass NormalCtor_t NormalCtor; - + +public: + /// PassInfo ctor - Do not call this directly, this should only be invoked + /// through RegisterPass. + PassInfo(const char *name, const char *arg, intptr_t pi, + NormalCtor_t normal = 0, + bool isCFGOnly = false, bool is_analysis = false) + : PassName(name), PassArgument(arg), PassID(pi), + IsCFGOnlyPass(isCFGOnly), + IsAnalysis(is_analysis), IsAnalysisGroup(false), NormalCtor(normal) { + registerPass(); + } + /// PassInfo ctor - Do not call this directly, this should only be invoked + /// through RegisterPass. This version is for use by analysis groups; it + /// does not auto-register the pass. + PassInfo(const char *name, intptr_t pi) + : PassName(name), PassArgument(""), PassID(pi), + IsCFGOnlyPass(false), + IsAnalysis(false), IsAnalysisGroup(true), NormalCtor(0) { + } + /// getPassName - Return the friendly name for the pass, never returns null /// const char *getPassName() const { return PassName; } @@ -70,7 +90,7 @@ struct StaticPassInfo { bool isPassID(void *IDPtr) const { return PassID == (intptr_t)IDPtr; } - + /// isAnalysisGroup - Return true if this is an analysis group, not a normal /// pass. /// @@ -80,7 +100,7 @@ struct StaticPassInfo { /// isCFGOnlyPass - return true if this pass only looks at the CFG for the /// function. bool isCFGOnlyPass() const { return IsCFGOnlyPass; } - + /// getNormalCtor - Return a pointer to a function, that when called, creates /// an instance of the pass and returns it. This pointer may be null if there /// is no default constructor for the pass. @@ -92,11 +112,14 @@ struct StaticPassInfo { NormalCtor = Ctor; } + /// createPass() - Use this method to create an instance of this pass. + Pass *createPass() const; + /// addInterfaceImplemented - This method is called when this pass is /// registered as a member of an analysis group with the RegisterAnalysisGroup /// template. /// - void addInterfaceImplemented(const StaticPassInfo *ItfPI) { + void addInterfaceImplemented(const PassInfo *ItfPI) { InterfaceInfo *NewInfo = new InterfaceInfo(); NewInfo->interface = ItfPI; NewInfo->next = ItfImpl; @@ -110,39 +133,6 @@ struct StaticPassInfo { return ItfImpl; } - /// createPass() - Use this method to create an instance of this pass. - Pass *createPass() const; -}; - -class PassInfo : public StaticPassInfo { -public: - /// PassInfo ctor - Do not call this directly, this should only be invoked - /// through RegisterPass. - PassInfo(const char *name, const char *arg, intptr_t pi, - NormalCtor_t normal = 0, - bool isCFGOnly = false, bool is_analysis = false) { - this->PassName = name; - this->PassArgument = arg; - this->PassID = pi; - this->IsCFGOnlyPass = isCFGOnly; - this->IsAnalysis = is_analysis; - this->IsAnalysisGroup = false; - this->NormalCtor = normal; - registerPass(); - } - /// PassInfo ctor - Do not call this directly, this should only be invoked - /// through RegisterPass. This version is for use by analysis groups; it - /// does not auto-register the pass. - PassInfo(const char *name, intptr_t pi) { - this->PassName = name; - this->PassArgument = ""; - this->PassID = pi; - this->IsCFGOnlyPass = false; - this->IsAnalysis = false; - this->IsAnalysisGroup = true; - this->NormalCtor = 0; - } - protected: void registerPass(); void unregisterPass(); @@ -250,7 +240,7 @@ struct PassRegistrationListener { /// Callback functions - These functions are invoked whenever a pass is loaded /// or removed from the current executable. /// - virtual void passRegistered(const StaticPassInfo *) {} + virtual void passRegistered(const PassInfo *) {} /// enumeratePasses - Iterate over the registered passes, calling the /// passEnumerate callback on each PassInfo object. @@ -260,7 +250,7 @@ struct PassRegistrationListener { /// passEnumerate - Callback function invoked when someone calls /// enumeratePasses on this PassRegistrationListener object. /// - virtual void passEnumerate(const StaticPassInfo *) {} + virtual void passEnumerate(const PassInfo *) {} }; diff --git a/include/llvm/Support/PassNameParser.h b/include/llvm/Support/PassNameParser.h index c356439..cdca978 100644 --- a/include/llvm/Support/PassNameParser.h +++ b/include/llvm/Support/PassNameParser.h @@ -55,11 +55,9 @@ public: // ignorablePassImpl - Can be overriden in subclasses to refine the list of // which passes we want to include. // - virtual bool ignorablePassImpl(const StaticPassInfo *P) const { - return false; - } + virtual bool ignorablePassImpl(const PassInfo *P) const { return false; } - inline bool ignorablePass(const StaticPassInfo *P) const { + inline bool ignorablePass(const PassInfo *P) const { // Ignore non-selectable and non-constructible passes! Ignore // non-optimizations. return P->getPassArgument() == 0 || *P->getPassArgument() == 0 || @@ -68,7 +66,7 @@ public: // Implement the PassRegistrationListener callbacks used to populate our map // - virtual void passRegistered(const StaticPassInfo *P) { + virtual void passRegistered(const PassInfo *P) { if (ignorablePass(P) || !Opt) return; if (findOption(P->getPassArgument()) != getNumOptions()) { errs() << "Two passes with the same argument (-" @@ -77,7 +75,7 @@ public: } addLiteralOption(P->getPassArgument(), P, P->getPassName()); } - virtual void passEnumerate(const StaticPassInfo *P) { passRegistered(P); } + virtual void passEnumerate(const PassInfo *P) { passRegistered(P); } // ValLessThan - Provide a sorting comparator for Values elements... typedef std::pair<const char*, @@ -107,7 +105,7 @@ private: Filter filter; public: - bool ignorablePassImpl(const StaticPassInfo *P) const { return !filter(*P); } + bool ignorablePassImpl(const PassInfo *P) const { return !filter(*P); } }; ///===----------------------------------------------------------------------===// |