mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-22 10:33:23 +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>
|
#include <typeinfo>
|
||||||
class TargetData;
|
class TargetData;
|
||||||
|
class TargetMachine;
|
||||||
|
|
||||||
//===---------------------------------------------------------------------------
|
//===---------------------------------------------------------------------------
|
||||||
// PassInfo class - An instance of this class exists for every pass known by the
|
// 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.
|
// many of these flags or'd together.
|
||||||
//
|
//
|
||||||
enum {
|
enum {
|
||||||
Analysis = 1, Optimization = 2
|
Analysis = 1, Optimization = 2, LLC = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
// PassInfo ctor - Do not call this directly, this should only be invoked
|
// PassInfo ctor - Do not call this directly, this should only be invoked
|
||||||
@ -154,7 +155,7 @@ struct RegisterPass : public RegisterPassBase {
|
|||||||
template<typename CtorType>
|
template<typename CtorType>
|
||||||
RegisterPass(const char *PassArg, const char *Name, unsigned PassTy,
|
RegisterPass(const char *PassArg, const char *Name, unsigned PassTy,
|
||||||
CtorType *Fn) {
|
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
|
// PassRegistrationListener class - This class is meant to be derived from by
|
||||||
|
Loading…
x
Reference in New Issue
Block a user