91 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define void @matching_phi(i64 %a, ptr %b, i1 %cond) {5; CHECK-LABEL: @matching_phi(6; CHECK-NEXT: entry:7; CHECK-NEXT: br i1 [[COND:%.*]], label [[BB2:%.*]], label [[BB1:%.*]]8; CHECK: bb1:9; CHECK-NEXT: [[ADDB:%.*]] = getelementptr inbounds nuw i8, ptr [[B:%.*]], i64 810; CHECK-NEXT: br label [[BB3:%.*]]11; CHECK: bb2:12; CHECK-NEXT: [[ADD_INT:%.*]] = add i64 [[A:%.*]], 113; CHECK-NEXT: [[ADD:%.*]] = inttoptr i64 [[ADD_INT]] to ptr14; CHECK-NEXT: store float 1.000000e+01, ptr [[ADD]], align 415; CHECK-NEXT: br label [[BB3]]16; CHECK: bb3:17; CHECK-NEXT: [[A_ADDR_03:%.*]] = phi ptr [ [[ADDB]], [[BB1]] ], [ [[ADD]], [[BB2]] ]18; CHECK-NEXT: [[I1:%.*]] = load float, ptr [[A_ADDR_03]], align 419; CHECK-NEXT: [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+0120; CHECK-NEXT: store float [[MUL_I]], ptr [[A_ADDR_03]], align 421; CHECK-NEXT: ret void22;23entry:24 %cmp1 = icmp eq i1 %cond, 025 %add.int = add i64 %a, 126 %add = inttoptr i64 %add.int to ptr27 28 %addb = getelementptr inbounds float, ptr %b, i64 229 %addb.int = ptrtoint ptr %addb to i6430 br i1 %cmp1, label %bb1, label %bb231bb1:32 br label %bb333bb2:34 store float 1.0e+01, ptr %add, align 435 br label %bb336 37bb3:38 %a.addr.03 = phi ptr [ %addb, %bb1 ], [ %add, %bb2 ]39 %b.addr.02 = phi i64 [ %addb.int, %bb1 ], [ %add.int, %bb2 ]40 %i0 = inttoptr i64 %b.addr.02 to ptr41 %i1 = load float, ptr %i0, align 442 %mul.i = fmul float %i1, 4.200000e+0143 store float %mul.i, ptr %a.addr.03, align 444 ret void45}46 47define void @no_matching_phi(i64 %a, ptr %b, i1 %cond) {48; CHECK-LABEL: @no_matching_phi(49; CHECK-NEXT: entry:50; CHECK-NEXT: [[ADD_INT:%.*]] = add i64 [[A:%.*]], 151; CHECK-NEXT: [[ADDB:%.*]] = getelementptr inbounds nuw i8, ptr [[B:%.*]], i64 852; CHECK-NEXT: br i1 [[COND:%.*]], label [[B:%.*]], label [[A:%.*]]53; CHECK: A:54; CHECK-NEXT: [[TMP0:%.*]] = inttoptr i64 [[ADD_INT]] to ptr55; CHECK-NEXT: br label [[C:%.*]]56; CHECK: B:57; CHECK-NEXT: [[ADD:%.*]] = inttoptr i64 [[ADD_INT]] to ptr58; CHECK-NEXT: store float 1.000000e+01, ptr [[ADD]], align 459; CHECK-NEXT: br label [[C]]60; CHECK: C:61; CHECK-NEXT: [[A_ADDR_03:%.*]] = phi ptr [ [[ADDB]], [[A]] ], [ [[ADD]], [[B]] ]62; CHECK-NEXT: [[B_ADDR_02:%.*]] = phi ptr [ [[TMP0]], [[A]] ], [ [[ADDB]], [[B]] ]63; CHECK-NEXT: [[I1:%.*]] = load float, ptr [[B_ADDR_02]], align 464; CHECK-NEXT: [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+0165; CHECK-NEXT: store float [[MUL_I]], ptr [[A_ADDR_03]], align 466; CHECK-NEXT: ret void67;68entry:69 %cmp1 = icmp eq i1 %cond, 070 %add.int = add i64 %a, 171 %add = inttoptr i64 %add.int to ptr72 73 %addb = getelementptr inbounds float, ptr %b, i64 274 %addb.int = ptrtoint ptr %addb to i6475 br i1 %cmp1, label %A, label %B76A:77 br label %C78B:79 store float 1.0e+01, ptr %add, align 480 br label %C81 82C:83 %a.addr.03 = phi ptr [ %addb, %A ], [ %add, %B ]84 %b.addr.02 = phi i64 [ %addb.int, %B ], [ %add.int, %A ]85 %i0 = inttoptr i64 %b.addr.02 to ptr86 %i1 = load float, ptr %i0, align 487 %mul.i = fmul float %i1, 4.200000e+0188 store float %mul.i, ptr %a.addr.03, align 489 ret void90}91