brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.9 KiB · 1e15d2d Raw
502 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 42; RUN: opt -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-classify-expressions=0 < %s 2>&1 | FileCheck %s3 4define void @ule_from_zero(i32 %M, i32 %N) {5; CHECK-LABEL: 'ule_from_zero'6; CHECK-NEXT:  Determining loop execution counts for: @ule_from_zero7; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)8; CHECK-NEXT:    exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>9; CHECK-NEXT:    exit count for latch: %N10; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 429496729511; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)12; CHECK-NEXT:    symbolic max exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>13; CHECK-NEXT:    symbolic max exit count for latch: %N14; CHECK-NEXT:  Loop %loop: Trip multiple is 115;16entry:17  br label %loop18 19loop:20  %iv = phi i32 [ 0, %entry ], [ %iv.next, %latch ]21  %cmp1 = icmp ule i32 %iv, %M22  br i1 %cmp1, label %latch, label %exit23 24latch:25  %iv.next = add nuw i32 %iv, 126  %exitcond.not = icmp eq i32 %iv, %N27  br i1 %exitcond.not, label %exit, label %loop28 29exit:30  ret void31}32 33define void @le_from_zero(i32 %M, i32 %N) {34; CHECK-LABEL: 'le_from_zero'35; CHECK-NEXT:  Determining loop execution counts for: @le_from_zero36; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)37; CHECK-NEXT:    exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>38; CHECK-NEXT:    exit count for latch: %N39; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 429496729540; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)41; CHECK-NEXT:    symbolic max exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>42; CHECK-NEXT:    symbolic max exit count for latch: %N43; CHECK-NEXT:  Loop %loop: Trip multiple is 144;45entry:46  br label %loop47 48loop:49  %iv = phi i32 [ 0, %entry ], [ %iv.next, %latch ]50  %cmp1 = icmp samesign ule i32 %iv, %M51  br i1 %cmp1, label %latch, label %exit52 53latch:54  %iv.next = add nuw i32 %iv, 155  %exitcond.not = icmp eq i32 %iv, %N56  br i1 %exitcond.not, label %exit, label %loop57 58exit:59  ret void60}61 62define void @ule_from_one(i32 %M, i32 %N) {63; CHECK-LABEL: 'ule_from_one'64; CHECK-NEXT:  Determining loop execution counts for: @ule_from_one65; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is (%M umin_seq (-1 + %N))66; CHECK-NEXT:    exit count for loop: %M67; CHECK-NEXT:    exit count for latch: (-1 + %N)68; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -169; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (%M umin_seq (-1 + %N))70; CHECK-NEXT:    symbolic max exit count for loop: %M71; CHECK-NEXT:    symbolic max exit count for latch: (-1 + %N)72; CHECK-NEXT:  Loop %loop: Trip multiple is 173;74entry:75  br label %loop76 77loop:78  %iv = phi i32 [ 1, %entry ], [ %iv.next, %latch ]79  %cmp1 = icmp ule i32 %iv, %M80  br i1 %cmp1, label %latch, label %exit81 82latch:83  %iv.next = add nuw i32 %iv, 184  %exitcond.not = icmp eq i32 %iv, %N85  br i1 %exitcond.not, label %exit, label %loop86 87exit:88  ret void89}90 91define void @le_from_one(i32 %M, i32 %N) {92; CHECK-LABEL: 'le_from_one'93; CHECK-NEXT:  Determining loop execution counts for: @le_from_one94; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is (%M umin_seq (-1 + %N))95; CHECK-NEXT:    exit count for loop: %M96; CHECK-NEXT:    exit count for latch: (-1 + %N)97; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -198; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (%M umin_seq (-1 + %N))99; CHECK-NEXT:    symbolic max exit count for loop: %M100; CHECK-NEXT:    symbolic max exit count for latch: (-1 + %N)101; CHECK-NEXT:  Loop %loop: Trip multiple is 1102;103entry:104  br label %loop105 106loop:107  %iv = phi i32 [ 1, %entry ], [ %iv.next, %latch ]108  %cmp1 = icmp samesign ule i32 %iv, %M109  br i1 %cmp1, label %latch, label %exit110 111latch:112  %iv.next = add nuw i32 %iv, 1113  %exitcond.not = icmp eq i32 %iv, %N114  br i1 %exitcond.not, label %exit, label %loop115 116exit:117  ret void118}119 120define void @ule_from_unknown(i32 %M, i32 %N, i32 %S) {121; CHECK-LABEL: 'ule_from_unknown'122; CHECK-NEXT:  Determining loop execution counts for: @ule_from_unknown123; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is (((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))124; CHECK-NEXT:    exit count for loop: ((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>))125; CHECK-NEXT:    exit count for latch: ((-1 * %S) + %N)126; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 4294967295127; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))128; CHECK-NEXT:    symbolic max exit count for loop: ((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>))129; CHECK-NEXT:    symbolic max exit count for latch: ((-1 * %S) + %N)130; CHECK-NEXT:  Loop %loop: Trip multiple is 1131;132entry:133  br label %loop134 135loop:136  %iv = phi i32 [ %S, %entry ], [ %iv.next, %latch ]137  %cmp1 = icmp ule i32 %iv, %M138  br i1 %cmp1, label %latch, label %exit139 140latch:141  %iv.next = add nuw i32 %iv, 1142  %exitcond.not = icmp eq i32 %iv, %N143  br i1 %exitcond.not, label %exit, label %loop144 145exit:146  ret void147}148 149define void @ule_from_zero_no_nuw(i32 %M, i32 %N) {150; CHECK-LABEL: 'ule_from_zero_no_nuw'151; CHECK-NEXT:  Determining loop execution counts for: @ule_from_zero_no_nuw152; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.153; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***154; CHECK-NEXT:    predicated exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>155; CHECK-NEXT:     Predicates:156; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>157; CHECK-EMPTY:158; CHECK-NEXT:    exit count for latch: %N159; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1160; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %N161; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***162; CHECK-NEXT:    predicated symbolic max exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>163; CHECK-NEXT:     Predicates:164; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>165; CHECK-EMPTY:166; CHECK-NEXT:    symbolic max exit count for latch: %N167; CHECK-NEXT:  Loop %loop: Predicated backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)168; CHECK-NEXT:   Predicates:169; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>170; CHECK-NEXT:  Loop %loop: Predicated constant max backedge-taken count is i64 4294967295171; CHECK-NEXT:   Predicates:172; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>173; CHECK-NEXT:  Loop %loop: Predicated symbolic max backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)174; CHECK-NEXT:   Predicates:175; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>176;177entry:178  br label %loop179 180loop:181  %iv = phi i32 [ 0, %entry ], [ %iv.next, %latch ]182  %cmp1 = icmp ule i32 %iv, %M183  br i1 %cmp1, label %latch, label %exit184 185latch:186  %iv.next = add i32 %iv, 1187  %exitcond.not = icmp eq i32 %iv, %N188  br i1 %exitcond.not, label %exit, label %loop189 190exit:191  ret void192}193 194define void @le_from_zero_no_nuw(i32 %M, i32 %N) {195; CHECK-LABEL: 'le_from_zero_no_nuw'196; CHECK-NEXT:  Determining loop execution counts for: @le_from_zero_no_nuw197; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.198; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***199; CHECK-NEXT:    predicated exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>200; CHECK-NEXT:     Predicates:201; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>202; CHECK-EMPTY:203; CHECK-NEXT:    exit count for latch: %N204; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1205; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %N206; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***207; CHECK-NEXT:    predicated symbolic max exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>208; CHECK-NEXT:     Predicates:209; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>210; CHECK-EMPTY:211; CHECK-NEXT:    symbolic max exit count for latch: %N212; CHECK-NEXT:  Loop %loop: Predicated backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)213; CHECK-NEXT:   Predicates:214; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>215; CHECK-NEXT:  Loop %loop: Predicated constant max backedge-taken count is i64 4294967295216; CHECK-NEXT:   Predicates:217; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>218; CHECK-NEXT:  Loop %loop: Predicated symbolic max backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)219; CHECK-NEXT:   Predicates:220; CHECK-NEXT:      {0,+,1}<%loop> Added Flags: <nusw>221;222entry:223  br label %loop224 225loop:226  %iv = phi i32 [ 0, %entry ], [ %iv.next, %latch ]227  %cmp1 = icmp samesign ule i32 %iv, %M228  br i1 %cmp1, label %latch, label %exit229 230latch:231  %iv.next = add i32 %iv, 1232  %exitcond.not = icmp eq i32 %iv, %N233  br i1 %exitcond.not, label %exit, label %loop234 235exit:236  ret void237}238 239define void @sle_from_int_min(i32 %M, i32 %N) {240; CHECK-LABEL: 'sle_from_int_min'241; CHECK-NEXT:  Determining loop execution counts for: @sle_from_int_min242; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is ((zext i32 (-2147483648 + %N) to i64) umin (2147483649 + (sext i32 %M to i64))<nsw>)243; CHECK-NEXT:    exit count for loop: (2147483649 + (sext i32 %M to i64))<nsw>244; CHECK-NEXT:    exit count for latch: (-2147483648 + %N)245; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 4294967295246; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((zext i32 (-2147483648 + %N) to i64) umin (2147483649 + (sext i32 %M to i64))<nsw>)247; CHECK-NEXT:    symbolic max exit count for loop: (2147483649 + (sext i32 %M to i64))<nsw>248; CHECK-NEXT:    symbolic max exit count for latch: (-2147483648 + %N)249; CHECK-NEXT:  Loop %loop: Trip multiple is 1250;251entry:252  br label %loop253 254loop:255  %iv = phi i32 [ u0x80000000, %entry ], [ %iv.next, %latch ]256  %cmp1 = icmp sle i32 %iv, %M257  br i1 %cmp1, label %latch, label %exit258 259latch:260  %iv.next = add nsw i32 %iv, 1261  %exitcond.not = icmp eq i32 %iv, %N262  br i1 %exitcond.not, label %exit, label %loop263 264exit:265  ret void266}267 268define void @le_from_int_min(i32 %M, i32 %N) {269; CHECK-LABEL: 'le_from_int_min'270; CHECK-NEXT:  Determining loop execution counts for: @le_from_int_min271; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is ((-2147483647 + (2147483647 umax %M)) umin_seq (-2147483648 + %N))272; CHECK-NEXT:    exit count for loop: (-2147483647 + (2147483647 umax %M))273; CHECK-NEXT:    exit count for latch: (-2147483648 + %N)274; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -2147483648275; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((-2147483647 + (2147483647 umax %M)) umin_seq (-2147483648 + %N))276; CHECK-NEXT:    symbolic max exit count for loop: (-2147483647 + (2147483647 umax %M))277; CHECK-NEXT:    symbolic max exit count for latch: (-2147483648 + %N)278; CHECK-NEXT:  Loop %loop: Trip multiple is 1279;280entry:281  br label %loop282 283loop:284  %iv = phi i32 [ u0x80000000, %entry ], [ %iv.next, %latch ]285  %cmp1 = icmp samesign ule i32 %iv, %M286  br i1 %cmp1, label %latch, label %exit287 288latch:289  %iv.next = add nuw nsw i32 %iv, 1290  %exitcond.not = icmp eq i32 %iv, %N291  br i1 %exitcond.not, label %exit, label %loop292 293exit:294  ret void295}296 297define void @sle_from_int_min_plus_one(i32 %M, i32 %N) {298; CHECK-LABEL: 'sle_from_int_min_plus_one'299; CHECK-NEXT:  Determining loop execution counts for: @sle_from_int_min_plus_one300; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is ((-2147483648 + %M) umin_seq (2147483647 + %N))301; CHECK-NEXT:    exit count for loop: (-2147483648 + %M)302; CHECK-NEXT:    exit count for latch: (2147483647 + %N)303; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1304; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((-2147483648 + %M) umin_seq (2147483647 + %N))305; CHECK-NEXT:    symbolic max exit count for loop: (-2147483648 + %M)306; CHECK-NEXT:    symbolic max exit count for latch: (2147483647 + %N)307; CHECK-NEXT:  Loop %loop: Trip multiple is 1308;309entry:310  br label %loop311 312loop:313  %iv = phi i32 [ u0x80000001, %entry ], [ %iv.next, %latch ]314  %cmp1 = icmp sle i32 %iv, %M315  br i1 %cmp1, label %latch, label %exit316 317latch:318  %iv.next = add nsw i32 %iv, 1319  %exitcond.not = icmp eq i32 %iv, %N320  br i1 %exitcond.not, label %exit, label %loop321 322exit:323  ret void324}325 326define void @le_from_int_min_plus_one(i32 %M, i32 %N) {327; CHECK-LABEL: 'le_from_int_min_plus_one'328; CHECK-NEXT:  Determining loop execution counts for: @le_from_int_min_plus_one329; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is ((-2147483648 + (-2147483648 umax %M)) umin_seq (2147483647 + %N))330; CHECK-NEXT:    exit count for loop: (-2147483648 + (-2147483648 umax %M))331; CHECK-NEXT:    exit count for latch: (2147483647 + %N)332; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 2147483647333; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((-2147483648 + (-2147483648 umax %M)) umin_seq (2147483647 + %N))334; CHECK-NEXT:    symbolic max exit count for loop: (-2147483648 + (-2147483648 umax %M))335; CHECK-NEXT:    symbolic max exit count for latch: (2147483647 + %N)336; CHECK-NEXT:  Loop %loop: Trip multiple is 1337;338entry:339  br label %loop340 341loop:342  %iv = phi i32 [ u0x80000001, %entry ], [ %iv.next, %latch ]343  %cmp1 = icmp samesign ule i32 %iv, %M344  br i1 %cmp1, label %latch, label %exit345 346latch:347  %iv.next = add nuw nsw i32 %iv, 1348  %exitcond.not = icmp eq i32 %iv, %N349  br i1 %exitcond.not, label %exit, label %loop350 351exit:352  ret void353}354 355define void @sle_from_unknown(i32 %M, i32 %N, i32 %S) {356; CHECK-LABEL: 'sle_from_unknown'357; CHECK-NEXT:  Determining loop execution counts for: @sle_from_unknown358; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is (((-1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))359; CHECK-NEXT:    exit count for loop: ((-1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>))360; CHECK-NEXT:    exit count for latch: ((-1 * %S) + %N)361; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 4294967295362; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (((-1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))363; CHECK-NEXT:    symbolic max exit count for loop: ((-1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>))364; CHECK-NEXT:    symbolic max exit count for latch: ((-1 * %S) + %N)365; CHECK-NEXT:  Loop %loop: Trip multiple is 1366;367entry:368  br label %loop369 370loop:371  %iv = phi i32 [ %S, %entry ], [ %iv.next, %latch ]372  %cmp1 = icmp sle i32 %iv, %M373  br i1 %cmp1, label %latch, label %exit374 375latch:376  %iv.next = add nsw i32 %iv, 1377  %exitcond.not = icmp eq i32 %iv, %N378  br i1 %exitcond.not, label %exit, label %loop379 380exit:381  ret void382}383 384define void @le_from_unknown(i32 %M, i32 %N, i32 %S) {385; CHECK-LABEL: 'le_from_unknown'386; CHECK-NEXT:  Determining loop execution counts for: @le_from_unknown387; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is (((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))388; CHECK-NEXT:    exit count for loop: ((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>))389; CHECK-NEXT:    exit count for latch: ((-1 * %S) + %N)390; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 4294967295391; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))392; CHECK-NEXT:    symbolic max exit count for loop: ((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>))393; CHECK-NEXT:    symbolic max exit count for latch: ((-1 * %S) + %N)394; CHECK-NEXT:  Loop %loop: Trip multiple is 1395;396entry:397  br label %loop398 399loop:400  %iv = phi i32 [ %S, %entry ], [ %iv.next, %latch ]401  %cmp1 = icmp samesign ule i32 %iv, %M402  br i1 %cmp1, label %latch, label %exit403 404latch:405  %iv.next = add nuw nsw i32 %iv, 1406  %exitcond.not = icmp eq i32 %iv, %N407  br i1 %exitcond.not, label %exit, label %loop408 409exit:410  ret void411}412 413define void @sle_from_int_min_no_nsw(i32 %M, i32 %N) {414; CHECK-LABEL: 'sle_from_int_min_no_nsw'415; CHECK-NEXT:  Determining loop execution counts for: @sle_from_int_min_no_nsw416; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.417; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***418; CHECK-NEXT:    predicated exit count for loop: (2147483649 + (sext i32 %M to i64))<nsw>419; CHECK-NEXT:     Predicates:420; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nssw>421; CHECK-EMPTY:422; CHECK-NEXT:    exit count for latch: (-2147483648 + %N)423; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1424; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (-2147483648 + %N)425; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***426; CHECK-NEXT:    predicated symbolic max exit count for loop: (2147483649 + (sext i32 %M to i64))<nsw>427; CHECK-NEXT:     Predicates:428; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nssw>429; CHECK-EMPTY:430; CHECK-NEXT:    symbolic max exit count for latch: (-2147483648 + %N)431; CHECK-NEXT:  Loop %loop: Predicated backedge-taken count is ((zext i32 (-2147483648 + %N) to i64) umin (2147483649 + (sext i32 %M to i64))<nsw>)432; CHECK-NEXT:   Predicates:433; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nssw>434; CHECK-NEXT:  Loop %loop: Predicated constant max backedge-taken count is i64 4294967295435; CHECK-NEXT:   Predicates:436; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nssw>437; CHECK-NEXT:  Loop %loop: Predicated symbolic max backedge-taken count is ((zext i32 (-2147483648 + %N) to i64) umin (2147483649 + (sext i32 %M to i64))<nsw>)438; CHECK-NEXT:   Predicates:439; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nssw>440;441entry:442  br label %loop443 444loop:445  %iv = phi i32 [ u0x80000000, %entry ], [ %iv.next, %latch ]446  %cmp1 = icmp sle i32 %iv, %M447  br i1 %cmp1, label %latch, label %exit448 449latch:450  %iv.next = add i32 %iv, 1451  %exitcond.not = icmp eq i32 %iv, %N452  br i1 %exitcond.not, label %exit, label %loop453 454exit:455  ret void456}457 458define void @le_from_int_min_no_nuw_nsw(i32 %M, i32 %N) {459; CHECK-LABEL: 'le_from_int_min_no_nuw_nsw'460; CHECK-NEXT:  Determining loop execution counts for: @le_from_int_min_no_nuw_nsw461; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.462; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***463; CHECK-NEXT:    predicated exit count for loop: (-2147483648 + (2147483648 umax (1 + (zext i32 %M to i64))<nuw><nsw>))<nsw>464; CHECK-NEXT:     Predicates:465; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nusw>466; CHECK-EMPTY:467; CHECK-NEXT:    exit count for latch: (-2147483648 + %N)468; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1469; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (-2147483648 + %N)470; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***471; CHECK-NEXT:    predicated symbolic max exit count for loop: (-2147483648 + (2147483648 umax (1 + (zext i32 %M to i64))<nuw><nsw>))<nsw>472; CHECK-NEXT:     Predicates:473; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nusw>474; CHECK-EMPTY:475; CHECK-NEXT:    symbolic max exit count for latch: (-2147483648 + %N)476; CHECK-NEXT:  Loop %loop: Predicated backedge-taken count is ((-2147483648 + (2147483648 umax (1 + (zext i32 %M to i64))<nuw><nsw>))<nsw> umin_seq (zext i32 (-2147483648 + %N) to i64))477; CHECK-NEXT:   Predicates:478; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nusw>479; CHECK-NEXT:  Loop %loop: Predicated constant max backedge-taken count is i64 2147483648480; CHECK-NEXT:   Predicates:481; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nusw>482; CHECK-NEXT:  Loop %loop: Predicated symbolic max backedge-taken count is ((-2147483648 + (2147483648 umax (1 + (zext i32 %M to i64))<nuw><nsw>))<nsw> umin_seq (zext i32 (-2147483648 + %N) to i64))483; CHECK-NEXT:   Predicates:484; CHECK-NEXT:      {-2147483648,+,1}<%loop> Added Flags: <nusw>485;486entry:487  br label %loop488 489loop:490  %iv = phi i32 [ u0x80000000, %entry ], [ %iv.next, %latch ]491  %cmp1 = icmp samesign ule i32 %iv, %M492  br i1 %cmp1, label %latch, label %exit493 494latch:495  %iv.next = add i32 %iv, 1496  %exitcond.not = icmp eq i32 %iv, %N497  br i1 %exitcond.not, label %exit, label %loop498 499exit:500  ret void501}502