1; RUN: opt < %s -scalar-evolution -analyze -enable-new-pm=0 | FileCheck %s 2; RUN: opt < %s "-passes=print<scalar-evolution>" -disable-output 2>&1 | FileCheck %s 3 4define void @test1(i32 %n) { 5entry: 6 %s = mul i32 %n, 96 7 br label %loop 8loop: 9 %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] 10 %i.next = add i32 %i, 32 11 %t = icmp ne i32 %i.next, %s 12 br i1 %t, label %loop, label %exit 13exit: 14 ret void 15 16; CHECK-LABEL: @test1 17; CHECK: Loop %loop: backedge-taken count is ((-32 + (96 * %n)) /u 32) 18; CHECK: Loop %loop: max backedge-taken count is 134217727 19} 20 21; PR19183 22define i32 @test2(i32 %n) { 23entry: 24 %s = and i32 %n, -32 25 br label %loop 26loop: 27 %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] 28 %i.next = add i32 %i, 32 29 %t = icmp ne i32 %i.next, %s 30 br i1 %t, label %loop, label %exit 31exit: 32 ret i32 %i 33 34; CHECK-LABEL: @test2 35; CHECK: Loop %loop: backedge-taken count is ((-32 + (32 * (%n /u 32))<nuw>) /u 32) 36; CHECK: Loop %loop: max backedge-taken count is 134217727 37} 38 39define void @test3(i32 %n) { 40entry: 41 %s = mul i32 %n, 96 42 br label %loop 43loop: 44 %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] 45 %i.next = add i32 %i, 96 46 %t = icmp ne i32 %i.next, %s 47 br i1 %t, label %loop, label %exit 48exit: 49 ret void 50 51; CHECK-LABEL: @test3 52; CHECK: Loop %loop: backedge-taken count is ((-32 + (32 * %n)) /u 32) 53; CHECK: Loop %loop: max backedge-taken count is 134217727 54} 55 56define void @test4(i32 %n) { 57entry: 58 %s = mul i32 %n, 4 59 br label %loop 60loop: 61 %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] 62 %i.next = add i32 %i, 12 63 %t = icmp ne i32 %i.next, %s 64 br i1 %t, label %loop, label %exit 65exit: 66 ret void 67 68; CHECK-LABEL: @test4 69; CHECK: Loop %loop: backedge-taken count is ((-4 + (-1431655764 * %n)) /u 4) 70; CHECK: Loop %loop: max backedge-taken count is 1073741823 71} 72 73define void @test5(i32 %n) { 74entry: 75 %s = mul i32 %n, 4 76 br label %loop 77loop: 78 %i = phi i32 [ %s, %entry ], [ %i.next, %loop ] 79 %i.next = add i32 %i, -4 80 %t = icmp ne i32 %i.next, 0 81 br i1 %t, label %loop, label %exit 82exit: 83 ret void 84 85; CHECK-LABEL: @test5 86; CHECK: Loop %loop: backedge-taken count is ((-4 + (4 * %n)) /u 4) 87; CHECK: Loop %loop: max backedge-taken count is 1073741823 88} 89