Index: llvm/trunk/test/Transforms/Coroutines/smoketest.ll =================================================================== --- llvm/trunk/test/Transforms/Coroutines/smoketest.ll +++ llvm/trunk/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 Index: llvm/trunk/tools/opt/opt.cpp =================================================================== --- llvm/trunk/tools/opt/opt.cpp +++ llvm/trunk/tools/opt/opt.cpp @@ -122,6 +122,10 @@ cl::desc("Include the standard link time optimizations")); static cl::opt +OptLevelO0("O0", + cl::desc("Optimization level 0. Similar to clang -O0")); + +static cl::opt OptLevelO1("O1", cl::desc("Optimization level 1. Similar to clang -O1")); @@ -515,7 +519,8 @@ : TargetIRAnalysis())); std::unique_ptr 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 @@ 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 @@ StandardLinkOpts = false; } + if (OptLevelO0) + AddOptimizationPasses(Passes, *FPasses, TM.get(), 0, 0); + if (OptLevelO1) AddOptimizationPasses(Passes, *FPasses, TM.get(), 1, 0);