Index: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -973,9 +973,7 @@ MPM.addPass(InstrProfiling(*Options, false)); }); - if (CodeGenOpts.OptimizationLevel == 0) { - MPM = PB.buildO0DefaultPipeline(Level, IsLTO || IsThinLTO); - } else if (IsThinLTO) { + if (IsThinLTO) { MPM = PB.buildThinLTOPreLinkDefaultPipeline(Level); } else if (IsLTO) { MPM = PB.buildLTOPreLinkDefaultPipeline(Level); Index: clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp =================================================================== --- clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp +++ clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp @@ -103,11 +103,7 @@ PB.registerLoopAnalyses(LAM); PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); - ModulePassManager MPM; - if (OL == OptimizationLevel::O0) - MPM = PB.buildO0DefaultPipeline(OL); - else - MPM = PB.buildPerModuleDefaultPipeline(OL); + ModulePassManager MPM = PB.buildPerModuleDefaultPipeline(OL); MPM.addPass(PrintModulePass(OS)); MPM.run(M, MAM); Index: flang/lib/Frontend/FrontendActions.cpp =================================================================== --- flang/lib/Frontend/FrontendActions.cpp +++ flang/lib/Frontend/FrontendActions.cpp @@ -726,10 +726,7 @@ // Create the pass manager. llvm::ModulePassManager mpm; - if (opts.OptimizationLevel == 0) - mpm = pb.buildO0DefaultPipeline(level, opts.PrepareForFullLTO || - opts.PrepareForThinLTO); - else if (opts.PrepareForFullLTO) + if (opts.PrepareForFullLTO) mpm = pb.buildLTOPreLinkDefaultPipeline(level); else if (opts.PrepareForThinLTO) mpm = pb.buildThinLTOPreLinkDefaultPipeline(level); Index: llvm/include/llvm/Passes/PassBuilder.h =================================================================== --- llvm/include/llvm/Passes/PassBuilder.h +++ llvm/include/llvm/Passes/PassBuilder.h @@ -259,11 +259,6 @@ /// optimization and code generation. It is particularly tuned to fit well /// when IR coming into the LTO phase was first run through \c /// addPreLinkLTODefaultPipeline, and the two coordinate closely. - /// - /// Note that \p Level cannot be `O0` here. The pipelines produced are - /// only intended for use when attempting to optimize code. If frontends - /// require some transformations for semantic reasons, they should explicitly - /// build them. ModulePassManager buildThinLTODefaultPipeline(OptimizationLevel Level, const ModuleSummaryIndex *ImportSummary); @@ -275,11 +270,6 @@ /// run. It works to minimize the IR which needs to be analyzed without /// making irreversible decisions which could be made better during the LTO /// run. - /// - /// Note that \p Level cannot be `O0` here. The pipelines produced are - /// only intended for use when attempting to optimize code. If frontends - /// require some transformations for semantic reasons, they should explicitly - /// build them. ModulePassManager buildLTOPreLinkDefaultPipeline(OptimizationLevel Level); /// Build an LTO default optimization pipeline to a pass manager. @@ -288,11 +278,6 @@ /// optimization and code generation. It is particularly tuned to fit well /// when IR coming into the LTO phase was first run through \c /// addPreLinkLTODefaultPipeline, and the two coordinate closely. - /// - /// Note that \p Level cannot be `O0` here. The pipelines produced are - /// only intended for use when attempting to optimize code. If frontends - /// require some transformations for semantic reasons, they should explicitly - /// build them. ModulePassManager buildLTODefaultPipeline(OptimizationLevel Level, ModuleSummaryIndex *ExportSummary); Index: llvm/lib/Passes/PassBuilder.cpp =================================================================== --- llvm/lib/Passes/PassBuilder.cpp +++ llvm/lib/Passes/PassBuilder.cpp @@ -1270,12 +1270,6 @@ .Case("O3", OptimizationLevel::O3) .Case("Os", OptimizationLevel::Os) .Case("Oz", OptimizationLevel::Oz); - if (L == OptimizationLevel::O0 && Matches[1] != "thinlto" && - Matches[1] != "lto") { - MPM.addPass(buildO0DefaultPipeline(L, Matches[1] == "thinlto-pre-link" || - Matches[1] == "lto-pre-link")); - return Error::success(); - } // This is consistent with old pass manager invoked via opt, but // inconsistent with clang. Clang doesn't enable loop vectorization Index: llvm/lib/Passes/PassBuilderPipelines.cpp =================================================================== --- llvm/lib/Passes/PassBuilderPipelines.cpp +++ llvm/lib/Passes/PassBuilderPipelines.cpp @@ -1398,8 +1398,8 @@ ModulePassManager PassBuilder::buildPerModuleDefaultPipeline(OptimizationLevel Level, bool LTOPreLink) { - assert(Level != OptimizationLevel::O0 && - "Must request optimizations for the default pipeline!"); + if (Level == OptimizationLevel::O0) + return buildO0DefaultPipeline(Level, LTOPreLink); ModulePassManager MPM; @@ -1440,8 +1440,8 @@ ModulePassManager PassBuilder::buildThinLTOPreLinkDefaultPipeline(OptimizationLevel Level) { - assert(Level != OptimizationLevel::O0 && - "Must request optimizations for the default pipeline!"); + if (Level == OptimizationLevel::O0) + return buildO0DefaultPipeline(Level, /*LTOPreLink*/true); ModulePassManager MPM; @@ -1552,8 +1552,6 @@ ModulePassManager PassBuilder::buildLTOPreLinkDefaultPipeline(OptimizationLevel Level) { - assert(Level != OptimizationLevel::O0 && - "Must request optimizations for the default pipeline!"); // FIXME: We should use a customized pre-link pipeline! return buildPerModuleDefaultPipeline(Level, /* LTOPreLink */ true); Index: mlir/lib/ExecutionEngine/OptUtils.cpp =================================================================== --- mlir/lib/ExecutionEngine/OptUtils.cpp +++ mlir/lib/ExecutionEngine/OptUtils.cpp @@ -84,11 +84,7 @@ pb.crossRegisterProxies(lam, fam, cgam, mam); ModulePassManager mpm; - if (*ol == OptimizationLevel::O0) - mpm.addPass(pb.buildO0DefaultPipeline(*ol)); - else - mpm.addPass(pb.buildPerModuleDefaultPipeline(*ol)); - + mpm.addPass(pb.buildPerModuleDefaultPipeline(*ol)); mpm.run(*m, mam); return Error::success(); }; Index: openmp/libomptarget/plugins-nextgen/common/PluginInterface/JIT.cpp =================================================================== --- openmp/libomptarget/plugins-nextgen/common/PluginInterface/JIT.cpp +++ openmp/libomptarget/plugins-nextgen/common/PluginInterface/JIT.cpp @@ -214,11 +214,7 @@ PB.registerLoopAnalyses(LAM); PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); - if (OptLevel) - MPM.addPass(PB.buildPerModuleDefaultPipeline(getOptLevel(OptLevel))); - else - MPM.addPass(PB.buildO0DefaultPipeline(getOptLevel(OptLevel))); - + MPM.addPass(PB.buildPerModuleDefaultPipeline(getOptLevel(OptLevel))); MPM.run(M, MAM); }