diff options
-rw-r--r-- | clang/test/Misc/loop-opt-setup.c | 12 | ||||
-rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 12 |
2 files changed, 18 insertions, 6 deletions
diff --git a/clang/test/Misc/loop-opt-setup.c b/clang/test/Misc/loop-opt-setup.c new file mode 100644 index 00000000000..8d3835b4489 --- /dev/null +++ b/clang/test/Misc/loop-opt-setup.c @@ -0,0 +1,12 @@ +// RUN: %clang -O1 -fexperimental-new-pass-manager -fno-unroll-loops -S -o - %s -emit-llvm | FileCheck %s +// RUN: %clang -O1 -fno-unroll-loops -S -o - %s -emit-llvm | FileCheck %s +extern int a[16]; +int b = 0; +int foo(void) { +#pragma unroll + for (int i = 0; i < 16; ++i) + a[i] = b += 2; + return b; +} +// CHECK-NOT: br i1 + diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 25558e1b514..1aaccb510f8 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -471,8 +471,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level, if ((Phase != ThinLTOPhase::PreLink || !PGOOpt || PGOOpt->Action != PGOOptions::SampleUse) && PTO.LoopUnrolling) - LPM2.addPass( - LoopFullUnrollPass(Level, false, PTO.ForgetAllSCEVInLoopUnroll)); + LPM2.addPass(LoopFullUnrollPass(Level, /*OnlyWhenForced=*/false, + PTO.ForgetAllSCEVInLoopUnroll)); for (auto &C : LoopOptimizerEndEPCallbacks) C(LPM2, Level); @@ -953,13 +953,13 @@ ModulePassManager PassBuilder::buildModuleOptimizationPipeline( // combiner for cleanup here so that the unrolling and LICM can be pipelined // across the loop nests. // We do UnrollAndJam in a separate LPM to ensure it happens before unroll - if (EnableUnrollAndJam) { + if (EnableUnrollAndJam && PTO.LoopUnrolling) { OptimizePM.addPass( createFunctionToLoopPassAdaptor(LoopUnrollAndJamPass(Level))); } - if (PTO.LoopUnrolling) - OptimizePM.addPass(LoopUnrollPass( - LoopUnrollOptions(Level, false, PTO.ForgetAllSCEVInLoopUnroll))); + OptimizePM.addPass(LoopUnrollPass( + LoopUnrollOptions(Level, /*OnlyWhenForced=*/!PTO.LoopUnrolling, + PTO.ForgetAllSCEVInLoopUnroll))); OptimizePM.addPass(WarnMissedTransformationsPass()); OptimizePM.addPass(InstCombinePass()); OptimizePM.addPass(RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function>()); |