388 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 42; RUN: opt "-passes=print<scalar-evolution>" -disable-output -S %s 2>&1 | FileCheck %s3 4; PR597775define i2 @iv_nsw_poison(i2 %arg) {6; CHECK-LABEL: 'iv_nsw_poison'7; CHECK-NEXT: Classifying expressions for: @iv_nsw_poison8; CHECK-NEXT: %.07 = phi i2 [ 1, %bb ], [ %i, %bb1 ]9; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb1> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }10; CHECK-NEXT: %.0 = phi i2 [ 1, %bb ], [ %i2, %bb1 ]11; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%bb1> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }12; CHECK-NEXT: %i = add nsw i2 %.07, 113; CHECK-NEXT: --> {-2,+,1}<nuw><%bb1> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }14; CHECK-NEXT: %i2 = add i2 %.0, 115; CHECK-NEXT: --> {-2,+,1}<nuw><%bb1> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }16; CHECK-NEXT: Determining loop execution counts for: @iv_nsw_poison17; CHECK-NEXT: Loop %bb1: Unpredictable backedge-taken count.18; CHECK-NEXT: Loop %bb1: Unpredictable constant max backedge-taken count.19; CHECK-NEXT: Loop %bb1: Unpredictable symbolic max backedge-taken count.20;21bb:22 br label %bb123 24bb1: ; preds = %bb1, %bb25 %.07 = phi i2 [ 1, %bb ], [ %i, %bb1 ]26 %.0 = phi i2 [ 1, %bb ], [ %i2, %bb1 ]27 %i = add nsw i2 %.07, 128 %i2 = add i2 %.0, 129 %.not.not = icmp ult i2 %.07, %arg30 br i1 %.not.not, label %common.ret, label %bb131 32common.ret: ; preds = %bb133 ret i2 %i234}35 36define i4 @iv_nsw_poison2(i4 %0, i4 %end, i4 %start) {37; CHECK-LABEL: 'iv_nsw_poison2'38; CHECK-NEXT: Classifying expressions for: @iv_nsw_poison239; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]40; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }41; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]42; CHECK-NEXT: --> {%start,+,1}<nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }43; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 144; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }45; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 146; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }47; CHECK-NEXT: Determining loop execution counts for: @iv_nsw_poison248; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.49; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.50; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.51;52entry:53 br label %loop54 55loop:56 %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]57 %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]58 %iv.0.next = add i4 %iv.0, 159 %iv.1.next = add nsw i4 %iv.1, 160 %.not.not = icmp ult i4 %iv.0, %end61 br i1 %.not.not, label %exit, label %loop62 63exit:64 ret i4 %iv.1.next65}66 67define i2 @iv_both_adds_nsw(i2 %arg) {68; CHECK-LABEL: 'iv_both_adds_nsw'69; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nsw70; CHECK-NEXT: %iv.0 = phi i2 [ 1, %bb ], [ %iv.0.next, %loop ]71; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }72; CHECK-NEXT: %iv.1 = phi i2 [ 1, %bb ], [ %iv.1.next, %loop ]73; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-2) S: [1,-2) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }74; CHECK-NEXT: %iv.0.next = add nsw i2 %iv.0, 175; CHECK-NEXT: --> {-2,+,1}<nuw><%loop> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }76; CHECK-NEXT: %iv.1.next = add nsw i2 %iv.1, 177; CHECK-NEXT: --> {-2,+,1}<nuw><%loop> U: [-2,0) S: [-2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }78; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nsw79; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.80; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.81; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.82;83bb:84 br label %loop85 86loop:87 %iv.0 = phi i2 [ 1, %bb ], [ %iv.0.next, %loop ]88 %iv.1 = phi i2 [ 1, %bb ], [ %iv.1.next, %loop ]89 %iv.0.next = add nsw i2 %iv.0, 190 %iv.1.next = add nsw i2 %iv.1, 191 %.not.not = icmp ult i2 %iv.0, %arg92 br i1 %.not.not, label %exit, label %loop93 94exit:95 ret i2 %iv.1.next96}97 98define i4 @iv_both_adds_nsw_extra_use(i4 %arg) {99; CHECK-LABEL: 'iv_both_adds_nsw_extra_use'100; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nsw_extra_use101; CHECK-NEXT: %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ]102; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }103; CHECK-NEXT: %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ]104; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }105; CHECK-NEXT: %iv.0.next = add nsw i4 %iv.0, 1106; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }107; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 1108; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }109; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nsw_extra_use110; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.111; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.112; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.113;114bb:115 br label %loop116 117loop:118 %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ]119 %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ]120 %iv.0.next = add nsw i4 %iv.0, 1121 call void @use(i4 %iv.0.next)122 %iv.1.next = add nsw i4 %iv.1, 1123 call void @use(i4 %iv.1.next)124 %.not.not = icmp ult i4 %iv.0, %arg125 br i1 %.not.not, label %exit, label %loop126 127exit:128 ret i4 %iv.1.next129}130 131define i4 @iv_both_adds_nsw_extra_use_incs_reordered(i4 %arg) {132; CHECK-LABEL: 'iv_both_adds_nsw_extra_use_incs_reordered'133; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nsw_extra_use_incs_reordered134; CHECK-NEXT: %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ]135; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }136; CHECK-NEXT: %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ]137; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,-8) S: [1,-8) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }138; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 1139; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }140; CHECK-NEXT: %iv.0.next = add nsw i4 %iv.0, 1141; CHECK-NEXT: --> {2,+,1}<nuw><%loop> U: [2,0) S: [2,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }142; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nsw_extra_use_incs_reordered143; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.144; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.145; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.146;147bb:148 br label %loop149 150loop:151 %iv.0 = phi i4 [ 1, %bb ], [ %iv.0.next, %loop ]152 %iv.1 = phi i4 [ 1, %bb ], [ %iv.1.next, %loop ]153 %iv.1.next = add nsw i4 %iv.1, 1154 call void @use(i4 %iv.1.next)155 %iv.0.next = add nsw i4 %iv.0, 1156 call void @use(i4 %iv.0.next)157 %.not.not = icmp ult i4 %iv.0, %arg158 br i1 %.not.not, label %exit, label %loop159 160exit:161 ret i4 %iv.1.next162}163 164define i4 @iv_nsw_poison_extra_use(i4 %0, i4 %end, i4 %start) {165; CHECK-LABEL: 'iv_nsw_poison_extra_use'166; CHECK-NEXT: Classifying expressions for: @iv_nsw_poison_extra_use167; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]168; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }169; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]170; CHECK-NEXT: --> {%start,+,1}<nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }171; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 1172; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }173; CHECK-NEXT: %iv.1.next = add nsw i4 %iv.1, 1174; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }175; CHECK-NEXT: Determining loop execution counts for: @iv_nsw_poison_extra_use176; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.177; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.178; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.179;180entry:181 br label %loop182 183loop:184 %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]185 %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]186 %iv.0.next = add i4 %iv.0, 1187 call void @use(i4 %iv.0.next)188 %iv.1.next = add nsw i4 %iv.1, 1189 %.not.not = icmp ult i4 %iv.0, %end190 br i1 %.not.not, label %exit, label %loop191 192exit:193 ret i4 %iv.1.next194}195 196declare void @use(i4)197 198define i2 @iv_nuw_poison(i2 %arg, i2 %start) {199; CHECK-LABEL: 'iv_nuw_poison'200; CHECK-NEXT: Classifying expressions for: @iv_nuw_poison201; CHECK-NEXT: %.07 = phi i2 [ %start, %bb ], [ %i, %bb1 ]202; CHECK-NEXT: --> {%start,+,1}<nuw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }203; CHECK-NEXT: %.0 = phi i2 [ %start, %bb ], [ %i2, %bb1 ]204; CHECK-NEXT: --> {%start,+,1}<nuw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }205; CHECK-NEXT: %i = add nuw i2 %.07, 1206; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }207; CHECK-NEXT: %i2 = add i2 %.0, 1208; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%bb1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb1: Computable }209; CHECK-NEXT: Determining loop execution counts for: @iv_nuw_poison210; CHECK-NEXT: Loop %bb1: Unpredictable backedge-taken count.211; CHECK-NEXT: Loop %bb1: Unpredictable constant max backedge-taken count.212; CHECK-NEXT: Loop %bb1: Unpredictable symbolic max backedge-taken count.213;214bb:215 br label %bb1216 217bb1: ; preds = %bb1, %bb218 %.07 = phi i2 [ %start, %bb ], [ %i, %bb1 ]219 %.0 = phi i2 [ %start, %bb ], [ %i2, %bb1 ]220 %i = add nuw i2 %.07, 1221 %i2 = add i2 %.0, 1222 %.not.not = icmp ult i2 %.07, %arg223 br i1 %.not.not, label %common.ret, label %bb1224 225common.ret: ; preds = %bb1226 ret i2 %i2227}228 229define i4 @iv_nuw_poison2(i4 %0, i4 %end, i4 %start) {230; CHECK-LABEL: 'iv_nuw_poison2'231; CHECK-NEXT: Classifying expressions for: @iv_nuw_poison2232; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]233; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }234; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]235; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }236; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 1237; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }238; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1239; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }240; CHECK-NEXT: Determining loop execution counts for: @iv_nuw_poison2241; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.242; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.243; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.244;245entry:246 br label %loop247 248loop:249 %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]250 %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]251 %iv.0.next = add i4 %iv.0, 1252 %iv.1.next = add nuw i4 %iv.1, 1253 %.not.not = icmp ult i4 %iv.0, %end254 br i1 %.not.not, label %exit, label %loop255 256exit:257 ret i4 %iv.1.next258}259 260define i2 @iv_both_adds_nuw(i2 %arg, i2 %start) {261; CHECK-LABEL: 'iv_both_adds_nuw'262; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nuw263; CHECK-NEXT: %iv.0 = phi i2 [ %start, %bb ], [ %iv.0.next, %loop ]264; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }265; CHECK-NEXT: %iv.1 = phi i2 [ %start, %bb ], [ %iv.1.next, %loop ]266; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }267; CHECK-NEXT: %iv.0.next = add nuw i2 %iv.0, 1268; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }269; CHECK-NEXT: %iv.1.next = add nuw i2 %iv.1, 1270; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }271; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nuw272; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.273; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.274; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.275;276bb:277 br label %loop278 279loop:280 %iv.0 = phi i2 [ %start, %bb ], [ %iv.0.next, %loop ]281 %iv.1 = phi i2 [ %start, %bb ], [ %iv.1.next, %loop ]282 %iv.0.next = add nuw i2 %iv.0, 1283 %iv.1.next = add nuw i2 %iv.1, 1284 %.not.not = icmp ult i2 %iv.0, %arg285 br i1 %.not.not, label %exit, label %loop286 287exit:288 ret i2 %iv.1.next289}290 291define i4 @iv_both_adds_nuw_extra_use(i4 %arg, i4 %start) {292; CHECK-LABEL: 'iv_both_adds_nuw_extra_use'293; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nuw_extra_use294; CHECK-NEXT: %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ]295; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }296; CHECK-NEXT: %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ]297; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }298; CHECK-NEXT: %iv.0.next = add nuw i4 %iv.0, 1299; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }300; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1301; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }302; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nuw_extra_use303; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.304; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.305; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.306;307bb:308 br label %loop309 310loop:311 %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ]312 %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ]313 %iv.0.next = add nuw i4 %iv.0, 1314 call void @use(i4 %iv.0.next)315 %iv.1.next = add nuw i4 %iv.1, 1316 call void @use(i4 %iv.1.next)317 %.not.not = icmp ult i4 %iv.0, %arg318 br i1 %.not.not, label %exit, label %loop319 320exit:321 ret i4 %iv.1.next322}323 324define i4 @iv_both_adds_nuw_extra_use_incs_reordered(i4 %arg, i4 %start) {325; CHECK-LABEL: 'iv_both_adds_nuw_extra_use_incs_reordered'326; CHECK-NEXT: Classifying expressions for: @iv_both_adds_nuw_extra_use_incs_reordered327; CHECK-NEXT: %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ]328; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }329; CHECK-NEXT: %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ]330; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }331; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1332; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }333; CHECK-NEXT: %iv.0.next = add nuw i4 %iv.0, 1334; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }335; CHECK-NEXT: Determining loop execution counts for: @iv_both_adds_nuw_extra_use_incs_reordered336; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.337; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.338; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.339;340bb:341 br label %loop342 343loop:344 %iv.0 = phi i4 [ %start, %bb ], [ %iv.0.next, %loop ]345 %iv.1 = phi i4 [ %start, %bb ], [ %iv.1.next, %loop ]346 %iv.1.next = add nuw i4 %iv.1, 1347 call void @use(i4 %iv.1.next)348 %iv.0.next = add nuw i4 %iv.0, 1349 call void @use(i4 %iv.0.next)350 %.not.not = icmp ult i4 %iv.0, %arg351 br i1 %.not.not, label %exit, label %loop352 353exit:354 ret i4 %iv.1.next355}356 357define i4 @iv_nuw_poison_extra_use(i4 %0, i4 %end, i4 %start) {358; CHECK-LABEL: 'iv_nuw_poison_extra_use'359; CHECK-NEXT: Classifying expressions for: @iv_nuw_poison_extra_use360; CHECK-NEXT: %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]361; CHECK-NEXT: --> {%start,+,1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }362; CHECK-NEXT: %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]363; CHECK-NEXT: --> {%start,+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }364; CHECK-NEXT: %iv.0.next = add i4 %iv.0, 1365; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }366; CHECK-NEXT: %iv.1.next = add nuw i4 %iv.1, 1367; CHECK-NEXT: --> {(1 + %start),+,1}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }368; CHECK-NEXT: Determining loop execution counts for: @iv_nuw_poison_extra_use369; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.370; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.371; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.372;373entry:374 br label %loop375 376loop:377 %iv.0 = phi i4 [ %start, %entry ], [ %iv.0.next, %loop ]378 %iv.1 = phi i4 [ %start, %entry ], [ %iv.1.next, %loop ]379 %iv.0.next = add i4 %iv.0, 1380 call void @use(i4 %iv.0.next)381 %iv.1.next = add nuw i4 %iv.1, 1382 %.not.not = icmp ult i4 %iv.0, %end383 br i1 %.not.not, label %exit, label %loop384 385exit:386 ret i4 %iv.1.next387}388