brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.4 KiB · 2f57dc6 Raw
256 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine  -S | FileCheck %s3 4define void @test1(ptr %a, ptr readnone %a_end, ptr %b.i64) {5; CHECK-LABEL: @test1(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]8; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]9; CHECK:       for.body.preheader:10; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_I64:%.*]], align 811; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to ptr12; CHECK-NEXT:    br label [[FOR_BODY:%.*]]13; CHECK:       for.body:14; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]15; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]16; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_PTR]], align 417; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+0118; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 419; CHECK-NEXT:    [[ADD]] = getelementptr inbounds nuw i8, ptr [[B_ADDR_02_PTR]], i64 420; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds nuw i8, ptr [[A_ADDR_03]], i64 421; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]22; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]23; CHECK:       for.end:24; CHECK-NEXT:    ret void25;26entry:27  %cmp1 = icmp ult ptr %a, %a_end28  br i1 %cmp1, label %for.body.preheader, label %for.end29 30for.body.preheader:                               ; preds = %entry31  %b = load i64, ptr %b.i64, align 832  br label %for.body33 34for.body:                                         ; preds = %for.body, %for.body.preheader35  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]36  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]37 38 39  %tmp = inttoptr i64 %b.addr.02 to ptr40  %i1 = load float, ptr %tmp, align 441  %mul.i = fmul float %i1, 4.200000e+0142  store float %mul.i, ptr %a.addr.03, align 443  %add = getelementptr inbounds float, ptr %tmp, i64 144  %add.int = ptrtoint ptr %add to i6445  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 146  %cmp = icmp ult ptr %incdec.ptr, %a_end47  br i1 %cmp, label %for.body, label %for.end48 49for.end:                                          ; preds = %for.body, %entry50  ret void51}52 53define void @test1_neg(ptr %a, ptr readnone %a_end, ptr %b.i64) {54; CHECK-LABEL: @test1_neg(55; CHECK-NEXT:  entry:56; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]57; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]58; CHECK:       for.body.preheader:59; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_I64:%.*]], align 860; CHECK-NEXT:    [[TMP0:%.*]] = inttoptr i64 [[B]] to ptr61; CHECK-NEXT:    br label [[FOR_BODY:%.*]]62; CHECK:       for.body:63; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[BB:%.*]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]64; CHECK-NEXT:    [[B_ADDR_02:%.*]] = phi ptr [ [[ADD:%.*]], [[BB]] ], [ [[TMP0]], [[FOR_BODY_PREHEADER]] ]65; CHECK-NEXT:    [[PTRCMP:%.*]] = icmp ult ptr [[B_ADDR_02]], [[A_END]]66; CHECK-NEXT:    br i1 [[PTRCMP]], label [[FOR_END]], label [[BB]]67; CHECK:       bb:68; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[A]], align 469; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+0170; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 471; CHECK-NEXT:    [[ADD]] = getelementptr inbounds nuw i8, ptr [[A]], i64 472; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds nuw i8, ptr [[A_ADDR_03]], i64 473; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]74; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]75; CHECK:       for.end:76; CHECK-NEXT:    ret void77;78entry:79  %cmp1 = icmp ult ptr %a, %a_end80  br i1 %cmp1, label %for.body.preheader, label %for.end81 82for.body.preheader:                               ; preds = %entry83  %b = load i64, ptr %b.i64, align 884  br label %for.body85 86for.body:                                         ; preds = %for.body, %for.body.preheader87  %a.addr.03 = phi ptr [ %incdec.ptr, %bb ], [ %a, %for.body.preheader ]88  %b.addr.02 = phi i64 [ %add.int, %bb ], [ %b, %for.body.preheader ]89 90 91  %tmp = inttoptr i64 %b.addr.02 to ptr92  %ptrcmp = icmp ult ptr %tmp, %a_end93  br i1 %ptrcmp, label %for.end, label %bb94 95bb:96  %i1 = load float, ptr %a, align 497  %mul.i = fmul float %i1, 4.200000e+0198  store float %mul.i, ptr %a.addr.03, align 499  %add = getelementptr inbounds float, ptr %a, i64 1100  %add.int = ptrtoint ptr %add to i64101  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1102  %cmp = icmp ult ptr %incdec.ptr, %a_end103  br i1 %cmp, label %for.body, label %for.end104 105for.end:                                          ; preds = %for.body, %entry106  ret void107}108 109 110define void @test2(ptr %a, ptr readnone %a_end, ptr %b.float) {111; CHECK-LABEL: @test2(112; CHECK-NEXT:  entry:113; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]114; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]115; CHECK:       for.body.preheader:116; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_FLOAT:%.*]], align 8117; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to ptr118; CHECK-NEXT:    br label [[FOR_BODY:%.*]]119; CHECK:       for.body:120; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]121; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]122; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_PTR]], align 4123; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01124; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4125; CHECK-NEXT:    [[ADD]] = getelementptr inbounds nuw i8, ptr [[B_ADDR_02_PTR]], i64 4126; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds nuw i8, ptr [[A_ADDR_03]], i64 4127; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]128; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]129; CHECK:       for.end:130; CHECK-NEXT:    ret void131;132entry:133  %cmp1 = icmp ult ptr %a, %a_end134  br i1 %cmp1, label %for.body.preheader, label %for.end135 136for.body.preheader:                               ; preds = %entry137  %b = load i64, ptr %b.float, align 8138  br label %for.body139 140for.body:                                         ; preds = %for.body, %for.body.preheader141  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]142  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]143 144 145  %tmp = inttoptr i64 %b.addr.02 to ptr146  %i1 = load float, ptr %tmp, align 4147  %mul.i = fmul float %i1, 4.200000e+01148  store float %mul.i, ptr %a.addr.03, align 4149  %add = getelementptr inbounds float, ptr %tmp, i64 1150  %add.int = ptrtoint ptr %add to i64151  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1152  %cmp = icmp ult ptr %incdec.ptr, %a_end153  br i1 %cmp, label %for.body, label %for.end154 155for.end:                                          ; preds = %for.body, %entry156  ret void157}158 159 160define void @test3(ptr %a, ptr readnone %a_end, ptr %b.i8p) {161; CHECK-LABEL: @test3(162; CHECK-NEXT:  entry:163; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]164; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]165; CHECK:       for.body.preheader:166; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_I8P:%.*]], align 8167; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to ptr168; CHECK-NEXT:    br label [[FOR_BODY:%.*]]169; CHECK:       for.body:170; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]171; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]172; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_PTR]], align 4173; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01174; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4175; CHECK-NEXT:    [[ADD]] = getelementptr inbounds nuw i8, ptr [[B_ADDR_02_PTR]], i64 4176; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds nuw i8, ptr [[A_ADDR_03]], i64 4177; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]178; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]179; CHECK:       for.end:180; CHECK-NEXT:    ret void181;182entry:183  %cmp1 = icmp ult ptr %a, %a_end184  br i1 %cmp1, label %for.body.preheader, label %for.end185 186for.body.preheader:                               ; preds = %entry187  %b = load i64, ptr %b.i8p, align 8188  br label %for.body189 190for.body:                                         ; preds = %for.body, %for.body.preheader191  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]192  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]193 194 195  %tmp = inttoptr i64 %b.addr.02 to ptr196  %i1 = load float, ptr %tmp, align 4197  %mul.i = fmul float %i1, 4.200000e+01198  store float %mul.i, ptr %a.addr.03, align 4199  %add = getelementptr inbounds float, ptr %tmp, i64 1200  %add.int = ptrtoint ptr %add to i64201  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1202  %cmp = icmp ult ptr %incdec.ptr, %a_end203  br i1 %cmp, label %for.body, label %for.end204 205for.end:                                          ; preds = %for.body, %entry206  ret void207}208 209 210define void @test4(ptr %a, ptr readnone %a_end, ptr %b.float) {211; CHECK-LABEL: @test4(212; CHECK-NEXT:  entry:213; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]214; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]215; CHECK:       for.body.preheader:216; CHECK-NEXT:    [[B_F:%.*]] = load ptr, ptr [[B_FLOAT:%.*]], align 8217; CHECK-NEXT:    br label [[FOR_BODY:%.*]]218; CHECK:       for.body:219; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]220; CHECK-NEXT:    [[B_ADDR_02_IN:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_F]], [[FOR_BODY_PREHEADER]] ]221; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_IN]], align 4222; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01223; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4224; CHECK-NEXT:    [[ADD]] = getelementptr inbounds nuw i8, ptr [[B_ADDR_02_IN]], i64 4225; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds nuw i8, ptr [[A_ADDR_03]], i64 4226; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]227; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]228; CHECK:       for.end:229; CHECK-NEXT:    ret void230;231entry:232  %cmp1 = icmp ult ptr %a, %a_end233  br i1 %cmp1, label %for.body.preheader, label %for.end234 235for.body.preheader:                               ; preds = %entry236  %b.f = load ptr, ptr %b.float, align 8237  %b = ptrtoint ptr %b.f to i64238  br label %for.body239 240for.body:                                         ; preds = %for.body, %for.body.preheader241  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]242  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]243  %tmp = inttoptr i64 %b.addr.02 to ptr244  %i1 = load float, ptr %tmp, align 4245  %mul.i = fmul float %i1, 4.200000e+01246  store float %mul.i, ptr %a.addr.03, align 4247  %add = getelementptr inbounds float, ptr %tmp, i64 1248  %add.int = ptrtoint ptr %add to i64249  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1250  %cmp = icmp ult ptr %incdec.ptr, %a_end251  br i1 %cmp, label %for.body, label %for.end252 253for.end:                                          ; preds = %for.body, %entry254  ret void255}256