brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.5 KiB · 50b968d Raw
575 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes=infer-alignment -S %s | FileCheck %s3 4target datalayout = "p1:64:64:64:32"5 6declare i1 @cond()7 8define void @recur_i8_128(ptr align 128 %dst) {9; CHECK-LABEL: define void @recur_i8_128(10; CHECK-SAME: ptr align 128 [[DST:%.*]]) {11; CHECK-NEXT:  [[ENTRY:.*]]:12; CHECK-NEXT:    br label %[[LOOP:.*]]13; CHECK:       [[LOOP]]:14; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]15; CHECK-NEXT:    store i64 0, ptr [[IV]], align 116; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 12817; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()18; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]19; CHECK:       [[EXIT]]:20; CHECK-NEXT:    ret void21;22entry:23  br label %loop24 25loop:26  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]27  store i64 0, ptr %iv, align 128  %iv.next = getelementptr nusw i8, ptr %iv, i64 12829  %c = call i1 @cond()30  br i1 %c, label %loop, label %exit31 32exit:33  ret void34}35 36define void @recur_i8_128_no_nusw(ptr align 128 %dst) {37; CHECK-LABEL: define void @recur_i8_128_no_nusw(38; CHECK-SAME: ptr align 128 [[DST:%.*]]) {39; CHECK-NEXT:  [[ENTRY:.*]]:40; CHECK-NEXT:    br label %[[LOOP:.*]]41; CHECK:       [[LOOP]]:42; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]43; CHECK-NEXT:    store i64 0, ptr [[IV]], align 144; CHECK-NEXT:    [[IV_NEXT]] = getelementptr i8, ptr [[IV]], i64 12845; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()46; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]47; CHECK:       [[EXIT]]:48; CHECK-NEXT:    ret void49;50entry:51  br label %loop52 53loop:54  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]55  store i64 0, ptr %iv, align 156  %iv.next = getelementptr i8, ptr %iv, i64 12857  %c = call i1 @cond()58  br i1 %c, label %loop, label %exit59 60exit:61  ret void62}63 64define void @recur_i8_64(ptr align 128 %dst) {65; CHECK-LABEL: define void @recur_i8_64(66; CHECK-SAME: ptr align 128 [[DST:%.*]]) {67; CHECK-NEXT:  [[ENTRY:.*]]:68; CHECK-NEXT:    br label %[[LOOP:.*]]69; CHECK:       [[LOOP]]:70; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]71; CHECK-NEXT:    store i64 0, ptr [[IV]], align 172; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 6473; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()74; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]75; CHECK:       [[EXIT]]:76; CHECK-NEXT:    ret void77;78entry:79  br label %loop80 81loop:82  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]83  store i64 0, ptr %iv, align 184  %iv.next = getelementptr nusw i8, ptr %iv, i64 6485  %c = call i1 @cond()86  br i1 %c, label %loop, label %exit87 88exit:89  ret void90}91 92define void @recur_i8_63(ptr align 128 %dst) {93; CHECK-LABEL: define void @recur_i8_63(94; CHECK-SAME: ptr align 128 [[DST:%.*]]) {95; CHECK-NEXT:  [[ENTRY:.*]]:96; CHECK-NEXT:    br label %[[LOOP:.*]]97; CHECK:       [[LOOP]]:98; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]99; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1100; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 63101; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()102; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]103; CHECK:       [[EXIT]]:104; CHECK-NEXT:    ret void105;106entry:107  br label %loop108 109loop:110  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]111  store i64 0, ptr %iv, align 1112  %iv.next = getelementptr nusw i8, ptr %iv, i64 63113  %c = call i1 @cond()114  br i1 %c, label %loop, label %exit115 116exit:117  ret void118}119 120define void @recur_i8_32(ptr align 128 %dst) {121; CHECK-LABEL: define void @recur_i8_32(122; CHECK-SAME: ptr align 128 [[DST:%.*]]) {123; CHECK-NEXT:  [[ENTRY:.*]]:124; CHECK-NEXT:    br label %[[LOOP:.*]]125; CHECK:       [[LOOP]]:126; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]127; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1128; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 32129; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()130; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]131; CHECK:       [[EXIT]]:132; CHECK-NEXT:    ret void133;134entry:135  br label %loop136 137loop:138  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]139  store i64 0, ptr %iv, align 1140  %iv.next = getelementptr nusw i8, ptr %iv, i64 32141  %c = call i1 @cond()142  br i1 %c, label %loop, label %exit143 144exit:145  ret void146}147 148define void @recur_i8_16(ptr align 128 %dst) {149; CHECK-LABEL: define void @recur_i8_16(150; CHECK-SAME: ptr align 128 [[DST:%.*]]) {151; CHECK-NEXT:  [[ENTRY:.*]]:152; CHECK-NEXT:    br label %[[LOOP:.*]]153; CHECK:       [[LOOP]]:154; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]155; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1156; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 16157; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()158; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]159; CHECK:       [[EXIT]]:160; CHECK-NEXT:    ret void161;162entry:163  br label %loop164 165loop:166  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]167  store i64 0, ptr %iv, align 1168  %iv.next = getelementptr nusw i8, ptr %iv, i64 16169  %c = call i1 @cond()170  br i1 %c, label %loop, label %exit171 172exit:173  ret void174}175 176define void @recur_i8_8(ptr align 128 %dst) {177; CHECK-LABEL: define void @recur_i8_8(178; CHECK-SAME: ptr align 128 [[DST:%.*]]) {179; CHECK-NEXT:  [[ENTRY:.*]]:180; CHECK-NEXT:    br label %[[LOOP:.*]]181; CHECK:       [[LOOP]]:182; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]183; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1184; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 8185; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()186; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]187; CHECK:       [[EXIT]]:188; CHECK-NEXT:    ret void189;190entry:191  br label %loop192 193loop:194  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]195  store i64 0, ptr %iv, align 1196  %iv.next = getelementptr nusw i8, ptr %iv, i64 8197  %c = call i1 @cond()198  br i1 %c, label %loop, label %exit199 200exit:201  ret void202}203 204define void @recur_i8_4(ptr align 128 %dst) {205; CHECK-LABEL: define void @recur_i8_4(206; CHECK-SAME: ptr align 128 [[DST:%.*]]) {207; CHECK-NEXT:  [[ENTRY:.*]]:208; CHECK-NEXT:    br label %[[LOOP:.*]]209; CHECK:       [[LOOP]]:210; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]211; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1212; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 4213; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()214; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]215; CHECK:       [[EXIT]]:216; CHECK-NEXT:    ret void217;218entry:219  br label %loop220 221loop:222  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]223  store i64 0, ptr %iv, align 1224  %iv.next = getelementptr nusw i8, ptr %iv, i64 4225  %c = call i1 @cond()226  br i1 %c, label %loop, label %exit227 228exit:229  ret void230}231 232define void @recur_i8_2(ptr align 128 %dst) {233; CHECK-LABEL: define void @recur_i8_2(234; CHECK-SAME: ptr align 128 [[DST:%.*]]) {235; CHECK-NEXT:  [[ENTRY:.*]]:236; CHECK-NEXT:    br label %[[LOOP:.*]]237; CHECK:       [[LOOP]]:238; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]239; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1240; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 2241; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()242; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]243; CHECK:       [[EXIT]]:244; CHECK-NEXT:    ret void245;246entry:247  br label %loop248 249loop:250  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]251  store i64 0, ptr %iv, align 1252  %iv.next = getelementptr nusw i8, ptr %iv, i64 2253  %c = call i1 @cond()254  br i1 %c, label %loop, label %exit255 256exit:257  ret void258}259 260define void @recur_i8_1(ptr align 128 %dst) {261; CHECK-LABEL: define void @recur_i8_1(262; CHECK-SAME: ptr align 128 [[DST:%.*]]) {263; CHECK-NEXT:  [[ENTRY:.*]]:264; CHECK-NEXT:    br label %[[LOOP:.*]]265; CHECK:       [[LOOP]]:266; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]267; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1268; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 1269; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()270; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]271; CHECK:       [[EXIT]]:272; CHECK-NEXT:    ret void273;274entry:275  br label %loop276 277loop:278  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]279  store i64 0, ptr %iv, align 1280  %iv.next = getelementptr nusw i8, ptr %iv, i64 1281  %c = call i1 @cond()282  br i1 %c, label %loop, label %exit283 284exit:285  ret void286}287 288define void @recur_i8_unknown_step(ptr align 128 %dst, i64 %off) {289; CHECK-LABEL: define void @recur_i8_unknown_step(290; CHECK-SAME: ptr align 128 [[DST:%.*]], i64 [[OFF:%.*]]) {291; CHECK-NEXT:  [[ENTRY:.*]]:292; CHECK-NEXT:    br label %[[LOOP:.*]]293; CHECK:       [[LOOP]]:294; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]295; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1296; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 [[OFF]]297; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()298; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]299; CHECK:       [[EXIT]]:300; CHECK-NEXT:    ret void301;302entry:303  br label %loop304 305loop:306  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]307  store i64 0, ptr %iv, align 1308  %iv.next = getelementptr nusw i8, ptr %iv, i64 %off309  %c = call i1 @cond()310  br i1 %c, label %loop, label %exit311 312exit:313  ret void314}315 316define void @recur_i8_step_known_multiple(ptr align 128 %dst, i64 %off) {317; CHECK-LABEL: define void @recur_i8_step_known_multiple(318; CHECK-SAME: ptr align 128 [[DST:%.*]], i64 [[OFF:%.*]]) {319; CHECK-NEXT:  [[ENTRY:.*]]:320; CHECK-NEXT:    [[UREM:%.*]] = urem i64 [[OFF]], 128321; CHECK-NEXT:    [[C_UREM:%.*]] = icmp eq i64 [[UREM]], 0322; CHECK-NEXT:    [[C_POS:%.*]] = icmp sge i64 [[OFF]], 0323; CHECK-NEXT:    [[AND:%.*]] = and i1 [[C_UREM]], [[C_POS]]324; CHECK-NEXT:    br i1 [[AND]], label %[[LOOP:.*]], label %[[EXIT:.*]]325; CHECK:       [[LOOP]]:326; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]327; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1328; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 [[OFF]]329; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()330; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT]]331; CHECK:       [[EXIT]]:332; CHECK-NEXT:    ret void333;334entry:335  %urem = urem i64 %off, 128336  %c.urem = icmp eq i64 %urem, 0337  %c.pos = icmp sge i64 %off, 0338  %and = and i1 %c.urem, %c.pos339  br i1 %and, label %loop, label %exit340 341loop:342  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]343  store i64 0, ptr %iv, align 1344  %iv.next = getelementptr nusw i8, ptr %iv, i64 %off345  %c = call i1 @cond()346  br i1 %c, label %loop, label %exit347 348exit:349  ret void350}351 352define void @recur_i8_i16_128(ptr align 128 %dst) {353; CHECK-LABEL: define void @recur_i8_i16_128(354; CHECK-SAME: ptr align 128 [[DST:%.*]]) {355; CHECK-NEXT:  [[ENTRY:.*]]:356; CHECK-NEXT:    br label %[[LOOP:.*]]357; CHECK:       [[LOOP]]:358; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]359; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1360; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i16 128361; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()362; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]363; CHECK:       [[EXIT]]:364; CHECK-NEXT:    ret void365;366entry:367  br label %loop368 369loop:370  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]371  store i64 0, ptr %iv, align 1372  %iv.next = getelementptr nusw i8, ptr %iv, i16 128373  %c = call i1 @cond()374  br i1 %c, label %loop, label %exit375 376exit:377  ret void378}379 380define void @recur_i8_i8_132(ptr align 128 %dst) {381; CHECK-LABEL: define void @recur_i8_i8_132(382; CHECK-SAME: ptr align 128 [[DST:%.*]]) {383; CHECK-NEXT:  [[ENTRY:.*]]:384; CHECK-NEXT:    br label %[[LOOP:.*]]385; CHECK:       [[LOOP]]:386; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]387; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1388; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i8 -124389; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()390; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]391; CHECK:       [[EXIT]]:392; CHECK-NEXT:    ret void393;394entry:395  br label %loop396 397loop:398  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]399  store i64 0, ptr %iv, align 1400  %iv.next = getelementptr nusw i8, ptr %iv, i8 132401  %c = call i1 @cond()402  br i1 %c, label %loop, label %exit403 404exit:405  ret void406}407 408define void @recur_i32_4(ptr align 128 %dst) {409; CHECK-LABEL: define void @recur_i32_4(410; CHECK-SAME: ptr align 128 [[DST:%.*]]) {411; CHECK-NEXT:  [[ENTRY:.*]]:412; CHECK-NEXT:    br label %[[LOOP:.*]]413; CHECK:       [[LOOP]]:414; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]415; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1416; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i32, ptr [[IV]], i64 4417; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()418; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]419; CHECK:       [[EXIT]]:420; CHECK-NEXT:    ret void421;422entry:423  br label %loop424 425loop:426  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]427  store i64 0, ptr %iv, align 1428  %iv.next = getelementptr nusw i32, ptr %iv, i64 4429  %c = call i1 @cond()430  br i1 %c, label %loop, label %exit431 432exit:433  ret void434}435 436define void @recur_i32_3(ptr align 128 %dst) {437; CHECK-LABEL: define void @recur_i32_3(438; CHECK-SAME: ptr align 128 [[DST:%.*]]) {439; CHECK-NEXT:  [[ENTRY:.*]]:440; CHECK-NEXT:    br label %[[LOOP:.*]]441; CHECK:       [[LOOP]]:442; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]443; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1444; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i32, ptr [[IV]], i64 4445; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()446; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]447; CHECK:       [[EXIT]]:448; CHECK-NEXT:    ret void449;450entry:451  br label %loop452 453loop:454  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]455  store i64 0, ptr %iv, align 1456  %iv.next = getelementptr nusw i32, ptr %iv, i64 4457  %c = call i1 @cond()458  br i1 %c, label %loop, label %exit459 460exit:461  ret void462}463 464define void @recur_i8_neg_128(ptr align 128 %dst) {465; CHECK-LABEL: define void @recur_i8_neg_128(466; CHECK-SAME: ptr align 128 [[DST:%.*]]) {467; CHECK-NEXT:  [[ENTRY:.*]]:468; CHECK-NEXT:    br label %[[LOOP:.*]]469; CHECK:       [[LOOP]]:470; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]471; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1472; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 -128473; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()474; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]475; CHECK:       [[EXIT]]:476; CHECK-NEXT:    ret void477;478entry:479  br label %loop480 481loop:482  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]483  store i64 0, ptr %iv, align 1484  %iv.next = getelementptr nusw i8, ptr %iv, i64 -128485  %c = call i1 @cond()486  br i1 %c, label %loop, label %exit487 488exit:489  ret void490}491 492define void @recur_i8_neg64(ptr align 128 %dst) {493; CHECK-LABEL: define void @recur_i8_neg64(494; CHECK-SAME: ptr align 128 [[DST:%.*]]) {495; CHECK-NEXT:  [[ENTRY:.*]]:496; CHECK-NEXT:    br label %[[LOOP:.*]]497; CHECK:       [[LOOP]]:498; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]499; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1500; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 -64501; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()502; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]503; CHECK:       [[EXIT]]:504; CHECK-NEXT:    ret void505;506entry:507  br label %loop508 509loop:510  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]511  store i64 0, ptr %iv, align 1512  %iv.next = getelementptr nusw i8, ptr %iv, i64 -64513  %c = call i1 @cond()514  br i1 %c, label %loop, label %exit515 516exit:517  ret void518}519 520define void @recur_i8_neg_63(ptr align 128 %dst) {521; CHECK-LABEL: define void @recur_i8_neg_63(522; CHECK-SAME: ptr align 128 [[DST:%.*]]) {523; CHECK-NEXT:  [[ENTRY:.*]]:524; CHECK-NEXT:    br label %[[LOOP:.*]]525; CHECK:       [[LOOP]]:526; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]527; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1528; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 -63529; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()530; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]531; CHECK:       [[EXIT]]:532; CHECK-NEXT:    ret void533;534entry:535  br label %loop536 537loop:538  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]539  store i64 0, ptr %iv, align 1540  %iv.next = getelementptr nusw i8, ptr %iv, i64 -63541  %c = call i1 @cond()542  br i1 %c, label %loop, label %exit543 544exit:545  ret void546}547 548define void @recur_i8_neg_32(ptr align 128 %dst) {549; CHECK-LABEL: define void @recur_i8_neg_32(550; CHECK-SAME: ptr align 128 [[DST:%.*]]) {551; CHECK-NEXT:  [[ENTRY:.*]]:552; CHECK-NEXT:    br label %[[LOOP:.*]]553; CHECK:       [[LOOP]]:554; CHECK-NEXT:    [[IV:%.*]] = phi ptr [ [[DST]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]555; CHECK-NEXT:    store i64 0, ptr [[IV]], align 1556; CHECK-NEXT:    [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 -32557; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()558; CHECK-NEXT:    br i1 [[C]], label %[[LOOP]], label %[[EXIT:.*]]559; CHECK:       [[EXIT]]:560; CHECK-NEXT:    ret void561;562entry:563  br label %loop564 565loop:566  %iv = phi ptr [ %dst, %entry ], [ %iv.next, %loop ]567  store i64 0, ptr %iv, align 1568  %iv.next = getelementptr nusw i8, ptr %iv, i64 -32569  %c = call i1 @cond()570  br i1 %c, label %loop, label %exit571 572exit:573  ret void574}575