Add rough support for LLC passes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3144 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-07-30 03:55:01 +00:00
parent 67fcce2b19
commit 5d1cf5b4eb

View File

@ -18,6 +18,7 @@
#include <typeinfo>
class TargetData;
class TargetMachine;
//===---------------------------------------------------------------------------
// PassInfo class - An instance of this class exists for every pass known by the
@ -40,7 +41,7 @@ public:
// many of these flags or'd together.
//
enum {
Analysis = 1, Optimization = 2
Analysis = 1, Optimization = 2, LLC = 4
};
// PassInfo ctor - Do not call this directly, this should only be invoked
@ -154,7 +155,7 @@ struct RegisterPass : public RegisterPassBase {
template<typename CtorType>
RegisterPass(const char *PassArg, const char *Name, unsigned PassTy,
CtorType *Fn) {
registerPass(new PassInfo(Name, PassArg, typeid(PassName), 0, 0));
registerPass(new PassInfo(Name, PassArg, typeid(PassName), PassTy, 0, 0));
}
};
@ -208,6 +209,38 @@ struct RegisterAnalysis : public RegisterPassBase {
}
};
// RegisterLLC - Register something that is to show up in LLC, this is just a
// shortcut for specifying RegisterPass...
//
template<typename PassName>
struct RegisterLLC : public RegisterPassBase {
RegisterLLC(const char *PassArg, const char *Name) {
registerPass(new PassInfo(Name, PassArg, typeid(PassName),
PassInfo::LLC,
callDefaultCtor<PassName>, 0));
}
// Register Pass using default constructor explicitly...
RegisterLLC(const char *PassArg, const char *Name, Pass *(*ctor)()) {
registerPass(new PassInfo(Name, PassArg, typeid(PassName),
PassInfo::LLC, ctor, 0));
}
// Register Pass using TargetData constructor...
RegisterLLC(const char *PassArg, const char *Name,
Pass *(*datactor)(const TargetData &)) {
registerPass(new PassInfo(Name, PassArg, typeid(PassName),
PassInfo::LLC, 0, datactor));
}
// Register Pass using TargetMachine constructor...
RegisterLLC(const char *PassArg, const char *Name,
Pass *(*datactor)(TargetMachine &)) {
registerPass(new PassInfo(Name, PassArg, typeid(PassName),
PassInfo::LLC, 0, 0));
}
};
//===---------------------------------------------------------------------------
// PassRegistrationListener class - This class is meant to be derived from by