mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
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:
parent
67fcce2b19
commit
5d1cf5b4eb
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user