565 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -disable-output -passes="print<scalar-evolution>" \3; RUN: -scalar-evolution-classify-expressions=0 2>&1 | FileCheck %s4 5define void @implied1(i32 %n) {6; Prove that (n s> 1) ===> (n / 2 s> 0).7; CHECK-LABEL: 'implied1'8; CHECK-NEXT: Determining loop execution counts for: @implied19; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>10; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 107374182211; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>12; CHECK-NEXT: Loop %header: Trip multiple is 113;14entry:15 %cmp1 = icmp sgt i32 %n, 116 %n.div.2 = sdiv i32 %n, 217 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]18 br label %header19 20header:21 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]22 %indvar.next = add i32 %indvar, 123 %exitcond = icmp sgt i32 %n.div.2, %indvar.next24 br i1 %exitcond, label %header, label %exit25 26exit:27 ret void28}29 30define void @implied1_samesign(i32 %n) {31; Prove that (n > 1) ===> (n / 2 s> 0).32; CHECK-LABEL: 'implied1_samesign'33; CHECK-NEXT: Determining loop execution counts for: @implied1_samesign34; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>35; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 107374182236; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>37; CHECK-NEXT: Loop %header: Trip multiple is 138;39entry:40 %cmp1 = icmp samesign ugt i32 %n, 141 %n.div.2 = sdiv i32 %n, 242 call void @llvm.assume(i1 %cmp1)43 br label %header44 45header:46 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]47 %indvar.next = add i32 %indvar, 148 %exitcond = icmp sgt i32 %n.div.2, %indvar.next49 br i1 %exitcond, label %header, label %exit50 51exit:52 ret void53}54 55define void @implied1_neg(i32 %n) {56; Prove that (n s> 0) =\=> (n / 2 s> 0).57; CHECK-LABEL: 'implied1_neg'58; CHECK-NEXT: Determining loop execution counts for: @implied1_neg59; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>60; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 107374182261; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>62; CHECK-NEXT: Loop %header: Trip multiple is 163;64entry:65 %cmp1 = icmp sgt i32 %n, 066 %n.div.2 = sdiv i32 %n, 267 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]68 br label %header69 70header:71 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]72 %indvar.next = add i32 %indvar, 173 %exitcond = icmp sgt i32 %n.div.2, %indvar.next74 br i1 %exitcond, label %header, label %exit75 76exit:77 ret void78}79 80define void @implied2(i32 %n) {81; Prove that (n s>= 2) ===> (n / 2 s> 0).82; CHECK-LABEL: 'implied2'83; CHECK-NEXT: Determining loop execution counts for: @implied284; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>85; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 107374182286; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>87; CHECK-NEXT: Loop %header: Trip multiple is 188;89entry:90 %cmp1 = icmp sge i32 %n, 291 %n.div.2 = sdiv i32 %n, 292 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]93 br label %header94 95header:96 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]97 %indvar.next = add i32 %indvar, 198 %exitcond = icmp sgt i32 %n.div.2, %indvar.next99 br i1 %exitcond, label %header, label %exit100 101exit:102 ret void103}104 105define void @implied2_samesign(i32 %n) {106; Prove that (n >= 2) ===> (n / 2 s> 0).107; CHECK-LABEL: 'implied2_samesign'108; CHECK-NEXT: Determining loop execution counts for: @implied2_samesign109; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>110; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822111; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>112; CHECK-NEXT: Loop %header: Trip multiple is 1113;114entry:115 %cmp1 = icmp samesign uge i32 %n, 2116 %n.div.2 = sdiv i32 %n, 2117 call void @llvm.assume(i1 %cmp1)118 br label %header119 120header:121 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]122 %indvar.next = add i32 %indvar, 1123 %exitcond = icmp sgt i32 %n.div.2, %indvar.next124 br i1 %exitcond, label %header, label %exit125 126exit:127 ret void128}129 130define void @implied2_neg(i32 %n) {131; Prove that (n s>= 1) =\=> (n / 2 s> 0).132; CHECK-LABEL: 'implied2_neg'133; CHECK-NEXT: Determining loop execution counts for: @implied2_neg134; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>135; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822136; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>137; CHECK-NEXT: Loop %header: Trip multiple is 1138;139entry:140 %cmp1 = icmp sge i32 %n, 1141 %n.div.2 = sdiv i32 %n, 2142 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]143 br label %header144 145header:146 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]147 %indvar.next = add i32 %indvar, 1148 %exitcond = icmp sgt i32 %n.div.2, %indvar.next149 br i1 %exitcond, label %header, label %exit150 151exit:152 ret void153}154 155define void @implied3(i32 %n) {156; Prove that (n s> -2) ===> (n / 2 s>= 0).157; CHECK-LABEL: 'implied3'158; CHECK-NEXT: Determining loop execution counts for: @implied3159; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>160; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824161; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>162; CHECK-NEXT: Loop %header: Trip multiple is 1163;164entry:165 %cmp1 = icmp sgt i32 %n, -2166 %n.div.2 = sdiv i32 %n, 2167 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]168 br label %header169 170header:171 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]172 %indvar.next = add i32 %indvar, 1173 %exitcond = icmp sge i32 %n.div.2, %indvar174 br i1 %exitcond, label %header, label %exit175 176exit:177 ret void178}179 180define void @implied3_samesign(i32 %n) {181; Prove that (n > -2) ===> (n / 2 s>= 0).182; CHECK-LABEL: 'implied3_samesign'183; CHECK-NEXT: Determining loop execution counts for: @implied3_samesign184; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>185; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1186; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>187; CHECK-NEXT: Loop %header: Trip multiple is 1188;189entry:190 %cmp1 = icmp samesign ugt i32 %n, -2191 %n.div.2 = sdiv i32 %n, 2192 call void @llvm.assume(i1 %cmp1)193 br label %header194 195header:196 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]197 %indvar.next = add i32 %indvar, 1198 %exitcond = icmp sge i32 %n.div.2, %indvar199 br i1 %exitcond, label %header, label %exit200 201exit:202 ret void203}204 205define void @implied3_neg(i32 %n) {206; Prove that (n > -3) =\=> (n / 2 >= 0).207; CHECK-LABEL: 'implied3_neg'208; CHECK-NEXT: Determining loop execution counts for: @implied3_neg209; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)210; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824211; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)212; CHECK-NEXT: Loop %header: Trip multiple is 1213;214entry:215 %cmp1 = icmp sgt i32 %n, -3216 %n.div.2 = sdiv i32 %n, 2217 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]218 br label %header219 220header:221 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]222 %indvar.next = add i32 %indvar, 1223 %exitcond = icmp sge i32 %n.div.2, %indvar224 br i1 %exitcond, label %header, label %exit225 226exit:227 ret void228}229 230define void @implied4(i32 %n) {231; Prove that (n s>= -1) ===> (n / 2 s>= 0).232; CHECK-LABEL: 'implied4'233; CHECK-NEXT: Determining loop execution counts for: @implied4234; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>235; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824236; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>237; CHECK-NEXT: Loop %header: Trip multiple is 1238;239entry:240 %cmp1 = icmp sge i32 %n, -1241 %n.div.2 = sdiv i32 %n, 2242 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]243 br label %header244 245header:246 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]247 %indvar.next = add i32 %indvar, 1248 %exitcond = icmp sge i32 %n.div.2, %indvar249 br i1 %exitcond, label %header, label %exit250 251exit:252 ret void253}254 255define void @implied4_samesign(i32 %n) {256; Prove that (n >= -1) ===> (n / 2 s>= 0).257; CHECK-LABEL: 'implied4_samesign'258; CHECK-NEXT: Determining loop execution counts for: @implied4_samesign259; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>260; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1261; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>262; CHECK-NEXT: Loop %header: Trip multiple is 1263;264entry:265 %cmp1 = icmp samesign uge i32 %n, -1266 %n.div.2 = sdiv i32 %n, 2267 call void @llvm.assume(i1 %cmp1)268 br label %header269 270header:271 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]272 %indvar.next = add i32 %indvar, 1273 %exitcond = icmp sge i32 %n.div.2, %indvar274 br i1 %exitcond, label %header, label %exit275 276exit:277 ret void278}279 280define void @implied4_neg(i32 %n) {281; Prove that (n s>= -2) =\=> (n / 2 s>= 0).282; CHECK-LABEL: 'implied4_neg'283; CHECK-NEXT: Determining loop execution counts for: @implied4_neg284; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)285; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824286; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)287; CHECK-NEXT: Loop %header: Trip multiple is 1288;289entry:290 %cmp1 = icmp sge i32 %n, -2291 %n.div.2 = sdiv i32 %n, 2292 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]293 br label %header294 295header:296 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]297 %indvar.next = add i32 %indvar, 1298 %exitcond = icmp sge i32 %n.div.2, %indvar299 br i1 %exitcond, label %header, label %exit300 301exit:302 ret void303}304 305define void @test_ext_01(i32 %n) nounwind {306; Prove that (n > 1) ===> (n / 2 > 0).307; CHECK-LABEL: 'test_ext_01'308; CHECK-NEXT: Determining loop execution counts for: @test_ext_01309; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (sext i32 %n.div.2 to i64))<nsw>310; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741822311; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (sext i32 %n.div.2 to i64))<nsw>312; CHECK-NEXT: Loop %header: Trip multiple is 1313;314entry:315 %cmp1 = icmp sgt i32 %n, 1316 %n.div.2 = sdiv i32 %n, 2317 %n.div.2.ext = sext i32 %n.div.2 to i64318 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]319 br label %header320 321header:322 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]323 %indvar.next = add i64 %indvar, 1324 %exitcond = icmp sgt i64 %n.div.2.ext, %indvar.next325 br i1 %exitcond, label %header, label %exit326 327exit:328 ret void329}330 331define void @test_ext_01neg(i32 %n) nounwind {332; Prove that (n > 0) =\=> (n / 2 > 0).333; CHECK-LABEL: 'test_ext_01neg'334; CHECK-NEXT: Determining loop execution counts for: @test_ext_01neg335; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax (sext i32 %n.div.2 to i64)))<nsw>336; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741822337; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax (sext i32 %n.div.2 to i64)))<nsw>338; CHECK-NEXT: Loop %header: Trip multiple is 1339;340entry:341 %cmp1 = icmp sgt i32 %n, 0342 %n.div.2 = sdiv i32 %n, 2343 %n.div.2.ext = sext i32 %n.div.2 to i64344 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]345 br label %header346 347header:348 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]349 %indvar.next = add i64 %indvar, 1350 %exitcond = icmp sgt i64 %n.div.2.ext, %indvar.next351 br i1 %exitcond, label %header, label %exit352 353exit:354 ret void355}356 357define void @test_ext_02(i32 %n) nounwind {358; Prove that (n >= 2) ===> (n / 2 > 0).359; CHECK-LABEL: 'test_ext_02'360; CHECK-NEXT: Determining loop execution counts for: @test_ext_02361; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (sext i32 %n.div.2 to i64))<nsw>362; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741822363; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (sext i32 %n.div.2 to i64))<nsw>364; CHECK-NEXT: Loop %header: Trip multiple is 1365;366entry:367 %cmp1 = icmp sge i32 %n, 2368 %n.div.2 = sdiv i32 %n, 2369 %n.div.2.ext = sext i32 %n.div.2 to i64370 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]371 br label %header372 373header:374 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]375 %indvar.next = add i64 %indvar, 1376 %exitcond = icmp sgt i64 %n.div.2.ext, %indvar.next377 br i1 %exitcond, label %header, label %exit378 379exit:380 ret void381}382 383define void @test_ext_02neg(i32 %n) nounwind {384; Prove that (n >= 1) =\=> (n / 2 > 0).385; CHECK-LABEL: 'test_ext_02neg'386; CHECK-NEXT: Determining loop execution counts for: @test_ext_02neg387; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax (sext i32 %n.div.2 to i64)))<nsw>388; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741822389; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax (sext i32 %n.div.2 to i64)))<nsw>390; CHECK-NEXT: Loop %header: Trip multiple is 1391;392entry:393 %cmp1 = icmp sge i32 %n, 1394 %n.div.2 = sdiv i32 %n, 2395 %n.div.2.ext = sext i32 %n.div.2 to i64396 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]397 br label %header398 399header:400 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]401 %indvar.next = add i64 %indvar, 1402 %exitcond = icmp sgt i64 %n.div.2.ext, %indvar.next403 br i1 %exitcond, label %header, label %exit404 405exit:406 ret void407}408 409define void @test_ext_03(i32 %n) nounwind {410; Prove that (n > -2) ===> (n / 2 >= 0).411; CHECK-LABEL: 'test_ext_03'412; CHECK-NEXT: Determining loop execution counts for: @test_ext_03413; CHECK-NEXT: Loop %header: backedge-taken count is (1 + (sext i32 %n.div.2 to i64))<nsw>414; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741824415; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + (sext i32 %n.div.2 to i64))<nsw>416; CHECK-NEXT: Loop %header: Trip multiple is 1417;418entry:419 %cmp1 = icmp sgt i32 %n, -2420 %n.div.2 = sdiv i32 %n, 2421 %n.div.2.ext = sext i32 %n.div.2 to i64422 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]423 br label %header424 425header:426 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]427 %indvar.next = add i64 %indvar, 1428 %exitcond = icmp sge i64 %n.div.2.ext, %indvar429 br i1 %exitcond, label %header, label %exit430 431exit:432 ret void433}434 435define void @test_ext_03neg(i32 %n) nounwind {436; Prove that (n > -3) =\=> (n / 2 >= 0).437; CHECK-LABEL: 'test_ext_03neg'438; CHECK-NEXT: Determining loop execution counts for: @test_ext_03neg439; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + (sext i32 %n.div.2 to i64))<nsw>)440; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741824441; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + (sext i32 %n.div.2 to i64))<nsw>)442; CHECK-NEXT: Loop %header: Trip multiple is 1443;444entry:445 %cmp1 = icmp sgt i32 %n, -3446 %n.div.2 = sdiv i32 %n, 2447 %n.div.2.ext = sext i32 %n.div.2 to i64448 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]449 br label %header450 451header:452 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]453 %indvar.next = add i64 %indvar, 1454 %exitcond = icmp sge i64 %n.div.2.ext, %indvar455 br i1 %exitcond, label %header, label %exit456 457exit:458 ret void459}460 461define void @test_ext_04(i32 %n) nounwind {462; Prove that (n >= -1) ===> (n / 2 >= 0).463; CHECK-LABEL: 'test_ext_04'464; CHECK-NEXT: Determining loop execution counts for: @test_ext_04465; CHECK-NEXT: Loop %header: backedge-taken count is (1 + (sext i32 %n.div.2 to i64))<nsw>466; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741824467; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + (sext i32 %n.div.2 to i64))<nsw>468; CHECK-NEXT: Loop %header: Trip multiple is 1469;470entry:471 %cmp1 = icmp sge i32 %n, -1472 %n.div.2 = sdiv i32 %n, 2473 %n.div.2.ext = sext i32 %n.div.2 to i64474 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]475 br label %header476 477header:478 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]479 %indvar.next = add i64 %indvar, 1480 %exitcond = icmp sge i64 %n.div.2.ext, %indvar481 br i1 %exitcond, label %header, label %exit482 483exit:484 ret void485}486 487define void @test_ext_04neg(i32 %n) nounwind {488; Prove that (n >= -2) =\=> (n / 2 >= 0).489; CHECK-LABEL: 'test_ext_04neg'490; CHECK-NEXT: Determining loop execution counts for: @test_ext_04neg491; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + (sext i32 %n.div.2 to i64))<nsw>)492; CHECK-NEXT: Loop %header: constant max backedge-taken count is i64 1073741824493; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + (sext i32 %n.div.2 to i64))<nsw>)494; CHECK-NEXT: Loop %header: Trip multiple is 1495;496entry:497 %cmp1 = icmp sge i32 %n, -2498 %n.div.2 = sdiv i32 %n, 2499 %n.div.2.ext = sext i32 %n.div.2 to i64500 call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]501 br label %header502 503header:504 %indvar = phi i64 [ %indvar.next, %header ], [ 0, %entry ]505 %indvar.next = add i64 %indvar, 1506 %exitcond = icmp sge i64 %n.div.2.ext, %indvar507 br i1 %exitcond, label %header, label %exit508 509exit:510 ret void511}512 513define void @swapped_predicate(i32 %n) {514; Prove that (n s>= 1) ===> (0 s>= -n / 2).515; CHECK-LABEL: 'swapped_predicate'516; CHECK-NEXT: Determining loop execution counts for: @swapped_predicate517; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nuw><nsw>518; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824519; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nuw><nsw>520; CHECK-NEXT: Loop %header: Trip multiple is 1521;522entry:523 %cmp1 = icmp sge i32 %n, 1524 %n.div.2 = sdiv i32 %n, 2525 call void @llvm.assume(i1 %cmp1)526 br label %header527 528header:529 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]530 %indvar.next = add i32 %indvar, 1531 %minus.indvar = sub nsw i32 0, %indvar532 %minus.n.div.2 = sub nsw i32 0, %n.div.2533 %exitcond = icmp sge i32 %minus.indvar, %minus.n.div.2534 br i1 %exitcond, label %header, label %exit535 536exit:537 ret void538}539 540define void @swapped_predicate_neg(i32 %n) {541; Prove that (n s>= 1) =\=> (-n / 2 s>= 0).542; CHECK-LABEL: 'swapped_predicate_neg'543; CHECK-NEXT: Determining loop execution counts for: @swapped_predicate_neg544; CHECK-NEXT: Loop %header: Unpredictable backedge-taken count.545; CHECK-NEXT: Loop %header: Unpredictable constant max backedge-taken count.546; CHECK-NEXT: Loop %header: Unpredictable symbolic max backedge-taken count.547;548entry:549 %cmp1 = icmp sge i32 %n, 1550 %n.div.2 = sdiv i32 %n, 2551 call void @llvm.assume(i1 %cmp1)552 br label %header553 554header:555 %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]556 %indvar.next = add i32 %indvar, 1557 %minus.indvar = sub nsw i32 0, %indvar558 %minus.n.div.2 = sub nsw i32 0, %n.div.2559 %exitcond = icmp sge i32 %minus.n.div.2, %minus.indvar560 br i1 %exitcond, label %header, label %exit561 562exit:563 ret void564}565