float golden(ax, bx, cx, f, tol, xmin)
float ax, bx, cx, tol, *xmin;
float (*f)();
{
  float f0, f1, f2, f3, x0, x1, x2, x3;
  x0 = ax;
  x3 = cx;
  if (fabs(cx - bx) > fabs(bx - ax)) {
    x1 = bx;
    x2 = bx + (1.0 - 0.61803399) * (cx - bx);
  } else {
    x2 = bx;
    x1 = bx - (1.0 - 0.61803399) * (bx - ax);
  }
  f1 = (*f)(x1);
  f2 = (*f)(x2);
  while (fabs(x3 - x0) > tol * (fabs(x1) + fabs(x2))) {
    if (f2 < f1) {
      (x0) = (x1);
      (x1) = (x2);
      (x2) = (0.61803399 * x1 + (1.0 - 0.61803399) * x3);
      (f0) = (f1);
      (f1) = (f2);
      (f2) = ((*f)(x2));
    } else {
      (x3) = (x2);
      (x2) = (x1);
      (x1) = (0.61803399 * x2 + (1.0 - 0.61803399) * x0);
      (f3) = (f2);
      (f2) = (f1);
      (f1) = ((*f)(x1));
    }
  }
  if (f1 < f2) {
    *xmin = x1;
    return f1;
  } else {
    *xmin = x2;
    return f2;
  }
}


x86 assembly (clang, -O0):
<golden>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movsd  %xmm3,-0x50(%rbp)
movsd  %xmm2,-0x58(%rbp)
movaps %xmm1,%xmm2
movsd  -0x58(%rbp),%xmm1
movaps %xmm0,%xmm3
movsd  -0x50(%rbp),%xmm0
cvtsd2ss %xmm3,%xmm3
cvtsd2ss %xmm2,%xmm2
cvtsd2ss %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm0
movss  %xmm3,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
movss  %xmm0,-0x1c(%rbp)
mov    %rsi,-0x28(%rbp)
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xe89(%rip),%xmm1
pand   %xmm1,%xmm0
movss  -0xc(%rbp),%xmm1
subss  -0x8(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movaps 0xe70(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    11dd <golden+0xdd>
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x10(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe51(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
jmp    1217 <golden+0x117>
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0xc(%rbp),%xmm0
subss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe0a(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rcx
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   *%rcx
movss  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rcx
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   *%rcx
movss  %xmm0,-0x34(%rbp)
movss  -0x48(%rbp),%xmm0
subss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xda8(%rip),%xmm1
pand   %xmm1,%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x40(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
movaps 0xd8b(%rip),%xmm3
pand   %xmm3,%xmm2
movss  -0x44(%rbp),%xmm3
cvtss2sd %xmm3,%xmm3
movaps 0xd77(%rip),%xmm4
pand   %xmm4,%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    13a6 <golden+0x2a6>
movss  -0x34(%rbp),%xmm1
movss  -0x30(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    132c <golden+0x22c>
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xd38(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0xd34(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rcx
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   *%rcx
movss  %xmm0,-0x34(%rbp)
jmp    13a1 <golden+0x2a1>
movss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x3c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xcbe(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0xcba(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x18(%rbp),%rcx
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   *%rcx
movss  %xmm0,-0x30(%rbp)
jmp    1243 <golden+0x143>
movss  -0x30(%rbp),%xmm1
movss  -0x34(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    13d5 <golden+0x2d5>
movss  -0x40(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    13ec <golden+0x2ec>
movss  -0x44(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<golden>:
push   %r14
push   %rbx
sub    $0x78,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
cvtsd2ss %xmm0,%xmm5
unpcklpd %xmm1,%xmm2
cvtpd2ps %xmm2,%xmm6
movapd %xmm6,%xmm4
xorps  %xmm0,%xmm0
cvtsd2ss %xmm3,%xmm0
movss  %xmm0,0x28(%rsp)
shufps $0x55,%xmm6,%xmm4
movaps %xmm5,%xmm0
shufps $0xd4,%xmm6,%xmm0
shufps $0x52,%xmm6,%xmm0
movaps %xmm6,%xmm1
subps  %xmm0,%xmm1
cvtps2pd %xmm1,%xmm0
movdqa 0xeb6(%rip),%xmm1
pand   %xmm0,%xmm1
pshufd $0xee,%xmm1,%xmm2
ucomisd %xmm2,%xmm1
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
movaps %xmm5,0x50(%rsp)
movaps %xmm6,0x60(%rsp)
jbe    1193 <golden+0x93>
mulsd  0xeb6(%rip),%xmm0
addsd  %xmm1,%xmm0
movss  %xmm4,0x8(%rsp)
cvtsd2ss %xmm0,%xmm0
xorps  %xmm2,%xmm2
cvtss2sd %xmm0,%xmm2
movaps %xmm2,0x10(%rsp)
movaps %xmm0,0x30(%rsp)
jmp    11be <golden+0xbe>
movaps %xmm4,0x30(%rsp)
punpckhqdq %xmm0,%xmm0
mulsd  0xe7c(%rip),%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movaps %xmm1,0x10(%rsp)
movss  %xmm0,0x8(%rsp)
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
movaps %xmm1,0x40(%rsp)
movaps %xmm1,%xmm0
mov    $0x1,%al
call   *%rbx
movss  %xmm0,0xc(%rsp)
movaps 0x10(%rsp),%xmm0
mov    $0x1,%al
call   *%rbx
movapd 0x40(%rsp),%xmm10
movaps %xmm0,%xmm7
movss  0x28(%rsp),%xmm0
xorps  %xmm3,%xmm3
cvtss2sd %xmm0,%xmm3
movaps 0x60(%rsp),%xmm9
movaps %xmm9,%xmm0
movaps 0x50(%rsp),%xmm8
subss  %xmm8,%xmm0
andps  0xe04(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movapd 0xde8(%rip),%xmm4
movapd %xmm10,%xmm1
andpd  %xmm4,%xmm1
movapd 0x10(%rsp),%xmm6
movapd %xmm6,%xmm2
andpd  %xmm4,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm3,0x28(%rsp)
mulsd  %xmm3,%xmm2
ucomisd %xmm2,%xmm0
jbe    13a0 <golden+0x2a0>
movaps 0x30(%rsp),%xmm4
movss  0xc(%rsp),%xmm5
jmp    131b <golden+0x21b>
nopw   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtss2sd %xmm8,%xmm0
mulsd  0xdb8(%rip),%xmm0
mulsd  0xdb7(%rip),%xmm10
addsd  %xmm0,%xmm10
xorps  %xmm0,%xmm0
cvtsd2ss %xmm10,%xmm0
movaps %xmm0,0x10(%rsp)
cvtss2sd %xmm0,%xmm0
movaps %xmm0,0x40(%rsp)
mov    $0x1,%al
movaps %xmm8,0x50(%rsp)
movss  %xmm5,0xc(%rsp)
call   *%rbx
movaps 0x10(%rsp),%xmm11
movss  0xc(%rsp),%xmm1
movaps 0x40(%rsp),%xmm10
movaps 0x50(%rsp),%xmm8
movaps %xmm0,%xmm5
movss  0x8(%rsp),%xmm4
xorps  %xmm6,%xmm6
cvtss2sd %xmm4,%xmm6
movaps 0x30(%rsp),%xmm9
movaps %xmm1,%xmm0
movaps %xmm9,%xmm1
subss  %xmm8,%xmm1
andps  0xd2b(%rip),%xmm1
cvtss2sd %xmm1,%xmm1
movaps %xmm10,%xmm2
movaps 0xd0c(%rip),%xmm7
andps  %xmm7,%xmm2
movaps %xmm6,%xmm3
andps  %xmm7,%xmm3
addsd  %xmm2,%xmm3
mulsd  0x28(%rsp),%xmm3
ucomisd %xmm3,%xmm1
movss  %xmm11,0x8(%rsp)
movaps %xmm0,%xmm7
jbe    13b5 <golden+0x2b5>
ucomiss %xmm7,%xmm5
movaps %xmm4,0x30(%rsp)
jbe    1260 <golden+0x160>
xorps  %xmm0,%xmm0
cvtss2sd %xmm9,%xmm0
mulsd  0xcef(%rip),%xmm0
mulsd  0xcef(%rip),%xmm6
addsd  %xmm0,%xmm6
xorps  %xmm0,%xmm0
cvtsd2ss %xmm6,%xmm0
movss  %xmm0,0x40(%rsp)
cvtss2sd %xmm0,%xmm0
movaps %xmm0,0x10(%rsp)
mov    $0x1,%al
movaps %xmm9,0x60(%rsp)
movss  %xmm7,0x50(%rsp)
call   *%rbx
movss  0x50(%rsp),%xmm5
movaps 0x10(%rsp),%xmm6
movaps 0x60(%rsp),%xmm9
movaps %xmm0,%xmm1
movaps 0x30(%rsp),%xmm11
xorps  %xmm10,%xmm10
cvtss2sd %xmm11,%xmm10
movss  0x8(%rsp),%xmm8
movss  0x40(%rsp),%xmm4
jmp    12d2 <golden+0x1d2>
movaps %xmm7,%xmm0
movss  0x8(%rsp),%xmm11
movaps 0x30(%rsp),%xmm4
movss  0xc(%rsp),%xmm5
movaps %xmm5,%xmm1
cmpltss %xmm0,%xmm1
andps  %xmm1,%xmm11
andnps %xmm4,%xmm1
orps   %xmm11,%xmm1
minss  %xmm0,%xmm5
movss  %xmm1,(%r14)
movaps %xmm5,%xmm0
add    $0x78,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define float @golden(double %0, double %1, double %2, float (...)* %3, double %4, float* %5) {
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float (...)*
%12 = alloca float
%13 = alloca float*
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = fptrunc double %0 to float
%23 = fptrunc double %1 to float
%24 = fptrunc double %2 to float
%25 = fptrunc double %4 to float
store float %22, float* %8
store float %23, float* %9
store float %24, float* %10
store float (...)* %3, float (...)** %11
store float %25, float* %12
store float* %5, float** %13
%26 = load float, float* %8
store float %26, float* %18
%27 = load float, float* %10
store float %27, float* %21
%28 = load float, float* %10
%29 = load float, float* %9
%30 = fsub float %28, %29
%31 = fpext float %30 to double
%32 = call double @llvm.fabs.f64(double %31)
%33 = load float, float* %9
%34 = load float, float* %8
%35 = fsub float %33, %34
%36 = fpext float %35 to double
%37 = call double @llvm.fabs.f64(double %36)
%38 = fcmp ogt double %32, %37
br i1 %38, label %39, label %49
39: ; preds = %6
%40 = load float, float* %9
store float %40, float* %19
%41 = load float, float* %9
%42 = fpext float %41 to double
%43 = load float, float* %10
%44 = load float, float* %9
%45 = fsub float %43, %44
%46 = fpext float %45 to double
%47 = call double @llvm.fmuladd.f64(double 0x3FD8722190488D0C, double %46, double %42)
%48 = fptrunc double %47 to float
store float %48, float* %20
br label %59
49: ; preds = %6
%50 = load float, float* %9
store float %50, float* %20
%51 = load float, float* %9
%52 = fpext float %51 to double
%53 = load float, float* %9
%54 = load float, float* %8
%55 = fsub float %53, %54
%56 = fpext float %55 to double
%57 = call double @llvm.fmuladd.f64(double 0xBFD8722190488D0C, double %56, double %52)
%58 = fptrunc double %57 to float
store float %58, float* %19
br label %59
59: ; preds = %49, %39
%60 = load float (...)*, float (...)** %11
%61 = load float, float* %19
%62 = fpext float %61 to double
%63 = bitcast float (...)* %60 to float (double, ...)*
%64 = call float (double, ...) %63(double %62)
store float %64, float* %15
%65 = load float (...)*, float (...)** %11
%66 = load float, float* %20
%67 = fpext float %66 to double
%68 = bitcast float (...)* %65 to float (double, ...)*
%69 = call float (double, ...) %68(double %67)
store float %69, float* %16
br label %70
70: ; preds = %125, %59
%71 = load float, float* %21
%72 = load float, float* %18
%73 = fsub float %71, %72
%74 = fpext float %73 to double
%75 = call double @llvm.fabs.f64(double %74)
%76 = load float, float* %12
%77 = fpext float %76 to double
%78 = load float, float* %19
%79 = fpext float %78 to double
%80 = call double @llvm.fabs.f64(double %79)
%81 = load float, float* %20
%82 = fpext float %81 to double
%83 = call double @llvm.fabs.f64(double %82)
%84 = fadd double %80, %83
%85 = fmul double %77, %84
%86 = fcmp ogt double %75, %85
br i1 %86, label %87, label %126
87: ; preds = %70
%88 = load float, float* %16
%89 = load float, float* %15
%90 = fcmp olt float %88, %89
br i1 %90, label %91, label %108
91: ; preds = %87
%92 = load float, float* %19
store float %92, float* %18
%93 = load float, float* %20
store float %93, float* %19
%94 = load float, float* %19
%95 = fpext float %94 to double
%96 = load float, float* %21
%97 = fpext float %96 to double
%98 = fmul double 0x3FD8722190488D0C, %97
%99 = call double @llvm.fmuladd.f64(double 0x3FE3C6EF37DBB97A, double %95, double %98)
%100 = fptrunc double %99 to float
store float %100, float* %20
%101 = load float, float* %15
store float %101, float* %14
%102 = load float, float* %16
store float %102, float* %15
%103 = load float (...)*, float (...)** %11
%104 = load float, float* %20
%105 = fpext float %104 to double
%106 = bitcast float (...)* %103 to float (double, ...)*
%107 = call float (double, ...) %106(double %105)
store float %107, float* %16
br label %125
108: ; preds = %87
%109 = load float, float* %20
store float %109, float* %21
%110 = load float, float* %19
store float %110, float* %20
%111 = load float, float* %20
%112 = fpext float %111 to double
%113 = load float, float* %18
%114 = fpext float %113 to double
%115 = fmul double 0x3FD8722190488D0C, %114
%116 = call double @llvm.fmuladd.f64(double 0x3FE3C6EF37DBB97A, double %112, double %115)
%117 = fptrunc double %116 to float
store float %117, float* %19
%118 = load float, float* %16
store float %118, float* %17
%119 = load float, float* %15
store float %119, float* %16
%120 = load float (...)*, float (...)** %11
%121 = load float, float* %19
%122 = fpext float %121 to double
%123 = bitcast float (...)* %120 to float (double, ...)*
%124 = call float (double, ...) %123(double %122)
store float %124, float* %15
br label %125
125: ; preds = %108, %91
br label %70
126: ; preds = %70
%127 = load float, float* %15
%128 = load float, float* %16
%129 = fcmp olt float %127, %128
br i1 %129, label %130, label %134
130: ; preds = %126
%131 = load float, float* %19
%132 = load float*, float** %13
store float %131, float* %132
%133 = load float, float* %15
store float %133, float* %7
br label %138
134: ; preds = %126
%135 = load float, float* %20
%136 = load float*, float** %13
store float %135, float* %136
%137 = load float, float* %16
store float %137, float* %7
br label %138
138: ; preds = %134, %130
%139 = load float, float* %7
ret float %139
}

LLVM IR (-O2):
define float @golden(double %0, double %1, double %2, float (...)* nocapture %3, double %4, float* nocapture writeonly %5) {
%7 = fptrunc double %0 to float
%8 = insertelement <2 x double> poison, double %2, i64 0
%9 = insertelement <2 x double> %8, double %1, i64 1
%10 = fptrunc <2 x double> %9 to <2 x float>
%11 = fptrunc double %4 to float
%12 = extractelement <2 x float> %10, i64 1
%13 = insertelement <2 x float> poison, float %12, i64 0
%14 = insertelement <2 x float> %13, float %7, i64 1
%15 = fsub <2 x float> %10, %14
%16 = fpext <2 x float> %15 to <2 x double>
%17 = call <2 x double> @llvm.fabs.v2f64(<2 x double> %16)
%18 = extractelement <2 x double> %17, i64 0
%19 = extractelement <2 x double> %17, i64 1
%20 = fcmp ogt double %18, %19
%21 = fpext float %12 to double
br i1 %20, label %22, label %27
22: ; preds = %6
%23 = extractelement <2 x double> %16, i64 0
%24 = tail call double @llvm.fmuladd.f64(double %23, double 0x3FD8722190488D0C, double %21)
%25 = fptrunc double %24 to float
%26 = fpext float %25 to double
br label %32
27: ; preds = %6
%28 = extractelement <2 x double> %16, i64 1
%29 = tail call double @llvm.fmuladd.f64(double %28, double 0xBFD8722190488D0C, double %21)
%30 = fptrunc double %29 to float
%31 = fpext float %30 to double
br label %32
32: ; preds = %27, %22
%33 = phi double [ %21, %27 ], [ %26, %22 ]
%34 = phi double [ %31, %27 ], [ %21, %22 ]
%35 = phi float [ %30, %27 ], [ %12, %22 ]
%36 = phi float [ %12, %27 ], [ %25, %22 ]
%37 = bitcast float (...)* %3 to float (double, ...)*
%38 = tail call float (double, ...) %37(double %34)
%39 = tail call float (double, ...) %37(double %33)
%40 = fpext float %11 to double
%41 = extractelement <2 x float> %10, i64 0
%42 = fsub float %41, %7
%43 = tail call float @llvm.fabs.f32(float %42)
%44 = fpext float %43 to double
%45 = tail call double @llvm.fabs.f64(double %34)
%46 = tail call double @llvm.fabs.f64(double %33)
%47 = fadd double %45, %46
%48 = fmul double %47, %40
%49 = fcmp olt double %48, %44
br i1 %49, label %50, label %93
50: ; preds = %32, %76
%51 = phi double [ %77, %76 ], [ %33, %32 ]
%52 = phi double [ %78, %76 ], [ %34, %32 ]
%53 = phi float [ %84, %76 ], [ %41, %32 ]
%54 = phi float [ %83, %76 ], [ %36, %32 ]
%55 = phi float [ %82, %76 ], [ %35, %32 ]
%56 = phi float [ %81, %76 ], [ %7, %32 ]
%57 = phi float [ %80, %76 ], [ %39, %32 ]
%58 = phi float [ %79, %76 ], [ %38, %32 ]
%59 = fcmp olt float %57, %58
br i1 %59, label %60, label %68
60: ; preds = %50
%61 = fpext float %53 to double
%62 = fmul double %61, 0x3FD8722190488D0C
%63 = tail call double @llvm.fmuladd.f64(double %51, double 0x3FE3C6EF37DBB97A, double %62)
%64 = fptrunc double %63 to float
%65 = fpext float %64 to double
%66 = tail call float (double, ...) %37(double %65)
%67 = fpext float %54 to double
br label %76
68: ; preds = %50
%69 = fpext float %56 to double
%70 = fmul double %69, 0x3FD8722190488D0C
%71 = tail call double @llvm.fmuladd.f64(double %52, double 0x3FE3C6EF37DBB97A, double %70)
%72 = fptrunc double %71 to float
%73 = fpext float %72 to double
%74 = tail call float (double, ...) %37(double %73)
%75 = fpext float %55 to double
br label %76
76: ; preds = %68, %60
%77 = phi double [ %75, %68 ], [ %65, %60 ]
%78 = phi double [ %73, %68 ], [ %67, %60 ]
%79 = phi float [ %74, %68 ], [ %57, %60 ]
%80 = phi float [ %58, %68 ], [ %66, %60 ]
%81 = phi float [ %56, %68 ], [ %55, %60 ]
%82 = phi float [ %72, %68 ], [ %54, %60 ]
%83 = phi float [ %55, %68 ], [ %64, %60 ]
%84 = phi float [ %54, %68 ], [ %53, %60 ]
%85 = fsub float %84, %81
%86 = tail call float @llvm.fabs.f32(float %85)
%87 = fpext float %86 to double
%88 = tail call double @llvm.fabs.f64(double %78)
%89 = tail call double @llvm.fabs.f64(double %77)
%90 = fadd double %88, %89
%91 = fmul double %90, %40
%92 = fcmp olt double %91, %87
br i1 %92, label %50, label %93
93: ; preds = %76, %32
%94 = phi float [ %38, %32 ], [ %79, %76 ]
%95 = phi float [ %39, %32 ], [ %80, %76 ]
%96 = phi float [ %35, %32 ], [ %82, %76 ]
%97 = phi float [ %36, %32 ], [ %83, %76 ]
%98 = fcmp olt float %94, %95
%99 = select i1 %98, float %96, float %97
%100 = select i1 %98, float %94, float %95
store float %99, float* %5
ret float %100
}