double ExtremeSpreadOption(int option_type, double S, double SMin, double SMax,
                           double t1, double T, double r, double b, double v) {
  int eta, kappa;
  double Mo, p2v, mu1, mu, m, e2mu, erT, erTMo, SbrT, x, vsT, result;
  assert(((S) == (S)) && (S) >= 0.000001 && (S) <= 1000000000000.0);
  assert(((T) == (T)) && (T) >= (1.0 / (253.0 * 24.0)) && (T) <= (20.0));
  assert(((r) == (r)) && (r) >= 0.0 && (r) <= 1000.0);
  assert(((b) == (b)) && (b) >= -1000.0 && (b) <= 1000.0);
  assert(((v) == (v)) && (v) >= 0.0000001 && v <= 100.99999);
  assert(T > t1 && "We cannot have negative durations ");
  assert(t1 > 0.0 && "If t1 == 0.0, then v * sqrt(t1) becomes 0.0 and later "
                     "stuff becomes NaN");
  if (option_type == 1 || option_type == 3)
    eta = 1;
  else
    eta = -1;
  if (option_type == 1 || option_type == 2)
    kappa = 1;
  else
    kappa = -1;
  if (kappa * eta == 1)
    Mo = SMax;
  else if (kappa * eta == -1)
    Mo = SMin;
  else
    abort();
  p2v = ((v) * (v));
  mu1 = b - p2v / 2.0;
  mu = mu1 + p2v;
  m = log(Mo / S);
  e2mu = exp(2.0 * mu1 * m / p2v);
  erT = exp(-r * T);
  erTMo = erT * Mo;
  SbrT = S * exp((b - r) * T);
  x = SbrT * (1.0 + p2v / (2.0 * b));
  vsT = v * sqrt(T);
  if (kappa == 1) {
    const double vst1 = v * sqrt(t1);
    result =
        eta *
        (x * cnd(eta * (-m + mu * T) / vsT) -
         exp(-r * (T - t1)) * SbrT * (1.0 + p2v / (2.0 * b)) *
             cnd(eta * (-m + mu * t1) / vst1) +
         erTMo * cnd(eta * (m - mu1 * T) / vsT) -
         erTMo * p2v / (2.0 * b) * e2mu * cnd(eta * (-m - mu1 * T) / vsT) -
         erTMo * cnd(eta * (m - mu1 * t1) / vst1) +
         erTMo * p2v / (2.0 * b) * e2mu * cnd(eta * (-m - mu1 * t1) / vst1));
  } else if (kappa == -1) {
    double vsTt1 = v * sqrt(T - t1);
    result =
        -eta *
        (x * cnd(eta * (m - mu * T) / vsT) +
         erTMo * cnd(eta * (-m + mu1 * T) / vsT) -
         erTMo * p2v / (2.0 * b) * e2mu * cnd(eta * (m + mu1 * T) / vsT) -
         SbrT * (1.0 + p2v / (2.0 * b)) * cnd(eta * (-mu * (T - t1)) / vsTt1) -
         exp(-r * (T - t1)) * SbrT * (1.0 - p2v / (2.0 * b)) *
             cnd(eta * (mu1 * (T - t1)) / vsTt1));
  } else
    abort();
  assert(((result) == (result)));
  return result;
}


x86 assembly (clang, -O0):
<ExtremeSpreadOption>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1a0,%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  -0x10(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x10(%rbp),%xmm0
mov    %al,-0xc1(%rbp)
jne    11e9 <ExtremeSpreadOption+0x89>
jp     11e9 <ExtremeSpreadOption+0x89>
movsd  -0x10(%rbp),%xmm0
xor    %eax,%eax
movsd  0xe3d(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xc1(%rbp)
jb     11e9 <ExtremeSpreadOption+0x89>
movsd  0xe2d(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
setae  %al
mov    %al,-0xc1(%rbp)
mov    -0xc1(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0x30(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x30(%rbp),%xmm0
mov    %al,-0xc2(%rbp)
jne    124e <ExtremeSpreadOption+0xee>
jp     124e <ExtremeSpreadOption+0xee>
movsd  -0x30(%rbp),%xmm0
xor    %eax,%eax
movsd  0xde8(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xc2(%rbp)
jb     124e <ExtremeSpreadOption+0xee>
movsd  0xdd8(%rip),%xmm0
ucomisd -0x30(%rbp),%xmm0
setae  %al
mov    %al,-0xc2(%rbp)
mov    -0xc2(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0x38(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x38(%rbp),%xmm0
mov    %al,-0xc3(%rbp)
jne    12ae <ExtremeSpreadOption+0x14e>
jp     12ae <ExtremeSpreadOption+0x14e>
movsd  -0x38(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xc3(%rbp)
jb     12ae <ExtremeSpreadOption+0x14e>
movsd  0xd80(%rip),%xmm0
ucomisd -0x38(%rbp),%xmm0
setae  %al
mov    %al,-0xc3(%rbp)
mov    -0xc3(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0x40(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x40(%rbp),%xmm0
mov    %al,-0xc4(%rbp)
jne    1313 <ExtremeSpreadOption+0x1b3>
jp     1313 <ExtremeSpreadOption+0x1b3>
movsd  -0x40(%rbp),%xmm0
xor    %eax,%eax
movsd  0xd3b(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xc4(%rbp)
jb     1313 <ExtremeSpreadOption+0x1b3>
movsd  0xd1b(%rip),%xmm0
ucomisd -0x40(%rbp),%xmm0
setae  %al
mov    %al,-0xc4(%rbp)
mov    -0xc4(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0x48(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x48(%rbp),%xmm0
mov    %al,-0xc5(%rbp)
jne    1378 <ExtremeSpreadOption+0x218>
jp     1378 <ExtremeSpreadOption+0x218>
movsd  -0x48(%rbp),%xmm0
xor    %eax,%eax
movsd  0xcde(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xc5(%rbp)
jb     1378 <ExtremeSpreadOption+0x218>
movsd  0xcce(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
setae  %al
mov    %al,-0xc5(%rbp)
mov    -0xc5(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0x30(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x28(%rbp),%xmm0
mov    %al,-0xc6(%rbp)
jbe    13af <ExtremeSpreadOption+0x24f>
mov    $0x1,%al
mov    %al,-0xc6(%rbp)
jmp    13af <ExtremeSpreadOption+0x24f>
mov    -0xc6(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0x28(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xc7(%rbp)
jbe    13e8 <ExtremeSpreadOption+0x288>
mov    $0x1,%al
mov    %al,-0xc7(%rbp)
jmp    13e8 <ExtremeSpreadOption+0x288>
mov    -0xc7(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
cmpl   $0x1,-0x4(%rbp)
je     140e <ExtremeSpreadOption+0x2ae>
cmpl   $0x3,-0x4(%rbp)
jne    141a <ExtremeSpreadOption+0x2ba>
movl   $0x1,-0x4c(%rbp)
jmp    1421 <ExtremeSpreadOption+0x2c1>
movl   $0xffffffff,-0x4c(%rbp)
cmpl   $0x1,-0x4(%rbp)
je     1435 <ExtremeSpreadOption+0x2d5>
cmpl   $0x2,-0x4(%rbp)
jne    1441 <ExtremeSpreadOption+0x2e1>
movl   $0x1,-0x50(%rbp)
jmp    1448 <ExtremeSpreadOption+0x2e8>
movl   $0xffffffff,-0x50(%rbp)
mov    -0x50(%rbp),%eax
imul   -0x4c(%rbp),%eax
cmp    $0x1,%eax
jne    1467 <ExtremeSpreadOption+0x307>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1490 <ExtremeSpreadOption+0x330>
mov    -0x50(%rbp),%eax
imul   -0x4c(%rbp),%eax
cmp    $0xffffffff,%eax
jne    1486 <ExtremeSpreadOption+0x326>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    148b <ExtremeSpreadOption+0x32b>
call   1030 <abort@plt>
jmp    1490 <ExtremeSpreadOption+0x330>
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  0xb97(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  0xb5f(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
divsd  -0x60(%rbp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  0xab6(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0xa9d(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
cmpl   $0x1,-0x50(%rbp)
jne    1a05 <ExtremeSpreadOption+0x8a5>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x140(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x70(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x30(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1050 <exp@plt>
mulsd  -0x98(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  0x97c(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0x963(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x70(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x138(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm0
ff
movsd  -0x128(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x120(%rbp),%xmm0
ff
movsd  -0x118(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  0x83f(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x68(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x110(%rbp),%xmm0
ff
movsd  -0x108(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  0x6eb(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x68(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0xf0(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    1d69 <ExtremeSpreadOption+0xc09>
cmpl   $0xffffffff,-0x50(%rbp)
jne    1d5f <ExtremeSpreadOption+0xbff>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x198(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
xor    %eax,%eax
sub    -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x188(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x190(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x68(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x190(%rbp),%xmm1
ff
movsd  -0x188(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  0x4f8(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x178(%rbp),%xmm0
ff
movsd  -0x170(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  0x463(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0x44a(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x30(%rbp),%xmm2
subsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xc0(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x168(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x30(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1050 <exp@plt>
mulsd  -0x98(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  0x381(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0x368(%rip),%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
subsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0xc0(%rbp),%xmm0
ff
mov    $0x1,%al
call   1070 <cnd@plt>
movsd  -0x158(%rbp),%xmm1
ff
movsd  -0x150(%rbp),%xmm2
ff
movsd  -0x148(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    1d64 <ExtremeSpreadOption+0xc04>
call   1030 <abort@plt>
jmp    1d69 <ExtremeSpreadOption+0xc09>
movsd  -0xb0(%rbp),%xmm0
ff
ucomisd -0xb0(%rbp),%xmm0
ff
sete   %al
setnp  %cl
and    %cl,%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0xb0(%rbp),%xmm0
ff
add    $0x1a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ExtremeSpreadOption>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0xd8,%rsp
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xe84(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xe7e(%rip),%xmm8
movsd  %xmm0,0x18(%rsp)
ucomisd %xmm0,%xmm8
movsd  %xmm7,(%rsp)
movsd  %xmm6,0x38(%rsp)
movaps %xmm5,0x70(%rsp)
movsd  %xmm4,0x10(%rsp)
movsd  %xmm3,0x8(%rsp)
movsd  %xmm2,0x20(%rsp)
movsd  %xmm1,0x40(%rsp)
mov    %edi,%ebx
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1040 <assert@plt>
movsd  0x10(%rsp),%xmm1
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xe2d(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xe28(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1040 <assert@plt>
xorpd  %xmm0,%xmm0
movapd 0x70(%rsp),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
movsd  0xe04(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %cl
and    %al,%cl
movzbl %cl,%edi
xor    %eax,%eax
call   1040 <assert@plt>
movsd  0x38(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xde4(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xdcf(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1040 <assert@plt>
movsd  (%rsp),%xmm1
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xdb8(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xdb3(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1040 <assert@plt>
xor    %edi,%edi
movsd  0x10(%rsp),%xmm0
ucomisd 0x8(%rsp),%xmm0
seta   %dil
xor    %eax,%eax
call   1040 <assert@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
ucomisd 0xd8f(%rip),%xmm0
seta   %dil
xor    %eax,%eax
call   1040 <assert@plt>
movsd  0x20(%rsp),%xmm0
mov    %ebx,%eax
and    $0xfffffffd,%eax
xor    %ecx,%ecx
xor    %ebp,%ebp
cmp    $0x1,%eax
sete   %cl
setne  %r15b
lea    (%rcx,%rcx,1),%r14d
add    $0xffffffff,%r14d
add    %ecx,%ecx
add    $0xffffffff,%ebx
mov    $0x1,%eax
sub    %ecx,%eax
cmp    $0x2,%ebx
cmovb  %r14d,%eax
cmp    $0x1,%eax
je     1314 <ExtremeSpreadOption+0x1b4>
movsd  0x40(%rsp),%xmm0
cmp    $0xffffffff,%eax
jne    18fb <ExtremeSpreadOption+0x79b>
movsd  (%rsp),%xmm1
mulsd  %xmm1,%xmm1
movsd  %xmm1,0x68(%rsp)
movsd  0xd15(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0x38(%rsp),%xmm2
movapd %xmm2,0x40(%rsp)
movsd  %xmm0,0x20(%rsp)
divsd  0x18(%rsp),%xmm0
call   1060 <log@plt>
movapd %xmm0,%xmm1
movapd 0x40(%rsp),%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm1,0x30(%rsp)
mulsd  %xmm1,%xmm0
divsd  0x68(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x60(%rsp)
movapd 0xce3(%rip),%xmm0
xorpd  0x70(%rsp),%xmm0
movapd %xmm0,0xa0(%rsp)
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x38(%rsp),%xmm0
subsd  0x70(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  0x10(%rsp),%xmm1
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x88(%rsp)
movsd  0x38(%rsp),%xmm2
addsd  %xmm2,%xmm2
movsd  0x68(%rsp),%xmm0
movsd  %xmm2,0x38(%rsp)
divsd  %xmm2,%xmm0
movsd  0xc5d(%rip),%xmm6
movsd  %xmm0,0x80(%rsp)
addsd  %xmm0,%xmm6
ucomisd 0xc50(%rip),%xmm1
movsd  %xmm6,0x58(%rsp)
jb     140e <ExtremeSpreadOption+0x2ae>
sqrtsd %xmm1,%xmm4
jmp    1427 <ExtremeSpreadOption+0x2c7>
movapd %xmm1,%xmm0
call   1080 <sqrt@plt>
movsd  0x58(%rsp),%xmm6
movsd  0x10(%rsp),%xmm1
movapd %xmm0,%xmm4
movsd  0x8(%rsp),%xmm0
movsd  0x68(%rsp),%xmm5
addsd  0x40(%rsp),%xmm5
movsd  0x20(%rsp),%xmm2
mulsd  0x28(%rsp),%xmm2
movapd %xmm6,%xmm3
mulsd  0x88(%rsp),%xmm3
movsd  %xmm3,0x18(%rsp)
mulsd  (%rsp),%xmm4
cmp    $0x1,%ebx
movsd  %xmm2,0x20(%rsp)
movsd  %xmm4,0x70(%rsp)
ja     148a <ExtremeSpreadOption+0x32a>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
movapd %xmm5,0x90(%rsp)
jb     14b9 <ExtremeSpreadOption+0x359>
xorps  %xmm2,%xmm2
sqrtsd %xmm0,%xmm2
jmp    14d7 <ExtremeSpreadOption+0x377>
mov    %r15b,%bpl
lea    -0x1(%rbp,%rbp,1),%ebx
movapd %xmm1,%xmm2
subsd  %xmm0,%xmm2
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm2
movsd  %xmm2,0x28(%rsp)
jb     16e0 <ExtremeSpreadOption+0x580>
xorps  %xmm0,%xmm0
sqrtsd %xmm2,%xmm0
jmp    1707 <ExtremeSpreadOption+0x5a7>
call   1080 <sqrt@plt>
movapd 0x90(%rsp),%xmm5
movsd  0x70(%rsp),%xmm4
movsd  0x10(%rsp),%xmm1
movapd %xmm0,%xmm2
mulsd  (%rsp),%xmm2
movsd  %xmm2,0x28(%rsp)
xorps  %xmm2,%xmm2
cvtsi2sd %r14d,%xmm2
movsd  %xmm2,(%rsp)
movapd %xmm5,%xmm0
mulsd  %xmm1,%xmm0
subsd  0x30(%rsp),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm4,%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x80(%rsp)
movsd  0x10(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mulsd  0xa0(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0xa0(%rsp)
movapd 0x90(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x28(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x88(%rsp),%xmm1
mulsd  0xa0(%rsp),%xmm1
movsd  0x58(%rsp),%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
movsd  0x18(%rsp),%xmm0
mulsd  0x80(%rsp),%xmm0
subsd  %xmm2,%xmm0
movsd  %xmm0,0x18(%rsp)
movapd 0x40(%rsp),%xmm0
xorpd  0xaac(%rip),%xmm0
movapd %xmm0,0x40(%rsp)
movsd  0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movapd %xmm1,%xmm0
addsd  0x30(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x68(%rsp),%xmm0
mulsd  %xmm1,%xmm0
divsd  0x38(%rsp),%xmm0
movsd  0x60(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x60(%rsp)
movsd  0x10(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x60(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
movapd 0x40(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movapd %xmm0,0x40(%rsp)
addsd  0x30(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x28(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
movapd 0x40(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x28(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x60(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
mulsd  (%rsp),%xmm0
jmp    18d0 <ExtremeSpreadOption+0x770>
movapd %xmm2,%xmm0
movapd %xmm5,0x90(%rsp)
call   1080 <sqrt@plt>
movapd 0x90(%rsp),%xmm5
movsd  0x70(%rsp),%xmm4
movsd  0x10(%rsp),%xmm1
mulsd  (%rsp),%xmm0
movsd  %xmm0,0x58(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  %xmm0,0xb8(%rsp)
xorps  %xmm2,%xmm2
cvtsi2sd %r14d,%xmm2
movsd  %xmm2,(%rsp)
movapd 0x929(%rip),%xmm0
xorpd  %xmm5,%xmm0
movapd %xmm0,0xc0(%rsp)
mulsd  %xmm1,%xmm5
movsd  0x30(%rsp),%xmm0
subsd  %xmm5,%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm4,%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
mulsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
subsd  0x30(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  0x18(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x70(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x68(%rsp),%xmm2
mulsd  0x20(%rsp),%xmm2
divsd  0x38(%rsp),%xmm2
movsd  0x60(%rsp),%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd 0xc0(%rsp),%xmm0
mulsd  0x28(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x58(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x18(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movapd 0xa0(%rsp),%xmm0
mulsd  0x28(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x7d8(%rip),%xmm0
subsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x28(%rsp),%xmm0
mulsd  0x40(%rsp),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x58(%rsp),%xmm0
mov    $0x1,%al
call   1070 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x88(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
mulsd  0x20(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
mulsd  0xb8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
xor    %edi,%edi
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1040 <assert@plt>
movsd  0x8(%rsp),%xmm0
add    $0xd8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
call   1030 <abort@plt>

LLVM IR (-O0):
@.str = [35 x i8] c"We cannot have negative durations \00"
@.str.1 = [72 x i8] c"If t1 == 0.0, then v * sqrt(t1) becomes 0.0 and later stuff becomes NaN\00"
define double @ExtremeSpreadOption(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 i32
%20 = alloca i32
%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
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = 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
%35 = load double, double* %11
%36 = load double, double* %11
%37 = fcmp oeq double %35, %36
br i1 %37, label %38, label %44
38: ; preds = %9
%39 = load double, double* %11
%40 = fcmp oge double %39, 0x3EB0C6F7A0B5ED8D
br i1 %40, label %41, label %44
41: ; preds = %38
%42 = load double, double* %11
%43 = fcmp ole double %42, 1.000000e+12
br label %44
44: ; preds = %41, %38, %9
%45 = phi i1 [ false, %38 ], [ false, %9 ], [ %43, %41 ]
%46 = zext i1 %45 to i32
%47 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %46)
%48 = load double, double* %15
%49 = load double, double* %15
%50 = fcmp oeq double %48, %49
br i1 %50, label %51, label %57
51: ; preds = %44
%52 = load double, double* %15
%53 = fcmp oge double %52, 0x3F2596179C29D2CE
br i1 %53, label %54, label %57
54: ; preds = %51
%55 = load double, double* %15
%56 = fcmp ole double %55, 2.000000e+01
br label %57
57: ; preds = %54, %51, %44
%58 = phi i1 [ false, %51 ], [ false, %44 ], [ %56, %54 ]
%59 = zext i1 %58 to i32
%60 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %59)
%61 = load double, double* %16
%62 = load double, double* %16
%63 = fcmp oeq double %61, %62
br i1 %63, label %64, label %70
64: ; preds = %57
%65 = load double, double* %16
%66 = fcmp oge double %65, 0.000000e+00
br i1 %66, label %67, label %70
67: ; preds = %64
%68 = load double, double* %16
%69 = fcmp ole double %68, 1.000000e+03
br label %70
70: ; preds = %67, %64, %57
%71 = phi i1 [ false, %64 ], [ false, %57 ], [ %69, %67 ]
%72 = zext i1 %71 to i32
%73 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %72)
%74 = load double, double* %17
%75 = load double, double* %17
%76 = fcmp oeq double %74, %75
br i1 %76, label %77, label %83
77: ; preds = %70
%78 = load double, double* %17
%79 = fcmp oge double %78, -1.000000e+03
br i1 %79, label %80, label %83
80: ; preds = %77
%81 = load double, double* %17
%82 = fcmp ole double %81, 1.000000e+03
br label %83
83: ; preds = %80, %77, %70
%84 = phi i1 [ false, %77 ], [ false, %70 ], [ %82, %80 ]
%85 = zext i1 %84 to i32
%86 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %85)
%87 = load double, double* %18
%88 = load double, double* %18
%89 = fcmp oeq double %87, %88
br i1 %89, label %90, label %96
90: ; preds = %83
%91 = load double, double* %18
%92 = fcmp oge double %91, 0x3E7AD7F29ABCAF48
br i1 %92, label %93, label %96
93: ; preds = %90
%94 = load double, double* %18
%95 = fcmp ole double %94, 0x40593FFFD60E94EE
br label %96
96: ; preds = %93, %90, %83
%97 = phi i1 [ false, %90 ], [ false, %83 ], [ %95, %93 ]
%98 = zext i1 %97 to i32
%99 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %98)
%100 = load double, double* %15
%101 = load double, double* %14
%102 = fcmp ogt double %100, %101
br i1 %102, label %103, label %104
103: ; preds = %96
br label %104
104: ; preds = %103, %96
%105 = phi i1 [ false, %96 ], [ true, %103 ]
%106 = zext i1 %105 to i32
%107 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %106)
%108 = load double, double* %14
%109 = fcmp ogt double %108, 0.000000e+00
br i1 %109, label %110, label %111
110: ; preds = %104
br label %111
111: ; preds = %110, %104
%112 = phi i1 [ false, %104 ], [ true, %110 ]
%113 = zext i1 %112 to i32
%114 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %113)
%115 = load i32, i32* %10
%116 = icmp eq i32 %115, 1
br i1 %116, label %120, label %117
117: ; preds = %111
%118 = load i32, i32* %10
%119 = icmp eq i32 %118, 3
br i1 %119, label %120, label %121
120: ; preds = %117, %111
store i32 1, i32* %19
br label %122
121: ; preds = %117
store i32 -1, i32* %19
br label %122
122: ; preds = %121, %120
%123 = load i32, i32* %10
%124 = icmp eq i32 %123, 1
br i1 %124, label %128, label %125
125: ; preds = %122
%126 = load i32, i32* %10
%127 = icmp eq i32 %126, 2
br i1 %127, label %128, label %129
128: ; preds = %125, %122
store i32 1, i32* %20
br label %130
129: ; preds = %125
store i32 -1, i32* %20
br label %130
130: ; preds = %129, %128
%131 = load i32, i32* %20
%132 = load i32, i32* %19
%133 = mul nsw i32 %131, %132
%134 = icmp eq i32 %133, 1
br i1 %134, label %135, label %137
135: ; preds = %130
%136 = load double, double* %13
store double %136, double* %21
br label %146
137: ; preds = %130
%138 = load i32, i32* %20
%139 = load i32, i32* %19
%140 = mul nsw i32 %138, %139
%141 = icmp eq i32 %140, -1
br i1 %141, label %142, label %144
142: ; preds = %137
%143 = load double, double* %12
store double %143, double* %21
br label %145
144: ; preds = %137
unreachable
145: ; preds = %142
br label %146
146: ; preds = %145, %135
%147 = load double, double* %18
%148 = load double, double* %18
%149 = fmul double %147, %148
store double %149, double* %22
%150 = load double, double* %17
%151 = load double, double* %22
%152 = fdiv double %151, 2.000000e+00
%153 = fsub double %150, %152
store double %153, double* %23
%154 = load double, double* %23
%155 = load double, double* %22
%156 = fadd double %154, %155
store double %156, double* %24
%157 = load double, double* %21
%158 = load double, double* %11
%159 = fdiv double %157, %158
%160 = call double @log(double %159)
store double %160, double* %25
%161 = load double, double* %23
%162 = fmul double 2.000000e+00, %161
%163 = load double, double* %25
%164 = fmul double %162, %163
%165 = load double, double* %22
%166 = fdiv double %164, %165
%167 = call double @exp(double %166)
store double %167, double* %26
%168 = load double, double* %16
%169 = fneg double %168
%170 = load double, double* %15
%171 = fmul double %169, %170
%172 = call double @exp(double %171)
store double %172, double* %27
%173 = load double, double* %27
%174 = load double, double* %21
%175 = fmul double %173, %174
store double %175, double* %28
%176 = load double, double* %11
%177 = load double, double* %17
%178 = load double, double* %16
%179 = fsub double %177, %178
%180 = load double, double* %15
%181 = fmul double %179, %180
%182 = call double @exp(double %181)
%183 = fmul double %176, %182
store double %183, double* %29
%184 = load double, double* %29
%185 = load double, double* %22
%186 = load double, double* %17
%187 = fmul double 2.000000e+00, %186
%188 = fdiv double %185, %187
%189 = fadd double 1.000000e+00, %188
%190 = fmul double %184, %189
store double %190, double* %30
%191 = load double, double* %18
%192 = load double, double* %15
%193 = call double @sqrt(double %192)
%194 = fmul double %191, %193
store double %194, double* %31
%195 = load i32, i32* %20
%196 = icmp eq i32 %195, 1
br i1 %196, label %197, label %322
197: ; preds = %146
%198 = load double, double* %18
%199 = load double, double* %14
%200 = call double @sqrt(double %199)
%201 = fmul double %198, %200
store double %201, double* %33
%202 = load i32, i32* %19
%203 = sitofp i32 %202 to double
%204 = load double, double* %30
%205 = load i32, i32* %19
%206 = sitofp i32 %205 to double
%207 = load double, double* %25
%208 = fneg double %207
%209 = load double, double* %24
%210 = load double, double* %15
%211 = call double @llvm.fmuladd.f64(double %209, double %210, double %208)
%212 = fmul double %206, %211
%213 = load double, double* %31
%214 = fdiv double %212, %213
%215 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %214)
%216 = sitofp i32 %215 to double
%217 = load double, double* %16
%218 = fneg double %217
%219 = load double, double* %15
%220 = load double, double* %14
%221 = fsub double %219, %220
%222 = fmul double %218, %221
%223 = call double @exp(double %222)
%224 = load double, double* %29
%225 = fmul double %223, %224
%226 = load double, double* %22
%227 = load double, double* %17
%228 = fmul double 2.000000e+00, %227
%229 = fdiv double %226, %228
%230 = fadd double 1.000000e+00, %229
%231 = fmul double %225, %230
%232 = load i32, i32* %19
%233 = sitofp i32 %232 to double
%234 = load double, double* %25
%235 = fneg double %234
%236 = load double, double* %24
%237 = load double, double* %14
%238 = call double @llvm.fmuladd.f64(double %236, double %237, double %235)
%239 = fmul double %233, %238
%240 = load double, double* %33
%241 = fdiv double %239, %240
%242 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %241)
%243 = sitofp i32 %242 to double
%244 = fmul double %231, %243
%245 = fneg double %244
%246 = call double @llvm.fmuladd.f64(double %204, double %216, double %245)
%247 = load double, double* %28
%248 = load i32, i32* %19
%249 = sitofp i32 %248 to double
%250 = load double, double* %25
%251 = load double, double* %23
%252 = load double, double* %15
%253 = fneg double %251
%254 = call double @llvm.fmuladd.f64(double %253, double %252, double %250)
%255 = fmul double %249, %254
%256 = load double, double* %31
%257 = fdiv double %255, %256
%258 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %257)
%259 = sitofp i32 %258 to double
%260 = call double @llvm.fmuladd.f64(double %247, double %259, double %246)
%261 = load double, double* %28
%262 = load double, double* %22
%263 = fmul double %261, %262
%264 = load double, double* %17
%265 = fmul double 2.000000e+00, %264
%266 = fdiv double %263, %265
%267 = load double, double* %26
%268 = fmul double %266, %267
%269 = load i32, i32* %19
%270 = sitofp i32 %269 to double
%271 = load double, double* %25
%272 = fneg double %271
%273 = load double, double* %23
%274 = load double, double* %15
%275 = fneg double %273
%276 = call double @llvm.fmuladd.f64(double %275, double %274, double %272)
%277 = fmul double %270, %276
%278 = load double, double* %31
%279 = fdiv double %277, %278
%280 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %279)
%281 = sitofp i32 %280 to double
%282 = fneg double %268
%283 = call double @llvm.fmuladd.f64(double %282, double %281, double %260)
%284 = load double, double* %28
%285 = load i32, i32* %19
%286 = sitofp i32 %285 to double
%287 = load double, double* %25
%288 = load double, double* %23
%289 = load double, double* %14
%290 = fneg double %288
%291 = call double @llvm.fmuladd.f64(double %290, double %289, double %287)
%292 = fmul double %286, %291
%293 = load double, double* %33
%294 = fdiv double %292, %293
%295 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %294)
%296 = sitofp i32 %295 to double
%297 = fneg double %284
%298 = call double @llvm.fmuladd.f64(double %297, double %296, double %283)
%299 = load double, double* %28
%300 = load double, double* %22
%301 = fmul double %299, %300
%302 = load double, double* %17
%303 = fmul double 2.000000e+00, %302
%304 = fdiv double %301, %303
%305 = load double, double* %26
%306 = fmul double %304, %305
%307 = load i32, i32* %19
%308 = sitofp i32 %307 to double
%309 = load double, double* %25
%310 = fneg double %309
%311 = load double, double* %23
%312 = load double, double* %14
%313 = fneg double %311
%314 = call double @llvm.fmuladd.f64(double %313, double %312, double %310)
%315 = fmul double %308, %314
%316 = load double, double* %33
%317 = fdiv double %315, %316
%318 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %317)
%319 = sitofp i32 %318 to double
%320 = call double @llvm.fmuladd.f64(double %306, double %319, double %298)
%321 = fmul double %203, %320
store double %321, double* %32
br label %438
322: ; preds = %146
%323 = load i32, i32* %20
%324 = icmp eq i32 %323, -1
br i1 %324, label %325, label %436
325: ; preds = %322
%326 = load double, double* %18
%327 = load double, double* %15
%328 = load double, double* %14
%329 = fsub double %327, %328
%330 = call double @sqrt(double %329)
%331 = fmul double %326, %330
store double %331, double* %34
%332 = load i32, i32* %19
%333 = sub nsw i32 0, %332
%334 = sitofp i32 %333 to double
%335 = load double, double* %30
%336 = load i32, i32* %19
%337 = sitofp i32 %336 to double
%338 = load double, double* %25
%339 = load double, double* %24
%340 = load double, double* %15
%341 = fneg double %339
%342 = call double @llvm.fmuladd.f64(double %341, double %340, double %338)
%343 = fmul double %337, %342
%344 = load double, double* %31
%345 = fdiv double %343, %344
%346 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %345)
%347 = sitofp i32 %346 to double
%348 = load double, double* %28
%349 = load i32, i32* %19
%350 = sitofp i32 %349 to double
%351 = load double, double* %25
%352 = fneg double %351
%353 = load double, double* %23
%354 = load double, double* %15
%355 = call double @llvm.fmuladd.f64(double %353, double %354, double %352)
%356 = fmul double %350, %355
%357 = load double, double* %31
%358 = fdiv double %356, %357
%359 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %358)
%360 = sitofp i32 %359 to double
%361 = fmul double %348, %360
%362 = call double @llvm.fmuladd.f64(double %335, double %347, double %361)
%363 = load double, double* %28
%364 = load double, double* %22
%365 = fmul double %363, %364
%366 = load double, double* %17
%367 = fmul double 2.000000e+00, %366
%368 = fdiv double %365, %367
%369 = load double, double* %26
%370 = fmul double %368, %369
%371 = load i32, i32* %19
%372 = sitofp i32 %371 to double
%373 = load double, double* %25
%374 = load double, double* %23
%375 = load double, double* %15
%376 = call double @llvm.fmuladd.f64(double %374, double %375, double %373)
%377 = fmul double %372, %376
%378 = load double, double* %31
%379 = fdiv double %377, %378
%380 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %379)
%381 = sitofp i32 %380 to double
%382 = fneg double %370
%383 = call double @llvm.fmuladd.f64(double %382, double %381, double %362)
%384 = load double, double* %29
%385 = load double, double* %22
%386 = load double, double* %17
%387 = fmul double 2.000000e+00, %386
%388 = fdiv double %385, %387
%389 = fadd double 1.000000e+00, %388
%390 = fmul double %384, %389
%391 = load i32, i32* %19
%392 = sitofp i32 %391 to double
%393 = load double, double* %24
%394 = fneg double %393
%395 = load double, double* %15
%396 = load double, double* %14
%397 = fsub double %395, %396
%398 = fmul double %394, %397
%399 = fmul double %392, %398
%400 = load double, double* %34
%401 = fdiv double %399, %400
%402 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %401)
%403 = sitofp i32 %402 to double
%404 = fneg double %390
%405 = call double @llvm.fmuladd.f64(double %404, double %403, double %383)
%406 = load double, double* %16
%407 = fneg double %406
%408 = load double, double* %15
%409 = load double, double* %14
%410 = fsub double %408, %409
%411 = fmul double %407, %410
%412 = call double @exp(double %411)
%413 = load double, double* %29
%414 = fmul double %412, %413
%415 = load double, double* %22
%416 = load double, double* %17
%417 = fmul double 2.000000e+00, %416
%418 = fdiv double %415, %417
%419 = fsub double 1.000000e+00, %418
%420 = fmul double %414, %419
%421 = load i32, i32* %19
%422 = sitofp i32 %421 to double
%423 = load double, double* %23
%424 = load double, double* %15
%425 = load double, double* %14
%426 = fsub double %424, %425
%427 = fmul double %423, %426
%428 = fmul double %422, %427
%429 = load double, double* %34
%430 = fdiv double %428, %429
%431 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %430)
%432 = sitofp i32 %431 to double
%433 = fneg double %420
%434 = call double @llvm.fmuladd.f64(double %433, double %432, double %405)
%435 = fmul double %334, %434
store double %435, double* %32
br label %437
436: ; preds = %322
unreachable
437: ; preds = %325
br label %438
438: ; preds = %437, %197
%439 = load double, double* %32
%440 = load double, double* %32
%441 = fcmp oeq double %439, %440
%442 = zext i1 %441 to i32
%443 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %442)
%444 = load double, double* %32
ret double %444
}

LLVM IR (-O2):
define double @ExtremeSpreadOption(i32 %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8) {
%10 = fcmp ord double %1, 0.000000e+00
%11 = fcmp oge double %1, 0x3EB0C6F7A0B5ED8D
%12 = and i1 %10, %11
%13 = fcmp ole double %1, 1.000000e+12
%14 = and i1 %13, %12
%15 = zext i1 %14 to i32
%16 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %15)
%17 = fcmp ord double %5, 0.000000e+00
%18 = fcmp oge double %5, 0x3F2596179C29D2CE
%19 = and i1 %17, %18
%20 = fcmp ole double %5, 2.000000e+01
%21 = and i1 %20, %19
%22 = zext i1 %21 to i32
%23 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %22)
%24 = fcmp oge double %6, 0.000000e+00
%25 = fcmp ole double %6, 1.000000e+03
%26 = and i1 %24, %25
%27 = zext i1 %26 to i32
%28 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %27)
%29 = fcmp ord double %7, 0.000000e+00
%30 = fcmp oge double %7, -1.000000e+03
%31 = and i1 %29, %30
%32 = fcmp ole double %7, 1.000000e+03
%33 = and i1 %32, %31
%34 = zext i1 %33 to i32
%35 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %34)
%36 = fcmp ord double %8, 0.000000e+00
%37 = fcmp oge double %8, 0x3E7AD7F29ABCAF48
%38 = and i1 %36, %37
%39 = fcmp ole double %8, 0x40593FFFD60E94EE
%40 = and i1 %39, %38
%41 = zext i1 %40 to i32
%42 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %41)
%43 = fcmp ogt double %5, %4
%44 = zext i1 %43 to i32
%45 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %44)
%46 = fcmp ogt double %4, 0.000000e+00
%47 = zext i1 %46 to i32
%48 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %47)
%49 = and i32 %0, -3
%50 = icmp eq i32 %49, 1
%51 = select i1 %50, i32 -1, i32 1
%52 = select i1 %50, i32 1, i32 -1
%53 = add i32 %0, -1
%54 = icmp ult i32 %53, 2
%55 = sub nsw i32 0, %52
%56 = select i1 %54, i32 %52, i32 %55
switch i32 %56, label %58 [
i32 1, label %59
i32 -1, label %57
]
57: ; preds = %9
br label %59
58: ; preds = %9
tail call void @abort()
unreachable
59: ; preds = %9, %57
%60 = phi double [ %2, %57 ], [ %3, %9 ]
%61 = fmul double %8, %8
%62 = fmul double %61, 5.000000e-01
%63 = fsub double %7, %62
%64 = fadd double %61, %63
%65 = fdiv double %60, %1
%66 = tail call double @log(double %65)
%67 = fmul double %63, 2.000000e+00
%68 = fmul double %67, %66
%69 = fdiv double %68, %61
%70 = tail call double @exp(double %69)
%71 = fneg double %6
%72 = fmul double %71, %5
%73 = tail call double @exp(double %72)
%74 = fmul double %60, %73
%75 = fsub double %7, %6
%76 = fmul double %75, %5
%77 = tail call double @exp(double %76)
%78 = fmul double %77, %1
%79 = fmul double %7, 2.000000e+00
%80 = fdiv double %61, %79
%81 = fadd double %80, 1.000000e+00
%82 = fmul double %81, %78
%83 = tail call double @sqrt(double %5)
%84 = fmul double %83, %8
br i1 %54, label %85, label %139
85: ; preds = %59
%86 = tail call double @sqrt(double %4)
%87 = fmul double %86, %8
%88 = sitofp i32 %52 to double
%89 = fneg double %66
%90 = tail call double @llvm.fmuladd.f64(double %64, double %5, double %89)
%91 = fmul double %90, %88
%92 = fdiv double %91, %84
%93 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %92)
%94 = sitofp i32 %93 to double
%95 = fsub double %5, %4
%96 = fmul double %95, %71
%97 = tail call double @exp(double %96)
%98 = tail call double @llvm.fmuladd.f64(double %64, double %4, double %89)
%99 = fmul double %98, %88
%100 = fdiv double %99, %87
%101 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %100)
%102 = sitofp i32 %101 to double
%103 = fneg double %97
%104 = fmul double %78, %103
%105 = fmul double %81, %104
%106 = fmul double %105, %102
%107 = tail call double @llvm.fmuladd.f64(double %82, double %94, double %106)
%108 = fneg double %63
%109 = tail call double @llvm.fmuladd.f64(double %108, double %5, double %66)
%110 = fmul double %109, %88
%111 = fdiv double %110, %84
%112 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %111)
%113 = sitofp i32 %112 to double
%114 = tail call double @llvm.fmuladd.f64(double %74, double %113, double %107)
%115 = fmul double %61, %74
%116 = fdiv double %115, %79
%117 = fmul double %70, %116
%118 = tail call double @llvm.fmuladd.f64(double %108, double %5, double %89)
%119 = fmul double %118, %88
%120 = fdiv double %119, %84
%121 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %120)
%122 = sitofp i32 %121 to double
%123 = fneg double %117
%124 = tail call double @llvm.fmuladd.f64(double %123, double %122, double %114)
%125 = tail call double @llvm.fmuladd.f64(double %108, double %4, double %66)
%126 = fmul double %125, %88
%127 = fdiv double %126, %87
%128 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %127)
%129 = sitofp i32 %128 to double
%130 = fneg double %74
%131 = tail call double @llvm.fmuladd.f64(double %130, double %129, double %124)
%132 = tail call double @llvm.fmuladd.f64(double %108, double %4, double %89)
%133 = fmul double %132, %88
%134 = fdiv double %133, %87
%135 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %134)
%136 = sitofp i32 %135 to double
%137 = tail call double @llvm.fmuladd.f64(double %117, double %136, double %131)
%138 = fmul double %137, %88
br label %189
139: ; preds = %59
%140 = fsub double %5, %4
%141 = tail call double @sqrt(double %140)
%142 = fmul double %141, %8
%143 = sitofp i32 %51 to double
%144 = sitofp i32 %52 to double
%145 = fneg double %64
%146 = tail call double @llvm.fmuladd.f64(double %145, double %5, double %66)
%147 = fmul double %146, %144
%148 = fdiv double %147, %84
%149 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %148)
%150 = sitofp i32 %149 to double
%151 = fneg double %66
%152 = tail call double @llvm.fmuladd.f64(double %63, double %5, double %151)
%153 = fmul double %152, %144
%154 = fdiv double %153, %84
%155 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %154)
%156 = sitofp i32 %155 to double
%157 = fmul double %74, %156
%158 = tail call double @llvm.fmuladd.f64(double %82, double %150, double %157)
%159 = tail call double @llvm.fmuladd.f64(double %63, double %5, double %66)
%160 = fmul double %159, %144
%161 = fdiv double %160, %84
%162 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %161)
%163 = sitofp i32 %162 to double
%164 = fneg double %74
%165 = fmul double %61, %164
%166 = fdiv double %165, %79
%167 = fmul double %70, %166
%168 = tail call double @llvm.fmuladd.f64(double %167, double %163, double %158)
%169 = fmul double %140, %145
%170 = fmul double %169, %144
%171 = fdiv double %170, %142
%172 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %171)
%173 = sitofp i32 %172 to double
%174 = fneg double %82
%175 = tail call double @llvm.fmuladd.f64(double %174, double %173, double %168)
%176 = fmul double %140, %71
%177 = tail call double @exp(double %176)
%178 = fsub double 1.000000e+00, %80
%179 = fmul double %140, %63
%180 = fmul double %179, %144
%181 = fdiv double %180, %142
%182 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %181)
%183 = sitofp i32 %182 to double
%184 = fneg double %177
%185 = fmul double %78, %184
%186 = fmul double %178, %185
%187 = tail call double @llvm.fmuladd.f64(double %186, double %183, double %175)
%188 = fmul double %187, %143
br label %189
189: ; preds = %139, %85
%190 = phi double [ %138, %85 ], [ %188, %139 ]
%191 = fcmp ord double %190, 0.000000e+00
%192 = zext i1 %191 to i32
%193 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %192)
ret double %190
}