1*c66cedb3SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 4 2*c66cedb3SFlorian Hahn; RUN: opt "-passes=print<scalar-evolution>" -disable-output -S %s 2>&1 | FileCheck %s 3*c66cedb3SFlorian Hahn 4*c66cedb3SFlorian Hahn; PR59777 5*c66cedb3SFlorian Hahndefine i2 @iv_nsw_poison(i2 %arg) { 6*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_nsw_poison' 7*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_nsw_poison 8*c66cedb3SFlorian Hahn; CHECK-NEXT: %.07 = phi i2 [ 1, %bb ], [ %i, %bb1 ] 9*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb1> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 10*c66cedb3SFlorian Hahn; CHECK-NEXT: %.0 = phi i2 [ 1, %bb ], [ %i2, %bb1 ] 11*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb1> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 12*c66cedb3SFlorian Hahn; CHECK-NEXT: %i = add nsw i2 %.07, 1 13*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {-2,+,1}<nuw><%bb1> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 14*c66cedb3SFlorian Hahn; CHECK-NEXT: %i2 = add i2 %.0, 1 15*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {-2,+,1}<nuw><%bb1> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 16*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_nsw_poison 17*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %bb1: Unpredictable backedge-taken count. 18*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %bb1: Unpredictable constant max backedge-taken count. 19*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %bb1: Unpredictable symbolic max backedge-taken count. 20*c66cedb3SFlorian Hahn; 21*c66cedb3SFlorian Hahnbb: 22*c66cedb3SFlorian Hahn br label %bb1 23*c66cedb3SFlorian Hahn 24*c66cedb3SFlorian Hahnbb1: ; preds = %bb1, %bb 25*c66cedb3SFlorian Hahn %.07 = phi i2 [ 1, %bb ], [ %i, %bb1 ] 26*c66cedb3SFlorian Hahn %.0 = phi i2 [ 1, %bb ], [ %i2, %bb1 ] 27*c66cedb3SFlorian Hahn %i = add nsw i2 %.07, 1 28*c66cedb3SFlorian Hahn %i2 = add i2 %.0, 1 29*c66cedb3SFlorian Hahn %.not.not = icmp ult i2 %.07, %arg 30*c66cedb3SFlorian Hahn br i1 %.not.not, label %common.ret, label %bb1 31*c66cedb3SFlorian Hahn 32*c66cedb3SFlorian Hahncommon.ret: ; preds = %bb1 33*c66cedb3SFlorian Hahn ret i2 %i2 34*c66cedb3SFlorian Hahn} 35*c66cedb3SFlorian Hahn 36*c66cedb3SFlorian Hahndefine i4 @iv_nsw_poison2(i4 %0, i4 %end, i4 %start) { 37*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_nsw_poison2' 38*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_nsw_poison2 39*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 40*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 41*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 42*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 43*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 1 44*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 45*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 1 46*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 47*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_nsw_poison2 48*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 49*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 50*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 51*c66cedb3SFlorian Hahn; 52*c66cedb3SFlorian Hahnentry: 53*c66cedb3SFlorian Hahn br label %loop 54*c66cedb3SFlorian Hahn 55*c66cedb3SFlorian Hahnloop: 56*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 57*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 58*c66cedb3SFlorian Hahn %iv.0.next = add i4 %iv.0, 1 59*c66cedb3SFlorian Hahn %iv.1.next = add nsw i4 %iv.1, 1 60*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %end 61*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 62*c66cedb3SFlorian Hahn 63*c66cedb3SFlorian Hahnexit: 64*c66cedb3SFlorian Hahn ret i4 %iv.1.next 65*c66cedb3SFlorian Hahn} 66*c66cedb3SFlorian Hahn 67*c66cedb3SFlorian Hahndefine i2 @iv_both_adds_nsw(i2 %arg) { 68*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_both_adds_nsw' 69*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nsw 70*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i2 [ 1, %bb ], [ %iv.0.next, %loop ] 71*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 72*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i2 [ 1, %bb ], [ %iv.1.next, %loop ] 73*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 74*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add nsw i2 %iv.0, 1 75*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {-2,+,1}<nuw><%loop> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 76*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nsw i2 %iv.1, 1 77*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {-2,+,1}<nuw><%loop> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 78*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nsw 79*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 80*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 81*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 82*c66cedb3SFlorian Hahn; 83*c66cedb3SFlorian Hahnbb: 84*c66cedb3SFlorian Hahn br label %loop 85*c66cedb3SFlorian Hahn 86*c66cedb3SFlorian Hahnloop: 87*c66cedb3SFlorian Hahn %iv.0 = phi i2 [ 1, %bb ], [ %iv.0.next, %loop ] 88*c66cedb3SFlorian Hahn %iv.1 = phi i2 [ 1, %bb ], [ %iv.1.next, %loop ] 89*c66cedb3SFlorian Hahn %iv.0.next = add nsw i2 %iv.0, 1 90*c66cedb3SFlorian Hahn %iv.1.next = add nsw i2 %iv.1, 1 91*c66cedb3SFlorian Hahn %.not.not = icmp ult i2 %iv.0, %arg 92*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 93*c66cedb3SFlorian Hahn 94*c66cedb3SFlorian Hahnexit: 95*c66cedb3SFlorian Hahn ret i2 %iv.1.next 96*c66cedb3SFlorian Hahn} 97*c66cedb3SFlorian Hahn 98*c66cedb3SFlorian Hahndefine i4 @iv_both_adds_nsw_extra_use(i4 %arg) { 99*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_both_adds_nsw_extra_use' 100*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nsw_extra_use 101*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ] 102*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 103*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ] 104*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 105*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add nsw i4 %iv.0, 1 106*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 107*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 1 108*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 109*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nsw_extra_use 110*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 111*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 112*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 113*c66cedb3SFlorian Hahn; 114*c66cedb3SFlorian Hahnbb: 115*c66cedb3SFlorian Hahn br label %loop 116*c66cedb3SFlorian Hahn 117*c66cedb3SFlorian Hahnloop: 118*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ] 119*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ] 120*c66cedb3SFlorian Hahn %iv.0.next = add nsw i4 %iv.0, 1 121*c66cedb3SFlorian Hahn call void @use(i4 %iv.0.next) 122*c66cedb3SFlorian Hahn %iv.1.next = add nsw i4 %iv.1, 1 123*c66cedb3SFlorian Hahn call void @use(i4 %iv.1.next) 124*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %arg 125*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 126*c66cedb3SFlorian Hahn 127*c66cedb3SFlorian Hahnexit: 128*c66cedb3SFlorian Hahn ret i4 %iv.1.next 129*c66cedb3SFlorian Hahn} 130*c66cedb3SFlorian Hahn 131*c66cedb3SFlorian Hahndefine i4 @iv_both_adds_nsw_extra_use_incs_reordered(i4 %arg) { 132*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_both_adds_nsw_extra_use_incs_reordered' 133*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nsw_extra_use_incs_reordered 134*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ] 135*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 136*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ] 137*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 138*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 1 139*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 140*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add nsw i4 %iv.0, 1 141*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 142*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nsw_extra_use_incs_reordered 143*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 144*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 145*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 146*c66cedb3SFlorian Hahn; 147*c66cedb3SFlorian Hahnbb: 148*c66cedb3SFlorian Hahn br label %loop 149*c66cedb3SFlorian Hahn 150*c66cedb3SFlorian Hahnloop: 151*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ] 152*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ] 153*c66cedb3SFlorian Hahn %iv.1.next = add nsw i4 %iv.1, 1 154*c66cedb3SFlorian Hahn call void @use(i4 %iv.1.next) 155*c66cedb3SFlorian Hahn %iv.0.next = add nsw i4 %iv.0, 1 156*c66cedb3SFlorian Hahn call void @use(i4 %iv.0.next) 157*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %arg 158*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 159*c66cedb3SFlorian Hahn 160*c66cedb3SFlorian Hahnexit: 161*c66cedb3SFlorian Hahn ret i4 %iv.1.next 162*c66cedb3SFlorian Hahn} 163*c66cedb3SFlorian Hahn 164*c66cedb3SFlorian Hahndefine i4 @iv_nsw_poison_extra_use(i4 %0, i4 %end, i4 %start) { 165*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_nsw_poison_extra_use' 166*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_nsw_poison_extra_use 167*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 168*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 169*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 170*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 171*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 1 172*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 173*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 1 174*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 175*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_nsw_poison_extra_use 176*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 177*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 178*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 179*c66cedb3SFlorian Hahn; 180*c66cedb3SFlorian Hahnentry: 181*c66cedb3SFlorian Hahn br label %loop 182*c66cedb3SFlorian Hahn 183*c66cedb3SFlorian Hahnloop: 184*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 185*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 186*c66cedb3SFlorian Hahn %iv.0.next = add i4 %iv.0, 1 187*c66cedb3SFlorian Hahn call void @use(i4 %iv.0.next) 188*c66cedb3SFlorian Hahn %iv.1.next = add nsw i4 %iv.1, 1 189*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %end 190*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 191*c66cedb3SFlorian Hahn 192*c66cedb3SFlorian Hahnexit: 193*c66cedb3SFlorian Hahn ret i4 %iv.1.next 194*c66cedb3SFlorian Hahn} 195*c66cedb3SFlorian Hahn 196*c66cedb3SFlorian Hahndeclare void @use(i4) 197*c66cedb3SFlorian Hahn 198*c66cedb3SFlorian Hahndefine i2 @iv_nuw_poison(i2 %arg, i2 %start) { 199*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_nuw_poison' 200*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_nuw_poison 201*c66cedb3SFlorian Hahn; CHECK-NEXT: %.07 = phi i2 [ %start, %bb ], [ %i, %bb1 ] 202*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 203*c66cedb3SFlorian Hahn; CHECK-NEXT: %.0 = phi i2 [ %start, %bb ], [ %i2, %bb1 ] 204*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 205*c66cedb3SFlorian Hahn; CHECK-NEXT: %i = add nuw i2 %.07, 1 206*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 207*c66cedb3SFlorian Hahn; CHECK-NEXT: %i2 = add i2 %.0, 1 208*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable } 209*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_nuw_poison 210*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %bb1: Unpredictable backedge-taken count. 211*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %bb1: Unpredictable constant max backedge-taken count. 212*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %bb1: Unpredictable symbolic max backedge-taken count. 213*c66cedb3SFlorian Hahn; 214*c66cedb3SFlorian Hahnbb: 215*c66cedb3SFlorian Hahn br label %bb1 216*c66cedb3SFlorian Hahn 217*c66cedb3SFlorian Hahnbb1: ; preds = %bb1, %bb 218*c66cedb3SFlorian Hahn %.07 = phi i2 [ %start, %bb ], [ %i, %bb1 ] 219*c66cedb3SFlorian Hahn %.0 = phi i2 [ %start, %bb ], [ %i2, %bb1 ] 220*c66cedb3SFlorian Hahn %i = add nuw i2 %.07, 1 221*c66cedb3SFlorian Hahn %i2 = add i2 %.0, 1 222*c66cedb3SFlorian Hahn %.not.not = icmp ult i2 %.07, %arg 223*c66cedb3SFlorian Hahn br i1 %.not.not, label %common.ret, label %bb1 224*c66cedb3SFlorian Hahn 225*c66cedb3SFlorian Hahncommon.ret: ; preds = %bb1 226*c66cedb3SFlorian Hahn ret i2 %i2 227*c66cedb3SFlorian Hahn} 228*c66cedb3SFlorian Hahn 229*c66cedb3SFlorian Hahndefine i4 @iv_nuw_poison2(i4 %0, i4 %end, i4 %start) { 230*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_nuw_poison2' 231*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_nuw_poison2 232*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 233*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 234*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 235*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 236*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 1 237*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 238*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1 239*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 240*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_nuw_poison2 241*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 242*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 243*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 244*c66cedb3SFlorian Hahn; 245*c66cedb3SFlorian Hahnentry: 246*c66cedb3SFlorian Hahn br label %loop 247*c66cedb3SFlorian Hahn 248*c66cedb3SFlorian Hahnloop: 249*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 250*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 251*c66cedb3SFlorian Hahn %iv.0.next = add i4 %iv.0, 1 252*c66cedb3SFlorian Hahn %iv.1.next = add nuw i4 %iv.1, 1 253*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %end 254*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 255*c66cedb3SFlorian Hahn 256*c66cedb3SFlorian Hahnexit: 257*c66cedb3SFlorian Hahn ret i4 %iv.1.next 258*c66cedb3SFlorian Hahn} 259*c66cedb3SFlorian Hahn 260*c66cedb3SFlorian Hahndefine i2 @iv_both_adds_nuw(i2 %arg, i2 %start) { 261*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_both_adds_nuw' 262*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nuw 263*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i2 [ %start, %bb ], [ %iv.0.next, %loop ] 264*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 265*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i2 [ %start, %bb ], [ %iv.1.next, %loop ] 266*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 267*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add nuw i2 %iv.0, 1 268*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 269*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nuw i2 %iv.1, 1 270*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 271*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nuw 272*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 273*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 274*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 275*c66cedb3SFlorian Hahn; 276*c66cedb3SFlorian Hahnbb: 277*c66cedb3SFlorian Hahn br label %loop 278*c66cedb3SFlorian Hahn 279*c66cedb3SFlorian Hahnloop: 280*c66cedb3SFlorian Hahn %iv.0 = phi i2 [ %start, %bb ], [ %iv.0.next, %loop ] 281*c66cedb3SFlorian Hahn %iv.1 = phi i2 [ %start, %bb ], [ %iv.1.next, %loop ] 282*c66cedb3SFlorian Hahn %iv.0.next = add nuw i2 %iv.0, 1 283*c66cedb3SFlorian Hahn %iv.1.next = add nuw i2 %iv.1, 1 284*c66cedb3SFlorian Hahn %.not.not = icmp ult i2 %iv.0, %arg 285*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 286*c66cedb3SFlorian Hahn 287*c66cedb3SFlorian Hahnexit: 288*c66cedb3SFlorian Hahn ret i2 %iv.1.next 289*c66cedb3SFlorian Hahn} 290*c66cedb3SFlorian Hahn 291*c66cedb3SFlorian Hahndefine i4 @iv_both_adds_nuw_extra_use(i4 %arg, i4 %start) { 292*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_both_adds_nuw_extra_use' 293*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nuw_extra_use 294*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ] 295*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 296*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ] 297*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 298*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add nuw i4 %iv.0, 1 299*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 300*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1 301*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 302*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nuw_extra_use 303*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 304*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 305*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 306*c66cedb3SFlorian Hahn; 307*c66cedb3SFlorian Hahnbb: 308*c66cedb3SFlorian Hahn br label %loop 309*c66cedb3SFlorian Hahn 310*c66cedb3SFlorian Hahnloop: 311*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ] 312*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ] 313*c66cedb3SFlorian Hahn %iv.0.next = add nuw i4 %iv.0, 1 314*c66cedb3SFlorian Hahn call void @use(i4 %iv.0.next) 315*c66cedb3SFlorian Hahn %iv.1.next = add nuw i4 %iv.1, 1 316*c66cedb3SFlorian Hahn call void @use(i4 %iv.1.next) 317*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %arg 318*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 319*c66cedb3SFlorian Hahn 320*c66cedb3SFlorian Hahnexit: 321*c66cedb3SFlorian Hahn ret i4 %iv.1.next 322*c66cedb3SFlorian Hahn} 323*c66cedb3SFlorian Hahn 324*c66cedb3SFlorian Hahndefine i4 @iv_both_adds_nuw_extra_use_incs_reordered(i4 %arg, i4 %start) { 325*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_both_adds_nuw_extra_use_incs_reordered' 326*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nuw_extra_use_incs_reordered 327*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ] 328*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 329*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ] 330*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 331*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1 332*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 333*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add nuw i4 %iv.0, 1 334*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 335*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nuw_extra_use_incs_reordered 336*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 337*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 338*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 339*c66cedb3SFlorian Hahn; 340*c66cedb3SFlorian Hahnbb: 341*c66cedb3SFlorian Hahn br label %loop 342*c66cedb3SFlorian Hahn 343*c66cedb3SFlorian Hahnloop: 344*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ] 345*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ] 346*c66cedb3SFlorian Hahn %iv.1.next = add nuw i4 %iv.1, 1 347*c66cedb3SFlorian Hahn call void @use(i4 %iv.1.next) 348*c66cedb3SFlorian Hahn %iv.0.next = add nuw i4 %iv.0, 1 349*c66cedb3SFlorian Hahn call void @use(i4 %iv.0.next) 350*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %arg 351*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 352*c66cedb3SFlorian Hahn 353*c66cedb3SFlorian Hahnexit: 354*c66cedb3SFlorian Hahn ret i4 %iv.1.next 355*c66cedb3SFlorian Hahn} 356*c66cedb3SFlorian Hahn 357*c66cedb3SFlorian Hahndefine i4 @iv_nuw_poison_extra_use(i4 %0, i4 %end, i4 %start) { 358*c66cedb3SFlorian Hahn; CHECK-LABEL: 'iv_nuw_poison_extra_use' 359*c66cedb3SFlorian Hahn; CHECK-NEXT: Classifying expressions for: @iv_nuw_poison_extra_use 360*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 361*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 362*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 363*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 364*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 1 365*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 366*c66cedb3SFlorian Hahn; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1 367*c66cedb3SFlorian Hahn; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable } 368*c66cedb3SFlorian Hahn; CHECK-NEXT: Determining loop execution counts for: @iv_nuw_poison_extra_use 369*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. 370*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. 371*c66cedb3SFlorian Hahn; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. 372*c66cedb3SFlorian Hahn; 373*c66cedb3SFlorian Hahnentry: 374*c66cedb3SFlorian Hahn br label %loop 375*c66cedb3SFlorian Hahn 376*c66cedb3SFlorian Hahnloop: 377*c66cedb3SFlorian Hahn %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ] 378*c66cedb3SFlorian Hahn %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ] 379*c66cedb3SFlorian Hahn %iv.0.next = add i4 %iv.0, 1 380*c66cedb3SFlorian Hahn call void @use(i4 %iv.0.next) 381*c66cedb3SFlorian Hahn %iv.1.next = add nuw i4 %iv.1, 1 382*c66cedb3SFlorian Hahn %.not.not = icmp ult i4 %iv.0, %end 383*c66cedb3SFlorian Hahn br i1 %.not.not, label %exit, label %loop 384*c66cedb3SFlorian Hahn 385*c66cedb3SFlorian Hahnexit: 386*c66cedb3SFlorian Hahn ret i4 %iv.1.next 387*c66cedb3SFlorian Hahn} 388