#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ GCI_log_gamma(float);
float expf(int /*<<< orphan*/);
float GCI_gamma(float x) {
  const double gamma = 0.577215664901532860606512090;
  static const double p[] = {
      -1.71618513886549492533811E+0, 2.47656508055759199108314E+1,
      -3.79804256470945635097577E+2, 6.29331155312818442661052E+2,
      8.66966202790413211295064E+2,  -3.14512729688483675254357E+4,
      -3.61444134186911729807069E+4, 6.64561438202405440627855E+4};
  static const double q[] = {
      -3.08402300119738975254353E+1, 3.15350626979604161529144E+2,
      -1.01515636749021914166146E+3, -3.10777167157231109440444E+3,
      2.25381184209801510330112E+4,  4.75584627752788110767815E+3,
      -1.34659959864969306392456E+5, -1.15132259675553483497211E+5};
  int n, i, arg_was_less_than_one;
  double y, z, num, den, result;
  if (x < 0.001f)
    return (float)(1.0 / (x * (1.0 + gamma * x)));
  if (x < 12.0f) {
    y = x;
    n = 0;
    arg_was_less_than_one = (y < 1.0);
    if (arg_was_less_than_one) {
      y += 1.0;
    } else {
      n = (int)(floor(y)) - 1;
      y -= n;
    }
    num = 0.0;
    den = 1.0;
    z = y - 1;
    for (i = 0; i < 8; i++) {
      num = (num + p[i]) * z;
      den = den * z + q[i];
    }
    result = num / den + 1.0;
    if (arg_was_less_than_one) {
      result /= (y - 1.0);
    } else {
      for (i = 0; i < n; i++)
        result *= y++;
    }
    return (float)result;
  }
  if (x > 171.624f) {
    return 0.0f;
  }
  return expf(GCI_log_gamma(x));
}


x86 assembly (clang, -O0):
<GCI_gamma>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movss  %xmm0,-0x8(%rbp)
movsd  0xecb(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movss  0xeae(%rip),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    11a4 <GCI_gamma+0x74>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe9a(%rip),%xmm2
mulsd  %xmm2,%xmm0
movsd  0xe96(%rip),%xmm2
addsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  0xe86(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1399 <GCI_gamma+0x269>
movss  0xe58(%rip),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    1360 <GCI_gamma+0x230>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x14(%rbp)
movsd  0xe45(%rip),%xmm0
ucomisd -0x28(%rbp),%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     1204 <GCI_gamma+0xd4>
movsd  0xe23(%rip),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    122b <GCI_gamma+0xfb>
movsd  -0x28(%rbp),%xmm0
call   1050 <floor@plt>
cvttsd2si %xmm0,%eax
sub    $0x1,%eax
mov    %eax,-0x14(%rbp)
cvtsi2sdl -0x14(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xddd(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xdcb(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jge    12bb <GCI_gamma+0x18b>
movsd  -0x38(%rbp),%xmm0
movslq -0x18(%rbp),%rcx
lea    0xda9(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movslq -0x18(%rbp),%rcx
lea    0xdc5(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    125d <GCI_gamma+0x12d>
movsd  -0x38(%rbp),%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  0xd4b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     1304 <GCI_gamma+0x1d4>
movsd  -0x28(%rbp),%xmm1
movsd  0xd2b(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    134d <GCI_gamma+0x21d>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1348 <GCI_gamma+0x218>
movsd  -0x28(%rbp),%xmm0
movsd  0xcf4(%rip),%xmm2
movaps %xmm0,%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,-0x28(%rbp)
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    130b <GCI_gamma+0x1db>
jmp    134d <GCI_gamma+0x21d>
movsd  -0x48(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1399 <GCI_gamma+0x269>
movss  -0x8(%rbp),%xmm0
movss  0xc9b(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1383 <GCI_gamma+0x253>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1399 <GCI_gamma+0x269>
movss  -0x8(%rbp),%xmm0
call   1040 <GCI_log_gamma@plt>
mov    %eax,%edi
call   1030 <expf@plt>
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GCI_gamma>:
sub    $0x18,%rsp
movaps %xmm0,%xmm1
movss  0xec1(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    1177 <GCI_gamma+0x47>
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
movsd  0xf4d(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xeb1(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
divsd  %xmm1,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
add    $0x18,%rsp
ret
movss  0xe85(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    11a1 <GCI_gamma+0x71>
cvtss2sd %xmm1,%xmm3
movss  0xe7c(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    11b6 <GCI_gamma+0x86>
addsd  0xe73(%rip),%xmm3
xor    %eax,%eax
jmp    11f0 <GCI_gamma+0xc0>
xorps  %xmm0,%xmm0
ucomiss 0xe5d(%rip),%xmm1
jbe    12d6 <GCI_gamma+0x1a6>
add    $0x18,%rsp
ret
movaps %xmm3,%xmm0
movsd  %xmm3,0x10(%rsp)
movss  %xmm1,0xc(%rsp)
call   1050 <floor@plt>
movss  0xc(%rsp),%xmm1
movsd  0x10(%rsp),%xmm3
cvttsd2si %xmm0,%eax
add    $0xffffffff,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm3
movss  0xe1c(%rip),%xmm0
ucomiss %xmm1,%xmm0
movsd  0xe1d(%rip),%xmm1
addsd  %xmm3,%xmm1
movsd  0xe19(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xe15(%rip),%xmm2
addsd  %xmm1,%xmm2
addsd  0xe11(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xe09(%rip),%xmm2
addsd  0xe09(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xe01(%rip),%xmm2
addsd  0xe01(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xdf9(%rip),%xmm2
addsd  0xdf9(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xdf1(%rip),%xmm2
addsd  0xdf1(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xde9(%rip),%xmm2
addsd  0xde9(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xde1(%rip),%xmm2
addsd  0xde1(%rip),%xmm0
mulsd  %xmm1,%xmm2
addsd  0xddd(%rip),%xmm2
mulsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
addsd  0xd45(%rip),%xmm0
jbe    12e9 <GCI_gamma+0x1b9>
divsd  %xmm1,%xmm0
jmp    137d <GCI_gamma+0x24d>
movaps %xmm1,%xmm0
call   1040 <GCI_log_gamma@plt>
mov    %eax,%edi
add    $0x18,%rsp
jmp    1030 <expf@plt>
test   %eax,%eax
jle    137d <GCI_gamma+0x24d>
lea    -0x1(%rax),%edx
mov    %eax,%ecx
and    $0x7,%ecx
cmp    $0x7,%edx
jb     1355 <GCI_gamma+0x225>
and    $0xfffffff8,%eax
movsd  0xd07(%rip),%xmm1
nopl   0x0(%rax)
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
add    $0xfffffff8,%eax
jne    1310 <GCI_gamma+0x1e0>
test   %ecx,%ecx
je     137d <GCI_gamma+0x24d>
movsd  0xcaf(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm3
add    $0xffffffff,%ecx
jne    1370 <GCI_gamma+0x240>
cvtsd2ss %xmm0,%xmm0
add    $0x18,%rsp
ret

LLVM IR (-O0):
@GCI_gamma.p = internal constant [8 x double] [double 0xBFFB757E8C54EFB2, double 0x4038C401B0F21AC9, double 0xC077BCDE3C0884ED, double 0x4083AAA634C1B39D, double 0x408B17BAC8875108, double 0xC0DEB6D178525524, double 0xC0E1A60D3AB9D5C5, double 0x40F039824D1673DA]
@GCI_gamma.q = internal constant [8 x double] [double 0xC03ED71950668BAB, double 0x4073B59C2B0927EC, double 0xC08FB9403D994531, double 0xC0A8478B18894CA8, double 0x40D602879435973A, double 0x40B293D8A5A4E197, double 0xC100701FADCDAF5E, double 0xC0FC1BC427A18D9D]
define float @GCI_gamma(float %0) {
%2 = alloca float
%3 = alloca float
%4 = alloca double
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
store float %0, float* %3
store double 0x3FE2788CFC6FB619, double* %4
%13 = load float, float* %3
%14 = fcmp olt float %13, 0x3F50624DE0000000
br i1 %14, label %15, label %24
15: ; preds = %1
%16 = load float, float* %3
%17 = fpext float %16 to double
%18 = load float, float* %3
%19 = fpext float %18 to double
%20 = call double @llvm.fmuladd.f64(double 0x3FE2788CFC6FB619, double %19, double 1.000000e+00)
%21 = fmul double %17, %20
%22 = fdiv double 1.000000e+00, %21
%23 = fptrunc double %22 to float
store float %23, float* %2
br label %109
24: ; preds = %1
%25 = load float, float* %3
%26 = fcmp olt float %25, 1.200000e+01
br i1 %26, label %27, label %101
27: ; preds = %24
%28 = load float, float* %3
%29 = fpext float %28 to double
store double %29, double* %8
store i32 0, i32* %5
%30 = load double, double* %8
%31 = fcmp olt double %30, 1.000000e+00
%32 = zext i1 %31 to i32
store i32 %32, i32* %7
%33 = load i32, i32* %7
%34 = icmp ne i32 %33, 0
br i1 %34, label %35, label %38
35: ; preds = %27
%36 = load double, double* %8
%37 = fadd double %36, 1.000000e+00
store double %37, double* %8
br label %47
38: ; preds = %27
%39 = load double, double* %8
%40 = call double @llvm.floor.f64(double %39)
%41 = fptosi double %40 to i32
%42 = sub nsw i32 %41, 1
store i32 %42, i32* %5
%43 = load i32, i32* %5
%44 = sitofp i32 %43 to double
%45 = load double, double* %8
%46 = fsub double %45, %44
store double %46, double* %8
br label %47
47: ; preds = %38, %35
store double 0.000000e+00, double* %10
store double 1.000000e+00, double* %11
%48 = load double, double* %8
%49 = fsub double %48, 1.000000e+00
store double %49, double* %9
store i32 0, i32* %6
br label %50
50: ; preds = %69, %47
%51 = load i32, i32* %6
%52 = icmp slt i32 %51, 8
br i1 %52, label %53, label %72
53: ; preds = %50
%54 = load double, double* %10
%55 = load i32, i32* %6
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [8 x double], [8 x double]* @GCI_gamma.p, i64 0, i64 %56
%58 = load double, double* %57
%59 = fadd double %54, %58
%60 = load double, double* %9
%61 = fmul double %59, %60
store double %61, double* %10
%62 = load double, double* %11
%63 = load double, double* %9
%64 = load i32, i32* %6
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [8 x double], [8 x double]* @GCI_gamma.q, i64 0, i64 %65
%67 = load double, double* %66
%68 = call double @llvm.fmuladd.f64(double %62, double %63, double %67)
store double %68, double* %11
br label %69
69: ; preds = %53
%70 = load i32, i32* %6
%71 = add nsw i32 %70, 1
store i32 %71, i32* %6
br label %50
72: ; preds = %50
%73 = load double, double* %10
%74 = load double, double* %11
%75 = fdiv double %73, %74
%76 = fadd double %75, 1.000000e+00
store double %76, double* %12
%77 = load i32, i32* %7
%78 = icmp ne i32 %77, 0
br i1 %78, label %79, label %84
79: ; preds = %72
%80 = load double, double* %8
%81 = fsub double %80, 1.000000e+00
%82 = load double, double* %12
%83 = fdiv double %82, %81
store double %83, double* %12
br label %98
84: ; preds = %72
store i32 0, i32* %6
br label %85
85: ; preds = %94, %84
%86 = load i32, i32* %6
%87 = load i32, i32* %5
%88 = icmp slt i32 %86, %87
br i1 %88, label %89, label %97
89: ; preds = %85
%90 = load double, double* %8
%91 = fadd double %90, 1.000000e+00
store double %91, double* %8
%92 = load double, double* %12
%93 = fmul double %92, %90
store double %93, double* %12
br label %94
94: ; preds = %89
%95 = load i32, i32* %6
%96 = add nsw i32 %95, 1
store i32 %96, i32* %6
br label %85
97: ; preds = %85
br label %98
98: ; preds = %97, %79
%99 = load double, double* %12
%100 = fptrunc double %99 to float
store float %100, float* %2
br label %109
101: ; preds = %24
%102 = load float, float* %3
%103 = fcmp ogt float %102, 0x406573F7C0000000
br i1 %103, label %104, label %105
104: ; preds = %101
store float 0.000000e+00, float* %2
br label %109
105: ; preds = %101
%106 = load float, float* %3
%107 = call i32 @GCI_log_gamma(float %106)
%108 = call float @expf(i32 %107)
store float %108, float* %2
br label %109
109: ; preds = %105, %104, %98, %15
%110 = load float, float* %2
ret float %110
}

LLVM IR (-O2):
define float @GCI_gamma(float %0) {
%2 = fcmp olt float %0, 0x3F50624DE0000000
br i1 %2, label %3, label %9
3: ; preds = %1
%4 = fpext float %0 to double
%5 = tail call double @llvm.fmuladd.f64(double %4, double 0x3FE2788CFC6FB619, double 1.000000e+00)
%6 = fmul double %5, %4
%7 = fdiv double 1.000000e+00, %6
%8 = fptrunc double %7 to float
br label %104
9: ; preds = %1
%10 = fcmp olt float %0, 1.200000e+01
br i1 %10, label %11, label %99
11: ; preds = %9
%12 = fpext float %0 to double
%13 = fcmp olt float %0, 1.000000e+00
br i1 %13, label %14, label %16
14: ; preds = %11
%15 = fadd double %12, 1.000000e+00
br label %22
16: ; preds = %11
%17 = tail call double @llvm.floor.f64(double %12)
%18 = fptosi double %17 to i32
%19 = add nsw i32 %18, -1
%20 = sitofp i32 %19 to double
%21 = fsub double %12, %20
br label %22
22: ; preds = %16, %14
%23 = phi i32 [ 0, %14 ], [ %19, %16 ]
%24 = phi double [ %15, %14 ], [ %21, %16 ]
%25 = fadd double %24, -1.000000e+00
%26 = fmul double %25, 0xBFFB757E8C54EFB2
%27 = fadd double %25, 0xC03ED71950668BAB
%28 = fadd double %26, 0x4038C401B0F21AC9
%29 = fmul double %25, %28
%30 = tail call double @llvm.fmuladd.f64(double %27, double %25, double 0x4073B59C2B0927EC)
%31 = fadd double %29, 0xC077BCDE3C0884ED
%32 = fmul double %25, %31
%33 = tail call double @llvm.fmuladd.f64(double %30, double %25, double 0xC08FB9403D994531)
%34 = fadd double %32, 0x4083AAA634C1B39D
%35 = fmul double %25, %34
%36 = tail call double @llvm.fmuladd.f64(double %33, double %25, double 0xC0A8478B18894CA8)
%37 = fadd double %35, 0x408B17BAC8875108
%38 = fmul double %25, %37
%39 = tail call double @llvm.fmuladd.f64(double %36, double %25, double 0x40D602879435973A)
%40 = fadd double %38, 0xC0DEB6D178525524
%41 = fmul double %25, %40
%42 = tail call double @llvm.fmuladd.f64(double %39, double %25, double 0x40B293D8A5A4E197)
%43 = fadd double %41, 0xC0E1A60D3AB9D5C5
%44 = fmul double %25, %43
%45 = tail call double @llvm.fmuladd.f64(double %42, double %25, double 0xC100701FADCDAF5E)
%46 = fadd double %44, 0x40F039824D1673DA
%47 = fmul double %25, %46
%48 = tail call double @llvm.fmuladd.f64(double %45, double %25, double 0xC0FC1BC427A18D9D)
%49 = fdiv double %47, %48
%50 = fadd double %49, 1.000000e+00
br i1 %13, label %59, label %51
51: ; preds = %22
%52 = icmp sgt i32 %23, 0
br i1 %52, label %53, label %96
53: ; preds = %51
%54 = add i32 %23, -1
%55 = and i32 %23, 7
%56 = icmp ult i32 %54, 7
br i1 %56, label %83, label %57
57: ; preds = %53
%58 = and i32 %23, -8
br label %61
59: ; preds = %22
%60 = fdiv double %50, %25
br label %96
61: ; preds = %61, %57
%62 = phi double [ %50, %57 ], [ %80, %61 ]
%63 = phi double [ %24, %57 ], [ %79, %61 ]
%64 = phi i32 [ 0, %57 ], [ %81, %61 ]
%65 = fadd double %63, 1.000000e+00
%66 = fmul double %63, %62
%67 = fadd double %65, 1.000000e+00
%68 = fmul double %65, %66
%69 = fadd double %67, 1.000000e+00
%70 = fmul double %67, %68
%71 = fadd double %69, 1.000000e+00
%72 = fmul double %69, %70
%73 = fadd double %71, 1.000000e+00
%74 = fmul double %71, %72
%75 = fadd double %73, 1.000000e+00
%76 = fmul double %73, %74
%77 = fadd double %75, 1.000000e+00
%78 = fmul double %75, %76
%79 = fadd double %77, 1.000000e+00
%80 = fmul double %77, %78
%81 = add i32 %64, 8
%82 = icmp eq i32 %81, %58
br i1 %82, label %83, label %61
83: ; preds = %61, %53
%84 = phi double [ undef, %53 ], [ %80, %61 ]
%85 = phi double [ %50, %53 ], [ %80, %61 ]
%86 = phi double [ %24, %53 ], [ %79, %61 ]
%87 = icmp eq i32 %55, 0
br i1 %87, label %96, label %88
88: ; preds = %83, %88
%89 = phi double [ %93, %88 ], [ %85, %83 ]
%90 = phi double [ %92, %88 ], [ %86, %83 ]
%91 = phi i32 [ %94, %88 ], [ 0, %83 ]
%92 = fadd double %90, 1.000000e+00
%93 = fmul double %90, %89
%94 = add i32 %91, 1
%95 = icmp eq i32 %94, %55
br i1 %95, label %96, label %88
96: ; preds = %83, %88, %51, %59
%97 = phi double [ %60, %59 ], [ %50, %51 ], [ %84, %83 ], [ %93, %88 ]
%98 = fptrunc double %97 to float
br label %104
99: ; preds = %9
%100 = fcmp ogt float %0, 0x406573F7C0000000
br i1 %100, label %104, label %101
101: ; preds = %99
%102 = tail call i32 @GCI_log_gamma(float %0)
%103 = tail call float @expf(i32 %102)
br label %104
104: ; preds = %99, %101, %96, %3
%105 = phi float [ %8, %3 ], [ %98, %96 ], [ %103, %101 ], [ 0.000000e+00, %99 ]
ret float %105
}