diff options
-rw-r--r-- | llvm/test/Transforms/Coroutines/smoketest.ll | 1 | ||||
-rw-r--r-- | llvm/tools/opt/opt.cpp | 15 |
2 files changed, 15 insertions, 1 deletions
diff --git a/llvm/test/Transforms/Coroutines/smoketest.ll b/llvm/test/Transforms/Coroutines/smoketest.ll index 2ed7b80ebba..e173564a8fb 100644 --- a/llvm/test/Transforms/Coroutines/smoketest.ll +++ b/llvm/test/Transforms/Coroutines/smoketest.ll @@ -1,6 +1,7 @@ ; Test that all coroutine passes run in the correct order at all optimization ; levels and -disable-coroutines removes coroutine passes from the pipeline. ; +; RUN: opt < %s -disable-output -enable-coroutines -debug-pass=Arguments -O0 2>&1 | FileCheck %s ; RUN: opt < %s -disable-output -enable-coroutines -debug-pass=Arguments -O1 2>&1 | FileCheck %s ; RUN: opt < %s -disable-output -enable-coroutines -debug-pass=Arguments -O2 2>&1 | FileCheck %s ; RUN: opt < %s -disable-output -enable-coroutines -debug-pass=Arguments -O3 2>&1 | FileCheck %s diff --git a/llvm/tools/opt/opt.cpp b/llvm/tools/opt/opt.cpp index ca0f134a612..66dc5637eb5 100644 --- a/llvm/tools/opt/opt.cpp +++ b/llvm/tools/opt/opt.cpp @@ -122,6 +122,10 @@ StandardLinkOpts("std-link-opts", cl::desc("Include the standard link time optimizations")); static cl::opt<bool> +OptLevelO0("O0", + cl::desc("Optimization level 0. Similar to clang -O0")); + +static cl::opt<bool> OptLevelO1("O1", cl::desc("Optimization level 1. Similar to clang -O1")); @@ -515,7 +519,8 @@ int main(int argc, char **argv) { : TargetIRAnalysis())); std::unique_ptr<legacy::FunctionPassManager> FPasses; - if (OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || OptLevelO3) { + if (OptLevelO0 || OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || + OptLevelO3) { FPasses.reset(new legacy::FunctionPassManager(M.get())); FPasses->add(createTargetTransformInfoWrapperPass( TM ? TM->getTargetIRAnalysis() : TargetIRAnalysis())); @@ -547,6 +552,11 @@ int main(int argc, char **argv) { StandardLinkOpts = false; } + if (OptLevelO0 && OptLevelO0.getPosition() < PassList.getPosition(i)) { + AddOptimizationPasses(Passes, *FPasses, TM.get(), 0, 0); + OptLevelO0 = false; + } + if (OptLevelO1 && OptLevelO1.getPosition() < PassList.getPosition(i)) { AddOptimizationPasses(Passes, *FPasses, TM.get(), 1, 0); OptLevelO1 = false; @@ -619,6 +629,9 @@ int main(int argc, char **argv) { StandardLinkOpts = false; } + if (OptLevelO0) + AddOptimizationPasses(Passes, *FPasses, TM.get(), 0, 0); + if (OptLevelO1) AddOptimizationPasses(Passes, *FPasses, TM.get(), 1, 0); |