diff options
author | Chris Lattner <sabre@nondot.org> | 2002-07-30 16:27:32 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-07-30 16:27:32 +0000 |
commit | 6b5fe1962b7da7e8d3d4800396065f2f26d6112d (patch) | |
tree | 0b015a504d18d24ee0c8c127e049124244494550 | |
parent | 37d66c4dea6330d0a5441f82b12b9b8add1e3684 (diff) | |
download | external_llvm-6b5fe1962b7da7e8d3d4800396065f2f26d6112d.zip external_llvm-6b5fe1962b7da7e8d3d4800396065f2f26d6112d.tar.gz external_llvm-6b5fe1962b7da7e8d3d4800396065f2f26d6112d.tar.bz2 |
* Implement stuff so that code can declare that they only depend on the CFG of
a function, not on anything else. This speeds up GCCAS a lot.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3156 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/PassSupport.h | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/include/llvm/PassSupport.h b/include/llvm/PassSupport.h index aad2ee6..6a6e29b 100644 --- a/include/llvm/PassSupport.h +++ b/include/llvm/PassSupport.h @@ -124,6 +124,11 @@ struct RegisterPassBase { protected: PassInfo *PIObj; // The PassInfo object for this pass void registerPass(PassInfo *); + + // setPreservesCFG - Notice that this pass only depends on the CFG, so + // transformations that do not modify the CFG do not invalidate this pass. + // + void setPreservesCFG(); }; template<typename PassName> @@ -185,27 +190,20 @@ struct RegisterOpt : public RegisterPassBase { }; // RegisterAnalysis - Register something that is to show up in Analysis, this is -// just a shortcut for specifying RegisterPass... +// just a shortcut for specifying RegisterPass... Analyses take a special +// argument that, when set to true, tells the system that the analysis ONLY +// depends on the shape of the CFG, so if a transformation preserves the CFG +// that the analysis is not invalidated. // template<typename PassName> struct RegisterAnalysis : public RegisterPassBase { - RegisterAnalysis(const char *PassArg, const char *Name) { + RegisterAnalysis(const char *PassArg, const char *Name, + bool CFGOnly = false) { registerPass(new PassInfo(Name, PassArg, typeid(PassName), PassInfo::Analysis, callDefaultCtor<PassName>, 0)); - } - - // Register Pass using default constructor explicitly... - RegisterAnalysis(const char *PassArg, const char *Name, Pass *(*ctor)()) { - registerPass(new PassInfo(Name, PassArg, typeid(PassName), - PassInfo::Analys, ctor, 0)); - } - - // Register Pass using TargetData constructor... - RegisterAnalysis(const char *PassArg, const char *Name, - Pass *(*datactor)(const TargetData &)) { - registerPass(new PassInfo(Name, PassArg, typeid(PassName), - PassInfo::Analysis, 0, datactor)); + if (CFGOnly) + setPreservesCFG(); } }; |