106 lines · plain
1; RUN: opt -passes='function(gvn-hoist),function(newgvn)' -S < %s | FileCheck %s2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"3target triple = "x86_64-unknown-linux-gnu"4 5@GlobalVar = internal global float 1.000000e+006 7; Check that we hoist load and scalar expressions in dominator.8; CHECK-LABEL: @dominatorHoisting9; CHECK: load10; CHECK: load11; CHECK: fsub12; CHECK: fmul13; CHECK: load14; CHECK: fsub15; CHECK: fmul16; CHECK-NOT: load17; CHECK-NOT: fmul18; CHECK-NOT: fsub19define float @dominatorHoisting(float %d, ptr %min, ptr %max, ptr %a) {20entry:21 %div = fdiv float 1.000000e+00, %d22 %0 = load float, ptr %min, align 423 %1 = load float, ptr %a, align 424 %sub = fsub float %0, %125 %mul = fmul float %sub, %div26 %2 = load float, ptr %max, align 427 %sub1 = fsub float %2, %128 %mul2 = fmul float %sub1, %div29 %cmp = fcmp oge float %div, 0.000000e+0030 br i1 %cmp, label %if.then, label %if.end31 32if.then: ; preds = %entry33 %3 = load float, ptr %max, align 434 %4 = load float, ptr %a, align 435 %sub3 = fsub float %3, %436 %mul4 = fmul float %sub3, %div37 %5 = load float, ptr %min, align 438 %sub5 = fsub float %5, %439 %mul6 = fmul float %sub5, %div40 br label %if.end41 42if.end: ; preds = %entry43 %p1 = phi float [ %mul4, %if.then ], [ 0.000000e+00, %entry ]44 %p2 = phi float [ %mul6, %if.then ], [ 0.000000e+00, %entry ]45 46 %x = fadd float %p1, %mul247 %y = fadd float %p2, %mul48 %z = fadd float %x, %y49 ret float %z50}51 52; Check that we hoist load and scalar expressions in dominator.53; CHECK-LABEL: @domHoisting54; CHECK: load55; CHECK: load56; CHECK: fsub57; CHECK: fmul58; CHECK: load59; CHECK: fsub60; CHECK: fmul61; CHECK-NOT: load62; CHECK-NOT: fmul63; CHECK-NOT: fsub64define float @domHoisting(float %d, ptr %min, ptr %max, ptr %a) {65entry:66 %div = fdiv float 1.000000e+00, %d67 %0 = load float, ptr %min, align 468 %1 = load float, ptr %a, align 469 %sub = fsub float %0, %170 %mul = fmul float %sub, %div71 %2 = load float, ptr %max, align 472 %sub1 = fsub float %2, %173 %mul2 = fmul float %sub1, %div74 %cmp = fcmp oge float %div, 0.000000e+0075 br i1 %cmp, label %if.then, label %if.else76 77if.then:78 %3 = load float, ptr %max, align 479 %4 = load float, ptr %a, align 480 %sub3 = fsub float %3, %481 %mul4 = fmul float %sub3, %div82 %5 = load float, ptr %min, align 483 %sub5 = fsub float %5, %484 %mul6 = fmul float %sub5, %div85 br label %if.end86 87if.else:88 %6 = load float, ptr %max, align 489 %7 = load float, ptr %a, align 490 %sub9 = fsub float %6, %791 %mul10 = fmul float %sub9, %div92 %8 = load float, ptr %min, align 493 %sub12 = fsub float %8, %794 %mul13 = fmul float %sub12, %div95 br label %if.end96 97if.end:98 %p1 = phi float [ %mul4, %if.then ], [ %mul10, %if.else ]99 %p2 = phi float [ %mul6, %if.then ], [ %mul13, %if.else ]100 101 %x = fadd float %p1, %mul2102 %y = fadd float %p2, %mul103 %z = fadd float %x, %y104 ret float %z105}106