diff options
| author | Fedor Sergeev <fedor.sergeev@azul.com> | 2018-03-15 11:01:19 +0000 |
|---|---|---|
| committer | Fedor Sergeev <fedor.sergeev@azul.com> | 2018-03-15 11:01:19 +0000 |
| commit | 194a407bda2b604ca0e43edbb56ce51989a7dc0a (patch) | |
| tree | 0111706c9876bdb4bd32a16464e2362555bcc506 /llvm/test/Transforms | |
| parent | 5704dc0c7f6cfd0f2e6519edaf6f444295ccb7ca (diff) | |
| download | bcm5719-llvm-194a407bda2b604ca0e43edbb56ce51989a7dc0a.tar.gz bcm5719-llvm-194a407bda2b604ca0e43edbb56ce51989a7dc0a.zip | |
[New PM][IRCE] port of Inductive Range Check Elimination pass to the new pass manager
There are two nontrivial details here:
* Loop structure update interface is quite different with new pass manager,
so the code to add new loops was factored out
* BranchProbabilityInfo is not a loop analysis, so it can not be just getResult'ed from
within the loop pass. It cant even be queried through getCachedResult as LoopCanonicalization
sequence (e.g. LoopSimplify) might invalidate BPI results.
Complete solution for BPI will likely take some time to discuss and figure out,
so for now this was partially solved by making BPI optional in IRCE
(skipping a couple of profitability checks if it is absent).
Most of the IRCE tests got their corresponding new-pass-manager variant enabled.
Only two of them depend on BPI, both marked with TODO, to be turned on when BPI
starts being available for loop passes.
Reviewers: chandlerc, mkazantsev, sanjoy, asbirlea
Reviewed By: mkazantsev
Differential Revision: https://reviews.llvm.org/D43795
llvm-svn: 327619
Diffstat (limited to 'llvm/test/Transforms')
27 files changed, 32 insertions, 1 deletions
diff --git a/llvm/test/Transforms/IRCE/add-metadata-pre-post-loops.ll b/llvm/test/Transforms/IRCE/add-metadata-pre-post-loops.ll index 0225af903ef..d47cee00377 100644 --- a/llvm/test/Transforms/IRCE/add-metadata-pre-post-loops.ll +++ b/llvm/test/Transforms/IRCE/add-metadata-pre-post-loops.ll @@ -1,4 +1,5 @@ ; RUN: opt -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; test that the pre and post loops have loop metadata which disables any further ; loop optimizations. diff --git a/llvm/test/Transforms/IRCE/bad-loop-structure.ll b/llvm/test/Transforms/IRCE/bad-loop-structure.ll index 9c2e4251423..e094543d129 100644 --- a/llvm/test/Transforms/IRCE/bad-loop-structure.ll +++ b/llvm/test/Transforms/IRCE/bad-loop-structure.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -irce -irce-print-changed-loops=true < %s | FileCheck %s +; RUN: opt -S -passes='require<branch-prob>,loop(irce)' -irce-print-changed-loops=true < %s | FileCheck %s ; CHECK-NOT: irce diff --git a/llvm/test/Transforms/IRCE/bad_expander.ll b/llvm/test/Transforms/IRCE/bad_expander.ll index 6c048884e6c..bc98456a31b 100644 --- a/llvm/test/Transforms/IRCE/bad_expander.ll +++ b/llvm/test/Transforms/IRCE/bad_expander.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" target triple = "x86_64-unknown-linux-gnu" diff --git a/llvm/test/Transforms/IRCE/bug-loop-varying-upper-limit.ll b/llvm/test/Transforms/IRCE/bug-loop-varying-upper-limit.ll index c6243d3b558..087b89c08e0 100644 --- a/llvm/test/Transforms/IRCE/bug-loop-varying-upper-limit.ll +++ b/llvm/test/Transforms/IRCE/bug-loop-varying-upper-limit.ll @@ -1,4 +1,5 @@ ; RUN: opt -irce-print-changed-loops -S -verify-loop-info -irce -verify < %s 2>&1 | FileCheck %s +; RUN: opt -irce-print-changed-loops -S -verify-loop-info -passes='require<branch-prob>,loop(irce)' -verify < %s 2>&1 | FileCheck %s ; CHECK-NOT: constrained loop diff --git a/llvm/test/Transforms/IRCE/bug-mismatched-types.ll b/llvm/test/Transforms/IRCE/bug-mismatched-types.ll index dfec6ccd53f..8172e368444 100644 --- a/llvm/test/Transforms/IRCE/bug-mismatched-types.ll +++ b/llvm/test/Transforms/IRCE/bug-mismatched-types.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce -S < %s +; RUN: opt -verify-loop-info -passes='require<branch-prob>,loop(irce)' -S < %s ; These test cases don't check the correctness of the transform, but ; that -irce does not crash in the presence of certain things in diff --git a/llvm/test/Transforms/IRCE/clamp.ll b/llvm/test/Transforms/IRCE/clamp.ll index dfced7cf0ec..8cd05556770 100644 --- a/llvm/test/Transforms/IRCE/clamp.ll +++ b/llvm/test/Transforms/IRCE/clamp.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; The test demonstrates that incorrect behavior of Clamp may lead to incorrect ; calculation of post-loop exit condition. diff --git a/llvm/test/Transforms/IRCE/conjunctive-checks.ll b/llvm/test/Transforms/IRCE/conjunctive-checks.ll index b1a7063523d..4e3cf354125 100644 --- a/llvm/test/Transforms/IRCE/conjunctive-checks.ll +++ b/llvm/test/Transforms/IRCE/conjunctive-checks.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -verify-loop-info -irce < %s | FileCheck %s +; RUN: opt -S -verify-loop-info -passes='require<branch-prob>,loop(irce)' < %s | FileCheck %s define void @f_0(i32 *%arr, i32 *%a_len_ptr, i32 %n, i1* %cond_buf) { ; CHECK-LABEL: @f_0( diff --git a/llvm/test/Transforms/IRCE/correct-loop-info.ll b/llvm/test/Transforms/IRCE/correct-loop-info.ll index 7b4620daaa4..0141b37acdd 100644 --- a/llvm/test/Transforms/IRCE/correct-loop-info.ll +++ b/llvm/test/Transforms/IRCE/correct-loop-info.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -irce < %s -S | FileCheck %s +; RUN: opt -passes='require<branch-prob>,loop(irce)' < %s -S | FileCheck %s ; REQUIRES: asserts diff --git a/llvm/test/Transforms/IRCE/decrementing-loop.ll b/llvm/test/Transforms/IRCE/decrementing-loop.ll index e50479afe52..d72813844fd 100644 --- a/llvm/test/Transforms/IRCE/decrementing-loop.ll +++ b/llvm/test/Transforms/IRCE/decrementing-loop.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce -S < %s | FileCheck %s +; RUN: opt -verify-loop-info -passes='require<branch-prob>,loop(irce)' -S < %s | FileCheck %s define void @decrementing_loop(i32 *%arr, i32 *%a_len_ptr, i32 %n) { entry: diff --git a/llvm/test/Transforms/IRCE/empty_ranges.ll b/llvm/test/Transforms/IRCE/empty_ranges.ll index 748c21d00a2..362ab8f85d1 100644 --- a/llvm/test/Transforms/IRCE/empty_ranges.ll +++ b/llvm/test/Transforms/IRCE/empty_ranges.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S ; Make sure that IRCE doesn't apply in case of empty ranges. ; (i + 30 < 40) if i in [-30, 10). diff --git a/llvm/test/Transforms/IRCE/eq_ne.ll b/llvm/test/Transforms/IRCE/eq_ne.ll index 7fbed3be0f1..4961a2bbff2 100644 --- a/llvm/test/Transforms/IRCE/eq_ne.ll +++ b/llvm/test/Transforms/IRCE/eq_ne.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK: irce: in function test_01: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> ; CHECK: irce: in function test_01u: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> diff --git a/llvm/test/Transforms/IRCE/low-becount.ll b/llvm/test/Transforms/IRCE/low-becount.ll index a4ea7ed7efb..39f21230e26 100644 --- a/llvm/test/Transforms/IRCE/low-becount.ll +++ b/llvm/test/Transforms/IRCE/low-becount.ll @@ -1,4 +1,7 @@ ; RUN: opt -irce-print-changed-loops -verify-loop-info -irce -S < %s 2>&1 | FileCheck %s +; +; TODO: new-pm version should be enabled after we decide on branch-probability handling for loop passes +; TODO: opt -irce-print-changed-loops -verify-loop-info -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK-NOT: constrained Loop diff --git a/llvm/test/Transforms/IRCE/multiple-access-no-preloop.ll b/llvm/test/Transforms/IRCE/multiple-access-no-preloop.ll index 31bfe7881b6..000d1ab36f2 100644 --- a/llvm/test/Transforms/IRCE/multiple-access-no-preloop.ll +++ b/llvm/test/Transforms/IRCE/multiple-access-no-preloop.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce -S < %s | FileCheck %s +; RUN: opt -verify-loop-info -passes='require<branch-prob>,loop(irce)' -S < %s | FileCheck %s define void @multiple_access_no_preloop( i32* %arr_a, i32* %a_len_ptr, i32* %arr_b, i32* %b_len_ptr, i32 %n) { diff --git a/llvm/test/Transforms/IRCE/not-likely-taken.ll b/llvm/test/Transforms/IRCE/not-likely-taken.ll index 50a64a28632..3b28ae14f9f 100644 --- a/llvm/test/Transforms/IRCE/not-likely-taken.ll +++ b/llvm/test/Transforms/IRCE/not-likely-taken.ll @@ -1,4 +1,7 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce < %s 2>&1 | FileCheck %s +; +; TODO: new-pm version should be enabled after we decide on branch-probability handling for loop passes +; TODO: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' < %s 2>&1 | FileCheck %s ; CHECK-NOT: constrained Loop @@ -37,4 +40,4 @@ define void @multiple_access_no_preloop( } !0 = !{i32 0, i32 2147483647} -!1 = !{!"branch_weights", i32 1, i32 1}
\ No newline at end of file +!1 = !{!"branch_weights", i32 1, i32 1} diff --git a/llvm/test/Transforms/IRCE/only-lower-check.ll b/llvm/test/Transforms/IRCE/only-lower-check.ll index 6a076e192a8..e913ea61c03 100644 --- a/llvm/test/Transforms/IRCE/only-lower-check.ll +++ b/llvm/test/Transforms/IRCE/only-lower-check.ll @@ -1,4 +1,5 @@ ; RUN: opt -irce-print-range-checks -irce-print-changed-loops -verify-loop-info -irce < %s 2>&1 | FileCheck %s +; RUN: opt -irce-print-range-checks -irce-print-changed-loops -verify-loop-info -passes='require<branch-prob>,loop(irce)' < %s 2>&1 | FileCheck %s ; CHECK: irce: loop has 1 inductive range checks: ; CHECK-NEXT: InductiveRangeCheck: diff --git a/llvm/test/Transforms/IRCE/only-upper-check.ll b/llvm/test/Transforms/IRCE/only-upper-check.ll index 3c80e2d31f0..859ac4e2311 100644 --- a/llvm/test/Transforms/IRCE/only-upper-check.ll +++ b/llvm/test/Transforms/IRCE/only-upper-check.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce -irce-print-range-checks -irce-print-changed-loops %s -S 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -passes='require<branch-prob>,loop(irce)' -irce-print-range-checks -irce-print-changed-loops %s -S 2>&1 | FileCheck %s ; CHECK: irce: loop has 1 inductive range checks: ; CHECK-NEXT:InductiveRangeCheck: diff --git a/llvm/test/Transforms/IRCE/pre_post_loops.ll b/llvm/test/Transforms/IRCE/pre_post_loops.ll index 2cd2e29104f..8e41d428742 100644 --- a/llvm/test/Transforms/IRCE/pre_post_loops.ll +++ b/llvm/test/Transforms/IRCE/pre_post_loops.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK: irce: in function test_01: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> ; CHECK: irce: in function test_02: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> diff --git a/llvm/test/Transforms/IRCE/range_intersect_miscompile.ll b/llvm/test/Transforms/IRCE/range_intersect_miscompile.ll index 9dd3b6f151d..cd4a52b62f5 100644 --- a/llvm/test/Transforms/IRCE/range_intersect_miscompile.ll +++ b/llvm/test/Transforms/IRCE/range_intersect_miscompile.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK-LABEL: irce: in function test_01: constrained Loop at depth 1 containing: ; CHECK-LABEL: irce: in function test_02: constrained Loop at depth 1 containing: diff --git a/llvm/test/Transforms/IRCE/ranges_of_different_types.ll b/llvm/test/Transforms/IRCE/ranges_of_different_types.ll index c38ef24bc18..5c8161369f2 100644 --- a/llvm/test/Transforms/IRCE/ranges_of_different_types.ll +++ b/llvm/test/Transforms/IRCE/ranges_of_different_types.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; Make sure we can eliminate range check with signed latch, unsigned IRC and ; positive offset. The safe iteration space is: diff --git a/llvm/test/Transforms/IRCE/single-access-no-preloop.ll b/llvm/test/Transforms/IRCE/single-access-no-preloop.ll index 81db916ba66..acca948a7ab 100644 --- a/llvm/test/Transforms/IRCE/single-access-no-preloop.ll +++ b/llvm/test/Transforms/IRCE/single-access-no-preloop.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce -S < %s | FileCheck %s +; RUN: opt -verify-loop-info -passes='require<branch-prob>,loop(irce)' -S < %s | FileCheck %s define void @single_access_no_preloop_no_offset(i32 *%arr, i32 *%a_len_ptr, i32 %n) { entry: diff --git a/llvm/test/Transforms/IRCE/single-access-with-preloop.ll b/llvm/test/Transforms/IRCE/single-access-with-preloop.ll index 4b93122b6e7..6f3b0324e39 100644 --- a/llvm/test/Transforms/IRCE/single-access-with-preloop.ll +++ b/llvm/test/Transforms/IRCE/single-access-with-preloop.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce -S < %s | FileCheck %s +; RUN: opt -verify-loop-info -passes='require<branch-prob>,loop(irce)' -S < %s | FileCheck %s define void @single_access_with_preloop(i32 *%arr, i32 *%a_len_ptr, i32 %n, i32 %offset) { entry: diff --git a/llvm/test/Transforms/IRCE/skip-profitability-checks.ll b/llvm/test/Transforms/IRCE/skip-profitability-checks.ll index f37d3e8412f..aec625cb27a 100644 --- a/llvm/test/Transforms/IRCE/skip-profitability-checks.ll +++ b/llvm/test/Transforms/IRCE/skip-profitability-checks.ll @@ -1,4 +1,5 @@ ; RUN: opt -irce-skip-profitability-checks -S -verify-loop-info -irce < %s | FileCheck %s +; RUN: opt -irce-skip-profitability-checks -S -verify-loop-info -passes='require<branch-prob>,loop(irce)' < %s | FileCheck %s define void @single_access_no_preloop_no_offset(i32 *%arr, i32 *%a_len_ptr, i32 %n) { ; CHECK-LABEL: @single_access_no_preloop_no_offset( diff --git a/llvm/test/Transforms/IRCE/stride_more_than_1.ll b/llvm/test/Transforms/IRCE/stride_more_than_1.ll index 0918aeb8402..aed163680d4 100644 --- a/llvm/test/Transforms/IRCE/stride_more_than_1.ll +++ b/llvm/test/Transforms/IRCE/stride_more_than_1.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK: irce: in function test_01: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> ; CHECK: irce: in function test_02: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> diff --git a/llvm/test/Transforms/IRCE/unhandled.ll b/llvm/test/Transforms/IRCE/unhandled.ll index 4d9d4f72efa..db4ac84d746 100644 --- a/llvm/test/Transforms/IRCE/unhandled.ll +++ b/llvm/test/Transforms/IRCE/unhandled.ll @@ -1,4 +1,5 @@ ; RUN: opt -irce-print-changed-loops -verify-loop-info -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -irce-print-changed-loops -verify-loop-info -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK-NOT: constrained Loop at depth diff --git a/llvm/test/Transforms/IRCE/unsigned_comparisons_ugt.ll b/llvm/test/Transforms/IRCE/unsigned_comparisons_ugt.ll index 183706a2e6c..8f00c733569 100644 --- a/llvm/test/Transforms/IRCE/unsigned_comparisons_ugt.ll +++ b/llvm/test/Transforms/IRCE/unsigned_comparisons_ugt.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK: irce: in function test_01: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> ; CHECK: irce: in function test_02: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> diff --git a/llvm/test/Transforms/IRCE/unsigned_comparisons_ult.ll b/llvm/test/Transforms/IRCE/unsigned_comparisons_ult.ll index 603db2adf6c..dc59c11df1b 100644 --- a/llvm/test/Transforms/IRCE/unsigned_comparisons_ult.ll +++ b/llvm/test/Transforms/IRCE/unsigned_comparisons_ult.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce -S < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' -S < %s 2>&1 | FileCheck %s ; CHECK: irce: in function test_01: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> ; CHECK: irce: in function test_02: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> diff --git a/llvm/test/Transforms/IRCE/with-parent-loops.ll b/llvm/test/Transforms/IRCE/with-parent-loops.ll index 00af20b964f..16c20b1948d 100644 --- a/llvm/test/Transforms/IRCE/with-parent-loops.ll +++ b/llvm/test/Transforms/IRCE/with-parent-loops.ll @@ -1,4 +1,5 @@ ; RUN: opt -verify-loop-info -irce-print-changed-loops -irce < %s 2>&1 | FileCheck %s +; RUN: opt -verify-loop-info -irce-print-changed-loops -passes='require<branch-prob>,loop(irce)' < %s 2>&1 | FileCheck %s ; This test checks if we update the LoopInfo correctly in the presence ; of parents, uncles and cousins. |

