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>());  | 

