Mercurial > projects > ldc
changeset 1175:cc1efa23030a
Enable inlining by default for -O3+.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sun, 29 Mar 2009 19:38:59 +0200 |
parents | b0f9652f31de |
children | 34321f120882 |
files | gen/cl_helpers.h gen/optimizer.cpp |
diffstat | 2 files changed, 32 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/gen/cl_helpers.h Sun Mar 29 18:50:41 2009 +0200 +++ b/gen/cl_helpers.h Sun Mar 29 19:38:59 2009 +0200 @@ -62,7 +62,23 @@ push_back(str.c_str()); } }; - + + /// Helper class to allow use of a parser<bool> with BoolOrDefault + class BoolOrDefaultAdapter { + cl::boolOrDefault value; + public: + operator cl::boolOrDefault() { + return value; + } + + void operator=(cl::boolOrDefault val) { + value = val; + } + + void operator=(bool val) { + *this = (val ? cl::BOU_TRUE : cl::BOU_FALSE); + } + }; } #endif
--- a/gen/optimizer.cpp Sun Mar 29 18:50:41 2009 +0200 +++ b/gen/optimizer.cpp Sun Mar 29 19:38:59 2009 +0200 @@ -1,4 +1,5 @@ #include "gen/optimizer.h" +#include "gen/cl_helpers.h" #include "llvm/PassManager.h" #include "llvm/LinkAllPasses.h" @@ -32,22 +33,26 @@ clEnumValEnd), cl::init(0)); -static cl::opt<bool> enableInlining("enable-inlining", - cl::desc("Enable function inlining (in -O<N>, if given)"), - cl::ZeroOrMore, - cl::init(false)); +static cl::opt<opts::BoolOrDefaultAdapter, false, opts::FlagParser> +enableInlining("inlining", + cl::desc("(*) Enable function inlining (in -O<N>, if given)"), + cl::ZeroOrMore); -// Some accessors for the linker: (llvm-ld version only, currently unused?) +// Determine whether or not to run the inliner as part of the default list of +// optimization passes. +// If not explicitly specified, treat as false for -O0-2, and true for -O3. bool doInline() { - return enableInlining; + return enableInlining == cl::BOU_TRUE + || (enableInlining == cl::BOU_UNSET && optimizeLevel >= 3); } +// Some extra accessors for the linker: (llvm-ld version only, currently unused?) int optLevel() { return optimizeLevel; } bool optimize() { - return optimizeLevel || enableInlining || passList.empty(); + return optimizeLevel || doInline() || passList.empty(); } // this function inserts some or all of the std-compile-opts passes depending on the @@ -76,7 +81,7 @@ } // -inline - if (enableInlining) { + if (doInline()) { pm.add(createFunctionInliningPass()); } @@ -123,13 +128,13 @@ // Returns true if any optimization passes were invoked. bool ldc_optimize_module(llvm::Module* m) { - if (!enableInlining && optimizeLevel == 0 && passList.empty()) + if (!doInline() && optimizeLevel == 0 && passList.empty()) return false; PassManager pm; pm.add(new TargetData(m)); - bool optimize = optimizeLevel != 0 || enableInlining; + bool optimize = optimizeLevel != 0 || doInline(); unsigned optPos = optimizeLevel != 0 ? optimizeLevel.getPosition()