diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-10 17:50:53 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-10 17:50:53 +0000 |
commit | 8d35314401047092eb97b989ed930967ed9e8ccc (patch) | |
tree | 38952f6c436a547f0124ce9979fc870eb982c5a6 /lib/Frontend | |
parent | bc2ea3406bf29ade6ac2329181890c2f352c0700 (diff) |
Localize -disable-llvm-optzns handling to BackendConsumer::CreatePasses.
- This is conceptually better since the only thing we want this option to do is
preserve the internal module as constructed by IRgen, before running any
passes.
- This also fixes bugs in -disable-llvm-optzns handling with regards to debug
info.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86691 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend')
-rw-r--r-- | lib/Frontend/Backend.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/Frontend/Backend.cpp b/lib/Frontend/Backend.cpp index 13aecf1717..af6dbafd1d 100644 --- a/lib/Frontend/Backend.cpp +++ b/lib/Frontend/Backend.cpp @@ -266,22 +266,30 @@ bool BackendConsumer::AddEmitPasses(std::string &Error) { } void BackendConsumer::CreatePasses() { + unsigned OptLevel = CompileOpts.OptimizationLevel; + CompileOptions::InliningMethod Inlining = CompileOpts.Inlining; + + // Handle disabling of LLVM optimization, where we want to preserve the + // internal module before any optimization. + if (CompileOpts.DisableLLVMOpts) { + OptLevel = 0; + Inlining = CompileOpts.NoInlining; + } + // In -O0 if checking is disabled, we don't even have per-function passes. if (CompileOpts.VerifyModule) getPerFunctionPasses()->add(createVerifierPass()); // Assume that standard function passes aren't run for -O0. - if (CompileOpts.OptimizationLevel > 0) - llvm::createStandardFunctionPasses(getPerFunctionPasses(), - CompileOpts.OptimizationLevel); + if (OptLevel > 0) + llvm::createStandardFunctionPasses(getPerFunctionPasses(), OptLevel); llvm::Pass *InliningPass = 0; - switch (CompileOpts.Inlining) { + switch (Inlining) { case CompileOptions::NoInlining: break; case CompileOptions::NormalInlining: { // Inline small functions - unsigned Threshold = (CompileOpts.OptimizeSize || - CompileOpts.OptimizationLevel < 3) ? 50 : 200; + unsigned Threshold = (CompileOpts.OptimizeSize || OptLevel < 3) ? 50 : 200; InliningPass = createFunctionInliningPass(Threshold); break; } @@ -292,8 +300,7 @@ void BackendConsumer::CreatePasses() { // For now we always create per module passes. PassManager *PM = getPerModulePasses(); - llvm::createStandardModulePasses(PM, CompileOpts.OptimizationLevel, - CompileOpts.OptimizeSize, + llvm::createStandardModulePasses(PM, OptLevel, CompileOpts.OptimizeSize, CompileOpts.UnitAtATime, CompileOpts.UnrollLoops, CompileOpts.SimplifyLibCalls, |