From 5d1cf5b4ebff14861745e1216ea9095ea8e6bf71 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 30 Jul 2002 03:55:01 +0000 Subject: Add rough support for LLC passes git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3144 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/PassSupport.h | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'include/llvm/PassSupport.h') diff --git a/include/llvm/PassSupport.h b/include/llvm/PassSupport.h index f9360b7f08..aad2ee6998 100644 --- a/include/llvm/PassSupport.h +++ b/include/llvm/PassSupport.h @@ -18,6 +18,7 @@ #include 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 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 +struct RegisterLLC : public RegisterPassBase { + RegisterLLC(const char *PassArg, const char *Name) { + registerPass(new PassInfo(Name, PassArg, typeid(PassName), + PassInfo::LLC, + callDefaultCtor, 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 -- cgit v1.2.3