1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[bugpoint] Add support for -Oz and properly enable -Os.

This patch adds -Oz as option and also properly enables support for -Os.
Currently, the existing check for -Os is dead, because the enclosing if
only checks of O1, O2 and O3.

There is still a difference between the -Oz pipeline compared to opt,
but I have not been able to track that down yet.

Reviewers: bogner, sebpop, efriedma

Reviewed By: efriedma

Differential Revision: https://reviews.llvm.org/D67593

llvm-svn: 372079
This commit is contained in:
Florian Hahn 2019-09-17 08:14:09 +00:00
parent e91af3cf2d
commit a04631bfe3

View File

@ -80,6 +80,10 @@ static cl::opt<bool> OptLevelOs(
cl::desc(
"Like -O2 with extra optimizations for size. Similar to clang -Os"));
static cl::opt<bool>
OptLevelOz("Oz",
cl::desc("Like -Os but reduces code size further. Similar to clang -Oz"));
static cl::opt<bool>
OptLevelO3("O3", cl::desc("Optimization level 3. Identical to 'opt -O3'"));
@ -109,6 +113,26 @@ public:
};
}
// This routine adds optimization passes based on selected optimization level,
// OptLevel.
//
// OptLevel - Optimization Level
static void AddOptimizationPasses(legacy::FunctionPassManager &FPM,
unsigned OptLevel,
unsigned SizeLevel) {
PassManagerBuilder Builder;
Builder.OptLevel = OptLevel;
Builder.SizeLevel = SizeLevel;
if (OptLevel > 1)
Builder.Inliner = createFunctionInliningPass(OptLevel, SizeLevel, false);
else
Builder.Inliner = createAlwaysInlinerLegacyPass();
Builder.populateFunctionPassManager(FPM);
Builder.populateModulePassManager(FPM);
}
#ifdef LINK_POLLY_INTO_TOOLS
namespace polly {
void initializePollyPasses(llvm::PassRegistry &Registry);
@ -189,18 +213,16 @@ int main(int argc, char **argv) {
Builder.populateLTOPassManager(PM);
}
if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
PassManagerBuilder Builder;
if (OptLevelO1)
Builder.Inliner = createAlwaysInlinerLegacyPass();
else if (OptLevelOs || OptLevelO2)
Builder.Inliner = createFunctionInliningPass(
2, OptLevelOs ? 1 : 0, false);
else
Builder.Inliner = createFunctionInliningPass(275);
Builder.populateFunctionPassManager(PM);
Builder.populateModulePassManager(PM);
}
if (OptLevelO1)
AddOptimizationPasses(PM, 1, 0);
else if (OptLevelO2)
AddOptimizationPasses(PM, 2, 0);
else if (OptLevelO3)
AddOptimizationPasses(PM, 3, 0);
else if (OptLevelOs)
AddOptimizationPasses(PM, 2, 1);
else if (OptLevelOz)
AddOptimizationPasses(PM, 2, 2);
for (const PassInfo *PI : PassList)
D.addPass(PI->getPassArgument());