1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -scalar-evolution -analyze | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @test1(i32 %n) { 4*9880d681SAndroid Build Coastguard Workerentry: 5*9880d681SAndroid Build Coastguard Worker %s = mul i32 %n, 96 6*9880d681SAndroid Build Coastguard Worker br label %loop 7*9880d681SAndroid Build Coastguard Workerloop: 8*9880d681SAndroid Build Coastguard Worker %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] 9*9880d681SAndroid Build Coastguard Worker %i.next = add i32 %i, 32 10*9880d681SAndroid Build Coastguard Worker %t = icmp ne i32 %i.next, %s 11*9880d681SAndroid Build Coastguard Worker br i1 %t, label %loop, label %exit 12*9880d681SAndroid Build Coastguard Workerexit: 13*9880d681SAndroid Build Coastguard Worker ret void 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1 16*9880d681SAndroid Build Coastguard Worker; CHECK: Loop %loop: backedge-taken count is ((-32 + (96 * %n)) /u 32) 17*9880d681SAndroid Build Coastguard Worker; CHECK: Loop %loop: max backedge-taken count is ((-32 + (96 * %n)) /u 32) 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; PR19183 21*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32 %n) { 22*9880d681SAndroid Build Coastguard Workerentry: 23*9880d681SAndroid Build Coastguard Worker %s = and i32 %n, -32 24*9880d681SAndroid Build Coastguard Worker br label %loop 25*9880d681SAndroid Build Coastguard Workerloop: 26*9880d681SAndroid Build Coastguard Worker %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] 27*9880d681SAndroid Build Coastguard Worker %i.next = add i32 %i, 32 28*9880d681SAndroid Build Coastguard Worker %t = icmp ne i32 %i.next, %s 29*9880d681SAndroid Build Coastguard Worker br i1 %t, label %loop, label %exit 30*9880d681SAndroid Build Coastguard Workerexit: 31*9880d681SAndroid Build Coastguard Worker ret i32 %i 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2 34*9880d681SAndroid Build Coastguard Worker; CHECK: Loop %loop: backedge-taken count is ((-32 + (32 * (%n /u 32))) /u 32) 35*9880d681SAndroid Build Coastguard Worker; CHECK: Loop %loop: max backedge-taken count is ((-32 + (32 * (%n /u 32))) /u 32) 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine void @test3(i32 %n) { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker %s = mul i32 %n, 96 41*9880d681SAndroid Build Coastguard Worker br label %loop 42*9880d681SAndroid Build Coastguard Workerloop: 43*9880d681SAndroid Build Coastguard Worker %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] 44*9880d681SAndroid Build Coastguard Worker %i.next = add i32 %i, 96 45*9880d681SAndroid Build Coastguard Worker %t = icmp ne i32 %i.next, %s 46*9880d681SAndroid Build Coastguard Worker br i1 %t, label %loop, label %exit 47*9880d681SAndroid Build Coastguard Workerexit: 48*9880d681SAndroid Build Coastguard Worker ret void 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3 51*9880d681SAndroid Build Coastguard Worker; CHECK: Loop %loop: Unpredictable backedge-taken count. 52*9880d681SAndroid Build Coastguard Worker; CHECK: Loop %loop: Unpredictable max backedge-taken count. 53*9880d681SAndroid Build Coastguard Worker} 54