12d0de5f9SArthur Eubanks; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s 2be2ea29eSFlorian Hahn 3fb65aaf0SDávid Bolvanský; CHECK-LABEL: @test1 4f02a0a69SDávid Bolvanský; CHECK: %add.lcssa.wide = phi i64 [ %indvars.iv.next, %do.body ] 520d798bdSFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%do.body> U: [1,2147483648) S: [1,2147483648) 6be2ea29eSFlorian Hahn 792619956SNikita Popovdefine i64 @test1(i32 signext %n, ptr %A) { 8be2ea29eSFlorian Hahnentry: 9be2ea29eSFlorian Hahn %0 = sext i32 %n to i64 10be2ea29eSFlorian Hahn br label %do.body 11be2ea29eSFlorian Hahn 12be2ea29eSFlorian Hahndo.body: ; preds = %do.body, %entry 13be2ea29eSFlorian Hahn %indvars.iv = phi i64 [ %indvars.iv.next, %do.body ], [ 0, %entry ] 1492619956SNikita Popov %arrayidx = getelementptr inbounds float, ptr %A, i64 %indvars.iv 1592619956SNikita Popov store float 1.000000e+00, ptr %arrayidx, align 4 16be2ea29eSFlorian Hahn %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 17be2ea29eSFlorian Hahn %cmp = icmp slt i64 %indvars.iv.next, %0 18be2ea29eSFlorian Hahn br i1 %cmp, label %do.body, label %do.end 19be2ea29eSFlorian Hahn 20be2ea29eSFlorian Hahndo.end: ; preds = %do.body 21be2ea29eSFlorian Hahn %add.lcssa.wide = phi i64 [ %indvars.iv.next, %do.body ] 22be2ea29eSFlorian Hahn ret i64 %add.lcssa.wide 23be2ea29eSFlorian Hahn} 24be2ea29eSFlorian Hahn 25fb65aaf0SDávid Bolvanský; CHECK-LABEL: @test2 26be2ea29eSFlorian Hahn; CHECK: %tmp24 = phi i64 [ %tmp14, %bb22 ], [ %tmp14, %bb13 ] 27*079c525fSNikita Popov; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb13> U: [1,9223372036854775807) S: [1,9223372036854775807) Exits: (-2 + %arg) 28be2ea29eSFlorian Hahn 2992619956SNikita Popovdefine void @test2(i64 %arg, ptr noalias %arg1) { 30be2ea29eSFlorian Hahnbb: 31be2ea29eSFlorian Hahn %tmp = icmp slt i64 0, %arg 32be2ea29eSFlorian Hahn br i1 %tmp, label %bb7, label %bb48 33be2ea29eSFlorian Hahn 34be2ea29eSFlorian Hahnbb7: ; preds = %bb 35be2ea29eSFlorian Hahn br label %bb8 36be2ea29eSFlorian Hahn 37be2ea29eSFlorian Hahnbb8: ; preds = %bb44, %bb7 38be2ea29eSFlorian Hahn %tmp9 = phi i64 [ 0, %bb7 ], [ %tmp45, %bb44 ] 39be2ea29eSFlorian Hahn %tmp10 = add nsw i64 %arg, -1 40be2ea29eSFlorian Hahn %tmp11 = icmp slt i64 1, %tmp10 41be2ea29eSFlorian Hahn br i1 %tmp11, label %bb12, label %bb43 42be2ea29eSFlorian Hahn 43be2ea29eSFlorian Hahnbb12: ; preds = %bb8 44be2ea29eSFlorian Hahn br label %bb13 45be2ea29eSFlorian Hahn 46be2ea29eSFlorian Hahnbb13: ; preds = %bb39, %bb12 47be2ea29eSFlorian Hahn %tmp14 = phi i64 [ 1, %bb12 ], [ %tmp40, %bb39 ] 48be2ea29eSFlorian Hahn %tmp15 = icmp slt i64 0, %arg 49be2ea29eSFlorian Hahn br i1 %tmp15, label %bb16, label %bb23 50be2ea29eSFlorian Hahn 51be2ea29eSFlorian Hahnbb16: ; preds = %bb13 52be2ea29eSFlorian Hahn br label %bb17 53be2ea29eSFlorian Hahn 54be2ea29eSFlorian Hahnbb17: ; preds = %bb19, %bb16 55be2ea29eSFlorian Hahn %tmp18 = phi i64 [ 0, %bb16 ], [ %tmp20, %bb19 ] 56be2ea29eSFlorian Hahn br label %bb19 57be2ea29eSFlorian Hahn 58be2ea29eSFlorian Hahnbb19: ; preds = %bb17 59be2ea29eSFlorian Hahn %tmp20 = add nuw nsw i64 %tmp18, 1 60be2ea29eSFlorian Hahn %tmp21 = icmp slt i64 %tmp20, %arg 61be2ea29eSFlorian Hahn br i1 %tmp21, label %bb17, label %bb22 62be2ea29eSFlorian Hahn 63be2ea29eSFlorian Hahnbb22: ; preds = %bb19 64be2ea29eSFlorian Hahn br label %bb23 65be2ea29eSFlorian Hahn 66be2ea29eSFlorian Hahnbb23: ; preds = %bb22, %bb13 67be2ea29eSFlorian Hahn %tmp24 = phi i64 [ %tmp14, %bb22 ], [ %tmp14, %bb13 ] 68be2ea29eSFlorian Hahn %tmp25 = icmp slt i64 0, %arg 69be2ea29eSFlorian Hahn br i1 %tmp25, label %bb26, label %bb37 70be2ea29eSFlorian Hahn 71be2ea29eSFlorian Hahnbb26: ; preds = %bb23 72be2ea29eSFlorian Hahn br label %bb27 73be2ea29eSFlorian Hahn 74be2ea29eSFlorian Hahnbb27: ; preds = %bb33, %bb26 75be2ea29eSFlorian Hahn %tmp28 = phi i64 [ 0, %bb26 ], [ %tmp34, %bb33 ] 76be2ea29eSFlorian Hahn %tmp29 = mul nsw i64 %tmp9, %arg 7792619956SNikita Popov %tmp30 = getelementptr inbounds i32, ptr %arg1, i64 %tmp24 7892619956SNikita Popov %tmp31 = getelementptr inbounds i32, ptr %tmp30, i64 %tmp29 7992619956SNikita Popov %tmp32 = load i32, ptr %tmp31, align 4 80be2ea29eSFlorian Hahn br label %bb33 81be2ea29eSFlorian Hahn 82be2ea29eSFlorian Hahnbb33: ; preds = %bb27 83be2ea29eSFlorian Hahn %tmp34 = add nuw nsw i64 %tmp28, 1 84be2ea29eSFlorian Hahn %tmp35 = icmp slt i64 %tmp34, %arg 85be2ea29eSFlorian Hahn br i1 %tmp35, label %bb27, label %bb36 86be2ea29eSFlorian Hahn 87be2ea29eSFlorian Hahnbb36: ; preds = %bb33 88be2ea29eSFlorian Hahn br label %bb37 89be2ea29eSFlorian Hahn 90be2ea29eSFlorian Hahnbb37: ; preds = %bb36, %bb23 91be2ea29eSFlorian Hahn %tmp38 = phi i64 [ %tmp24, %bb36 ], [ %tmp24, %bb23 ] 92be2ea29eSFlorian Hahn br label %bb39 93be2ea29eSFlorian Hahn 94be2ea29eSFlorian Hahnbb39: ; preds = %bb37 95be2ea29eSFlorian Hahn %tmp40 = add nuw nsw i64 %tmp38, 1 96be2ea29eSFlorian Hahn %tmp41 = icmp slt i64 %tmp40, %tmp10 97be2ea29eSFlorian Hahn br i1 %tmp41, label %bb13, label %bb42 98be2ea29eSFlorian Hahn 99be2ea29eSFlorian Hahnbb42: ; preds = %bb39 100be2ea29eSFlorian Hahn br label %bb43 101be2ea29eSFlorian Hahn 102be2ea29eSFlorian Hahnbb43: ; preds = %bb42, %bb8 103be2ea29eSFlorian Hahn br label %bb44 104be2ea29eSFlorian Hahn 105be2ea29eSFlorian Hahnbb44: ; preds = %bb43 106be2ea29eSFlorian Hahn %tmp45 = add nuw nsw i64 %tmp9, 1 107be2ea29eSFlorian Hahn %tmp46 = icmp slt i64 %tmp45, %arg 108be2ea29eSFlorian Hahn br i1 %tmp46, label %bb8, label %bb47 109be2ea29eSFlorian Hahn 110be2ea29eSFlorian Hahnbb47: ; preds = %bb44 111be2ea29eSFlorian Hahn br label %bb48 112be2ea29eSFlorian Hahn 113be2ea29eSFlorian Hahnbb48: ; preds = %bb47, %bb 114be2ea29eSFlorian Hahn ret void 115be2ea29eSFlorian Hahn} 116be2ea29eSFlorian Hahn 117fb65aaf0SDávid Bolvanský; CHECK-LABEL: @test3 118be2ea29eSFlorian Hahn 119be2ea29eSFlorian Hahn; CHECK: %tmp14 = phi i64 [ %tmp40, %bb39 ], [ 1, %bb8 ] 1207019624eSFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb13> U: [1,9223372036854775807) S: [1,9223372036854775807) 121be2ea29eSFlorian Hahn; CHECK-SAME: Exits: (-2 + %arg) LoopDispositions: { %bb13: Computable, %bb8: Variant, %bb17_a: Invariant, %bb27: Invariant } 122be2ea29eSFlorian Hahn; CHECK: %tmp18 = phi i64 [ %tmp20, %bb17 ], [ 0, %bb13 ] 123be2ea29eSFlorian Hahn; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%bb17_a> U: [0,9223372036854775807) S: [0,9223372036854775807) 124be2ea29eSFlorian Hahn; CHECK-SAME: Exits: (-1 + %arg) LoopDispositions: { %bb17_a: Computable, %bb13: Variant, %bb8: Variant } 125be2ea29eSFlorian Hahn 126be2ea29eSFlorian Hahn; CHECK: %tmp24 = phi i64 [ %tmp14, %bb13 ], [ %tmp14, %bb17 ] 1277019624eSFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb13> U: [1,9223372036854775807) S: [1,9223372036854775807) 128be2ea29eSFlorian Hahn; CHECK-SAME: Exits: (-2 + %arg) LoopDispositions: { %bb13: Computable, %bb8: Variant, %bb17_a: Invariant, %bb27: Invariant } 129be2ea29eSFlorian Hahn; CHECK: %tmp28 = phi i64 [ %tmp34, %bb27 ], [ 0, %bb23 ] 130be2ea29eSFlorian Hahn; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%bb27> U: [0,9223372036854775807) S: [0,9223372036854775807) 131be2ea29eSFlorian Hahn; CHECK-SAME: Exits: (-1 + %arg) LoopDispositions: { %bb27: Computable, %bb13: Variant, %bb8: Variant } 132be2ea29eSFlorian Hahn 133be2ea29eSFlorian Hahn; CHECK: %tmp38 = phi i64 [ %tmp24, %bb23 ], [ %tmp24, %bb27 ] 1347019624eSFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb13> U: [1,9223372036854775807) S: [1,9223372036854775807) 135be2ea29eSFlorian Hahn; CHECK-SAME: Exits: (-2 + %arg) LoopDispositions: { %bb13: Computable, %bb8: Variant, %bb17_a: Invariant, %bb27: Invariant } 136be2ea29eSFlorian Hahn 13792619956SNikita Popovdefine void @test3(i64 %arg, ptr %arg1) { 138be2ea29eSFlorian Hahnbb: 139be2ea29eSFlorian Hahn %tmp = icmp slt i64 0, %arg 140be2ea29eSFlorian Hahn br i1 %tmp, label %bb8, label %bb48 141be2ea29eSFlorian Hahn 142be2ea29eSFlorian Hahnbb8: ; preds = %bb, %bb44 143be2ea29eSFlorian Hahn %tmp9 = phi i64 [ %tmp45, %bb44 ], [ 0, %bb ] 144be2ea29eSFlorian Hahn %tmp10 = add nsw i64 %arg, -1 145be2ea29eSFlorian Hahn %tmp11 = icmp slt i64 1, %tmp10 146be2ea29eSFlorian Hahn br i1 %tmp11, label %bb13, label %bb44 147be2ea29eSFlorian Hahn 148be2ea29eSFlorian Hahnbb13: ; preds = %bb8, %bb39 149be2ea29eSFlorian Hahn %tmp14 = phi i64 [ %tmp40, %bb39 ], [ 1, %bb8 ] 150be2ea29eSFlorian Hahn %tmp15 = icmp slt i64 0, %arg 151be2ea29eSFlorian Hahn br i1 %tmp15, label %bb17_a, label %bb23 152be2ea29eSFlorian Hahn 153be2ea29eSFlorian Hahnbb17_a: 154be2ea29eSFlorian Hahn %tmp18 = phi i64 [ %tmp20, %bb17 ], [ 0, %bb13 ] 155be2ea29eSFlorian Hahn %tmp20 = add nuw nsw i64 %tmp18, 1 156be2ea29eSFlorian Hahn 157be2ea29eSFlorian Hahn br label %bb17 158be2ea29eSFlorian Hahn 159be2ea29eSFlorian Hahnbb17: ; preds = %bb13, %bb17 160be2ea29eSFlorian Hahn %tmp21 = icmp slt i64 %tmp20, %arg 161be2ea29eSFlorian Hahn br i1 %tmp21, label %bb17_a, label %bb23 162be2ea29eSFlorian Hahn 163be2ea29eSFlorian Hahnbb23: ; preds = %bb17, %bb13 164be2ea29eSFlorian Hahn %tmp24 = phi i64 [ %tmp14, %bb13 ], [ %tmp14, %bb17 ] 165be2ea29eSFlorian Hahn %tmp25 = icmp slt i64 0, %arg 166be2ea29eSFlorian Hahn br i1 %tmp25, label %bb27, label %bb39 167be2ea29eSFlorian Hahn 168be2ea29eSFlorian Hahnbb27: ; preds = %bb23, %bb27 169be2ea29eSFlorian Hahn %tmp28 = phi i64 [ %tmp34, %bb27 ], [ 0, %bb23 ] 170be2ea29eSFlorian Hahn %tmp29 = mul nsw i64 %tmp9, %arg 17192619956SNikita Popov %tmp30 = getelementptr inbounds i32, ptr %arg1, i64 %tmp24 17292619956SNikita Popov %tmp31 = getelementptr inbounds i32, ptr %tmp30, i64 %tmp29 17392619956SNikita Popov %tmp32 = load i32, ptr %tmp31, align 4 174be2ea29eSFlorian Hahn %tmp34 = add nuw nsw i64 %tmp28, 1 175be2ea29eSFlorian Hahn %tmp35 = icmp slt i64 %tmp34, %arg 176be2ea29eSFlorian Hahn br i1 %tmp35, label %bb27, label %bb39 177be2ea29eSFlorian Hahn 178be2ea29eSFlorian Hahnbb39: ; preds = %bb23, %bb27 179be2ea29eSFlorian Hahn %tmp38 = phi i64 [ %tmp24, %bb23 ], [ %tmp24, %bb27 ] 180be2ea29eSFlorian Hahn %tmp40 = add nuw nsw i64 %tmp38, 1 181be2ea29eSFlorian Hahn %tmp41 = icmp slt i64 %tmp40, %tmp10 182be2ea29eSFlorian Hahn br i1 %tmp41, label %bb13, label %bb44 183be2ea29eSFlorian Hahn 184be2ea29eSFlorian Hahnbb44: ; preds = %bb8, %bb39 185be2ea29eSFlorian Hahn %tmp45 = add nuw nsw i64 %tmp9, 1 186be2ea29eSFlorian Hahn %tmp46 = icmp slt i64 %tmp45, %arg 187be2ea29eSFlorian Hahn br i1 %tmp46, label %bb8, label %bb48 188be2ea29eSFlorian Hahn 189be2ea29eSFlorian Hahnbb48: ; preds = %bb44, %bb 190be2ea29eSFlorian Hahn ret void 191be2ea29eSFlorian Hahn} 192