#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 */
double cnd(double);
double exp(double);
double log(double);
double pow(double, double);
double sqrt(double);
double FixedStrikeLookback(int fCall, double S, double SMin, double SMax,
                           double X, double T, double r, double b, double v) {
  double sT, vsT, vv, erT, ebT, ebrT, m, d1, d2, e1, e2, result;
  sT = sqrt(T);
  vsT = v * sT;
  vv = v * v;
  erT = exp(-r * T);
  ebT = exp(b * T);
  ebrT = exp((b - r) * T);
  if (fCall)
    m = SMax;
  else
    m = SMin;
  d1 = (log(S / X) + (b + vv / 2.0) * T) / (vsT);
  d2 = d1 - vsT;
  e1 = (log(S / m) + (b + vv / 2.0) * T) / (vsT);
  e2 = e1 - vsT;
  if (fCall) {
    if (X > m) {
      result =
          S * ebrT * cnd(d1) - X * erT * cnd(d2) +
          S * erT * vv / (2.0 * b) *
              (-pow((S / X), (-2.0 * b / vv)) * cnd(d1 - 2.0 * b / v * sT) +
               ebT * cnd(d1));
    } else {
      result =
          erT * (m - X) + S * ebrT * cnd(e1) - erT * m * cnd(e2) +
          S * erT * vv / (2.0 * b) *
              (-pow((S / m), (-2.0 * b / vv)) * cnd(e1 - 2.0 * b / v * sT) +
               ebT * cnd(e1));
    }
  } else {
    if (X < m) {
      result =
          -S * ebrT * cnd(-d1) + X * erT * cnd(-d1 + v * sT) +
          S * erT * vv / (2.0 * b) *
              (pow((S / X), (-2.0 * b / vv)) * cnd(-d1 + 2.0 * b / v * sT) -
               ebT * cnd(-d1));
    } else {
      result =
          erT * (X - m) - S * ebrT * cnd(-e1) + erT * m * cnd(-e1 + vsT) +
          erT * vv / (2.0 * b) * S *
              (pow((S / m), (-2.0 * b / vv)) * cnd(-e1 + 2.0 * b / v * sT) -
               ebT * cnd(-e1));
    }
  }
  return result;
}


x86 assembly (clang, -O0):
<FixedStrikeLookback>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1d0,%rsp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     1224 <FixedStrikeLookback+0xd4>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    122e <FixedStrikeLookback+0xde>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x10(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
call   1040 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  0xdae(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x80(%rbp),%xmm0
call   1040 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  0xd53(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
cmpl   $0x0,-0x4(%rbp)
je     1682 <FixedStrikeLookback+0x532>
movsd  -0x28(%rbp),%xmm0
ucomisd -0x80(%rbp),%xmm0
jbe    14a3 <FixedStrikeLookback+0x353>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1050 <cnd@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1050 <cnd@plt>
movsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xc5f(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  0xc44(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  -0x60(%rbp),%xmm1
call   1060 <pow@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  0xbfe(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1050 <cnd@plt>
movsd  -0xd0(%rbp),%xmm3
ff
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xc0(%rbp),%xmm4
ff
movsd  -0xb8(%rbp),%xmm1
ff
movaps %xmm0,%xmm5
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  %xmm5,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    167d <FixedStrikeLookback+0x52d>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1050 <cnd@plt>
movsd  -0x138(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
call   1050 <cnd@plt>
movsd  -0x120(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x118(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xa80(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  0xa65(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  -0x60(%rbp),%xmm1
call   1060 <pow@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  0xa1f(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1050 <cnd@plt>
movsd  -0x110(%rbp),%xmm3
ff
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x100(%rbp),%xmm4
ff
movsd  -0xf8(%rbp),%xmm1
ff
movaps %xmm0,%xmm5
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm5,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    1abb <FixedStrikeLookback+0x96b>
movsd  -0x28(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1892 <FixedStrikeLookback+0x742>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <cnd@plt>
movsd  -0x178(%rbp),%xmm1
ff
movsd  -0x170(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x168(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0x887(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  0x86c(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  -0x60(%rbp),%xmm1
call   1060 <pow@plt>
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x826(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1050 <cnd@plt>
movsd  -0x160(%rbp),%xmm3
ff
movsd  -0x158(%rbp),%xmm2
ff
movsd  -0x150(%rbp),%xmm4
ff
movsd  -0x148(%rbp),%xmm1
ff
movaps %xmm0,%xmm5
movsd  -0x140(%rbp),%xmm0
ff
mulsd  %xmm5,%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    1ab6 <FixedStrikeLookback+0x966>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1050 <cnd@plt>
movsd  -0x1c8(%rbp),%xmm1
ff
movsd  -0x1c0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x1b8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x58(%rbp),%xmm0
call   1050 <cnd@plt>
movsd  -0x1b0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1a8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0x663(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  0x643(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  -0x60(%rbp),%xmm1
call   1060 <pow@plt>
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x5fd(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1050 <cnd@plt>
movsd  -0x1a0(%rbp),%xmm3
ff
movsd  -0x198(%rbp),%xmm2
ff
movsd  -0x190(%rbp),%xmm4
ff
movsd  -0x188(%rbp),%xmm1
ff
movaps %xmm0,%xmm5
movsd  -0x180(%rbp),%xmm0
ff
mulsd  %xmm5,%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    1abb <FixedStrikeLookback+0x96b>
movsd  -0xa8(%rbp),%xmm0
ff
add    $0x1d0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<FixedStrikeLookback>:
push   %rbx
sub    $0xa0,%rsp
movsd  %xmm7,0x70(%rsp)
movsd  %xmm6,0x18(%rsp)
movaps %xmm5,0x50(%rsp)
movsd  %xmm3,(%rsp)
movsd  %xmm2,0x40(%rsp)
movsd  %xmm1,0x20(%rsp)
movsd  %xmm0,0x8(%rsp)
mov    %edi,%ebx
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm4
movsd  %xmm4,0x30(%rsp)
jb     119b <FixedStrikeLookback+0x4b>
xorps  %xmm0,%xmm0
sqrtsd %xmm4,%xmm0
jmp    11aa <FixedStrikeLookback+0x5a>
movapd %xmm4,%xmm0
call   1070 <sqrt@plt>
movsd  0x30(%rsp),%xmm4
movsd  %xmm0,0x68(%rsp)
movapd 0xe48(%rip),%xmm0
xorpd  0x50(%rsp),%xmm0
mulsd  %xmm4,%xmm0
call   1030 <exp@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x30(%rsp),%xmm0
mulsd  0x18(%rsp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,0x80(%rsp)
movsd  0x18(%rsp),%xmm0
subsd  0x50(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,0x50(%rsp)
test   %ebx,%ebx
je     1214 <FixedStrikeLookback+0xc4>
movsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
divsd  (%rsp),%xmm0
movsd  %xmm0,0x90(%rsp)
call   1040 <log@plt>
movapd %xmm0,0x40(%rsp)
movsd  0x8(%rsp),%xmm0
divsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x98(%rsp)
call   1040 <log@plt>
movsd  0x68(%rsp),%xmm4
movsd  0x70(%rsp),%xmm1
mulsd  %xmm1,%xmm4
mulsd  %xmm1,%xmm1
movsd  0xda7(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  0x18(%rsp),%xmm3
mulsd  0x30(%rsp),%xmm3
movapd 0x40(%rsp),%xmm2
addsd  %xmm3,%xmm2
divsd  %xmm4,%xmm2
addsd  %xmm0,%xmm3
divsd  %xmm4,%xmm3
test   %ebx,%ebx
movsd  %xmm1,0x78(%rsp)
je     13c3 <FixedStrikeLookback+0x273>
movsd  (%rsp),%xmm1
movsd  0x20(%rsp),%xmm0
ucomisd %xmm0,%xmm1
jbe    14ff <FixedStrikeLookback+0x3af>
movapd %xmm2,%xmm0
movapd %xmm2,0x40(%rsp)
subsd  %xmm4,%xmm2
movapd %xmm2,0x30(%rsp)
movsd  0x50(%rsp),%xmm2
mulsd  0x8(%rsp),%xmm2
movsd  %xmm2,0x50(%rsp)
call   1050 <cnd@plt>
movsd  %xmm0,0x20(%rsp)
movapd 0x30(%rsp),%xmm0
call   1050 <cnd@plt>
movsd  0x10(%rsp),%xmm2
movsd  (%rsp),%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
mulsd  0x50(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rsp)
mulsd  0x8(%rsp),%xmm2
movsd  0x78(%rsp),%xmm0
mulsd  %xmm0,%xmm2
movsd  0x18(%rsp),%xmm1
movapd %xmm1,%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,(%rsp)
divsd  %xmm3,%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  0xccc(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0x90(%rsp),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mulsd  0x68(%rsp),%xmm0
movapd %xmm0,%xmm1
movapd 0x40(%rsp),%xmm0
subsd  %xmm1,%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,0x18(%rsp)
movapd 0x40(%rsp),%xmm0
call   1050 <cnd@plt>
mulsd  0x80(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
subsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  0x20(%rsp),%xmm0
jmp    1767 <FixedStrikeLookback+0x617>
movsd  %xmm4,0x88(%rsp)
movsd  (%rsp),%xmm1
movsd  0x20(%rsp),%xmm4
ucomisd %xmm1,%xmm4
jbe    1635 <FixedStrikeLookback+0x4e5>
movsd  0x50(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
movapd 0xc05(%rip),%xmm0
movapd %xmm2,0x40(%rsp)
xorpd  %xmm2,%xmm0
movapd %xmm0,0x20(%rsp)
call   1050 <cnd@plt>
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x88(%rsp),%xmm0
subsd  0x40(%rsp),%xmm0
call   1050 <cnd@plt>
mulsd  (%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
mulsd  0x50(%rsp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rsp)
movsd  0x10(%rsp),%xmm2
mulsd  0x8(%rsp),%xmm2
movsd  0x78(%rsp),%xmm0
mulsd  %xmm0,%xmm2
movsd  0x18(%rsp),%xmm1
movapd %xmm1,%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,0x30(%rsp)
divsd  %xmm3,%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  0xb88(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0x90(%rsp),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x30(%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mulsd  0x68(%rsp),%xmm0
subsd  0x40(%rsp),%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,0x18(%rsp)
movapd 0x20(%rsp),%xmm0
call   1050 <cnd@plt>
mulsd  0x80(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  (%rsp),%xmm1
jmp    1763 <FixedStrikeLookback+0x613>
movapd %xmm3,%xmm2
subsd  %xmm4,%xmm2
movapd %xmm2,0x40(%rsp)
movapd %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rsp)
movsd  0x50(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
movsd  %xmm1,0x50(%rsp)
movsd  %xmm0,0x20(%rsp)
movapd %xmm3,%xmm0
movapd %xmm3,0x30(%rsp)
call   1050 <cnd@plt>
mulsd  0x50(%rsp),%xmm0
movsd  (%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rsp)
movapd 0x40(%rsp),%xmm0
call   1050 <cnd@plt>
movsd  0x10(%rsp),%xmm2
movsd  0x20(%rsp),%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movsd  (%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rsp)
mulsd  0x8(%rsp),%xmm2
movsd  0x78(%rsp),%xmm0
mulsd  %xmm0,%xmm2
movsd  0x18(%rsp),%xmm1
movapd %xmm1,%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,0x20(%rsp)
divsd  %xmm3,%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  0xa5a(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0x98(%rsp),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mulsd  0x68(%rsp),%xmm0
movapd %xmm0,%xmm1
movapd 0x30(%rsp),%xmm0
subsd  %xmm1,%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,0x18(%rsp)
movapd 0x30(%rsp),%xmm0
call   1050 <cnd@plt>
mulsd  0x80(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
subsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  (%rsp),%xmm0
jmp    1767 <FixedStrikeLookback+0x617>
subsd  %xmm4,%xmm1
movsd  %xmm1,(%rsp)
movapd 0x9ba(%rip),%xmm0
xorpd  %xmm3,%xmm0
movapd %xmm0,0x40(%rsp)
movsd  %xmm4,0x20(%rsp)
movapd %xmm3,0x30(%rsp)
call   1050 <cnd@plt>
movsd  0x50(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x10(%rsp),%xmm2
movsd  (%rsp),%xmm0
mulsd  %xmm2,%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x88(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
call   1050 <cnd@plt>
mulsd  0x20(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x78(%rsp),%xmm0
movsd  0x10(%rsp),%xmm2
mulsd  %xmm0,%xmm2
movsd  0x18(%rsp),%xmm1
movapd %xmm1,%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,(%rsp)
divsd  %xmm3,%xmm2
mulsd  0x8(%rsp),%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  0x91f(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0x98(%rsp),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mulsd  0x68(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
call   1050 <cnd@plt>
movsd  %xmm0,0x18(%rsp)
movapd 0x40(%rsp),%xmm0
call   1050 <cnd@plt>
mulsd  0x80(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  0x20(%rsp),%xmm1
movapd %xmm1,%xmm0
add    $0xa0,%rsp
pop    %rbx
ret

LLVM IR (-O0):
define double @FixedStrikeLookback(i32 %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8) {
%10 = alloca i32
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
store i32 %0, i32* %10
store double %1, double* %11
store double %2, double* %12
store double %3, double* %13
store double %4, double* %14
store double %5, double* %15
store double %6, double* %16
store double %7, double* %17
store double %8, double* %18
%31 = load double, double* %15
%32 = call double @sqrt(double %31)
store double %32, double* %19
%33 = load double, double* %18
%34 = load double, double* %19
%35 = fmul double %33, %34
store double %35, double* %20
%36 = load double, double* %18
%37 = load double, double* %18
%38 = fmul double %36, %37
store double %38, double* %21
%39 = load double, double* %16
%40 = fneg double %39
%41 = load double, double* %15
%42 = fmul double %40, %41
%43 = call double @exp(double %42)
store double %43, double* %22
%44 = load double, double* %17
%45 = load double, double* %15
%46 = fmul double %44, %45
%47 = call double @exp(double %46)
store double %47, double* %23
%48 = load double, double* %17
%49 = load double, double* %16
%50 = fsub double %48, %49
%51 = load double, double* %15
%52 = fmul double %50, %51
%53 = call double @exp(double %52)
store double %53, double* %24
%54 = load i32, i32* %10
%55 = icmp ne i32 %54, 0
br i1 %55, label %56, label %58
56: ; preds = %9
%57 = load double, double* %13
store double %57, double* %25
br label %60
58: ; preds = %9
%59 = load double, double* %12
store double %59, double* %25
br label %60
60: ; preds = %58, %56
%61 = load double, double* %11
%62 = load double, double* %14
%63 = fdiv double %61, %62
%64 = call double @log(double %63)
%65 = load double, double* %17
%66 = load double, double* %21
%67 = fdiv double %66, 2.000000e+00
%68 = fadd double %65, %67
%69 = load double, double* %15
%70 = call double @llvm.fmuladd.f64(double %68, double %69, double %64)
%71 = load double, double* %20
%72 = fdiv double %70, %71
store double %72, double* %26
%73 = load double, double* %26
%74 = load double, double* %20
%75 = fsub double %73, %74
store double %75, double* %27
%76 = load double, double* %11
%77 = load double, double* %25
%78 = fdiv double %76, %77
%79 = call double @log(double %78)
%80 = load double, double* %17
%81 = load double, double* %21
%82 = fdiv double %81, 2.000000e+00
%83 = fadd double %80, %82
%84 = load double, double* %15
%85 = call double @llvm.fmuladd.f64(double %83, double %84, double %79)
%86 = load double, double* %20
%87 = fdiv double %85, %86
store double %87, double* %28
%88 = load double, double* %28
%89 = load double, double* %20
%90 = fsub double %88, %89
store double %90, double* %29
%91 = load i32, i32* %10
%92 = icmp ne i32 %91, 0
br i1 %92, label %93, label %195
93: ; preds = %60
%94 = load double, double* %14
%95 = load double, double* %25
%96 = fcmp ogt double %94, %95
br i1 %96, label %97, label %143
97: ; preds = %93
%98 = load double, double* %11
%99 = load double, double* %24
%100 = fmul double %98, %99
%101 = load double, double* %26
%102 = call double @cnd(double %101)
%103 = load double, double* %14
%104 = load double, double* %22
%105 = fmul double %103, %104
%106 = load double, double* %27
%107 = call double @cnd(double %106)
%108 = fmul double %105, %107
%109 = fneg double %108
%110 = call double @llvm.fmuladd.f64(double %100, double %102, double %109)
%111 = load double, double* %11
%112 = load double, double* %22
%113 = fmul double %111, %112
%114 = load double, double* %21
%115 = fmul double %113, %114
%116 = load double, double* %17
%117 = fmul double 2.000000e+00, %116
%118 = fdiv double %115, %117
%119 = load double, double* %11
%120 = load double, double* %14
%121 = fdiv double %119, %120
%122 = load double, double* %17
%123 = fmul double -2.000000e+00, %122
%124 = load double, double* %21
%125 = fdiv double %123, %124
%126 = call double @pow(double %121, double %125)
%127 = fneg double %126
%128 = load double, double* %26
%129 = load double, double* %17
%130 = fmul double 2.000000e+00, %129
%131 = load double, double* %18
%132 = fdiv double %130, %131
%133 = load double, double* %19
%134 = fneg double %132
%135 = call double @llvm.fmuladd.f64(double %134, double %133, double %128)
%136 = call double @cnd(double %135)
%137 = load double, double* %23
%138 = load double, double* %26
%139 = call double @cnd(double %138)
%140 = fmul double %137, %139
%141 = call double @llvm.fmuladd.f64(double %127, double %136, double %140)
%142 = call double @llvm.fmuladd.f64(double %118, double %141, double %110)
store double %142, double* %30
br label %194
143: ; preds = %93
%144 = load double, double* %22
%145 = load double, double* %25
%146 = load double, double* %14
%147 = fsub double %145, %146
%148 = load double, double* %11
%149 = load double, double* %24
%150 = fmul double %148, %149
%151 = load double, double* %28
%152 = call double @cnd(double %151)
%153 = fmul double %150, %152
%154 = call double @llvm.fmuladd.f64(double %144, double %147, double %153)
%155 = load double, double* %22
%156 = load double, double* %25
%157 = fmul double %155, %156
%158 = load double, double* %29
%159 = call double @cnd(double %158)
%160 = fneg double %157
%161 = call double @llvm.fmuladd.f64(double %160, double %159, double %154)
%162 = load double, double* %11
%163 = load double, double* %22
%164 = fmul double %162, %163
%165 = load double, double* %21
%166 = fmul double %164, %165
%167 = load double, double* %17
%168 = fmul double 2.000000e+00, %167
%169 = fdiv double %166, %168
%170 = load double, double* %11
%171 = load double, double* %25
%172 = fdiv double %170, %171
%173 = load double, double* %17
%174 = fmul double -2.000000e+00, %173
%175 = load double, double* %21
%176 = fdiv double %174, %175
%177 = call double @pow(double %172, double %176)
%178 = fneg double %177
%179 = load double, double* %28
%180 = load double, double* %17
%181 = fmul double 2.000000e+00, %180
%182 = load double, double* %18
%183 = fdiv double %181, %182
%184 = load double, double* %19
%185 = fneg double %183
%186 = call double @llvm.fmuladd.f64(double %185, double %184, double %179)
%187 = call double @cnd(double %186)
%188 = load double, double* %23
%189 = load double, double* %28
%190 = call double @cnd(double %189)
%191 = fmul double %188, %190
%192 = call double @llvm.fmuladd.f64(double %178, double %187, double %191)
%193 = call double @llvm.fmuladd.f64(double %169, double %192, double %161)
store double %193, double* %30
br label %194
194: ; preds = %143, %97
br label %308
195: ; preds = %60
%196 = load double, double* %14
%197 = load double, double* %25
%198 = fcmp olt double %196, %197
br i1 %198, label %199, label %251
199: ; preds = %195
%200 = load double, double* %11
%201 = fneg double %200
%202 = load double, double* %24
%203 = fmul double %201, %202
%204 = load double, double* %26
%205 = fneg double %204
%206 = call double @cnd(double %205)
%207 = load double, double* %14
%208 = load double, double* %22
%209 = fmul double %207, %208
%210 = load double, double* %26
%211 = fneg double %210
%212 = load double, double* %18
%213 = load double, double* %19
%214 = call double @llvm.fmuladd.f64(double %212, double %213, double %211)
%215 = call double @cnd(double %214)
%216 = fmul double %209, %215
%217 = call double @llvm.fmuladd.f64(double %203, double %206, double %216)
%218 = load double, double* %11
%219 = load double, double* %22
%220 = fmul double %218, %219
%221 = load double, double* %21
%222 = fmul double %220, %221
%223 = load double, double* %17
%224 = fmul double 2.000000e+00, %223
%225 = fdiv double %222, %224
%226 = load double, double* %11
%227 = load double, double* %14
%228 = fdiv double %226, %227
%229 = load double, double* %17
%230 = fmul double -2.000000e+00, %229
%231 = load double, double* %21
%232 = fdiv double %230, %231
%233 = call double @pow(double %228, double %232)
%234 = load double, double* %26
%235 = fneg double %234
%236 = load double, double* %17
%237 = fmul double 2.000000e+00, %236
%238 = load double, double* %18
%239 = fdiv double %237, %238
%240 = load double, double* %19
%241 = call double @llvm.fmuladd.f64(double %239, double %240, double %235)
%242 = call double @cnd(double %241)
%243 = load double, double* %23
%244 = load double, double* %26
%245 = fneg double %244
%246 = call double @cnd(double %245)
%247 = fmul double %243, %246
%248 = fneg double %247
%249 = call double @llvm.fmuladd.f64(double %233, double %242, double %248)
%250 = call double @llvm.fmuladd.f64(double %225, double %249, double %217)
store double %250, double* %30
br label %307
251: ; preds = %195
%252 = load double, double* %22
%253 = load double, double* %14
%254 = load double, double* %25
%255 = fsub double %253, %254
%256 = load double, double* %11
%257 = load double, double* %24
%258 = fmul double %256, %257
%259 = load double, double* %28
%260 = fneg double %259
%261 = call double @cnd(double %260)
%262 = fmul double %258, %261
%263 = fneg double %262
%264 = call double @llvm.fmuladd.f64(double %252, double %255, double %263)
%265 = load double, double* %22
%266 = load double, double* %25
%267 = fmul double %265, %266
%268 = load double, double* %28
%269 = fneg double %268
%270 = load double, double* %20
%271 = fadd double %269, %270
%272 = call double @cnd(double %271)
%273 = call double @llvm.fmuladd.f64(double %267, double %272, double %264)
%274 = load double, double* %22
%275 = load double, double* %21
%276 = fmul double %274, %275
%277 = load double, double* %17
%278 = fmul double 2.000000e+00, %277
%279 = fdiv double %276, %278
%280 = load double, double* %11
%281 = fmul double %279, %280
%282 = load double, double* %11
%283 = load double, double* %25
%284 = fdiv double %282, %283
%285 = load double, double* %17
%286 = fmul double -2.000000e+00, %285
%287 = load double, double* %21
%288 = fdiv double %286, %287
%289 = call double @pow(double %284, double %288)
%290 = load double, double* %28
%291 = fneg double %290
%292 = load double, double* %17
%293 = fmul double 2.000000e+00, %292
%294 = load double, double* %18
%295 = fdiv double %293, %294
%296 = load double, double* %19
%297 = call double @llvm.fmuladd.f64(double %295, double %296, double %291)
%298 = call double @cnd(double %297)
%299 = load double, double* %23
%300 = load double, double* %28
%301 = fneg double %300
%302 = call double @cnd(double %301)
%303 = fmul double %299, %302
%304 = fneg double %303
%305 = call double @llvm.fmuladd.f64(double %289, double %298, double %304)
%306 = call double @llvm.fmuladd.f64(double %281, double %305, double %273)
store double %306, double* %30
br label %307
307: ; preds = %251, %199
br label %308
308: ; preds = %307, %194
%309 = load double, double* %30
ret double %309
}

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