brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.0 KiB · ad1c723 Raw
440 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4; NOTE: The custom datalayout defines i32 to be 64 bit aligned.5 6target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i32:64:64-f80:128-n8:16:32:64-S128"7 8declare void @use(ptr)9declare i1 @cond()10 11define void @test_monotonic_ptr_iv_inc_1_element_types_with_different_alloc_type_sizes(ptr %start, i16 %len) {12; CHECK-LABEL: @test_monotonic_ptr_iv_inc_1_element_types_with_different_alloc_type_sizes(13; CHECK-NEXT:  entry:14; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds float, ptr [[START:%.*]], i16 [[LEN:%.*]]15; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 016; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]17; CHECK:       loop.ph:18; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]19; CHECK:       loop.header:20; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]21; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]22; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]23; CHECK:       for.body:24; CHECK-NEXT:    [[T_2:%.*]] = icmp ult ptr [[PTR_IV]], [[UPPER]]25; CHECK-NEXT:    [[AND:%.*]] = and i1 true, [[T_2]]26; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]27; CHECK:       loop.latch:28; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])29; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds i32, ptr [[PTR_IV]], i16 130; CHECK-NEXT:    br label [[LOOP_HEADER]]31; CHECK:       exit:32; CHECK-NEXT:    ret void33;34entry:35  %upper = getelementptr inbounds float, ptr %start, i16 %len36  %len.neg = icmp slt i16 %len, 037  br i1 %len.neg, label %exit, label %loop.ph38 39loop.ph:40  br label %loop.header41 42loop.header:43  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]44  %c = icmp eq ptr %ptr.iv, %upper45  br i1 %c, label %exit, label %for.body46 47for.body:48  %t.1 = icmp uge ptr %ptr.iv, %start49  %t.2 = icmp ult ptr %ptr.iv, %upper50  %and = and i1 %t.1, %t.251  br i1 %and, label %loop.latch, label %exit52 53loop.latch:54  call void @use(ptr %ptr.iv)55  %ptr.iv.next = getelementptr inbounds i32, ptr %ptr.iv, i16 156  br label %loop.header57 58exit:59  ret void60}61 62define void @test_monotonic_ptr_iv_inc_2_element_types_with_different_alloc_type_sizes(ptr %start, i16 %len) {63; CHECK-LABEL: @test_monotonic_ptr_iv_inc_2_element_types_with_different_alloc_type_sizes(64; CHECK-NEXT:  entry:65; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[START:%.*]], i16 [[LEN:%.*]]66; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 067; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]68; CHECK:       loop.ph:69; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]70; CHECK:       loop.header:71; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]72; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]73; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]74; CHECK:       for.body:75; CHECK-NEXT:    [[AND:%.*]] = and i1 true, true76; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]77; CHECK:       loop.latch:78; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])79; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds float, ptr [[PTR_IV]], i16 180; CHECK-NEXT:    br label [[LOOP_HEADER]]81; CHECK:       exit:82; CHECK-NEXT:    ret void83;84entry:85  %upper = getelementptr inbounds i32, ptr %start, i16 %len86  %len.neg = icmp slt i16 %len, 087  br i1 %len.neg, label %exit, label %loop.ph88 89loop.ph:90  br label %loop.header91 92loop.header:93  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]94  %c = icmp eq ptr %ptr.iv, %upper95  br i1 %c, label %exit, label %for.body96 97for.body:98  %t.1 = icmp uge ptr %ptr.iv, %start99  %t.2 = icmp ult ptr %ptr.iv, %upper100  %and = and i1 %t.1, %t.2101  br i1 %and, label %loop.latch, label %exit102 103loop.latch:104  call void @use(ptr %ptr.iv)105  %ptr.iv.next = getelementptr inbounds float, ptr %ptr.iv, i16 1106  br label %loop.header107 108exit:109  ret void110}111 112define void @test_monotonic_ptr_iv_inc_1_different_element_types_with_same_alloc_type_sizes(ptr %start, i16 %len) {113; CHECK-LABEL: @test_monotonic_ptr_iv_inc_1_different_element_types_with_same_alloc_type_sizes(114; CHECK-NEXT:  entry:115; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i5, ptr [[START:%.*]], i16 [[LEN:%.*]]116; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 0117; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]118; CHECK:       loop.ph:119; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]120; CHECK:       loop.header:121; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]122; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]123; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]124; CHECK:       for.body:125; CHECK-NEXT:    [[AND:%.*]] = and i1 true, true126; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]127; CHECK:       loop.latch:128; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])129; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds i7, ptr [[PTR_IV]], i16 1130; CHECK-NEXT:    br label [[LOOP_HEADER]]131; CHECK:       exit:132; CHECK-NEXT:    ret void133;134entry:135  %upper = getelementptr inbounds i5, ptr %start, i16 %len136  %len.neg = icmp slt i16 %len, 0137  br i1 %len.neg, label %exit, label %loop.ph138 139loop.ph:140  br label %loop.header141 142loop.header:143  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]144  %c = icmp eq ptr %ptr.iv, %upper145  br i1 %c, label %exit, label %for.body146 147for.body:148  %t.1 = icmp uge ptr %ptr.iv, %start149  %t.2 = icmp ult ptr %ptr.iv, %upper150  %and = and i1 %t.1, %t.2151  br i1 %and, label %loop.latch, label %exit152 153loop.latch:154  call void @use(ptr %ptr.iv)155  %ptr.iv.next = getelementptr inbounds i7, ptr %ptr.iv, i16 1156  br label %loop.header157 158exit:159  ret void160}161 162define void @test_monotonic_ptr_iv_inc_2_different_element_types_with_same_alloc_type_sizes(ptr %start, i16 %len) {163; CHECK-LABEL: @test_monotonic_ptr_iv_inc_2_different_element_types_with_same_alloc_type_sizes(164; CHECK-NEXT:  entry:165; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i31, ptr [[START:%.*]], i16 [[LEN:%.*]]166; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 0167; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]168; CHECK:       loop.ph:169; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]170; CHECK:       loop.header:171; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]172; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]173; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]174; CHECK:       for.body:175; CHECK-NEXT:    [[AND:%.*]] = and i1 true, true176; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]177; CHECK:       loop.latch:178; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])179; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds i30, ptr [[PTR_IV]], i16 1180; CHECK-NEXT:    br label [[LOOP_HEADER]]181; CHECK:       exit:182; CHECK-NEXT:    ret void183;184entry:185  %upper = getelementptr inbounds i31, ptr %start, i16 %len186  %len.neg = icmp slt i16 %len, 0187  br i1 %len.neg, label %exit, label %loop.ph188 189loop.ph:190  br label %loop.header191 192loop.header:193  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]194  %c = icmp eq ptr %ptr.iv, %upper195  br i1 %c, label %exit, label %for.body196 197for.body:198  %t.1 = icmp uge ptr %ptr.iv, %start199  %t.2 = icmp ult ptr %ptr.iv, %upper200  %and = and i1 %t.1, %t.2201  br i1 %and, label %loop.latch, label %exit202 203loop.latch:204  call void @use(ptr %ptr.iv)205  %ptr.iv.next = getelementptr inbounds i30, ptr %ptr.iv, i16 1206  br label %loop.header207 208exit:209  ret void210}211 212define void @test_monotonic_ptr_iv_inc_1_element_types_with_different_alloc_type_sizes_with_early_exit(ptr %start, i16 %len) {213; CHECK-LABEL: @test_monotonic_ptr_iv_inc_1_element_types_with_different_alloc_type_sizes_with_early_exit(214; CHECK-NEXT:  entry:215; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds float, ptr [[START:%.*]], i16 [[LEN:%.*]]216; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 0217; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]218; CHECK:       loop.ph:219; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]220; CHECK:       loop.header:221; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]222; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]223; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]224; CHECK:       for.body:225; CHECK-NEXT:    [[C_1:%.*]] = call i1 @cond()226; CHECK-NEXT:    br i1 [[C_1]], label [[LOOP_NEXT:%.*]], label [[EXIT]]227; CHECK:       loop.next:228; CHECK-NEXT:    [[T_2:%.*]] = icmp ult ptr [[PTR_IV]], [[UPPER]]229; CHECK-NEXT:    [[AND:%.*]] = and i1 true, [[T_2]]230; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]231; CHECK:       loop.latch:232; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])233; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds i32, ptr [[PTR_IV]], i16 1234; CHECK-NEXT:    br label [[LOOP_HEADER]]235; CHECK:       exit:236; CHECK-NEXT:    ret void237;238entry:239  %upper = getelementptr inbounds float, ptr %start, i16 %len240  %len.neg = icmp slt i16 %len, 0241  br i1 %len.neg, label %exit, label %loop.ph242 243loop.ph:244  br label %loop.header245 246loop.header:247  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]248  %c = icmp eq ptr %ptr.iv, %upper249  br i1 %c, label %exit, label %for.body250 251for.body:252  %c.1 = call i1 @cond()253  br i1 %c.1, label %loop.next, label %exit254 255loop.next:256  %t.1 = icmp uge ptr %ptr.iv, %start257  %t.2 = icmp ult ptr %ptr.iv, %upper258  %and = and i1 %t.1, %t.2259  br i1 %and, label %loop.latch, label %exit260 261loop.latch:262  call void @use(ptr %ptr.iv)263  %ptr.iv.next = getelementptr inbounds i32, ptr %ptr.iv, i16 1264  br label %loop.header265 266exit:267  ret void268}269 270define void @test_monotonic_ptr_iv_inc_2_element_types_with_different_alloc_type_sizes_with_early_exit(ptr %start, i16 %len) {271; CHECK-LABEL: @test_monotonic_ptr_iv_inc_2_element_types_with_different_alloc_type_sizes_with_early_exit(272; CHECK-NEXT:  entry:273; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[START:%.*]], i16 [[LEN:%.*]]274; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 0275; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]276; CHECK:       loop.ph:277; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]278; CHECK:       loop.header:279; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]280; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]281; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]282; CHECK:       for.body:283; CHECK-NEXT:    [[C_1:%.*]] = call i1 @cond()284; CHECK-NEXT:    br i1 [[C_1]], label [[LOOP_NEXT:%.*]], label [[EXIT]]285; CHECK:       loop.next:286; CHECK-NEXT:    [[AND:%.*]] = and i1 true, true287; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]288; CHECK:       loop.latch:289; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])290; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds float, ptr [[PTR_IV]], i16 1291; CHECK-NEXT:    br label [[LOOP_HEADER]]292; CHECK:       exit:293; CHECK-NEXT:    ret void294;295entry:296  %upper = getelementptr inbounds i32, ptr %start, i16 %len297  %len.neg = icmp slt i16 %len, 0298  br i1 %len.neg, label %exit, label %loop.ph299 300loop.ph:301  br label %loop.header302 303loop.header:304  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]305  %c = icmp eq ptr %ptr.iv, %upper306  br i1 %c, label %exit, label %for.body307 308for.body:309  %c.1 = call i1 @cond()310  br i1 %c.1, label %loop.next, label %exit311 312loop.next:313  %t.1 = icmp uge ptr %ptr.iv, %start314  %t.2 = icmp ult ptr %ptr.iv, %upper315  %and = and i1 %t.1, %t.2316  br i1 %and, label %loop.latch, label %exit317 318loop.latch:319  call void @use(ptr %ptr.iv)320  %ptr.iv.next = getelementptr inbounds float, ptr %ptr.iv, i16 1321  br label %loop.header322 323exit:324  ret void325}326 327define void @test_monotonic_ptr_iv_inc_1_different_element_types_with_same_alloc_type_sizes_with_early_exit(ptr %start, i16 %len) {328; CHECK-LABEL: @test_monotonic_ptr_iv_inc_1_different_element_types_with_same_alloc_type_sizes_with_early_exit(329; CHECK-NEXT:  entry:330; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i5, ptr [[START:%.*]], i16 [[LEN:%.*]]331; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 0332; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]333; CHECK:       loop.ph:334; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]335; CHECK:       loop.header:336; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]337; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]338; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]339; CHECK:       for.body:340; CHECK-NEXT:    [[C_1:%.*]] = call i1 @cond()341; CHECK-NEXT:    br i1 [[C_1]], label [[LOOP_NEXT:%.*]], label [[EXIT]]342; CHECK:       loop.next:343; CHECK-NEXT:    [[AND:%.*]] = and i1 true, true344; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]345; CHECK:       loop.latch:346; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])347; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds i7, ptr [[PTR_IV]], i16 1348; CHECK-NEXT:    br label [[LOOP_HEADER]]349; CHECK:       exit:350; CHECK-NEXT:    ret void351;352entry:353  %upper = getelementptr inbounds i5, ptr %start, i16 %len354  %len.neg = icmp slt i16 %len, 0355  br i1 %len.neg, label %exit, label %loop.ph356 357loop.ph:358  br label %loop.header359 360loop.header:361  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]362  %c = icmp eq ptr %ptr.iv, %upper363  br i1 %c, label %exit, label %for.body364 365for.body:366  %c.1 = call i1 @cond()367  br i1 %c.1, label %loop.next, label %exit368 369loop.next:370  %t.1 = icmp uge ptr %ptr.iv, %start371  %t.2 = icmp ult ptr %ptr.iv, %upper372  %and = and i1 %t.1, %t.2373  br i1 %and, label %loop.latch, label %exit374 375loop.latch:376  call void @use(ptr %ptr.iv)377  %ptr.iv.next = getelementptr inbounds i7, ptr %ptr.iv, i16 1378  br label %loop.header379 380exit:381  ret void382}383 384define void @test_monotonic_ptr_iv_inc_2_different_element_types_with_same_alloc_type_sizes_with_early_exit(ptr %start, i16 %len) {385; CHECK-LABEL: @test_monotonic_ptr_iv_inc_2_different_element_types_with_same_alloc_type_sizes_with_early_exit(386; CHECK-NEXT:  entry:387; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i31, ptr [[START:%.*]], i16 [[LEN:%.*]]388; CHECK-NEXT:    [[LEN_NEG:%.*]] = icmp slt i16 [[LEN]], 0389; CHECK-NEXT:    br i1 [[LEN_NEG]], label [[EXIT:%.*]], label [[LOOP_PH:%.*]]390; CHECK:       loop.ph:391; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]392; CHECK:       loop.header:393; CHECK-NEXT:    [[PTR_IV:%.*]] = phi ptr [ [[START]], [[LOOP_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]394; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[PTR_IV]], [[UPPER]]395; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]396; CHECK:       for.body:397; CHECK-NEXT:    [[C_1:%.*]] = call i1 @cond()398; CHECK-NEXT:    br i1 [[C_1]], label [[LOOP_NEXT:%.*]], label [[EXIT]]399; CHECK:       loop.next:400; CHECK-NEXT:    [[AND:%.*]] = and i1 true, true401; CHECK-NEXT:    br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]402; CHECK:       loop.latch:403; CHECK-NEXT:    call void @use(ptr [[PTR_IV]])404; CHECK-NEXT:    [[PTR_IV_NEXT]] = getelementptr inbounds i30, ptr [[PTR_IV]], i16 1405; CHECK-NEXT:    br label [[LOOP_HEADER]]406; CHECK:       exit:407; CHECK-NEXT:    ret void408;409entry:410  %upper = getelementptr inbounds i31, ptr %start, i16 %len411  %len.neg = icmp slt i16 %len, 0412  br i1 %len.neg, label %exit, label %loop.ph413 414loop.ph:415  br label %loop.header416 417loop.header:418  %ptr.iv = phi ptr [ %start, %loop.ph ], [ %ptr.iv.next, %loop.latch ]419  %c = icmp eq ptr %ptr.iv, %upper420  br i1 %c, label %exit, label %for.body421 422for.body:423  %c.1 = call i1 @cond()424  br i1 %c.1, label %loop.next, label %exit425 426loop.next:427  %t.1 = icmp uge ptr %ptr.iv, %start428  %t.2 = icmp ult ptr %ptr.iv, %upper429  %and = and i1 %t.1, %t.2430  br i1 %and, label %loop.latch, label %exit431 432loop.latch:433  call void @use(ptr %ptr.iv)434  %ptr.iv.next = getelementptr inbounds i30, ptr %ptr.iv, i16 1435  br label %loop.header436 437exit:438  ret void439}440