Fixes and improvements to cross-module inlining code.

This commit is contained in:
Johan Engelen 2016-06-26 19:58:49 +02:00
parent a3f0678283
commit 7ed5a09dc3
6 changed files with 80 additions and 42 deletions

View file

@ -90,6 +90,14 @@ static cl::opt<cl::boolOrDefault, false, opts::FlagParser<cl::boolOrDefault>>
cl::desc("Enable function inlining (default in -O2 and higher)"),
cl::ZeroOrMore);
static llvm::cl::opt<llvm::cl::boolOrDefault, false,
opts::FlagParser<llvm::cl::boolOrDefault>>
enableCrossModuleInlining(
"cross-module-inlining",
llvm::cl::desc("Enable cross-module function inlining (default enabled "
"with inlining)"),
llvm::cl::ZeroOrMore, llvm::cl::Hidden);
static cl::opt<bool> unitAtATime("unit-at-a-time", cl::desc("Enable basic IPO"),
cl::init(true));
@ -131,6 +139,11 @@ bool willInline() {
(enableInlining == cl::BOU_UNSET && optLevel() > 1);
}
bool willCrossModuleInline() {
return enableCrossModuleInlining == llvm::cl::BOU_TRUE ||
(enableCrossModuleInlining == llvm::cl::BOU_UNSET && willInline());
}
bool isOptimizationEnabled() { return optimizeLevel != 0; }
llvm::CodeGenOpt::Level codeGenOptLevel() {