summaryrefslogtreecommitdiff
path: root/include/llvm
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-07-20 03:06:07 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-07-20 03:06:07 +0000
commite8a469cdb400249ec263c79d1021f953f42f2760 (patch)
tree7e8a5fbe32425e7360d052e45caa82e9b6191fcc /include/llvm
parent8ba15cb7099d9eadcb345328228d77ffa5afa42d (diff)
downloadllvm-e8a469cdb400249ec263c79d1021f953f42f2760.tar.gz
llvm-e8a469cdb400249ec263c79d1021f953f42f2760.tar.bz2
llvm-e8a469cdb400249ec263c79d1021f953f42f2760.tar.xz
Revert r108794, "Separate PassInfo into two classes: a constructor-free
superclass (StaticPassInfo) and a constructor-ful subclass (PassInfo).", it is breaking teh everything. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108805 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r--include/llvm/Pass.h17
-rw-r--r--include/llvm/PassAnalysisSupport.h18
-rw-r--r--include/llvm/PassManagers.h2
-rw-r--r--include/llvm/PassSupport.h90
-rw-r--r--include/llvm/Support/PassNameParser.h12
5 files changed, 63 insertions, 76 deletions
diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h
index be73a106bb..5a5893140e 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 e24ccde6c7..977d4f4e30 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 c4593e625b..81b7e7af81 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 c396b87b6c..09abe93e91 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 c3564399e2..cdca978cfe 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); }
};
///===----------------------------------------------------------------------===//