diff options
Diffstat (limited to 'llvm/test/Analysis/ScalarEvolution/trip-count9.ll')
-rw-r--r-- | llvm/test/Analysis/ScalarEvolution/trip-count9.ll | 263 |
1 files changed, 188 insertions, 75 deletions
diff --git a/llvm/test/Analysis/ScalarEvolution/trip-count9.ll b/llvm/test/Analysis/ScalarEvolution/trip-count9.ll index 9a080b34743..d0fb51a1ee5 100644 --- a/llvm/test/Analysis/ScalarEvolution/trip-count9.ll +++ b/llvm/test/Analysis/ScalarEvolution/trip-count9.ll @@ -1,4 +1,5 @@ -; RUN: opt -analyze -scalar-evolution -S < %s | FileCheck %s +; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py +; RUN: opt -analyze -scalar-evolution -S -scalar-evolution-classify-expressions=0 < %s | FileCheck %s ; Every combination of ; - starting at 0, 1, or %x @@ -8,10 +9,15 @@ ; Some of these represent missed opportunities. -; CHECK: Determining loop execution counts for: @foo -; CHECK: Loop %loop: backedge-taken count is (-1 + %n) -; CHECK: Loop %loop: max backedge-taken count is 6 define void @foo(i4 %n) { +; CHECK-LABEL: 'foo' +; CHECK-NEXT: Determining loop execution counts for: @foo +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %n) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 6 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + %n) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -24,10 +30,13 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @step2 -; CHECK: Loop %loop: Unpredictable backedge-taken count. -; CHECK: Loop %loop: Unpredictable max backedge-taken count. define void @step2(i4 %n) { +; CHECK-LABEL: 'step2' +; CHECK-NEXT: Determining loop execution counts for: @step2 +; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. +; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count. +; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count. +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -40,10 +49,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @start1 -; CHECK: Loop %loop: backedge-taken count is (-2 + (2 smax %n)) -; CHECK: Loop %loop: max backedge-taken count is 5 define void @start1(i4 %n) { +; CHECK-LABEL: 'start1' +; CHECK-NEXT: Determining loop execution counts for: @start1 +; CHECK-NEXT: Loop %loop: backedge-taken count is (-2 + (2 smax %n))<nsw> +; CHECK-NEXT: Loop %loop: max backedge-taken count is 5 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-2 + (2 smax %n))<nsw> +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -56,10 +70,13 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @start1_step2 -; CHECK: Loop %loop: Unpredictable backedge-taken count. -; CHECK: Loop %loop: Unpredictable max backedge-taken count. define void @start1_step2(i4 %n) { +; CHECK-LABEL: 'start1_step2' +; CHECK-NEXT: Determining loop execution counts for: @start1_step2 +; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. +; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count. +; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count. +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -72,10 +89,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @startx -; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n)) -; CHECK: Loop %loop: max backedge-taken count is -1 define void @startx(i4 %n, i4 %x) { +; CHECK-LABEL: 'startx' +; CHECK-NEXT: Determining loop execution counts for: @startx +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n)) +; CHECK-NEXT: Loop %loop: max backedge-taken count is -1 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n)) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -88,10 +110,13 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @startx_step2 -; CHECK: Loop %loop: Unpredictable backedge-taken count. -; CHECK: Loop %loop: Unpredictable max backedge-taken count. define void @startx_step2(i4 %n, i4 %x) { +; CHECK-LABEL: 'startx_step2' +; CHECK-NEXT: Determining loop execution counts for: @startx_step2 +; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. +; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count. +; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count. +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -104,10 +129,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @nsw -; CHECK: Loop %loop: backedge-taken count is (-1 + %n) -; CHECK: Loop %loop: max backedge-taken count is 6 define void @nsw(i4 %n) { +; CHECK-LABEL: 'nsw' +; CHECK-NEXT: Determining loop execution counts for: @nsw +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %n) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 6 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + %n) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -128,11 +158,15 @@ exit: ; (b) the return instruction enacts a side effect that is control ; dependent on the poison value. ; -; CHECK-LABEL: nsw_step2 -; CHECK: Determining loop execution counts for: @nsw_step2 -; CHECK: Loop %loop: backedge-taken count is ((-1 + %n) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 2 define void @nsw_step2(i4 %n) { +; CHECK-LABEL: 'nsw_step2' +; CHECK-NEXT: Determining loop execution counts for: @nsw_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-1 + %n) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-1 + %n) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -145,11 +179,15 @@ exit: ret void } -; CHECK-LABEL: nsw_start1 -; CHECK: Determining loop execution counts for: @nsw_start1 -; CHECK: Loop %loop: backedge-taken count is (-2 + (2 smax %n)) -; CHECK: Loop %loop: max backedge-taken count is 5 define void @nsw_start1(i4 %n) { +; CHECK-LABEL: 'nsw_start1' +; CHECK-NEXT: Determining loop execution counts for: @nsw_start1 +; CHECK-NEXT: Loop %loop: backedge-taken count is (-2 + (2 smax %n))<nsw> +; CHECK-NEXT: Loop %loop: max backedge-taken count is 5 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-2 + (2 smax %n))<nsw> +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -162,10 +200,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @nsw_start1_step2 -; CHECK: Loop %loop: backedge-taken count is ((-2 + (3 smax %n)) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 2 define void @nsw_start1_step2(i4 %n) { +; CHECK-LABEL: 'nsw_start1_step2' +; CHECK-NEXT: Determining loop execution counts for: @nsw_start1_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-2 + (3 smax %n)) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-2 + (3 smax %n)) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -178,10 +221,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @nsw_startx -; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n)) -; CHECK: Loop %loop: max backedge-taken count is -1 define void @nsw_startx(i4 %n, i4 %x) { +; CHECK-LABEL: 'nsw_startx' +; CHECK-NEXT: Determining loop execution counts for: @nsw_startx +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n)) +; CHECK-NEXT: Loop %loop: max backedge-taken count is -1 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n)) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -194,10 +242,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @nsw_startx_step2 -; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax %n)) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 7 define void @nsw_startx_step2(i4 %n, i4 %x) { +; CHECK-LABEL: 'nsw_startx_step2' +; CHECK-NEXT: Determining loop execution counts for: @nsw_startx_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax %n)) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 7 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax %n)) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %s = icmp sgt i4 %n, 0 br i1 %s, label %loop, label %exit @@ -210,10 +263,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even -; CHECK: Loop %loop: backedge-taken count is (-1 + (2 * %n)) -; CHECK: Loop %loop: max backedge-taken count is 5 define void @even(i4 %n) { +; CHECK-LABEL: 'even' +; CHECK-NEXT: Determining loop execution counts for: @even +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (2 * %n)) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 5 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (2 * %n)) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 2 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -227,10 +285,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_step2 -; CHECK: Loop %loop: backedge-taken count is ((-1 + (2 * %n)) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 2 define void @even_step2(i4 %n) { +; CHECK-LABEL: 'even_step2' +; CHECK-NEXT: Determining loop execution counts for: @even_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-1 + (2 * %n)) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-1 + (2 * %n)) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -244,10 +307,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_start1 -; CHECK: Loop %loop: backedge-taken count is (-2 + (2 smax (2 * %n))) -; CHECK: Loop %loop: max backedge-taken count is 4 define void @even_start1(i4 %n) { +; CHECK-LABEL: 'even_start1' +; CHECK-NEXT: Determining loop execution counts for: @even_start1 +; CHECK-NEXT: Loop %loop: backedge-taken count is (-2 + (2 smax (2 * %n)))<nsw> +; CHECK-NEXT: Loop %loop: max backedge-taken count is 4 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-2 + (2 smax (2 * %n)))<nsw> +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -261,10 +329,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_start1_step2 -; CHECK: Loop %loop: backedge-taken count is ((-2 + (3 smax (2 * %n))) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 2 define void @even_start1_step2(i4 %n) { +; CHECK-LABEL: 'even_start1_step2' +; CHECK-NEXT: Determining loop execution counts for: @even_start1_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-2 + (3 smax (2 * %n))) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-2 + (3 smax (2 * %n))) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -278,10 +351,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_startx -; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n))) -; CHECK: Loop %loop: max backedge-taken count is -2 define void @even_startx(i4 %n, i4 %x) { +; CHECK-LABEL: 'even_startx' +; CHECK-NEXT: Determining loop execution counts for: @even_startx +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n))) +; CHECK-NEXT: Loop %loop: max backedge-taken count is -2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n))) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -295,10 +373,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_startx_step2 -; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 7 define void @even_startx_step2(i4 %n, i4 %x) { +; CHECK-LABEL: 'even_startx_step2' +; CHECK-NEXT: Determining loop execution counts for: @even_startx_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 7 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -312,10 +395,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_nsw -; CHECK: Loop %loop: backedge-taken count is (-1 + (2 * %n)) -; CHECK: Loop %loop: max backedge-taken count is 5 define void @even_nsw(i4 %n) { +; CHECK-LABEL: 'even_nsw' +; CHECK-NEXT: Determining loop execution counts for: @even_nsw +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (2 * %n)) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 5 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (2 * %n)) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 2 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -329,10 +417,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_nsw_step2 -; CHECK: Loop %loop: backedge-taken count is ((-1 + (2 * %n)) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 2 define void @even_nsw_step2(i4 %n) { +; CHECK-LABEL: 'even_nsw_step2' +; CHECK-NEXT: Determining loop execution counts for: @even_nsw_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-1 + (2 * %n)) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-1 + (2 * %n)) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -346,10 +439,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_nsw_start1 -; CHECK: Loop %loop: backedge-taken count is (-2 + (2 smax (2 * %n))) -; CHECK: Loop %loop: max backedge-taken count is 4 define void @even_nsw_start1(i4 %n) { +; CHECK-LABEL: 'even_nsw_start1' +; CHECK-NEXT: Determining loop execution counts for: @even_nsw_start1 +; CHECK-NEXT: Loop %loop: backedge-taken count is (-2 + (2 smax (2 * %n)))<nsw> +; CHECK-NEXT: Loop %loop: max backedge-taken count is 4 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-2 + (2 smax (2 * %n)))<nsw> +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -363,10 +461,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_nsw_start1_step2 -; CHECK: Loop %loop: backedge-taken count is ((-2 + (3 smax (2 * %n))) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 2 define void @even_nsw_start1_step2(i4 %n) { +; CHECK-LABEL: 'even_nsw_start1_step2' +; CHECK-NEXT: Determining loop execution counts for: @even_nsw_start1_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-2 + (3 smax (2 * %n))) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-2 + (3 smax (2 * %n))) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -380,10 +483,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_nsw_startx -; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n))) -; CHECK: Loop %loop: max backedge-taken count is -2 define void @even_nsw_startx(i4 %n, i4 %x) { +; CHECK-LABEL: 'even_nsw_startx' +; CHECK-NEXT: Determining loop execution counts for: @even_nsw_startx +; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n))) +; CHECK-NEXT: Loop %loop: max backedge-taken count is -2 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n))) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 @@ -397,10 +505,15 @@ exit: ret void } -; CHECK: Determining loop execution counts for: @even_nsw_startx_step2 -; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2) -; CHECK: Loop %loop: max backedge-taken count is 7 define void @even_nsw_startx_step2(i4 %n, i4 %x) { +; CHECK-LABEL: 'even_nsw_startx_step2' +; CHECK-NEXT: Determining loop execution counts for: @even_nsw_startx_step2 +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2) +; CHECK-NEXT: Loop %loop: max backedge-taken count is 7 +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2) +; CHECK-NEXT: Predicates: +; CHECK: Loop %loop: Trip multiple is 1 +; entry: %m = shl i4 %n, 1 %s = icmp sgt i4 %m, 0 |