brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · ab8dc87 Raw
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