- RegisterPass(const char *PassArg, const char *Name, bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName),
- callDefaultCtor<PassName>) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-
- // Register Pass using default constructor explicitly...
- RegisterPass(const char *PassArg, const char *Name,
- Pass *(*ctor)(), bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName), ctor) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-
- // Register Pass using TargetMachine constructor...
- RegisterPass(const char *PassArg, const char *Name,
- Pass *(*targetctor)(TargetMachine &), bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName), 0, targetctor) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-
- // Generic constructor version that has an unknown ctor type...
- template<typename CtorType>
- RegisterPass(const char *PassArg, const char *Name, CtorType *Fn,
- bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName), 0) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-};
-
-/// RegisterOpt - Register something that is to show up in Opt, this is just a
-/// shortcut for specifying RegisterPass...
-///
-template<typename PassName>
-struct RegisterOpt : public RegisterPassBase {
- RegisterOpt(const char *PassArg, const char *Name, bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName),
- callDefaultCtor<PassName>) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-
- /// Register Pass using default constructor explicitly...
- ///
- RegisterOpt(const char *PassArg, const char *Name, Pass *(*ctor)(),
- bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName), ctor) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-
- /// Register FunctionPass using default constructor explicitly...
- ///
- RegisterOpt(const char *PassArg, const char *Name, FunctionPass *(*ctor)(),
- bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName),
- static_cast<Pass*(*)()>(ctor)) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-
- /// Register Pass using TargetMachine constructor...
- ///
- RegisterOpt(const char *PassArg, const char *Name,
- Pass *(*targetctor)(TargetMachine &), bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName), 0, targetctor) {
- if (CFGOnly) setOnlyUsesCFG();
- }
-
- /// Register FunctionPass using TargetMachine constructor...
- ///
- RegisterOpt(const char *PassArg, const char *Name,
- FunctionPass *(*targetctor)(TargetMachine &),
- bool CFGOnly = false)
- : RegisterPassBase(Name, PassArg, typeid(PassName), 0,
- static_cast<Pass*(*)(TargetMachine&)>(targetctor)) {
- if (CFGOnly) setOnlyUsesCFG();