1*9880d681SAndroid Build Coastguard Worker; RUN: opt -analyze -scalar-evolution < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @f(i1* %condition) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Classifying expressions for: @f 5*9880d681SAndroid Build Coastguard Worker entry: 6*9880d681SAndroid Build Coastguard Worker br label %loop 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker loop: 9*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ] 10*9880d681SAndroid Build Coastguard Worker %idx.inc = add nsw i32 %idx, 1 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker %idx.inc2 = add i32 %idx.inc, 1 13*9880d681SAndroid Build Coastguard Worker %idx.inc2.zext = zext i32 %idx.inc2 to i64 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; CHECK: %idx.inc2.zext = zext i32 %idx.inc2 to i64 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: --> {2,+,1}<nuw><%loop> 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker %c = load volatile i1, i1* %condition 19*9880d681SAndroid Build Coastguard Worker br i1 %c, label %loop, label %exit 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker exit: 22*9880d681SAndroid Build Coastguard Worker ret void 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine void @g(i1* %condition) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Classifying expressions for: @g 27*9880d681SAndroid Build Coastguard Worker entry: 28*9880d681SAndroid Build Coastguard Worker br label %loop 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker loop: 31*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ] 32*9880d681SAndroid Build Coastguard Worker %idx.inc = add nsw i32 %idx, 3 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker %idx.inc2 = add i32 %idx.inc, -1 35*9880d681SAndroid Build Coastguard Worker %idx.inc2.sext = sext i32 %idx.inc2 to i64 36*9880d681SAndroid Build Coastguard Worker; CHECK: %idx.inc2.sext = sext i32 %idx.inc2 to i64 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: --> {2,+,3}<nuw><nsw><%loop> 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker %cond.gep = getelementptr inbounds i1, i1* %condition, i32 %idx.inc 40*9880d681SAndroid Build Coastguard Worker %c = load volatile i1, i1* %cond.gep 41*9880d681SAndroid Build Coastguard Worker br i1 %c, label %loop, label %exit 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker exit: 44*9880d681SAndroid Build Coastguard Worker ret void 45*9880d681SAndroid Build Coastguard Worker} 46