double DoubleBarrier(int typeflag, double S, double X, double L, double U,
                     double T, double r, double b, double v, double delta1,
                     double delta2) {
  int n;
  double vst, p2v, F, E, dd, LS;
  double outval, Sum1 = 0, Sum2 = 0;
  assert(((S) == (S)) && (S) >= 0.000001 && (S) <= 1000000000000.0);
  assert(((X) == (X)) && (X) >= 0.000001 && (X) <= 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);
  vst = v * sqrt(T);
  p2v = ((v) * (v));
  F = U * exp(delta1 * T);
  E = L * exp(delta2 * T);
  dd = delta1 - delta2;
  LS = L / S;
  if (typeflag == 4 || typeflag == 3) {
    for (n = -5; n <= 5; n++) {
      double powL2n = pow(L, (2.0 * n));
      double SpowU2n = S * pow(U, (2.0 * n));
      double powLn = pow(L, n);
      double powUn = pow(U, n);
      double bp2v2T = (b + p2v / 2.0) * T;
      double d1 = (log(SpowU2n / (X * powL2n)) + bp2v2T) / vst;
      double d2 = (log(SpowU2n / (F * powL2n)) + bp2v2T) / vst;
      double d3 = (log(pow(L, (2.0 * n + 2.0)) / (X * SpowU2n)) + bp2v2T) / vst;
      double d4 = (log(pow(L, (2.0 * n + 2.0)) / (F * SpowU2n)) + bp2v2T) / vst;
      double mu1 = 2.0 * (b - delta2 - n * dd) / p2v + 1.0;
      double mu2 = 2.0 * n * dd / p2v;
      double mu3 = 2.0 * (b - delta2 + n * dd) / p2v + 1.0;
      Sum1 += pow(powUn / powLn, mu1) * pow(LS, mu2) * (cnd(d1) - cnd(d2)) -
              pow((pow(L, (n + 1.0)) / (powUn * S)), mu3) * (cnd(d3) - cnd(d4));
      Sum2 += pow(powUn / powLn, (mu1 - 2.0)) * pow(LS, mu2) *
                  (cnd(d1 - vst) - cnd(d2 - vst)) -
              pow((pow(L, (n + 1.0)) / (powUn * S)), (mu3 - 2.0)) *
                  (cnd(d3 - vst) - cnd(d4 - vst));
    }
    outval = S * exp((b - r) * T) * Sum1 - X * exp(-r * T) * Sum2;
  } else if (typeflag == 1 || typeflag == 2) {
    for (n = -5; n <= 5; n++) {
      double powL2n = pow(L, 2.0 * n);
      double SpowU2n = S * pow(U, 2.0 * n);
      double powLn = pow(L, n);
      double powUn = pow(U, n);
      double bp2v2T = (b + p2v / 2.0) * T;
      double d1 = (log(SpowU2n / (E * powL2n)) + bp2v2T) / vst;
      double d2 = (log(SpowU2n / (X * powL2n)) + bp2v2T) / vst;
      double d3 = (log(pow(L, (2.0 * n + 2.0)) / (E * SpowU2n)) + bp2v2T) / vst;
      double d4 = (log(pow(L, (2.0 * n + 2.0)) / (X * SpowU2n)) + bp2v2T) / vst;
      double mu1 = 2.0 * (b - delta2 - n * dd) / p2v + 1.0;
      double mu2 = 2.0 * n * dd / p2v;
      double mu3 = 2.0 * (b - delta2 + n * dd) / p2v + 1.0;
      Sum1 += pow(powUn / powLn, mu1) * pow(LS, mu2) * (cnd(d1) - cnd(d2)) -
              pow((pow(L, n + 1.0) / (powUn * S)), mu3) * (cnd(d3) - cnd(d4));
      Sum2 += pow(powUn / powLn, (mu1 - 2.0)) * pow(LS, mu2) *
                  (cnd(d1 - vst) - cnd(d2 - vst)) -
              pow((pow(L, n + 1.0) / (powUn * S)), (mu3 - 2.0)) *
                  (cnd(d3 - vst) - cnd(d4 - vst));
    }
    outval = X * exp(-r * T) * Sum2 - S * exp((b - r) * T) * Sum1;
  } else
    abort();
  switch (typeflag) {
  case 4:
  case 2:
    return outval;
  case 3:
    return gbs_call(S, X, T, r, b, v) - outval;
  case 1:
    return gbs_put(S, X, T, r, b, v) - outval;
  default:
    abort();
  }
}


x86 assembly (clang, -O0):
<DoubleBarrier>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2a0,%rsp
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
mov    %edi,-0xc(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x18(%rbp),%xmm0
mov    %al,-0x161(%rbp)
jne    123b <DoubleBarrier+0xab>
jp     123b <DoubleBarrier+0xab>
movsd  -0x18(%rbp),%xmm0
xor    %eax,%eax
movsd  0x1deb(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x161(%rbp)
jb     123b <DoubleBarrier+0xab>
movsd  0x1ddb(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
setae  %al
mov    %al,-0x161(%rbp)
mov    -0x161(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
movsd  -0x20(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x20(%rbp),%xmm0
mov    %al,-0x162(%rbp)
jne    12a0 <DoubleBarrier+0x110>
jp     12a0 <DoubleBarrier+0x110>
movsd  -0x20(%rbp),%xmm0
xor    %eax,%eax
movsd  0x1d86(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x162(%rbp)
jb     12a0 <DoubleBarrier+0x110>
movsd  0x1d76(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
setae  %al
mov    %al,-0x162(%rbp)
mov    -0x162(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
movsd  -0x38(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x38(%rbp),%xmm0
mov    %al,-0x163(%rbp)
jne    1305 <DoubleBarrier+0x175>
jp     1305 <DoubleBarrier+0x175>
movsd  -0x38(%rbp),%xmm0
xor    %eax,%eax
movsd  0x1d31(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x163(%rbp)
jb     1305 <DoubleBarrier+0x175>
movsd  0x1d21(%rip),%xmm0
ucomisd -0x38(%rbp),%xmm0
setae  %al
mov    %al,-0x163(%rbp)
mov    -0x163(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
movsd  -0x40(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x40(%rbp),%xmm0
mov    %al,-0x164(%rbp)
jne    1365 <DoubleBarrier+0x1d5>
jp     1365 <DoubleBarrier+0x1d5>
movsd  -0x40(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x164(%rbp)
jb     1365 <DoubleBarrier+0x1d5>
movsd  0x1cc9(%rip),%xmm0
ucomisd -0x40(%rbp),%xmm0
setae  %al
mov    %al,-0x164(%rbp)
mov    -0x164(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
movsd  -0x48(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x48(%rbp),%xmm0
mov    %al,-0x165(%rbp)
jne    13ca <DoubleBarrier+0x23a>
jp     13ca <DoubleBarrier+0x23a>
movsd  -0x48(%rbp),%xmm0
xor    %eax,%eax
movsd  0x1c84(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x165(%rbp)
jb     13ca <DoubleBarrier+0x23a>
movsd  0x1c64(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
setae  %al
mov    %al,-0x165(%rbp)
mov    -0x165(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
movsd  -0x50(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x50(%rbp),%xmm0
mov    %al,-0x166(%rbp)
jne    142f <DoubleBarrier+0x29f>
jp     142f <DoubleBarrier+0x29f>
movsd  -0x50(%rbp),%xmm0
xor    %eax,%eax
movsd  0x1c27(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x166(%rbp)
jb     142f <DoubleBarrier+0x29f>
movsd  0x1c17(%rip),%xmm0
ucomisd -0x50(%rbp),%xmm0
setae  %al
mov    %al,-0x166(%rbp)
mov    -0x166(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1060 <assert@plt>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   10b0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x180(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  0x10(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1070 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x178(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  0x18(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1070 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x170(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0x10(%rbp),%xmm0
subsd  0x18(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x28(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
cmpl   $0x4,-0xc(%rbp)
je     1510 <DoubleBarrier+0x380>
cmpl   $0x3,-0xc(%rbp)
jne    1b28 <DoubleBarrier+0x998>
movl   $0xfffffffb,-0x54(%rbp)
cmpl   $0x5,-0x54(%rbp)
jg     1a5a <DoubleBarrier+0x8ca>
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm2
movsd  0x1b0d(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm2
movsd  0x1add(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1e8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  0x1a7d(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x20(%rbp),%xmm1
mulsd  -0xa8(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0xc8(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm1
mulsd  -0xa8(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0xc8(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x19ec(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0x20(%rbp),%xmm1
mulsd  -0xb0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0xc8(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x19a2(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0x70(%rbp),%xmm1
mulsd  -0xb0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0xc8(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  0x18(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x1933(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  0x192a(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  0x1909(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x80(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  0x18(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x18cf(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  0x18c6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1e0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x1d4(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ecx
mov    -0x1d4(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  0x181d(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x100(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x1b4(%rbp)
movsd  -0xe8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
movsd  -0x1d0(%rbp),%xmm1
ff
movsd  -0x1c8(%rbp),%xmm0
ff
movsd  -0x1c0(%rbp),%xmm2
ff
mov    %eax,%ecx
mov    -0x1b4(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm1
ff
movsd  0x1749(%rip),%xmm2
subsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1b0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x1a4(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ecx
mov    -0x1a4(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  0x16be(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x100(%rbp),%xmm1
ff
movsd  0x168c(%rip),%xmm2
subsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x184(%rbp)
movsd  -0xe8(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
movsd  -0x1a0(%rbp),%xmm1
ff
movsd  -0x198(%rbp),%xmm0
ff
movsd  -0x190(%rbp),%xmm2
ff
mov    %eax,%ecx
mov    -0x184(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1517 <DoubleBarrier+0x387>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x208(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1070 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x208(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1070 <exp@plt>
movsd  -0x200(%rbp),%xmm1
ff
movsd  -0x1f8(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x1f0(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    215e <DoubleBarrier+0xfce>
cmpl   $0x1,-0xc(%rbp)
je     1b3c <DoubleBarrier+0x9ac>
cmpl   $0x2,-0xc(%rbp)
jne    2154 <DoubleBarrier+0xfc4>
movl   $0xfffffffb,-0x54(%rbp)
cmpl   $0x5,-0x54(%rbp)
jg     2086 <DoubleBarrier+0xef6>
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm2
movsd  0x14e1(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x270(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm2
movsd  0x14b1(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x270(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  0x1451(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm1
mulsd  -0x108(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0x128(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
movsd  -0x20(%rbp),%xmm1
mulsd  -0x108(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0x128(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x13c0(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0x78(%rbp),%xmm1
mulsd  -0x110(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0x128(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x1376(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0x20(%rbp),%xmm1
mulsd  -0x110(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  -0x128(%rbp),%xmm0
ff
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  0x18(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x1307(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  0x12fe(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  0x12dd(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x80(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  0x18(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x12a3(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  0x129a(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x120(%rbp),%xmm0
ff
divsd  -0x118(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movsd  %xmm0,-0x268(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x158(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x268(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x250(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x25c(%rbp)
movsd  -0x138(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ecx
mov    -0x25c(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x248(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  0x11f1(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0x120(%rbp),%xmm1
ff
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x160(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movsd  %xmm0,-0x258(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x23c(%rbp)
movsd  -0x148(%rbp),%xmm0
ff
mov    $0x1,%al
call   1090 <cnd@plt>
movsd  -0x258(%rbp),%xmm1
ff
movsd  -0x250(%rbp),%xmm0
ff
movsd  -0x248(%rbp),%xmm2
ff
mov    %eax,%ecx
mov    -0x23c(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x120(%rbp),%xmm0
ff
divsd  -0x118(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm1
ff
movsd  0x111d(%rip),%xmm2
subsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0x238(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x158(%rbp),%xmm1
ff
call   10a0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x238(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x220(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x22c(%rbp)
movsd  -0x138(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ecx
mov    -0x22c(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x218(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  0x1092(%rip),%xmm2
addsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  -0x120(%rbp),%xmm1
ff
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x160(%rbp),%xmm1
ff
movsd  0x1060(%rip),%xmm2
subsd  %xmm2,%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,-0x228(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,-0x20c(%rbp)
movsd  -0x148(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
movsd  -0x228(%rbp),%xmm1
ff
movsd  -0x220(%rbp),%xmm0
ff
movsd  -0x218(%rbp),%xmm2
ff
mov    %eax,%ecx
mov    -0x20c(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1b43 <DoubleBarrier+0x9b3>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x290(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1070 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x290(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x278(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x280(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x288(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1070 <exp@plt>
movsd  -0x288(%rbp),%xmm1
ff
movsd  -0x280(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x278(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  -0x98(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    2159 <DoubleBarrier+0xfc9>
call   1030 <abort@plt>
jmp    215e <DoubleBarrier+0xfce>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x298(%rbp)
sub    $0x3,%eax
ja     2215 <DoubleBarrier+0x1085>
mov    -0x298(%rbp),%rax
lea    0xecc(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    221a <DoubleBarrier+0x108a>
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
mov    $0x6,%al
call   1040 <gbs_call@plt>
cvtsi2sd %eax,%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    221a <DoubleBarrier+0x108a>
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
mov    $0x6,%al
call   1050 <gbs_put@plt>
cvtsi2sd %eax,%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    221a <DoubleBarrier+0x108a>
call   1030 <abort@plt>
movsd  -0x8(%rbp),%xmm0
add    $0x2a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<DoubleBarrier>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x158,%rsp
movsd  %xmm7,0xc8(%rsp)
movsd  %xmm6,0x78(%rsp)
movapd %xmm5,0xe0(%rsp)
movsd  %xmm4,0x20(%rsp)
movsd  %xmm3,0xc0(%rsp)
movsd  %xmm2,0x18(%rsp)
movsd  %xmm1,0x70(%rsp)
mov    %edi,%ebx
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xe1b(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xe16(%rip),%xmm1
movsd  %xmm0,0x68(%rsp)
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1060 <assert@plt>
movsd  0x70(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xde0(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xddb(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1060 <assert@plt>
movsd  0x20(%rsp),%xmm1
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xdbb(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xdb6(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1060 <assert@plt>
xorpd  %xmm1,%xmm1
movapd 0xe0(%rsp),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
movsd  0xd8f(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %cl
and    %al,%cl
movzbl %cl,%edi
xor    %eax,%eax
call   1060 <assert@plt>
movsd  0x78(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xd6f(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xd5a(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1060 <assert@plt>
movsd  0xc8(%rsp),%xmm1
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xd3f(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xd3a(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1060 <assert@plt>
movsd  0x20(%rsp),%xmm1
ucomisd 0xd49(%rip),%xmm1
jb     132a <DoubleBarrier+0x19a>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    1333 <DoubleBarrier+0x1a3>
movapd %xmm1,%xmm0
call   10b0 <sqrt@plt>
movsd  0xc8(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rsp)
mulsd  %xmm1,%xmm1
movsd  %xmm1,0xd0(%rsp)
movsd  0x20(%rsp),%xmm0
movsd  0x190(%rsp),%xmm1
mulsd  %xmm1,%xmm0
call   1070 <exp@plt>
movsd  %xmm0,0x80(%rsp)
movsd  0x20(%rsp),%xmm0
movsd  0x198(%rsp),%xmm1
mulsd  %xmm1,%xmm0
call   1070 <exp@plt>
movsd  0x198(%rsp),%xmm6
movsd  0x190(%rsp),%xmm2
movapd %xmm0,%xmm4
subsd  %xmm6,%xmm2
movsd  0x18(%rsp),%xmm0
movapd %xmm0,%xmm3
movsd  0x68(%rsp),%xmm1
divsd  %xmm1,%xmm3
lea    -0x3(%rbx),%eax
cmp    $0x1,%eax
mov    %rbx,0x150(%rsp)
movsd  %xmm2,0x138(%rsp)
movsd  %xmm3,0xd8(%rsp)
ja     1907 <DoubleBarrier+0x777>
movsd  0x80(%rsp),%xmm4
mulsd  0xc0(%rsp),%xmm4
movsd  %xmm4,0x80(%rsp)
movsd  0xc3d(%rip),%xmm4
mulsd  0xd0(%rsp),%xmm4
movsd  0x78(%rsp),%xmm2
addsd  %xmm2,%xmm4
mulsd  0x20(%rsp),%xmm4
movsd  %xmm4,0x38(%rsp)
subsd  %xmm6,%xmm2
movsd  %xmm2,0x110(%rsp)
xorpd  %xmm2,%xmm2
movapd %xmm2,0x120(%rsp)
movsd  0xc04(%rip),%xmm2
movsd  %xmm2,0x10(%rsp)
mov    $0xb,%r14d
movsd  0x10(%rsp),%xmm1
addsd  %xmm1,%xmm1
movsd  %xmm1,0x50(%rsp)
call   10a0 <pow@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
call   10a0 <pow@plt>
mulsd  0x68(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x100(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x90(%rsp)
movsd  0x28(%rsp),%xmm1
mulsd  0x70(%rsp),%xmm1
movsd  0x40(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0xb8(%rsp)
movsd  0x28(%rsp),%xmm1
mulsd  0x80(%rsp),%xmm1
movsd  0x40(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0xb0(%rsp)
movsd  0x50(%rsp),%xmm1
addsd  0xb1d(%rip),%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x18(%rsp),%xmm0
call   10a0 <pow@plt>
movsd  0x40(%rsp),%xmm1
mulsd  0x70(%rsp),%xmm1
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
call   10a0 <pow@plt>
movsd  0x40(%rsp),%xmm1
mulsd  0x80(%rsp),%xmm1
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x10(%rsp),%xmm4
movsd  0x138(%rsp),%xmm1
mulsd  %xmm1,%xmm4
movsd  0x110(%rsp),%xmm2
movapd %xmm2,%xmm5
subsd  %xmm4,%xmm5
addsd  %xmm5,%xmm5
movsd  0xd0(%rsp),%xmm0
divsd  %xmm0,%xmm5
movsd  0xa75(%rip),%xmm3
addsd  %xmm3,%xmm5
movapd %xmm3,%xmm6
movsd  %xmm5,0x118(%rsp)
movsd  0x50(%rsp),%xmm3
mulsd  %xmm1,%xmm3
divsd  %xmm0,%xmm3
movsd  %xmm3,0x50(%rsp)
addsd  %xmm2,%xmm4
addsd  %xmm4,%xmm4
divsd  %xmm0,%xmm4
addsd  %xmm6,%xmm4
movsd  %xmm4,0xa8(%rsp)
movsd  0x90(%rsp),%xmm0
divsd  0x100(%rsp),%xmm0
movsd  %xmm0,0xf0(%rsp)
movapd %xmm5,%xmm1
call   10a0 <pow@plt>
movapd %xmm0,0x140(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
call   10a0 <pow@plt>
movaps %xmm0,0x40(%rsp)
movsd  0xb8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%r13d
movsd  0xb0(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ebx
movsd  0x10(%rsp),%xmm1
addsd  0x9be(%rip),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0x18(%rsp),%xmm0
call   10a0 <pow@plt>
movsd  0x90(%rsp),%xmm1
mulsd  0x68(%rsp),%xmm1
movsd  %xmm1,0x90(%rsp)
divsd  %xmm1,%xmm0
movsd  0xa8(%rsp),%xmm1
call   10a0 <pow@plt>
movapd %xmm0,0x100(%rsp)
movsd  0x28(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%r15d
movsd  0x30(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%r12d
movsd  0x95a(%rip),%xmm0
movsd  0x118(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0xf0(%rsp),%xmm0
call   10a0 <pow@plt>
movaps %xmm0,0xf0(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
call   10a0 <pow@plt>
movapd 0x140(%rsp),%xmm2
unpcklpd 0xf0(%rsp),%xmm2
movapd 0x40(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  %xmm2,%xmm1
movapd %xmm1,0x40(%rsp)
movsd  0xb8(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ebp
movsd  0xb0(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
movd   %r13d,%xmm0
movd   %ebp,%xmm1
punpckldq %xmm1,%xmm0
movd   %ebx,%xmm1
movd   %eax,%xmm2
punpckldq %xmm2,%xmm1
psubd  %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
mulpd  0x40(%rsp),%xmm0
movapd %xmm0,0x50(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   10a0 <pow@plt>
divsd  0x90(%rsp),%xmm0
movsd  0xa8(%rsp),%xmm1
addsd  0x877(%rip),%xmm1
call   10a0 <pow@plt>
movapd %xmm0,0x90(%rsp)
movsd  0x28(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ebx
movsd  0x30(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
movd   %r15d,%xmm3
movd   %ebx,%xmm1
punpckldq %xmm1,%xmm3
movd   %r12d,%xmm1
movd   %eax,%xmm2
punpckldq %xmm2,%xmm1
movsd  0x18(%rsp),%xmm0
psubd  %xmm1,%xmm3
cvtdq2pd %xmm3,%xmm1
movapd 0x100(%rsp),%xmm2
unpcklpd 0x90(%rsp),%xmm2
mulpd  %xmm1,%xmm2
movapd 0x50(%rsp),%xmm3
subpd  %xmm2,%xmm3
movapd 0x120(%rsp),%xmm1
addpd  %xmm3,%xmm1
movapd %xmm1,0x120(%rsp)
add    $0xffffffff,%r14d
jne    1450 <DoubleBarrier+0x2c0>
movsd  0x78(%rsp),%xmm0
subsd  0xe0(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1070 <exp@plt>
mulsd  0x68(%rsp),%xmm0
movapd %xmm0,0x80(%rsp)
movapd 0x7b8(%rip),%xmm0
xorpd  0xe0(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1070 <exp@plt>
movapd 0x80(%rsp),%xmm2
movsd  0x70(%rsp),%xmm3
mulsd  %xmm3,%xmm0
movapd 0x120(%rsp),%xmm1
mulsd  %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
mulsd  %xmm0,%xmm1
subsd  %xmm1,%xmm2
movapd %xmm3,%xmm1
movsd  0x68(%rsp),%xmm0
jmp    1e28 <DoubleBarrier+0xc98>
movsd  0xd0(%rsp),%xmm1
lea    -0x1(%rbx),%eax
cmp    $0x1,%eax
ja     1ed0 <DoubleBarrier+0xd40>
mulsd  %xmm0,%xmm4
movsd  %xmm4,0x120(%rsp)
movsd  0x70f(%rip),%xmm5
mulsd  %xmm1,%xmm5
movsd  0x78(%rsp),%xmm1
addsd  %xmm1,%xmm5
mulsd  0x20(%rsp),%xmm5
movsd  %xmm5,0x38(%rsp)
subsd  %xmm6,%xmm1
movsd  %xmm1,0x110(%rsp)
xorpd  %xmm1,%xmm1
movapd %xmm1,0x80(%rsp)
movsd  0x6db(%rip),%xmm1
movsd  %xmm1,0x10(%rsp)
mov    $0xb,%r14d
nopl   0x0(%rax)
movsd  0x10(%rsp),%xmm1
addsd  %xmm1,%xmm1
movsd  %xmm1,0x50(%rsp)
call   10a0 <pow@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
call   10a0 <pow@plt>
mulsd  0x68(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x100(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x90(%rsp)
movsd  0x120(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm1
movsd  0x40(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0xb8(%rsp)
movsd  0x28(%rsp),%xmm1
mulsd  0x70(%rsp),%xmm1
movsd  0x40(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0xb0(%rsp)
movsd  0x50(%rsp),%xmm1
addsd  0x5ed(%rip),%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x18(%rsp),%xmm0
call   10a0 <pow@plt>
movsd  0x120(%rsp),%xmm1
mulsd  0x40(%rsp),%xmm1
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
call   10a0 <pow@plt>
movsd  0x40(%rsp),%xmm1
mulsd  0x70(%rsp),%xmm1
divsd  %xmm1,%xmm0
call   1080 <log@plt>
addsd  0x38(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x10(%rsp),%xmm4
movsd  0x138(%rsp),%xmm3
mulsd  %xmm3,%xmm4
movsd  0x110(%rsp),%xmm1
movapd %xmm1,%xmm5
subsd  %xmm4,%xmm5
addsd  %xmm5,%xmm5
movsd  0xd0(%rsp),%xmm0
divsd  %xmm0,%xmm5
movsd  0x545(%rip),%xmm2
addsd  %xmm2,%xmm5
movapd %xmm2,%xmm6
movsd  %xmm5,0x118(%rsp)
movsd  0x50(%rsp),%xmm2
mulsd  %xmm3,%xmm2
divsd  %xmm0,%xmm2
movsd  %xmm2,0x50(%rsp)
addsd  %xmm1,%xmm4
addsd  %xmm4,%xmm4
divsd  %xmm0,%xmm4
addsd  %xmm6,%xmm4
movsd  %xmm4,0xa8(%rsp)
movsd  0x90(%rsp),%xmm0
divsd  0x100(%rsp),%xmm0
movsd  %xmm0,0xf0(%rsp)
movapd %xmm5,%xmm1
call   10a0 <pow@plt>
movapd %xmm0,0x140(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
call   10a0 <pow@plt>
movaps %xmm0,0x40(%rsp)
movsd  0xb8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%r13d
movsd  0xb0(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ebx
movsd  0x10(%rsp),%xmm1
addsd  0x48e(%rip),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0x18(%rsp),%xmm0
call   10a0 <pow@plt>
movsd  0x90(%rsp),%xmm1
mulsd  0x68(%rsp),%xmm1
movsd  %xmm1,0x90(%rsp)
divsd  %xmm1,%xmm0
movsd  0xa8(%rsp),%xmm1
call   10a0 <pow@plt>
movapd %xmm0,0x100(%rsp)
movsd  0x28(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%r15d
movsd  0x30(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%r12d
movsd  0x42a(%rip),%xmm0
movsd  0x118(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0xf0(%rsp),%xmm0
call   10a0 <pow@plt>
movaps %xmm0,0xf0(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
call   10a0 <pow@plt>
movapd 0x140(%rsp),%xmm2
unpcklpd 0xf0(%rsp),%xmm2
movapd 0x40(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  %xmm2,%xmm1
movapd %xmm1,0x40(%rsp)
movsd  0xb8(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ebp
movsd  0xb0(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
movd   %r13d,%xmm0
movd   %ebp,%xmm1
punpckldq %xmm1,%xmm0
movd   %ebx,%xmm1
movd   %eax,%xmm2
punpckldq %xmm2,%xmm1
psubd  %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
mulpd  0x40(%rsp),%xmm0
movapd %xmm0,0x50(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   10a0 <pow@plt>
divsd  0x90(%rsp),%xmm0
movsd  0xa8(%rsp),%xmm1
addsd  0x347(%rip),%xmm1
call   10a0 <pow@plt>
movapd %xmm0,0x90(%rsp)
movsd  0x28(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
mov    %eax,%ebx
movsd  0x30(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1090 <cnd@plt>
movd   %r15d,%xmm3
movd   %ebx,%xmm1
punpckldq %xmm1,%xmm3
movd   %r12d,%xmm1
movd   %eax,%xmm2
punpckldq %xmm2,%xmm1
movsd  0x18(%rsp),%xmm0
psubd  %xmm1,%xmm3
cvtdq2pd %xmm3,%xmm1
movapd 0x100(%rsp),%xmm2
unpcklpd 0x90(%rsp),%xmm2
mulpd  %xmm1,%xmm2
movapd 0x50(%rsp),%xmm3
subpd  %xmm2,%xmm3
movapd 0x80(%rsp),%xmm1
addpd  %xmm3,%xmm1
movapd %xmm1,0x80(%rsp)
add    $0xffffffff,%r14d
jne    1980 <DoubleBarrier+0x7f0>
movapd 0x2b1(%rip),%xmm0
xorpd  0xe0(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1070 <exp@plt>
mulsd  0x70(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x78(%rsp),%xmm0
subsd  0xe0(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1070 <exp@plt>
movsd  0x68(%rsp),%xmm3
mulsd  %xmm3,%xmm0
movapd 0x80(%rsp),%xmm2
mulsd  %xmm2,%xmm0
unpckhpd %xmm2,%xmm2
mulsd  0x8(%rsp),%xmm2
subsd  %xmm0,%xmm2
movsd  0x70(%rsp),%xmm1
movapd %xmm3,%xmm0
mov    0x150(%rsp),%rcx
add    $0xffffffff,%ecx
cmp    $0x3,%ecx
ja     1ed0 <DoubleBarrier+0xd40>
lea    0x23d(%rip),%rax
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
movapd %xmm2,0x80(%rsp)
movsd  0x20(%rsp),%xmm2
movapd 0xe0(%rsp),%xmm3
movsd  0x78(%rsp),%xmm4
movsd  0xc8(%rsp),%xmm5
mov    $0x6,%al
call   1050 <gbs_put@plt>
jmp    1eaa <DoubleBarrier+0xd1a>
movapd %xmm2,0x80(%rsp)
movsd  0x20(%rsp),%xmm2
movapd 0xe0(%rsp),%xmm3
movsd  0x78(%rsp),%xmm4
movsd  0xc8(%rsp),%xmm5
mov    $0x6,%al
call   1040 <gbs_call@plt>
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
subsd  0x80(%rsp),%xmm2
movapd %xmm2,%xmm0
add    $0x158,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
call   1030 <abort@plt>

LLVM IR (-O0):
define double @DoubleBarrier(i32 %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10) {
%12 = alloca double
%13 = alloca i32
%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 i32
%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
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca double
%55 = alloca double
%56 = alloca double
%57 = alloca double
store i32 %0, i32* %13
store double %1, double* %14
store double %2, double* %15
store double %3, double* %16
store double %4, double* %17
store double %5, double* %18
store double %6, double* %19
store double %7, double* %20
store double %8, double* %21
store double %9, double* %22
store double %10, double* %23
store double 0.000000e+00, double* %32
store double 0.000000e+00, double* %33
%58 = load double, double* %14
%59 = load double, double* %14
%60 = fcmp oeq double %58, %59
br i1 %60, label %61, label %67
61: ; preds = %11
%62 = load double, double* %14
%63 = fcmp oge double %62, 0x3EB0C6F7A0B5ED8D
br i1 %63, label %64, label %67
64: ; preds = %61
%65 = load double, double* %14
%66 = fcmp ole double %65, 1.000000e+12
br label %67
67: ; preds = %64, %61, %11
%68 = phi i1 [ false, %61 ], [ false, %11 ], [ %66, %64 ]
%69 = zext i1 %68 to i32
%70 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %69)
%71 = load double, double* %15
%72 = load double, double* %15
%73 = fcmp oeq double %71, %72
br i1 %73, label %74, label %80
74: ; preds = %67
%75 = load double, double* %15
%76 = fcmp oge double %75, 0x3EB0C6F7A0B5ED8D
br i1 %76, label %77, label %80
77: ; preds = %74
%78 = load double, double* %15
%79 = fcmp ole double %78, 1.000000e+12
br label %80
80: ; preds = %77, %74, %67
%81 = phi i1 [ false, %74 ], [ false, %67 ], [ %79, %77 ]
%82 = zext i1 %81 to i32
%83 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %82)
%84 = load double, double* %18
%85 = load double, double* %18
%86 = fcmp oeq double %84, %85
br i1 %86, label %87, label %93
87: ; preds = %80
%88 = load double, double* %18
%89 = fcmp oge double %88, 0x3F2596179C29D2CE
br i1 %89, label %90, label %93
90: ; preds = %87
%91 = load double, double* %18
%92 = fcmp ole double %91, 2.000000e+01
br label %93
93: ; preds = %90, %87, %80
%94 = phi i1 [ false, %87 ], [ false, %80 ], [ %92, %90 ]
%95 = zext i1 %94 to i32
%96 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %95)
%97 = load double, double* %19
%98 = load double, double* %19
%99 = fcmp oeq double %97, %98
br i1 %99, label %100, label %106
100: ; preds = %93
%101 = load double, double* %19
%102 = fcmp oge double %101, 0.000000e+00
br i1 %102, label %103, label %106
103: ; preds = %100
%104 = load double, double* %19
%105 = fcmp ole double %104, 1.000000e+03
br label %106
106: ; preds = %103, %100, %93
%107 = phi i1 [ false, %100 ], [ false, %93 ], [ %105, %103 ]
%108 = zext i1 %107 to i32
%109 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %108)
%110 = load double, double* %20
%111 = load double, double* %20
%112 = fcmp oeq double %110, %111
br i1 %112, label %113, label %119
113: ; preds = %106
%114 = load double, double* %20
%115 = fcmp oge double %114, -1.000000e+03
br i1 %115, label %116, label %119
116: ; preds = %113
%117 = load double, double* %20
%118 = fcmp ole double %117, 1.000000e+03
br label %119
119: ; preds = %116, %113, %106
%120 = phi i1 [ false, %113 ], [ false, %106 ], [ %118, %116 ]
%121 = zext i1 %120 to i32
%122 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %121)
%123 = load double, double* %21
%124 = load double, double* %21
%125 = fcmp oeq double %123, %124
br i1 %125, label %126, label %132
126: ; preds = %119
%127 = load double, double* %21
%128 = fcmp oge double %127, 0x3E7AD7F29ABCAF48
br i1 %128, label %129, label %132
129: ; preds = %126
%130 = load double, double* %21
%131 = fcmp ole double %130, 0x40593FFFD60E94EE
br label %132
132: ; preds = %129, %126, %119
%133 = phi i1 [ false, %126 ], [ false, %119 ], [ %131, %129 ]
%134 = zext i1 %133 to i32
%135 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %134)
%136 = load double, double* %21
%137 = load double, double* %18
%138 = call double @sqrt(double %137)
%139 = fmul double %136, %138
store double %139, double* %25
%140 = load double, double* %21
%141 = load double, double* %21
%142 = fmul double %140, %141
store double %142, double* %26
%143 = load double, double* %17
%144 = load double, double* %22
%145 = load double, double* %18
%146 = fmul double %144, %145
%147 = call double @exp(double %146)
%148 = fmul double %143, %147
store double %148, double* %27
%149 = load double, double* %16
%150 = load double, double* %23
%151 = load double, double* %18
%152 = fmul double %150, %151
%153 = call double @exp(double %152)
%154 = fmul double %149, %153
store double %154, double* %28
%155 = load double, double* %22
%156 = load double, double* %23
%157 = fsub double %155, %156
store double %157, double* %29
%158 = load double, double* %16
%159 = load double, double* %14
%160 = fdiv double %158, %159
store double %160, double* %30
%161 = load i32, i32* %13
%162 = icmp eq i32 %161, 4
br i1 %162, label %166, label %163
163: ; preds = %132
%164 = load i32, i32* %13
%165 = icmp eq i32 %164, 3
br i1 %165, label %166, label %383
166: ; preds = %163, %132
store i32 -5, i32* %24
br label %167
167: ; preds = %359, %166
%168 = load i32, i32* %24
%169 = icmp sle i32 %168, 5
br i1 %169, label %170, label %362
170: ; preds = %167
%171 = load double, double* %16
%172 = load i32, i32* %24
%173 = sitofp i32 %172 to double
%174 = fmul double 2.000000e+00, %173
%175 = call double @pow(double %171, double %174)
store double %175, double* %34
%176 = load double, double* %14
%177 = load double, double* %17
%178 = load i32, i32* %24
%179 = sitofp i32 %178 to double
%180 = fmul double 2.000000e+00, %179
%181 = call double @pow(double %177, double %180)
%182 = fmul double %176, %181
store double %182, double* %35
%183 = load double, double* %16
%184 = load i32, i32* %24
%185 = sitofp i32 %184 to double
%186 = call double @pow(double %183, double %185)
store double %186, double* %36
%187 = load double, double* %17
%188 = load i32, i32* %24
%189 = sitofp i32 %188 to double
%190 = call double @pow(double %187, double %189)
store double %190, double* %37
%191 = load double, double* %20
%192 = load double, double* %26
%193 = fdiv double %192, 2.000000e+00
%194 = fadd double %191, %193
%195 = load double, double* %18
%196 = fmul double %194, %195
store double %196, double* %38
%197 = load double, double* %35
%198 = load double, double* %15
%199 = load double, double* %34
%200 = fmul double %198, %199
%201 = fdiv double %197, %200
%202 = call double @log(double %201)
%203 = load double, double* %38
%204 = fadd double %202, %203
%205 = load double, double* %25
%206 = fdiv double %204, %205
store double %206, double* %39
%207 = load double, double* %35
%208 = load double, double* %27
%209 = load double, double* %34
%210 = fmul double %208, %209
%211 = fdiv double %207, %210
%212 = call double @log(double %211)
%213 = load double, double* %38
%214 = fadd double %212, %213
%215 = load double, double* %25
%216 = fdiv double %214, %215
store double %216, double* %40
%217 = load double, double* %16
%218 = load i32, i32* %24
%219 = sitofp i32 %218 to double
%220 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %219, double 2.000000e+00)
%221 = call double @pow(double %217, double %220)
%222 = load double, double* %15
%223 = load double, double* %35
%224 = fmul double %222, %223
%225 = fdiv double %221, %224
%226 = call double @log(double %225)
%227 = load double, double* %38
%228 = fadd double %226, %227
%229 = load double, double* %25
%230 = fdiv double %228, %229
store double %230, double* %41
%231 = load double, double* %16
%232 = load i32, i32* %24
%233 = sitofp i32 %232 to double
%234 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %233, double 2.000000e+00)
%235 = call double @pow(double %231, double %234)
%236 = load double, double* %27
%237 = load double, double* %35
%238 = fmul double %236, %237
%239 = fdiv double %235, %238
%240 = call double @log(double %239)
%241 = load double, double* %38
%242 = fadd double %240, %241
%243 = load double, double* %25
%244 = fdiv double %242, %243
store double %244, double* %42
%245 = load double, double* %20
%246 = load double, double* %23
%247 = fsub double %245, %246
%248 = load i32, i32* %24
%249 = sitofp i32 %248 to double
%250 = load double, double* %29
%251 = fneg double %249
%252 = call double @llvm.fmuladd.f64(double %251, double %250, double %247)
%253 = fmul double 2.000000e+00, %252
%254 = load double, double* %26
%255 = fdiv double %253, %254
%256 = fadd double %255, 1.000000e+00
store double %256, double* %43
%257 = load i32, i32* %24
%258 = sitofp i32 %257 to double
%259 = fmul double 2.000000e+00, %258
%260 = load double, double* %29
%261 = fmul double %259, %260
%262 = load double, double* %26
%263 = fdiv double %261, %262
store double %263, double* %44
%264 = load double, double* %20
%265 = load double, double* %23
%266 = fsub double %264, %265
%267 = load i32, i32* %24
%268 = sitofp i32 %267 to double
%269 = load double, double* %29
%270 = call double @llvm.fmuladd.f64(double %268, double %269, double %266)
%271 = fmul double 2.000000e+00, %270
%272 = load double, double* %26
%273 = fdiv double %271, %272
%274 = fadd double %273, 1.000000e+00
store double %274, double* %45
%275 = load double, double* %37
%276 = load double, double* %36
%277 = fdiv double %275, %276
%278 = load double, double* %43
%279 = call double @pow(double %277, double %278)
%280 = load double, double* %30
%281 = load double, double* %44
%282 = call double @pow(double %280, double %281)
%283 = fmul double %279, %282
%284 = load double, double* %39
%285 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %284)
%286 = load double, double* %40
%287 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %286)
%288 = sub nsw i32 %285, %287
%289 = sitofp i32 %288 to double
%290 = load double, double* %16
%291 = load i32, i32* %24
%292 = sitofp i32 %291 to double
%293 = fadd double %292, 1.000000e+00
%294 = call double @pow(double %290, double %293)
%295 = load double, double* %37
%296 = load double, double* %14
%297 = fmul double %295, %296
%298 = fdiv double %294, %297
%299 = load double, double* %45
%300 = call double @pow(double %298, double %299)
%301 = load double, double* %41
%302 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %301)
%303 = load double, double* %42
%304 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %303)
%305 = sub nsw i32 %302, %304
%306 = sitofp i32 %305 to double
%307 = fmul double %300, %306
%308 = fneg double %307
%309 = call double @llvm.fmuladd.f64(double %283, double %289, double %308)
%310 = load double, double* %32
%311 = fadd double %310, %309
store double %311, double* %32
%312 = load double, double* %37
%313 = load double, double* %36
%314 = fdiv double %312, %313
%315 = load double, double* %43
%316 = fsub double %315, 2.000000e+00
%317 = call double @pow(double %314, double %316)
%318 = load double, double* %30
%319 = load double, double* %44
%320 = call double @pow(double %318, double %319)
%321 = fmul double %317, %320
%322 = load double, double* %39
%323 = load double, double* %25
%324 = fsub double %322, %323
%325 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %324)
%326 = load double, double* %40
%327 = load double, double* %25
%328 = fsub double %326, %327
%329 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %328)
%330 = sub nsw i32 %325, %329
%331 = sitofp i32 %330 to double
%332 = load double, double* %16
%333 = load i32, i32* %24
%334 = sitofp i32 %333 to double
%335 = fadd double %334, 1.000000e+00
%336 = call double @pow(double %332, double %335)
%337 = load double, double* %37
%338 = load double, double* %14
%339 = fmul double %337, %338
%340 = fdiv double %336, %339
%341 = load double, double* %45
%342 = fsub double %341, 2.000000e+00
%343 = call double @pow(double %340, double %342)
%344 = load double, double* %41
%345 = load double, double* %25
%346 = fsub double %344, %345
%347 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %346)
%348 = load double, double* %42
%349 = load double, double* %25
%350 = fsub double %348, %349
%351 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %350)
%352 = sub nsw i32 %347, %351
%353 = sitofp i32 %352 to double
%354 = fmul double %343, %353
%355 = fneg double %354
%356 = call double @llvm.fmuladd.f64(double %321, double %331, double %355)
%357 = load double, double* %33
%358 = fadd double %357, %356
store double %358, double* %33
br label %359
359: ; preds = %170
%360 = load i32, i32* %24
%361 = add nsw i32 %360, 1
store i32 %361, i32* %24
br label %167
362: ; preds = %167
%363 = load double, double* %14
%364 = load double, double* %20
%365 = load double, double* %19
%366 = fsub double %364, %365
%367 = load double, double* %18
%368 = fmul double %366, %367
%369 = call double @exp(double %368)
%370 = fmul double %363, %369
%371 = load double, double* %32
%372 = load double, double* %15
%373 = load double, double* %19
%374 = fneg double %373
%375 = load double, double* %18
%376 = fmul double %374, %375
%377 = call double @exp(double %376)
%378 = fmul double %372, %377
%379 = load double, double* %33
%380 = fmul double %378, %379
%381 = fneg double %380
%382 = call double @llvm.fmuladd.f64(double %370, double %371, double %381)
store double %382, double* %31
br label %608
383: ; preds = %163
%384 = load i32, i32* %13
%385 = icmp eq i32 %384, 1
br i1 %385, label %389, label %386
386: ; preds = %383
%387 = load i32, i32* %13
%388 = icmp eq i32 %387, 2
br i1 %388, label %389, label %606
389: ; preds = %386, %383
store i32 -5, i32* %24
br label %390
390: ; preds = %582, %389
%391 = load i32, i32* %24
%392 = icmp sle i32 %391, 5
br i1 %392, label %393, label %585
393: ; preds = %390
%394 = load double, double* %16
%395 = load i32, i32* %24
%396 = sitofp i32 %395 to double
%397 = fmul double 2.000000e+00, %396
%398 = call double @pow(double %394, double %397)
store double %398, double* %46
%399 = load double, double* %14
%400 = load double, double* %17
%401 = load i32, i32* %24
%402 = sitofp i32 %401 to double
%403 = fmul double 2.000000e+00, %402
%404 = call double @pow(double %400, double %403)
%405 = fmul double %399, %404
store double %405, double* %47
%406 = load double, double* %16
%407 = load i32, i32* %24
%408 = sitofp i32 %407 to double
%409 = call double @pow(double %406, double %408)
store double %409, double* %48
%410 = load double, double* %17
%411 = load i32, i32* %24
%412 = sitofp i32 %411 to double
%413 = call double @pow(double %410, double %412)
store double %413, double* %49
%414 = load double, double* %20
%415 = load double, double* %26
%416 = fdiv double %415, 2.000000e+00
%417 = fadd double %414, %416
%418 = load double, double* %18
%419 = fmul double %417, %418
store double %419, double* %50
%420 = load double, double* %47
%421 = load double, double* %28
%422 = load double, double* %46
%423 = fmul double %421, %422
%424 = fdiv double %420, %423
%425 = call double @log(double %424)
%426 = load double, double* %50
%427 = fadd double %425, %426
%428 = load double, double* %25
%429 = fdiv double %427, %428
store double %429, double* %51
%430 = load double, double* %47
%431 = load double, double* %15
%432 = load double, double* %46
%433 = fmul double %431, %432
%434 = fdiv double %430, %433
%435 = call double @log(double %434)
%436 = load double, double* %50
%437 = fadd double %435, %436
%438 = load double, double* %25
%439 = fdiv double %437, %438
store double %439, double* %52
%440 = load double, double* %16
%441 = load i32, i32* %24
%442 = sitofp i32 %441 to double
%443 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %442, double 2.000000e+00)
%444 = call double @pow(double %440, double %443)
%445 = load double, double* %28
%446 = load double, double* %47
%447 = fmul double %445, %446
%448 = fdiv double %444, %447
%449 = call double @log(double %448)
%450 = load double, double* %50
%451 = fadd double %449, %450
%452 = load double, double* %25
%453 = fdiv double %451, %452
store double %453, double* %53
%454 = load double, double* %16
%455 = load i32, i32* %24
%456 = sitofp i32 %455 to double
%457 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %456, double 2.000000e+00)
%458 = call double @pow(double %454, double %457)
%459 = load double, double* %15
%460 = load double, double* %47
%461 = fmul double %459, %460
%462 = fdiv double %458, %461
%463 = call double @log(double %462)
%464 = load double, double* %50
%465 = fadd double %463, %464
%466 = load double, double* %25
%467 = fdiv double %465, %466
store double %467, double* %54
%468 = load double, double* %20
%469 = load double, double* %23
%470 = fsub double %468, %469
%471 = load i32, i32* %24
%472 = sitofp i32 %471 to double
%473 = load double, double* %29
%474 = fneg double %472
%475 = call double @llvm.fmuladd.f64(double %474, double %473, double %470)
%476 = fmul double 2.000000e+00, %475
%477 = load double, double* %26
%478 = fdiv double %476, %477
%479 = fadd double %478, 1.000000e+00
store double %479, double* %55
%480 = load i32, i32* %24
%481 = sitofp i32 %480 to double
%482 = fmul double 2.000000e+00, %481
%483 = load double, double* %29
%484 = fmul double %482, %483
%485 = load double, double* %26
%486 = fdiv double %484, %485
store double %486, double* %56
%487 = load double, double* %20
%488 = load double, double* %23
%489 = fsub double %487, %488
%490 = load i32, i32* %24
%491 = sitofp i32 %490 to double
%492 = load double, double* %29
%493 = call double @llvm.fmuladd.f64(double %491, double %492, double %489)
%494 = fmul double 2.000000e+00, %493
%495 = load double, double* %26
%496 = fdiv double %494, %495
%497 = fadd double %496, 1.000000e+00
store double %497, double* %57
%498 = load double, double* %49
%499 = load double, double* %48
%500 = fdiv double %498, %499
%501 = load double, double* %55
%502 = call double @pow(double %500, double %501)
%503 = load double, double* %30
%504 = load double, double* %56
%505 = call double @pow(double %503, double %504)
%506 = fmul double %502, %505
%507 = load double, double* %51
%508 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %507)
%509 = load double, double* %52
%510 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %509)
%511 = sub nsw i32 %508, %510
%512 = sitofp i32 %511 to double
%513 = load double, double* %16
%514 = load i32, i32* %24
%515 = sitofp i32 %514 to double
%516 = fadd double %515, 1.000000e+00
%517 = call double @pow(double %513, double %516)
%518 = load double, double* %49
%519 = load double, double* %14
%520 = fmul double %518, %519
%521 = fdiv double %517, %520
%522 = load double, double* %57
%523 = call double @pow(double %521, double %522)
%524 = load double, double* %53
%525 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %524)
%526 = load double, double* %54
%527 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %526)
%528 = sub nsw i32 %525, %527
%529 = sitofp i32 %528 to double
%530 = fmul double %523, %529
%531 = fneg double %530
%532 = call double @llvm.fmuladd.f64(double %506, double %512, double %531)
%533 = load double, double* %32
%534 = fadd double %533, %532
store double %534, double* %32
%535 = load double, double* %49
%536 = load double, double* %48
%537 = fdiv double %535, %536
%538 = load double, double* %55
%539 = fsub double %538, 2.000000e+00
%540 = call double @pow(double %537, double %539)
%541 = load double, double* %30
%542 = load double, double* %56
%543 = call double @pow(double %541, double %542)
%544 = fmul double %540, %543
%545 = load double, double* %51
%546 = load double, double* %25
%547 = fsub double %545, %546
%548 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %547)
%549 = load double, double* %52
%550 = load double, double* %25
%551 = fsub double %549, %550
%552 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %551)
%553 = sub nsw i32 %548, %552
%554 = sitofp i32 %553 to double
%555 = load double, double* %16
%556 = load i32, i32* %24
%557 = sitofp i32 %556 to double
%558 = fadd double %557, 1.000000e+00
%559 = call double @pow(double %555, double %558)
%560 = load double, double* %49
%561 = load double, double* %14
%562 = fmul double %560, %561
%563 = fdiv double %559, %562
%564 = load double, double* %57
%565 = fsub double %564, 2.000000e+00
%566 = call double @pow(double %563, double %565)
%567 = load double, double* %53
%568 = load double, double* %25
%569 = fsub double %567, %568
%570 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %569)
%571 = load double, double* %54
%572 = load double, double* %25
%573 = fsub double %571, %572
%574 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %573)
%575 = sub nsw i32 %570, %574
%576 = sitofp i32 %575 to double
%577 = fmul double %566, %576
%578 = fneg double %577
%579 = call double @llvm.fmuladd.f64(double %544, double %554, double %578)
%580 = load double, double* %33
%581 = fadd double %580, %579
store double %581, double* %33
br label %582
582: ; preds = %393
%583 = load i32, i32* %24
%584 = add nsw i32 %583, 1
store i32 %584, i32* %24
br label %390
585: ; preds = %390
%586 = load double, double* %15
%587 = load double, double* %19
%588 = fneg double %587
%589 = load double, double* %18
%590 = fmul double %588, %589
%591 = call double @exp(double %590)
%592 = fmul double %586, %591
%593 = load double, double* %33
%594 = load double, double* %14
%595 = load double, double* %20
%596 = load double, double* %19
%597 = fsub double %595, %596
%598 = load double, double* %18
%599 = fmul double %597, %598
%600 = call double @exp(double %599)
%601 = fmul double %594, %600
%602 = load double, double* %32
%603 = fmul double %601, %602
%604 = fneg double %603
%605 = call double @llvm.fmuladd.f64(double %592, double %593, double %604)
store double %605, double* %31
br label %607
606: ; preds = %386
unreachable
607: ; preds = %585
br label %608
608: ; preds = %607, %362
%609 = load i32, i32* %13
switch i32 %609, label %634 [
i32 4, label %610
i32 2, label %610
i32 3, label %612
i32 1, label %623
]
610: ; preds = %608, %608
%611 = load double, double* %31
store double %611, double* %12
br label %635
612: ; preds = %608
%613 = load double, double* %14
%614 = load double, double* %15
%615 = load double, double* %18
%616 = load double, double* %19
%617 = load double, double* %20
%618 = load double, double* %21
%619 = call i32 (double, double, double, double, double, double, ...) bitcast (i32 (...)* @gbs_call to i32 (double, double, double, double, double, double, ...)*)(double %613, double %614, double %615, double %616, double %617, double %618)
%620 = sitofp i32 %619 to double
%621 = load double, double* %31
%622 = fsub double %620, %621
store double %622, double* %12
br label %635
623: ; preds = %608
%624 = load double, double* %14
%625 = load double, double* %15
%626 = load double, double* %18
%627 = load double, double* %19
%628 = load double, double* %20
%629 = load double, double* %21
%630 = call i32 (double, double, double, double, double, double, ...) bitcast (i32 (...)* @gbs_put to i32 (double, double, double, double, double, double, ...)*)(double %624, double %625, double %626, double %627, double %628, double %629)
%631 = sitofp i32 %630 to double
%632 = load double, double* %31
%633 = fsub double %631, %632
store double %633, double* %12
br label %635
634: ; preds = %608
unreachable
635: ; preds = %623, %612, %610
%636 = load double, double* %12
ret double %636
}

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