diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -209,6 +209,7 @@ FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass()) FUNCTION_PASS("loop-simplify", LoopSimplifyPass()) FUNCTION_PASS("loop-sink", LoopSinkPass()) +FUNCTION_PASS("loop-unroll-and-jam", LoopUnrollAndJamPass()) FUNCTION_PASS("lowerinvoke", LowerInvokePass()) FUNCTION_PASS("mem2reg", PromotePass()) FUNCTION_PASS("memcpyopt", MemCpyOptPass()) @@ -249,7 +250,6 @@ FUNCTION_PASS("spec-phis", SpeculateAroundPHIsPass()) FUNCTION_PASS("sroa", SROA()) FUNCTION_PASS("tailcallelim", TailCallElimPass()) -FUNCTION_PASS("unroll-and-jam", LoopUnrollAndJamPass()) FUNCTION_PASS("vector-combine", VectorCombinePass()) FUNCTION_PASS("verify", VerifierPass()) FUNCTION_PASS("verify", DominatorTreeVerifierPass()) @@ -271,7 +271,7 @@ #ifndef FUNCTION_PASS_WITH_PARAMS #define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) #endif -FUNCTION_PASS_WITH_PARAMS("unroll", +FUNCTION_PASS_WITH_PARAMS("loop-unroll", [](LoopUnrollOptions Opts) { return LoopUnrollPass(Opts); }, @@ -333,7 +333,7 @@ LOOP_PASS("simplify-cfg", LoopSimplifyCFGPass()) LOOP_PASS("strength-reduce", LoopStrengthReducePass()) LOOP_PASS("indvars", IndVarSimplifyPass()) -LOOP_PASS("unroll-full", LoopFullUnrollPass()) +LOOP_PASS("loop-unroll-full", LoopFullUnrollPass()) LOOP_PASS("print-access-info", LoopAccessInfoPrinterPass(dbgs())) LOOP_PASS("print", DDGAnalysisPrinterPass(dbgs())) LOOP_PASS("print", IVUsersPrinterPass(dbgs())) diff --git a/llvm/test/Other/loop-pass-printer.ll b/llvm/test/Other/loop-pass-printer.ll --- a/llvm/test/Other/loop-pass-printer.ll +++ b/llvm/test/Other/loop-pass-printer.ll @@ -11,13 +11,13 @@ ; RUN: -loop-unroll -print-after=loop-unroll -filter-print-funcs=bar \ ; RUN: | FileCheck %s -check-prefix=BAR -check-prefix=BAR-OLD ; RUN: opt < %s 2>&1 -disable-output \ -; RUN: -passes='require,loop(unroll-full)' -print-after-all -filter-print-funcs=bar \ +; RUN: -passes='require,loop(loop-unroll-full)' -print-after-all -filter-print-funcs=bar \ ; RUN: | FileCheck %s -check-prefix=BAR ; RUN: opt < %s 2>&1 -disable-output \ ; RUN: -loop-unroll -print-after=loop-unroll -filter-print-funcs=foo -print-module-scope \ ; RUN: | FileCheck %s -check-prefix=FOO-MODULE -check-prefix=FOO-MODULE-OLD ; RUN: opt < %s 2>&1 -disable-output \ -; RUN: -passes='require,loop(unroll-full)' -print-after-all -filter-print-funcs=foo -print-module-scope \ +; RUN: -passes='require,loop(loop-unroll-full)' -print-after-all -filter-print-funcs=foo -print-module-scope \ ; RUN: | FileCheck %s -check-prefix=FOO-MODULE ; DEL: IR Dump Before {{Delete dead loops|LoopDeletionPass}} diff --git a/llvm/test/Transforms/Inline/last-call-bonus.ll b/llvm/test/Transforms/Inline/last-call-bonus.ll --- a/llvm/test/Transforms/Inline/last-call-bonus.ll +++ b/llvm/test/Transforms/Inline/last-call-bonus.ll @@ -10,7 +10,7 @@ ; preprocess the test. ; RUN: opt < %s -loop-unroll -inline -unroll-threshold=15000 -inline-threshold=250 -S | FileCheck %s -; RUN: opt < %s -passes='function(require,unroll),require,cgscc(inline)' -unroll-threshold=15000 -inline-threshold=250 -S | FileCheck %s +; RUN: opt < %s -passes='function(require,loop-unroll),require,cgscc(inline)' -unroll-threshold=15000 -inline-threshold=250 -S | FileCheck %s ; CHECK-LABEL: define internal i32 @bar() define internal i32 @baz() { diff --git a/llvm/test/Transforms/Inline/last-call-no-bonus.ll b/llvm/test/Transforms/Inline/last-call-no-bonus.ll --- a/llvm/test/Transforms/Inline/last-call-no-bonus.ll +++ b/llvm/test/Transforms/Inline/last-call-no-bonus.ll @@ -2,7 +2,7 @@ ; to the internal functions are cold, thereby preventing the last call to ; static bonus from being applied. -; RUN: opt < %s -passes='function(require,unroll),require,cgscc(inline)' -unroll-threshold=15000 -inline-threshold=250 -S | FileCheck %s +; RUN: opt < %s -passes='function(require,loop-unroll),require,cgscc(inline)' -unroll-threshold=15000 -inline-threshold=250 -S | FileCheck %s ; CHECK-LABEL: define internal i32 @baz define internal i32 @baz() { diff --git a/llvm/test/Transforms/LoopUnroll/basic.ll b/llvm/test/Transforms/LoopUnroll/basic.ll --- a/llvm/test/Transforms/LoopUnroll/basic.ll +++ b/llvm/test/Transforms/LoopUnroll/basic.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -loop-unroll -S | FileCheck %s -; RUN: opt < %s -passes='require,unroll' -S | FileCheck %s +; RUN: opt < %s -passes='require,loop-unroll' -S | FileCheck %s ; This should not unroll since the address of the loop header is taken. diff --git a/llvm/test/Transforms/LoopUnroll/disable-full-unroll-by-opt.ll b/llvm/test/Transforms/LoopUnroll/disable-full-unroll-by-opt.ll --- a/llvm/test/Transforms/LoopUnroll/disable-full-unroll-by-opt.ll +++ b/llvm/test/Transforms/LoopUnroll/disable-full-unroll-by-opt.ll @@ -1,19 +1,19 @@ ; Default behavior -; RUN: opt < %s -passes='unroll' -S | FileCheck %s -check-prefixes=ENABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -S | FileCheck %s -check-prefixes=ENABLE,COMMON ; Pass option -; RUN: opt < %s -passes='unroll' -S | FileCheck %s -check-prefixes=DISABLE,COMMON -; RUN: opt < %s -passes='unroll' -S | FileCheck %s -check-prefixes=DISABLE,COMMON -; RUN: opt < %s -passes='unroll' -S | FileCheck %s -check-prefixes=ENABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -S | FileCheck %s -check-prefixes=DISABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -S | FileCheck %s -check-prefixes=DISABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -S | FileCheck %s -check-prefixes=ENABLE,COMMON ; cl::opt option -; RUN: opt < %s -passes='unroll' -unroll-full-max-count=0 -S | FileCheck %s -check-prefixes=DISABLE,COMMON -; RUN: opt < %s -passes='unroll' -unroll-full-max-count=30 -S | FileCheck %s -check-prefixes=DISABLE,COMMON -; RUN: opt < %s -passes='unroll' -unroll-full-max-count=36 -S | FileCheck %s -check-prefixes=ENABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -unroll-full-max-count=0 -S | FileCheck %s -check-prefixes=DISABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -unroll-full-max-count=30 -S | FileCheck %s -check-prefixes=DISABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -unroll-full-max-count=36 -S | FileCheck %s -check-prefixes=ENABLE,COMMON ; Pass option has a priority over cl::opt -; RUN: opt < %s -passes='unroll' -unroll-full-max-count=36 -S | FileCheck %s -check-prefixes=DISABLE,COMMON -; RUN: opt < %s -passes='unroll' -unroll-full-max-count=30 -S | FileCheck %s -check-prefixes=ENABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -unroll-full-max-count=36 -S | FileCheck %s -check-prefixes=DISABLE,COMMON +; RUN: opt < %s -passes='loop-unroll' -unroll-full-max-count=30 -S | FileCheck %s -check-prefixes=ENABLE,COMMON define void @test() { ; COMMON-LABEL: @test( diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-bad-cost.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-bad-cost.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-bad-cost.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-bad-cost.ll @@ -1,5 +1,5 @@ ; RUN: opt -S -loop-unroll < %s | FileCheck %s -; RUN: opt < %s -passes='require,loop(unroll-full)' -S | FileCheck %s +; RUN: opt < %s -passes='require,loop(loop-unroll-full)' -S | FileCheck %s ; LLVM should not try to fully unroll this loop. diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll @@ -1,6 +1,6 @@ ; Check that we don't crash on corner cases. ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=1 -unroll-max-percent-threshold-boost=200 -o /dev/null -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=1 -unroll-max-percent-threshold-boost=200 -o /dev/null +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=1 -unroll-max-percent-threshold-boost=200 -o /dev/null target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" @known_constant = internal unnamed_addr constant [10 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1], align 16 diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-2.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-2.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-2.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-2.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" @unknown_global = internal unnamed_addr global [9 x i32] [i32 0, i32 -1, i32 0, i32 -1, i32 5, i32 -1, i32 0, i32 -1, i32 0], align 16 diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-cmp.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-cmp.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-cmp.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-cmp.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" @known_constant = internal unnamed_addr constant [10 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1], align 16 diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-dce.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-dce.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-dce.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-dce.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=12 -unroll-max-percent-threshold-boost=400 | FileCheck %s -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=12 -unroll-max-percent-threshold-boost=400 | FileCheck %s +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=12 -unroll-max-percent-threshold-boost=400 | FileCheck %s target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" @known_constant = internal unnamed_addr constant [10 x i32] [i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0], align 16 diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-geps.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-geps.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-geps.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-geps.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" ; When examining gep-instructions we shouldn't consider them simplified if the diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-phi-prop.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-phi-prop.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-phi-prop.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics-phi-prop.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=100 -unroll-threshold=10 -unroll-max-percent-threshold-boost=200 | FileCheck %s target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" define i64 @propagate_loop_phis() { diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-heuristics.ll @@ -21,14 +21,14 @@ ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=200 | FileCheck %s -check-prefix=TEST2 ; RUN: opt < %s -S -loop-unroll -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST3 -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=10 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST1 -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=200 | FileCheck %s -check-prefix=TEST2 -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST3 +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=10 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST1 +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=200 | FileCheck %s -check-prefix=TEST2 +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST3 ; Check that these work when the unroller has partial unrolling enabled too. -; RUN: opt < %s -S -passes='require,unroll' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=10 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST1 -; RUN: opt < %s -S -passes='require,unroll' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=200 | FileCheck %s -check-prefix=TEST2 -; RUN: opt < %s -S -passes='require,unroll' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST3 +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=10 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST1 +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=200 | FileCheck %s -check-prefix=TEST2 +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-max-iteration-count-to-analyze=1000 -unroll-threshold=20 -unroll-max-percent-threshold-boost=100 | FileCheck %s -check-prefix=TEST3 ; If the absolute threshold is too low, we should not unroll: ; TEST1: %array_const_idx = getelementptr inbounds [9 x i32], [9 x i32]* @known_constant, i64 0, i64 %iv @@ -41,7 +41,7 @@ ; And check that we don't crash when we're not allowed to do any analysis. ; RUN: opt < %s -loop-unroll -unroll-max-iteration-count-to-analyze=0 -disable-output -; RUN: opt < %s -passes='require,loop(unroll-full)' -unroll-max-iteration-count-to-analyze=0 -disable-output +; RUN: opt < %s -passes='require,loop(loop-unroll-full)' -unroll-max-iteration-count-to-analyze=0 -disable-output target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" @known_constant = internal unnamed_addr constant [9 x i32] [i32 0, i32 -1, i32 0, i32 -1, i32 5, i32 -1, i32 0, i32 -1, i32 0], align 16 diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-keep-first-exit.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-keep-first-exit.ll --- a/llvm/test/Transforms/LoopUnroll/full-unroll-keep-first-exit.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-keep-first-exit.ll @@ -1,5 +1,5 @@ ; RUN: opt -S -loop-unroll < %s | FileCheck %s -; RUN: opt -S -passes='require,loop(unroll-full)' < %s | FileCheck %s +; RUN: opt -S -passes='require,loop(loop-unroll-full)' < %s | FileCheck %s ; Unroll twice, with first loop exit kept ; CHECK-LABEL: @s32_max1 diff --git a/llvm/test/Transforms/LoopUnroll/nonlatchcondbr.ll b/llvm/test/Transforms/LoopUnroll/nonlatchcondbr.ll --- a/llvm/test/Transforms/LoopUnroll/nonlatchcondbr.ll +++ b/llvm/test/Transforms/LoopUnroll/nonlatchcondbr.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -loop-unroll -unroll-runtime -unroll-count=4 -S | FileCheck %s -; RUN: opt < %s -passes='require,unroll' -unroll-runtime -unroll-count=4 -S | FileCheck %s +; RUN: opt < %s -passes='require,loop-unroll' -unroll-runtime -unroll-count=4 -S | FileCheck %s ; Check that loop unroll pass correctly handle loops with ; single exiting block not the loop header or latch. diff --git a/llvm/test/Transforms/LoopUnroll/partial-unroll-const-bounds.ll b/llvm/test/Transforms/LoopUnroll/partial-unroll-const-bounds.ll --- a/llvm/test/Transforms/LoopUnroll/partial-unroll-const-bounds.ll +++ b/llvm/test/Transforms/LoopUnroll/partial-unroll-const-bounds.ll @@ -1,8 +1,8 @@ ; RUN: opt < %s -S -unroll-partial-threshold=20 -unroll-threshold=20 -loop-unroll -unroll-allow-partial -unroll-runtime -unroll-allow-remainder -unroll-max-percent-threshold-boost=100 | FileCheck %s -; RUN: opt < %s -S -passes='require,unroll' -unroll-partial-threshold=20 -unroll-threshold=20 -unroll-allow-partial -unroll-runtime -unroll-allow-remainder -unroll-max-percent-threshold-boost=100 | FileCheck %s +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-partial-threshold=20 -unroll-threshold=20 -unroll-allow-partial -unroll-runtime -unroll-allow-remainder -unroll-max-percent-threshold-boost=100 | FileCheck %s ; ; Also check that the simple unroller doesn't allow the partial unrolling. -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-partial-threshold=20 -unroll-threshold=20 -unroll-allow-partial -unroll-runtime -unroll-allow-remainder -unroll-max-percent-threshold-boost=100 | FileCheck %s --check-prefix=CHECK-NO-UNROLL +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-partial-threshold=20 -unroll-threshold=20 -unroll-allow-partial -unroll-runtime -unroll-allow-remainder -unroll-max-percent-threshold-boost=100 | FileCheck %s --check-prefix=CHECK-NO-UNROLL ; The Loop TripCount is 9. However unroll factors 3 or 9 exceed given threshold. ; The test checks that we choose a smaller, power-of-two, unroll count and do not give up on unrolling. diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop-inner.ll b/llvm/test/Transforms/LoopUnroll/peel-loop-inner.ll --- a/llvm/test/Transforms/LoopUnroll/peel-loop-inner.ll +++ b/llvm/test/Transforms/LoopUnroll/peel-loop-inner.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -S -passes='require,unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s +; RUN: opt < %s -S -passes='require,loop-unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s define void @basic(i32 %K, i32 %N) { ; CHECK-LABEL: @basic( diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll --- a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll +++ b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll @@ -1,6 +1,6 @@ ; REQUIRES: asserts ; RUN: opt < %s -S -debug-only=loop-unroll -loop-unroll -unroll-runtime -unroll-peel-multi-deopt-exit 2>&1 | FileCheck %s -; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,unroll)' 2>&1 | FileCheck %s +; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,loop-unroll)' 2>&1 | FileCheck %s ; Regression test for setting the correct idom for exit blocks. diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll --- a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll +++ b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll @@ -1,6 +1,6 @@ ; REQUIRES: asserts ; RUN: opt < %s -S -debug-only=loop-unroll -loop-unroll -unroll-runtime -unroll-peel-multi-deopt-exit 2>&1 | FileCheck %s -; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,unroll)' 2>&1 | FileCheck %s +; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,loop-unroll)' 2>&1 | FileCheck %s ; Regression test for setting the correct idom for exit blocks. diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll --- a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll +++ b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll @@ -1,7 +1,7 @@ ; REQUIRES: asserts ; RUN: opt < %s -S -debug-only=loop-unroll -loop-unroll -unroll-runtime -unroll-peel-multi-deopt-exit 2>&1 | FileCheck %s -; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,unroll)' 2>&1 | FileCheck %s -; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,unroll)' 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PEEL +; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,loop-unroll)' 2>&1 | FileCheck %s +; RUN: opt < %s -S -debug-only=loop-unroll -unroll-peel-multi-deopt-exit -passes='require,function(require,loop-unroll)' 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PEEL ; Make sure we use the profile information correctly to peel-off 3 iterations ; from the loop, and update the branch weights for the peeled loop properly. diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll --- a/llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll +++ b/llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll @@ -1,8 +1,8 @@ ; RUN: opt < %s -S -debug-only=loop-unroll -loop-unroll 2>&1 | FileCheck %s -; RUN: opt < %s -S -debug-only=loop-unroll -passes='require,function(require,unroll)' 2>&1 | FileCheck %s +; RUN: opt < %s -S -debug-only=loop-unroll -passes='require,function(require,loop-unroll)' 2>&1 | FileCheck %s ; Confirm that peeling is disabled if the number of counts required to reach ; the hot percentile is above the threshold. -; RUN: opt < %s -S -profile-summary-huge-working-set-size-threshold=9 -debug-only=loop-unroll -passes='require,function(require,unroll)' 2>&1 | FileCheck %s --check-prefix=NOPEEL +; RUN: opt < %s -S -profile-summary-huge-working-set-size-threshold=9 -debug-only=loop-unroll -passes='require,function(require,loop-unroll)' 2>&1 | FileCheck %s --check-prefix=NOPEEL ; REQUIRES: asserts ; Make sure we use the profile information correctly to peel-off 3 iterations @@ -14,7 +14,7 @@ ; CHECK-NOT: PEELING ; Confirm that no peeling occurs when we are performing full unrolling. -; RUN: opt < %s -S -debug-only=loop-unroll -passes='require,loop(unroll-full)' 2>&1 | FileCheck %s --check-prefix=NOPEEL +; RUN: opt < %s -S -debug-only=loop-unroll -passes='require,loop(loop-unroll-full)' 2>&1 | FileCheck %s --check-prefix=NOPEEL ; NOPEEL-NOT: PEELING ; CHECK-LABEL: @basic diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop.ll b/llvm/test/Transforms/LoopUnroll/peel-loop.ll --- a/llvm/test/Transforms/LoopUnroll/peel-loop.ll +++ b/llvm/test/Transforms/LoopUnroll/peel-loop.ll @@ -1,6 +1,6 @@ ; RUN: opt < %s -S -loop-unroll -unroll-force-peel-count=3 -verify-dom-info -simplifycfg -instcombine | FileCheck %s -; RUN: opt < %s -S -passes='require,unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s -; RUN: opt < %s -S -passes='require,unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s +; RUN: opt < %s -S -passes='require,loop-unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s +; RUN: opt < %s -S -passes='require,loop-unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s ; Basic loop peeling - check that we can peel-off the first 3 loop iterations ; when explicitly requested. diff --git a/llvm/test/Transforms/LoopUnroll/revisit.ll b/llvm/test/Transforms/LoopUnroll/revisit.ll --- a/llvm/test/Transforms/LoopUnroll/revisit.ll +++ b/llvm/test/Transforms/LoopUnroll/revisit.ll @@ -4,12 +4,12 @@ ; current two cases. ; ; RUN: opt < %s -disable-output -debug-pass-manager 2>&1 \ -; RUN: -passes='require,loop(unroll-full)' \ +; RUN: -passes='require,loop(loop-unroll-full)' \ ; RUN: | FileCheck %s ; ; Also run in a special mode that visits children. ; RUN: opt < %s -disable-output -debug-pass-manager -unroll-revisit-child-loops 2>&1 \ -; RUN: -passes='require,loop(unroll-full)' \ +; RUN: -passes='require,loop(loop-unroll-full)' \ ; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-CHILDREN ; Basic test is fully unrolled and we revisit the post-unroll new sibling diff --git a/llvm/test/Transforms/LoopUnroll/runtime-loop.ll b/llvm/test/Transforms/LoopUnroll/runtime-loop.ll --- a/llvm/test/Transforms/LoopUnroll/runtime-loop.ll +++ b/llvm/test/Transforms/LoopUnroll/runtime-loop.ll @@ -1,16 +1,16 @@ ; RUN: opt < %s -S -loop-unroll -unroll-runtime=true -unroll-runtime-epilog=true | FileCheck %s -check-prefixes=EPILOG,COMMON ; RUN: opt < %s -S -loop-unroll -unroll-runtime=true -unroll-runtime-epilog=false | FileCheck %s -check-prefixes=PROLOG,COMMON ; -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime=true -unroll-runtime-epilog=true | FileCheck %s -check-prefixes=EPILOG,COMMON -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime=true -unroll-runtime-epilog=false | FileCheck %s -check-prefixes=PROLOG,COMMON +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime=true -unroll-runtime-epilog=true | FileCheck %s -check-prefixes=EPILOG,COMMON +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime=true -unroll-runtime-epilog=false | FileCheck %s -check-prefixes=PROLOG,COMMON ; ; Restricted versions of unroll (unroll, unroll-full) should not be doing runtime unrolling ; even if it is globally enabled through -unroll-runtime option ; -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime=true -unroll-runtime-epilog=true | FileCheck %s -check-prefixes=NOEPILOG,COMMON -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime=true -unroll-runtime-epilog=false | FileCheck %s -check-prefixes=NOPROLOG,COMMON -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-runtime=true -unroll-runtime-epilog=true | FileCheck %s -check-prefixes=NOEPILOG,COMMON -; RUN: opt < %s -S -passes='require,loop(unroll-full)' -unroll-runtime=true -unroll-runtime-epilog=false | FileCheck %s -check-prefixes=NOPROLOG,COMMON +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime=true -unroll-runtime-epilog=true | FileCheck %s -check-prefixes=NOEPILOG,COMMON +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime=true -unroll-runtime-epilog=false | FileCheck %s -check-prefixes=NOPROLOG,COMMON +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-runtime=true -unroll-runtime-epilog=true | FileCheck %s -check-prefixes=NOEPILOG,COMMON +; RUN: opt < %s -S -passes='require,loop(loop-unroll-full)' -unroll-runtime=true -unroll-runtime-epilog=false | FileCheck %s -check-prefixes=NOPROLOG,COMMON target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" diff --git a/llvm/test/Transforms/LoopUnroll/runtime-loop1.ll b/llvm/test/Transforms/LoopUnroll/runtime-loop1.ll --- a/llvm/test/Transforms/LoopUnroll/runtime-loop1.ll +++ b/llvm/test/Transforms/LoopUnroll/runtime-loop1.ll @@ -1,8 +1,8 @@ ; RUN: opt < %s -S -loop-unroll -unroll-runtime -unroll-count=2 -unroll-runtime-epilog=true | FileCheck %s -check-prefix=EPILOG ; RUN: opt < %s -S -loop-unroll -unroll-runtime -unroll-count=2 -unroll-runtime-epilog=false | FileCheck %s -check-prefix=PROLOG -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime -unroll-count=2 -unroll-runtime-epilog=true | FileCheck %s -check-prefix=EPILOG -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime -unroll-count=2 -unroll-runtime-epilog=false | FileCheck %s -check-prefix=PROLOG +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime -unroll-count=2 -unroll-runtime-epilog=true | FileCheck %s -check-prefix=EPILOG +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime -unroll-count=2 -unroll-runtime-epilog=false | FileCheck %s -check-prefix=PROLOG ; This tests that setting the unroll count works diff --git a/llvm/test/Transforms/LoopUnroll/runtime-loop2.ll b/llvm/test/Transforms/LoopUnroll/runtime-loop2.ll --- a/llvm/test/Transforms/LoopUnroll/runtime-loop2.ll +++ b/llvm/test/Transforms/LoopUnroll/runtime-loop2.ll @@ -1,8 +1,8 @@ ; RUN: opt < %s -S -loop-unroll -unroll-threshold=25 -unroll-partial-threshold=25 -unroll-runtime -unroll-runtime-epilog=true -unroll-count=8 | FileCheck %s -check-prefix=EPILOG ; RUN: opt < %s -S -loop-unroll -unroll-threshold=25 -unroll-partial-threshold=25 -unroll-runtime -unroll-runtime-epilog=false | FileCheck %s -check-prefix=PROLOG -; RUN: opt < %s -S -passes='require,unroll' -unroll-threshold=25 -unroll-partial-threshold=25 -unroll-runtime -unroll-runtime-epilog=true -unroll-count=8 | FileCheck %s -check-prefix=EPILOG -; RUN: opt < %s -S -passes='require,unroll' -unroll-threshold=25 -unroll-partial-threshold=25 -unroll-runtime -unroll-runtime-epilog=false | FileCheck %s -check-prefix=PROLOG +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-threshold=25 -unroll-partial-threshold=25 -unroll-runtime -unroll-runtime-epilog=true -unroll-count=8 | FileCheck %s -check-prefix=EPILOG +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-threshold=25 -unroll-partial-threshold=25 -unroll-runtime -unroll-runtime-epilog=false | FileCheck %s -check-prefix=PROLOG ; Choose a smaller, power-of-two, unroll count if the loop is too large. ; This test makes sure we're not unrolling 'odd' counts diff --git a/llvm/test/Transforms/LoopUnroll/runtime-loop3.ll b/llvm/test/Transforms/LoopUnroll/runtime-loop3.ll --- a/llvm/test/Transforms/LoopUnroll/runtime-loop3.ll +++ b/llvm/test/Transforms/LoopUnroll/runtime-loop3.ll @@ -1,6 +1,6 @@ ; REQUIRES: asserts ; RUN: opt < %s -disable-output -stats -loop-unroll -unroll-runtime -unroll-partial-threshold=200 -unroll-threshold=400 -info-output-file - | FileCheck %s --check-prefix=STATS -; RUN: opt < %s -disable-output -stats -passes='require,unroll' -unroll-runtime -unroll-partial-threshold=200 -unroll-threshold=400 -info-output-file - | FileCheck %s --check-prefix=STATS +; RUN: opt < %s -disable-output -stats -passes='require,loop-unroll' -unroll-runtime -unroll-partial-threshold=200 -unroll-threshold=400 -info-output-file - | FileCheck %s --check-prefix=STATS ; Test that nested loops can be unrolled. We need to increase threshold to do it diff --git a/llvm/test/Transforms/LoopUnroll/runtime-loop5.ll b/llvm/test/Transforms/LoopUnroll/runtime-loop5.ll --- a/llvm/test/Transforms/LoopUnroll/runtime-loop5.ll +++ b/llvm/test/Transforms/LoopUnroll/runtime-loop5.ll @@ -1,8 +1,8 @@ ; RUN: opt < %s -S -loop-unroll -unroll-runtime=true -unroll-count=16 | FileCheck --check-prefix=UNROLL-16 %s ; RUN: opt < %s -S -loop-unroll -unroll-runtime=true -unroll-count=4 | FileCheck --check-prefix=UNROLL-4 %s -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime=true -unroll-count=16 | FileCheck --check-prefix=UNROLL-16 %s -; RUN: opt < %s -S -passes='require,unroll' -unroll-runtime=true -unroll-count=4 | FileCheck --check-prefix=UNROLL-4 %s +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime=true -unroll-count=16 | FileCheck --check-prefix=UNROLL-16 %s +; RUN: opt < %s -S -passes='require,loop-unroll' -unroll-runtime=true -unroll-count=4 | FileCheck --check-prefix=UNROLL-4 %s ; Given that the trip-count of this loop is a 3-bit value, we cannot ; safely unroll it with a count of anything more than 8. diff --git a/llvm/test/Transforms/LoopUnroll/unloop.ll b/llvm/test/Transforms/LoopUnroll/unloop.ll --- a/llvm/test/Transforms/LoopUnroll/unloop.ll +++ b/llvm/test/Transforms/LoopUnroll/unloop.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -S -loop-unroll -verify-loop-info | FileCheck %s -; RUN: opt < %s -S -passes='require,unroll,verify' | FileCheck %s +; RUN: opt < %s -S -passes='require,loop-unroll,verify' | FileCheck %s ; ; Unit tests for LoopInfo::markAsRemoved. diff --git a/llvm/test/Transforms/LoopUnroll/unroll-loop-invalidation.ll b/llvm/test/Transforms/LoopUnroll/unroll-loop-invalidation.ll --- a/llvm/test/Transforms/LoopUnroll/unroll-loop-invalidation.ll +++ b/llvm/test/Transforms/LoopUnroll/unroll-loop-invalidation.ll @@ -3,7 +3,7 @@ ; analysis is cached, then unroll the loop (deleting it) and make sure that the ; next function doesn't get a cache "hit" for this stale analysis result. ; -; RUN: opt -S -passes='loop(require),unroll,loop(print-access-info)' -debug-pass-manager < %s 2>&1 | FileCheck %s +; RUN: opt -S -passes='loop(require),loop-unroll,loop(print-access-info)' -debug-pass-manager < %s 2>&1 | FileCheck %s ; ; CHECK: Starting llvm::Function pass manager run. ; CHECK: Running pass: FunctionToLoopPassAdaptor diff --git a/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll b/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll --- a/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll +++ b/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll @@ -1,176 +1,176 @@ -; RUN: opt < %s -S -loop-unroll -unroll-count=4 | FileCheck -check-prefix=CHECK_COUNT4 %s -; RUN: opt < %s -S -loop-unroll | FileCheck -check-prefix=CHECK_NOCOUNT %s -; RUN: opt < %s -S -passes='require,function(unroll)' -pgso | FileCheck -check-prefix=PGSO %s -; RUN: opt < %s -S -passes='require,function(unroll)' -pgso=false | FileCheck -check-prefix=NPGSO %s - - -;///////////////////// TEST 1 ////////////////////////////// - -; This test shows that the loop is unrolled according to the specified -; unroll factor. - -define void @Test1() nounwind { -entry: - br label %loop - -loop: - %iv = phi i32 [ 0, %entry ], [ %inc, %loop ] - %inc = add i32 %iv, 1 - %exitcnd = icmp uge i32 %inc, 1024 - br i1 %exitcnd, label %exit, label %loop - -exit: - ret void -} - -; CHECK_COUNT4-LABEL: @Test1 -; CHECK_COUNT4: phi -; CHECK_COUNT4-NEXT: add -; CHECK_COUNT4-NEXT: add -; CHECK_COUNT4-NEXT: add -; CHECK_COUNT4-NEXT: add -; CHECK_COUNT4-NEXT: icmp - - -;///////////////////// TEST 2 ////////////////////////////// - -; This test shows that with optnone attribute, the loop is not unrolled -; even if an unroll factor was specified. - -define void @Test2() nounwind optnone noinline { -entry: - br label %loop - -loop: - %iv = phi i32 [ 0, %entry ], [ %inc, %loop ] - %inc = add i32 %iv, 1 - %exitcnd = icmp uge i32 %inc, 1024 - br i1 %exitcnd, label %exit, label %loop - -exit: - ret void -} - -; CHECK_COUNT4-LABEL: @Test2 -; CHECK_COUNT4: phi -; CHECK_COUNT4-NEXT: add -; CHECK_COUNT4-NEXT: icmp - - -;///////////////////// TEST 3 ////////////////////////////// - -; This test shows that this loop is fully unrolled by default. - -@tab = common global [24 x i32] zeroinitializer, align 4 - -define i32 @Test3() { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05 - store i32 %i.05, i32* %arrayidx, align 4 - %inc = add nuw nsw i32 %i.05, 1 - %exitcond = icmp eq i32 %inc, 24 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body - ret i32 42 -} - -; CHECK_NOCOUNT-LABEL: @Test3 -; CHECK_NOCOUNT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: store -; CHECK_NOCOUNT-NEXT: ret - - -;///////////////////// TEST 4 ////////////////////////////// - -; This test shows that with optsize attribute, this loop is not unrolled. - -define i32 @Test4() optsize { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05 - store i32 %i.05, i32* %arrayidx, align 4 - %inc = add nuw nsw i32 %i.05, 1 - %exitcond = icmp eq i32 %inc, 24 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body - ret i32 42 -} - -; CHECK_NOCOUNT-LABEL: @Test4 -; CHECK_NOCOUNT: phi -; CHECK_NOCOUNT: icmp - -;///////////////////// TEST 5 ////////////////////////////// - -; This test shows that with PGO, this loop is cold and not unrolled. - -define i32 @Test5() !prof !14 { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05 - store i32 %i.05, i32* %arrayidx, align 4 - %inc = add nuw nsw i32 %i.05, 1 - %exitcond = icmp eq i32 %inc, 24 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body - ret i32 42 -} - -; PGSO-LABEL: @Test5 -; PGSO: phi -; PGSO: icmp -; NPGSO-LABEL: @Test5 -; NPGSO-NOT: phi -; NPGSO-NOT: icmp - -!llvm.module.flags = !{!0} -!0 = !{i32 1, !"ProfileSummary", !1} -!1 = !{!2, !3, !4, !5, !6, !7, !8, !9} -!2 = !{!"ProfileFormat", !"InstrProf"} -!3 = !{!"TotalCount", i64 10000} -!4 = !{!"MaxCount", i64 10} -!5 = !{!"MaxInternalCount", i64 1} -!6 = !{!"MaxFunctionCount", i64 1000} -!7 = !{!"NumCounts", i64 3} -!8 = !{!"NumFunctions", i64 3} -!9 = !{!"DetailedSummary", !10} -!10 = !{!11, !12, !13} -!11 = !{i32 10000, i64 100, i32 1} -!12 = !{i32 999000, i64 100, i32 1} -!13 = !{i32 999999, i64 1, i32 2} -!14 = !{!"function_entry_count", i64 0} +; RUN: opt < %s -S -loop-unroll -unroll-count=4 | FileCheck -check-prefix=CHECK_COUNT4 %s +; RUN: opt < %s -S -loop-unroll | FileCheck -check-prefix=CHECK_NOCOUNT %s +; RUN: opt < %s -S -passes='require,function(loop-unroll)' -pgso | FileCheck -check-prefix=PGSO %s +; RUN: opt < %s -S -passes='require,function(loop-unroll)' -pgso=false | FileCheck -check-prefix=NPGSO %s + + +;///////////////////// TEST 1 ////////////////////////////// + +; This test shows that the loop is unrolled according to the specified +; unroll factor. + +define void @Test1() nounwind { +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %inc, %loop ] + %inc = add i32 %iv, 1 + %exitcnd = icmp uge i32 %inc, 1024 + br i1 %exitcnd, label %exit, label %loop + +exit: + ret void +} + +; CHECK_COUNT4-LABEL: @Test1 +; CHECK_COUNT4: phi +; CHECK_COUNT4-NEXT: add +; CHECK_COUNT4-NEXT: add +; CHECK_COUNT4-NEXT: add +; CHECK_COUNT4-NEXT: add +; CHECK_COUNT4-NEXT: icmp + + +;///////////////////// TEST 2 ////////////////////////////// + +; This test shows that with optnone attribute, the loop is not unrolled +; even if an unroll factor was specified. + +define void @Test2() nounwind optnone noinline { +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %inc, %loop ] + %inc = add i32 %iv, 1 + %exitcnd = icmp uge i32 %inc, 1024 + br i1 %exitcnd, label %exit, label %loop + +exit: + ret void +} + +; CHECK_COUNT4-LABEL: @Test2 +; CHECK_COUNT4: phi +; CHECK_COUNT4-NEXT: add +; CHECK_COUNT4-NEXT: icmp + + +;///////////////////// TEST 3 ////////////////////////////// + +; This test shows that this loop is fully unrolled by default. + +@tab = common global [24 x i32] zeroinitializer, align 4 + +define i32 @Test3() { +entry: + br label %for.body + +for.body: ; preds = %for.body, %entry + %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ] + %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05 + store i32 %i.05, i32* %arrayidx, align 4 + %inc = add nuw nsw i32 %i.05, 1 + %exitcond = icmp eq i32 %inc, 24 + br i1 %exitcond, label %for.end, label %for.body + +for.end: ; preds = %for.body + ret i32 42 +} + +; CHECK_NOCOUNT-LABEL: @Test3 +; CHECK_NOCOUNT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: store +; CHECK_NOCOUNT-NEXT: ret + + +;///////////////////// TEST 4 ////////////////////////////// + +; This test shows that with optsize attribute, this loop is not unrolled. + +define i32 @Test4() optsize { +entry: + br label %for.body + +for.body: ; preds = %for.body, %entry + %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ] + %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05 + store i32 %i.05, i32* %arrayidx, align 4 + %inc = add nuw nsw i32 %i.05, 1 + %exitcond = icmp eq i32 %inc, 24 + br i1 %exitcond, label %for.end, label %for.body + +for.end: ; preds = %for.body + ret i32 42 +} + +; CHECK_NOCOUNT-LABEL: @Test4 +; CHECK_NOCOUNT: phi +; CHECK_NOCOUNT: icmp + +;///////////////////// TEST 5 ////////////////////////////// + +; This test shows that with PGO, this loop is cold and not unrolled. + +define i32 @Test5() !prof !14 { +entry: + br label %for.body + +for.body: ; preds = %for.body, %entry + %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ] + %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05 + store i32 %i.05, i32* %arrayidx, align 4 + %inc = add nuw nsw i32 %i.05, 1 + %exitcond = icmp eq i32 %inc, 24 + br i1 %exitcond, label %for.end, label %for.body + +for.end: ; preds = %for.body + ret i32 42 +} + +; PGSO-LABEL: @Test5 +; PGSO: phi +; PGSO: icmp +; NPGSO-LABEL: @Test5 +; NPGSO-NOT: phi +; NPGSO-NOT: icmp + +!llvm.module.flags = !{!0} +!0 = !{i32 1, !"ProfileSummary", !1} +!1 = !{!2, !3, !4, !5, !6, !7, !8, !9} +!2 = !{!"ProfileFormat", !"InstrProf"} +!3 = !{!"TotalCount", i64 10000} +!4 = !{!"MaxCount", i64 10} +!5 = !{!"MaxInternalCount", i64 1} +!6 = !{!"MaxFunctionCount", i64 1000} +!7 = !{!"NumCounts", i64 3} +!8 = !{!"NumFunctions", i64 3} +!9 = !{!"DetailedSummary", !10} +!10 = !{!11, !12, !13} +!11 = !{i32 10000, i64 100, i32 1} +!12 = !{i32 999000, i64 100, i32 1} +!13 = !{i32 999999, i64 1, i32 2} +!14 = !{!"function_entry_count", i64 0} diff --git a/llvm/test/Transforms/LoopUnroll/update-loop-info-in-subloops.ll b/llvm/test/Transforms/LoopUnroll/update-loop-info-in-subloops.ll --- a/llvm/test/Transforms/LoopUnroll/update-loop-info-in-subloops.ll +++ b/llvm/test/Transforms/LoopUnroll/update-loop-info-in-subloops.ll @@ -1,5 +1,5 @@ ; RUN: opt -S < %s -loop-unroll -block-freq | FileCheck %s -; RUN: opt -S < %s -passes='require,unroll,require' | FileCheck %s +; RUN: opt -S < %s -passes='require,loop-unroll,require' | FileCheck %s ; Crasher from PR20987. ; CHECK: define void @update_loop_info_in_subloops diff --git a/llvm/test/Transforms/LoopUnroll/wrong_assert_in_peeling.ll b/llvm/test/Transforms/LoopUnroll/wrong_assert_in_peeling.ll --- a/llvm/test/Transforms/LoopUnroll/wrong_assert_in_peeling.ll +++ b/llvm/test/Transforms/LoopUnroll/wrong_assert_in_peeling.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S < %s -loop-unroll | FileCheck %s -; RUN: opt -S < %s -passes=unroll | FileCheck %s +; RUN: opt -S < %s -passes=loop-unroll | FileCheck %s target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2" target triple = "x86_64-unknown-linux-gnu" diff --git a/llvm/test/Transforms/LoopUnrollAndJam/dependencies.ll b/llvm/test/Transforms/LoopUnrollAndJam/dependencies.ll --- a/llvm/test/Transforms/LoopUnrollAndJam/dependencies.ll +++ b/llvm/test/Transforms/LoopUnrollAndJam/dependencies.ll @@ -1,5 +1,5 @@ ; RUN: opt -basicaa -loop-unroll-and-jam -allow-unroll-and-jam -unroll-and-jam-count=4 < %s -S | FileCheck %s -; RUN: opt -aa-pipeline=basic-aa -passes='unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 < %s -S | FileCheck %s +; RUN: opt -aa-pipeline=basic-aa -passes='loop-unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 < %s -S | FileCheck %s target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" diff --git a/llvm/test/Transforms/LoopUnrollAndJam/dependencies_multidims.ll b/llvm/test/Transforms/LoopUnrollAndJam/dependencies_multidims.ll --- a/llvm/test/Transforms/LoopUnrollAndJam/dependencies_multidims.ll +++ b/llvm/test/Transforms/LoopUnrollAndJam/dependencies_multidims.ll @@ -1,5 +1,5 @@ ; RUN: opt -da-disable-delinearization-checks -basicaa -loop-unroll-and-jam -allow-unroll-and-jam -unroll-and-jam-count=4 < %s -S | FileCheck %s -; RUN: opt -da-disable-delinearization-checks -aa-pipeline=basic-aa -passes='unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 < %s -S | FileCheck %s +; RUN: opt -da-disable-delinearization-checks -aa-pipeline=basic-aa -passes='loop-unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 < %s -S | FileCheck %s target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" diff --git a/llvm/test/Transforms/LoopUnrollAndJam/disable.ll b/llvm/test/Transforms/LoopUnrollAndJam/disable.ll --- a/llvm/test/Transforms/LoopUnrollAndJam/disable.ll +++ b/llvm/test/Transforms/LoopUnrollAndJam/disable.ll @@ -1,5 +1,5 @@ ; RUN: opt -loop-unroll-and-jam -allow-unroll-and-jam -unroll-and-jam-count=4 -pass-remarks=loop-unroll-and-jam < %s -S 2>&1 | FileCheck %s -; RUN: opt -passes='unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 -pass-remarks=loop-unroll-and-jam < %s -S 2>&1 | FileCheck %s +; RUN: opt -passes='loop-unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 -pass-remarks=loop-unroll-and-jam < %s -S 2>&1 | FileCheck %s target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" diff --git a/llvm/test/Transforms/LoopUnrollAndJam/innerloop.ll b/llvm/test/Transforms/LoopUnrollAndJam/innerloop.ll --- a/llvm/test/Transforms/LoopUnrollAndJam/innerloop.ll +++ b/llvm/test/Transforms/LoopUnrollAndJam/innerloop.ll @@ -1,5 +1,5 @@ ; RUN: opt -loop-unroll-and-jam -allow-unroll-and-jam -verify-loop-info < %s -S | FileCheck %s -; RUN: opt -passes='unroll-and-jam,verify' -allow-unroll-and-jam < %s -S | FileCheck %s +; RUN: opt -passes='loop-unroll-and-jam,verify' -allow-unroll-and-jam < %s -S | FileCheck %s ; Check that the newly created loops to not fail to be added to LI ; This test deliberately disables UnJ on the middle loop, performing it instead on the diff --git a/llvm/test/Transforms/LoopUnrollAndJam/pragma-explicit.ll b/llvm/test/Transforms/LoopUnrollAndJam/pragma-explicit.ll --- a/llvm/test/Transforms/LoopUnrollAndJam/pragma-explicit.ll +++ b/llvm/test/Transforms/LoopUnrollAndJam/pragma-explicit.ll @@ -1,5 +1,5 @@ ; RUN: opt -loop-unroll-and-jam -allow-unroll-and-jam -unroll-runtime -unroll-partial-threshold=60 < %s -S | FileCheck %s -; RUN: opt -aa-pipeline=type-based-aa,basic-aa -passes='unroll-and-jam' -allow-unroll-and-jam -unroll-runtime -unroll-partial-threshold=60 < %s -S | FileCheck %s +; RUN: opt -aa-pipeline=type-based-aa,basic-aa -passes='loop-unroll-and-jam' -allow-unroll-and-jam -unroll-runtime -unroll-partial-threshold=60 < %s -S | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" diff --git a/llvm/test/Transforms/LoopUnrollAndJam/unroll-and-jam.ll b/llvm/test/Transforms/LoopUnrollAndJam/unroll-and-jam.ll --- a/llvm/test/Transforms/LoopUnrollAndJam/unroll-and-jam.ll +++ b/llvm/test/Transforms/LoopUnrollAndJam/unroll-and-jam.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -basicaa -tbaa -loop-unroll-and-jam -allow-unroll-and-jam -unroll-and-jam-count=4 -unroll-remainder < %s -S | FileCheck %s -; RUN: opt -aa-pipeline=type-based-aa,basic-aa -passes='unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 -unroll-remainder < %s -S | FileCheck %s +; RUN: opt -aa-pipeline=type-based-aa,basic-aa -passes='loop-unroll-and-jam' -allow-unroll-and-jam -unroll-and-jam-count=4 -unroll-remainder < %s -S | FileCheck %s target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"