1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py 2; RUN: opt < %s -analyze -enable-new-pm=0 -scalar-evolution -scalar-evolution-max-iterations=0 -scalar-evolution-classify-expressions=0 | FileCheck %s 3; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-max-iterations=0 -scalar-evolution-classify-expressions=0 2>&1 | FileCheck %s 4 5target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 6target triple = "x86_64-unknown-linux-gnu" 7 8@A = weak global [1000 x i32] zeroinitializer, align 32 9 10define void @PR1101(i32 %N) { 11; CHECK-LABEL: 'PR1101' 12; CHECK-NEXT: Determining loop execution counts for: @PR1101 13; CHECK-NEXT: Loop %bb3: backedge-taken count is 10000 14; CHECK-NEXT: Loop %bb3: max backedge-taken count is 10000 15; CHECK-NEXT: Loop %bb3: Predicated backedge-taken count is 10000 16; CHECK-NEXT: Predicates: 17; CHECK: Loop %bb3: Trip multiple is 10001 18; 19entry: 20 br label %bb3 21 22bb: ; preds = %bb3 23 %tmp = getelementptr [1000 x i32], [1000 x i32]* @A, i32 0, i32 %i.0 ; <i32*> [#uses=1] 24 store i32 123, i32* %tmp 25 %tmp2 = add i32 %i.0, 1 ; <i32> [#uses=1] 26 br label %bb3 27 28bb3: ; preds = %bb, %entry 29 %i.0 = phi i32 [ 0, %entry ], [ %tmp2, %bb ] ; <i32> [#uses=3] 30 %tmp3 = icmp sle i32 %i.0, 9999 ; <i1> [#uses=1] 31 br i1 %tmp3, label %bb, label %bb5 32 33bb5: ; preds = %bb3 34 br label %return 35 36return: ; preds = %bb5 37 ret void 38} 39 40define i32 @PR22795() { 41; CHECK-LABEL: 'PR22795' 42; CHECK-NEXT: Determining loop execution counts for: @PR22795 43; CHECK-NEXT: Loop %preheader: backedge-taken count is 7 44; CHECK-NEXT: Loop %preheader: max backedge-taken count is 7 45; CHECK-NEXT: Loop %preheader: Predicated backedge-taken count is 7 46; CHECK-NEXT: Predicates: 47; CHECK: Loop %preheader: Trip multiple is 8 48; 49entry: 50 %bins = alloca [16 x i64], align 16 51 %0 = bitcast [16 x i64]* %bins to i8* 52 call void @llvm.memset.p0i8.i64(i8* align 16 %0, i8 0, i64 128, i1 false) 53 br label %preheader 54 55preheader: ; preds = %for.inc.1, %entry 56 %v11 = phi i64 [ 0, %entry ], [ %next12.1, %for.inc.1 ] 57 %iv = phi i32 [ -1, %entry ], [ %next.1, %for.inc.1 ] 58 %cmp = icmp sgt i64 %v11, 0 59 br i1 %cmp, label %for.body, label %for.inc 60 61for.body: ; preds = %preheader 62 %zext = zext i32 %iv to i64 63 %arrayidx = getelementptr [16 x i64], [16 x i64]* %bins, i64 0, i64 %v11 64 %loaded = load i64, i64* %arrayidx, align 8 65 %add = add i64 %loaded, 1 66 %add2 = add i64 %add, %zext 67 store i64 %add2, i64* %arrayidx, align 8 68 br label %for.inc 69 70for.inc: ; preds = %for.body, %preheader 71 %next12 = add nuw nsw i64 %v11, 1 72 %next = add nsw i32 %iv, 1 73 br i1 true, label %for.body.1, label %for.inc.1 74 75end: ; preds = %for.inc.1 76 %arrayidx8 = getelementptr [16 x i64], [16 x i64]* %bins, i64 0, i64 2 77 %load = load i64, i64* %arrayidx8, align 16 78 %shr4 = lshr i64 %load, 32 79 %conv = trunc i64 %shr4 to i32 80 ret i32 %conv 81 82for.body.1: ; preds = %for.inc 83 %zext.1 = zext i32 %next to i64 84 %arrayidx.1 = getelementptr [16 x i64], [16 x i64]* %bins, i64 0, i64 %next12 85 %loaded.1 = load i64, i64* %arrayidx.1, align 8 86 %add.1 = add i64 %loaded.1, 1 87 %add2.1 = add i64 %add.1, %zext.1 88 store i64 %add2.1, i64* %arrayidx.1, align 8 89 br label %for.inc.1 90 91for.inc.1: ; preds = %for.body.1, %for.inc 92 %next12.1 = add nuw nsw i64 %next12, 1 93 %next.1 = add nuw nsw i32 %next, 1 94 %exitcond.1 = icmp eq i64 %next12.1, 16 95 br i1 %exitcond.1, label %end, label %preheader 96} 97 98; Function Attrs: nounwind 99declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) #0 100 101declare void @may_exit() nounwind 102 103define void @pr28012(i32 %n) { 104; CHECK-LABEL: 'pr28012' 105; CHECK-NEXT: Determining loop execution counts for: @pr28012 106; CHECK-NEXT: Loop %loop: backedge-taken count is -1431655751 107; CHECK-NEXT: Loop %loop: max backedge-taken count is -1431655751 108; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is -1431655751 109; CHECK-NEXT: Predicates: 110; CHECK: Loop %loop: Trip multiple is 2863311546 111; 112entry: 113 br label %loop 114 115loop: 116 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 117 %iv.inc = add nsw i32 %iv, 3 118 call void @may_exit() 119 %becond = icmp ne i32 %iv.inc, 46 120 br i1 %becond, label %loop, label %leave 121 122leave: 123 ret void 124} 125