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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double DBL_EPSILON;
double exp(int /*<<< orphan*/);
double log(double);
int /*<<< orphan*/ logerf(double, double);
double wedge(double a, double s, double t) {
  double w[120];
  double p;
  double q;
  double b, m, r, u, v, sum;
  int j, k, n;
  n = 0;
  m = 1.0;
  if (s * t > 0.0) {
    r = u = v = 1.0;
    while ((w[n++] = r * u * (t - s) / m) > DBL_EPSILON) {
      if (n == 120)
        break;
      r *= 1.0 - 0.5 / n;
      v *= t;
      u = u * s + v;
      v *= t;
      u = u * s + v;
      m += 2.0;
    }
  } else {
    r = 1.0;
    u = s;
    v = t;
    while ((w[n++] = r * (v - u) / m) > DBL_EPSILON) {
      if (n == 120)
        break;
      r *= 1.0 - 0.5 / n;
      u *= s * s;
      v *= t * t;
      m += 2.0;
    }
  }
  b = a * a / 2.0;
  sum = 0.0;
  if (a < 7.0) {
    p = 1.0 - a * exp(logerf(a, 1.0));
    for (k = 0; k < n; ++k) {
      sum += w[k] * p;
      p = 1.0 - b * p / (k + 0.5);
    }
  } else {
    if (b < 120) {
      k = (int)b;
      u = k * k;
      p = 0.5 + (0.031 - 0.4 / u) / u;
      j = k + 1;
      u = j * j;
      q = 0.5 + (0.031 - 0.4 / u) / u;
      q = (j - 0.5) * (1.0 - q) / j;
      u = b - k;
      q = u * q + (1.0 - u) * p;
    } else {
      j = 120;
      q = (j + 0.5) / (j + b);
    }
    p = q;
    for (k = j - 1; k >= n; --k)
      p = (k - 0.5) * (1.0 - p) / b;
    for (; k >= 0; --k) {
      sum += w[k] * p;
      p = (k - 0.5) * (1.0 - p) / b;
    }
    p = q;
    for (k = j; k < n; ++k) {
      p = 1.0 - b * p / (k - 0.5);
      sum += w[k] * p;
    }
  }
  return log(sum) - b;
}


x86 assembly (clang, -O0):
<wedge>:
push   %rbp
mov    %rsp,%rbp
sub    $0x440,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movl   $0x0,-0x42c(%rbp)
movsd  0xea4(%rip),%xmm0
movsd  %xmm0,-0x400(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12d6 <wedge+0x1a6>
movsd  0xe7d(%rip),%xmm0
movsd  %xmm0,-0x418(%rbp)
ff
movsd  0xe6d(%rip),%xmm0
movsd  %xmm0,-0x410(%rbp)
ff
movsd  0xe5d(%rip),%xmm0
movsd  %xmm0,-0x408(%rbp)
ff
movsd  -0x408(%rbp),%xmm0
ff
mulsd  -0x410(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
subsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
divsd  -0x400(%rbp),%xmm0
ff
mov    -0x42c(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x42c(%rbp)
cltq
movsd  %xmm0,-0x3e0(%rbp,%rax,8)
ff ff
mov    0x2df4(%rip),%rax
ucomisd (%rax),%xmm0
jbe    12d1 <wedge+0x1a1>
cmpl   $0x78,-0x42c(%rbp)
jne    1210 <wedge+0xe0>
jmp    12d1 <wedge+0x1a1>
cvtsi2sdl -0x42c(%rbp),%xmm0
ff
movsd  0xdf0(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xdd4(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x408(%rbp),%xmm0
ff
movsd  %xmm0,-0x408(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mulsd  -0x418(%rbp),%xmm0
ff
movsd  %xmm0,-0x418(%rbp)
ff
movsd  -0x410(%rbp),%xmm0
ff
movsd  -0x10(%rbp),%xmm2
movsd  -0x418(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x410(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mulsd  -0x418(%rbp),%xmm0
ff
movsd  %xmm0,-0x418(%rbp)
ff
movsd  -0x410(%rbp),%xmm0
ff
movsd  -0x10(%rbp),%xmm2
movsd  -0x418(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x410(%rbp)
ff
movsd  0xd4c(%rip),%xmm0
addsd  -0x400(%rbp),%xmm0
ff
movsd  %xmm0,-0x400(%rbp)
ff
jmp    11ab <wedge+0x7b>
jmp    13e9 <wedge+0x2b9>
movsd  0xd22(%rip),%xmm0
movsd  %xmm0,-0x408(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x410(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x418(%rbp)
ff
movsd  -0x408(%rbp),%xmm0
ff
movsd  -0x418(%rbp),%xmm1
ff
subsd  -0x410(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
divsd  -0x400(%rbp),%xmm0
ff
mov    -0x42c(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x42c(%rbp)
cltq
movsd  %xmm0,-0x3e0(%rbp,%rax,8)
ff ff
mov    0x2ca1(%rip),%rax
ucomisd (%rax),%xmm0
jbe    13e4 <wedge+0x2b4>
cmpl   $0x78,-0x42c(%rbp)
jne    1363 <wedge+0x233>
jmp    13e4 <wedge+0x2b4>
cvtsi2sdl -0x42c(%rbp),%xmm0
ff
movsd  0xc9d(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xc81(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x408(%rbp),%xmm0
ff
movsd  %xmm0,-0x408(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x410(%rbp),%xmm0
ff
movsd  %xmm0,-0x410(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x418(%rbp),%xmm0
ff
movsd  %xmm0,-0x418(%rbp)
ff
movsd  0xc39(%rip),%xmm0
addsd  -0x400(%rbp),%xmm0
ff
movsd  %xmm0,-0x400(%rbp)
ff
jmp    1300 <wedge+0x1d0>
jmp    13e9 <wedge+0x2b9>
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  0xc0d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x3f8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x420(%rbp)
ff
movsd  0xbfe(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    1526 <wedge+0x3f6>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x438(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  0xbc1(%rip),%xmm1
call   1030 <logerf@plt>
mov    %eax,%edi
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x438(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xb87(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x3e8(%rbp)
ff
movl   $0x0,-0x428(%rbp)
mov    -0x428(%rbp),%eax
cmp    -0x42c(%rbp),%eax
jge    1521 <wedge+0x3f1>
movslq -0x428(%rbp),%rax
movsd  -0x3e0(%rbp,%rax,8),%xmm0
ff ff
movsd  -0x3e8(%rbp),%xmm2
ff
movsd  -0x420(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x420(%rbp)
ff
movsd  -0x3f8(%rbp),%xmm1
ff
mulsd  -0x3e8(%rbp),%xmm1
ff
cvtsi2sdl -0x428(%rbp),%xmm0
ff
movsd  0xb1f(%rip),%xmm2
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  0xaff(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x3e8(%rbp)
ff
mov    -0x428(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x428(%rbp)
jmp    148f <wedge+0x35f>
jmp    1888 <wedge+0x758>
movsd  0xaf2(%rip),%xmm0
ucomisd -0x3f8(%rbp),%xmm0
ff
jbe    1690 <wedge+0x560>
cvttsd2si -0x3f8(%rbp),%eax
ff
mov    %eax,-0x428(%rbp)
mov    -0x428(%rbp),%eax
imul   -0x428(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x410(%rbp)
ff
movsd  0xac5(%rip),%xmm0
divsd  -0x410(%rbp),%xmm0
ff
movsd  0xaad(%rip),%xmm1
subsd  %xmm0,%xmm1
divsd  -0x410(%rbp),%xmm1
ff
movsd  0xa81(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x3e8(%rbp)
ff
mov    -0x428(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x424(%rbp)
mov    -0x424(%rbp),%eax
imul   -0x424(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x410(%rbp)
ff
movsd  0xa65(%rip),%xmm0
divsd  -0x410(%rbp),%xmm0
ff
movsd  0xa4d(%rip),%xmm1
subsd  %xmm0,%xmm1
divsd  -0x410(%rbp),%xmm1
ff
movsd  0xa21(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x3f0(%rbp)
ff
cvtsi2sdl -0x424(%rbp),%xmm0
ff
movsd  0xa05(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x9e9(%rip),%xmm1
subsd  -0x3f0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x424(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x3f0(%rbp)
ff
movsd  -0x3f8(%rbp),%xmm0
ff
cvtsi2sdl -0x428(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x410(%rbp)
ff
movsd  -0x410(%rbp),%xmm0
ff
movsd  -0x3f0(%rbp),%xmm2
ff
movsd  0x995(%rip),%xmm1
subsd  -0x410(%rbp),%xmm1
ff
mulsd  -0x3e8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x3f0(%rbp)
ff
jmp    16ca <wedge+0x59a>
movl   $0x78,-0x424(%rbp)
cvtsi2sdl -0x424(%rbp),%xmm0
ff
movsd  0x966(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x424(%rbp),%xmm1
ff
addsd  -0x3f8(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x3f0(%rbp)
ff
movsd  -0x3f0(%rbp),%xmm0
ff
movsd  %xmm0,-0x3e8(%rbp)
ff
mov    -0x424(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x428(%rbp)
mov    -0x428(%rbp),%eax
cmp    -0x42c(%rbp),%eax
jl     1747 <wedge+0x617>
cvtsi2sdl -0x428(%rbp),%xmm0
ff
movsd  0x905(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x8e9(%rip),%xmm1
subsd  -0x3e8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
divsd  -0x3f8(%rbp),%xmm0
ff
movsd  %xmm0,-0x3e8(%rbp)
ff
mov    -0x428(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x428(%rbp)
jmp    16e9 <wedge+0x5b9>
jmp    174c <wedge+0x61c>
cmpl   $0x0,-0x428(%rbp)
jl     17d5 <wedge+0x6a5>
movslq -0x428(%rbp),%rax
movsd  -0x3e0(%rbp,%rax,8),%xmm0
ff ff
movsd  -0x3e8(%rbp),%xmm2
ff
movsd  -0x420(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x420(%rbp)
ff
cvtsi2sdl -0x428(%rbp),%xmm0
ff
movsd  0x877(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x85b(%rip),%xmm1
subsd  -0x3e8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
divsd  -0x3f8(%rbp),%xmm0
ff
movsd  %xmm0,-0x3e8(%rbp)
ff
mov    -0x428(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x428(%rbp)
jmp    174c <wedge+0x61c>
movsd  -0x3f0(%rbp),%xmm0
ff
movsd  %xmm0,-0x3e8(%rbp)
ff
mov    -0x424(%rbp),%eax
mov    %eax,-0x428(%rbp)
mov    -0x428(%rbp),%eax
cmp    -0x42c(%rbp),%eax
jge    1883 <wedge+0x753>
movsd  -0x3f8(%rbp),%xmm1
ff
mulsd  -0x3e8(%rbp),%xmm1
ff
cvtsi2sdl -0x428(%rbp),%xmm0
ff
movsd  0x7ed(%rip),%xmm2
subsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  0x7cd(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x3e8(%rbp)
ff
movslq -0x428(%rbp),%rax
movsd  -0x3e0(%rbp,%rax,8),%xmm0
ff ff
movsd  -0x3e8(%rbp),%xmm2
ff
movsd  -0x420(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x420(%rbp)
ff
mov    -0x428(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x428(%rbp)
jmp    17f1 <wedge+0x6c1>
jmp    1888 <wedge+0x758>
movsd  -0x420(%rbp),%xmm0
ff
call   1050 <log@plt>
subsd  -0x3f8(%rbp),%xmm0
ff
add    $0x440,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wedge>:
push   %rbx
sub    $0x3f0,%rsp
movapd %xmm1,%xmm4
mulsd  %xmm2,%xmm4
xorpd  %xmm3,%xmm3
ucomisd %xmm3,%xmm4
jbe    1220 <wedge+0xf0>
movapd %xmm2,%xmm13
subsd  %xmm1,%xmm13
mov    0x2e89(%rip),%rax
movsd  (%rax),%xmm11
movsd  %xmm13,0x30(%rsp)
mov    $0x1,%ebx
ucomisd %xmm11,%xmm13
jbe    12e7 <wedge+0x1b7>
movsd  0xe7c(%rip),%xmm10
mov    $0x1,%eax
movsd  0xe76(%rip),%xmm8
movsd  0xe75(%rip),%xmm9
movapd %xmm10,%xmm6
movapd %xmm10,%xmm7
movapd %xmm10,%xmm4
movapd %xmm10,%xmm3
nop
movapd %xmm4,%xmm12
xorps  %xmm5,%xmm5
cvtsi2sd %eax,%xmm5
movapd %xmm8,%xmm4
divsd  %xmm5,%xmm4
addsd  %xmm10,%xmm4
mulsd  %xmm12,%xmm4
mulsd  %xmm2,%xmm6
mulsd  %xmm1,%xmm7
addsd  %xmm6,%xmm7
mulsd  %xmm2,%xmm6
mulsd  %xmm1,%xmm7
addsd  %xmm6,%xmm7
addsd  %xmm9,%xmm3
movapd %xmm4,%xmm5
mulsd  %xmm7,%xmm5
mulsd  %xmm13,%xmm5
divsd  %xmm3,%xmm5
lea    0x1(%rax),%rbx
movsd  %xmm5,0x30(%rsp,%rax,8)
ucomisd %xmm11,%xmm5
jbe    12e7 <wedge+0x1b7>
cmp    $0x77,%rax
mov    %rbx,%rax
jne    11b0 <wedge+0x80>
jmp    12e7 <wedge+0x1b7>
mov    0x2dc1(%rip),%rax
movsd  (%rax),%xmm3
movapd %xmm2,%xmm13
subsd  %xmm1,%xmm13
movsd  %xmm13,0x30(%rsp)
mov    $0x1,%ebx
ucomisd %xmm3,%xmm13
jbe    12e7 <wedge+0x1b7>
unpcklpd %xmm1,%xmm2
movapd %xmm2,%xmm1
mulpd  %xmm2,%xmm1
movsd  0xd9f(%rip),%xmm10
mov    $0x1,%eax
movsd  0xd99(%rip),%xmm8
movsd  0xd98(%rip),%xmm9
movapd %xmm10,%xmm7
movapd %xmm10,%xmm6
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movapd %xmm7,%xmm4
mulpd  %xmm1,%xmm2
xorps  %xmm5,%xmm5
cvtsi2sd %eax,%xmm5
movapd %xmm8,%xmm7
divsd  %xmm5,%xmm7
addsd  %xmm10,%xmm7
mulsd  %xmm4,%xmm7
addsd  %xmm9,%xmm6
movapd %xmm2,%xmm4
unpckhpd %xmm2,%xmm4
movapd %xmm2,%xmm5
subsd  %xmm4,%xmm5
mulsd  %xmm7,%xmm5
divsd  %xmm6,%xmm5
lea    0x1(%rax),%rbx
movsd  %xmm5,0x30(%rsp,%rax,8)
ucomisd %xmm3,%xmm5
jbe    12e7 <wedge+0x1b7>
cmp    $0x77,%rax
mov    %rbx,%rax
jne    1290 <wedge+0x160>
movapd %xmm0,%xmm6
mulsd  %xmm0,%xmm6
mulsd  0xd21(%rip),%xmm6
movsd  0xd21(%rip),%xmm1
ucomisd %xmm0,%xmm1
movapd %xmm6,0x10(%rsp)
jbe    1390 <wedge+0x260>
movsd  0xce9(%rip),%xmm1
movsd  %xmm0,0x8(%rsp)
movapd %xmm13,0x20(%rsp)
call   1030 <logerf@plt>
mov    %eax,%edi
call   1040 <exp@plt>
movsd  0xcc8(%rip),%xmm5
mulsd  0x8(%rsp),%xmm0
movapd %xmm5,%xmm1
subsd  %xmm0,%xmm1
movapd 0x20(%rsp),%xmm2
mulsd  %xmm1,%xmm2
xorpd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
cmp    $0x1,%ebx
je     178e <wedge+0x65e>
mov    %ebx,%eax
add    $0xffffffffffffffff,%rax
cmp    $0x2,%ebx
movapd 0x10(%rsp),%xmm6
jne    14a7 <wedge+0x377>
movsd  0xc9a(%rip),%xmm2
mov    $0x1,%ecx
test   $0x1,%al
jne    1541 <wedge+0x411>
jmp    178e <wedge+0x65e>
movsd  0xc90(%rip),%xmm0
ucomisd %xmm6,%xmm0
jbe    144e <wedge+0x31e>
cvttsd2si %xmm6,%eax
mov    %eax,%ecx
imul   %eax,%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movsd  0xc7e(%rip),%xmm2
movapd %xmm2,%xmm3
divsd  %xmm1,%xmm3
movsd  0xc76(%rip),%xmm4
movapd %xmm4,%xmm0
subsd  %xmm3,%xmm0
divsd  %xmm1,%xmm0
movsd  0xc3a(%rip),%xmm1
addsd  %xmm1,%xmm0
add    $0x1,%eax
mov    %eax,%ecx
imul   %eax,%ecx
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
divsd  %xmm3,%xmm2
subsd  %xmm2,%xmm4
divsd  %xmm3,%xmm4
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
addsd  %xmm1,%xmm4
movsd  0xbf8(%rip),%xmm1
addsd  %xmm2,%xmm1
movsd  0xbe4(%rip),%xmm3
movapd %xmm3,%xmm5
subsd  %xmm4,%xmm5
mulsd  %xmm1,%xmm5
cvttpd2dq %xmm6,%xmm1
divsd  %xmm2,%xmm5
cvtdq2pd %xmm1,%xmm2
movapd %xmm6,%xmm1
subsd  %xmm2,%xmm1
subsd  %xmm1,%xmm3
mulsd  %xmm0,%xmm3
mulsd  %xmm5,%xmm1
addsd  %xmm3,%xmm1
jmp    146b <wedge+0x33b>
movsd  0xbd2(%rip),%xmm0
addsd  %xmm6,%xmm0
movsd  0xbce(%rip),%xmm1
divsd  %xmm0,%xmm1
mov    $0x78,%eax
lea    -0x1(%rax),%ecx
mov    %eax,%esi
sub    %ebx,%esi
jle    1492 <wedge+0x362>
lea    0x1(%rbx),%edx
test   $0x1,%sil
jne    155c <wedge+0x42c>
movapd %xmm1,%xmm0
cmp    %edx,%eax
jne    1586 <wedge+0x456>
jmp    15e0 <wedge+0x4b0>
movapd %xmm1,%xmm0
test   %ecx,%ecx
jns    15eb <wedge+0x4bb>
xorpd  %xmm2,%xmm2
jmp    16a4 <wedge+0x574>
mov    %rax,%rdx
and    $0xfffffffffffffffe,%rdx
neg    %rdx
mov    $0x1,%ecx
movsd  0xb5a(%rip),%xmm2
xchg   %ax,%ax
mulsd  %xmm6,%xmm1
lea    -0x1(%rcx),%esi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
addsd  %xmm2,%xmm3
divsd  %xmm3,%xmm1
movapd %xmm5,%xmm3
subsd  %xmm1,%xmm3
movapd %xmm6,%xmm4
mulsd  %xmm3,%xmm4
mulsd  0x30(%rsp,%rcx,8),%xmm3
addsd  %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm4
movapd %xmm5,%xmm1
subsd  %xmm4,%xmm1
movsd  0x38(%rsp,%rcx,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm3,%xmm0
lea    (%rdx,%rcx,1),%rsi
add    $0x2,%rsi
add    $0x2,%rcx
cmp    $0x1,%rsi
jne    14c0 <wedge+0x390>
lea    -0x1(%rcx),%edx
xorps  %xmm2,%xmm2
cvtsi2sd %edx,%xmm2
addsd  0xadf(%rip),%xmm2
test   $0x1,%al
je     178e <wedge+0x65e>
mulsd  %xmm6,%xmm1
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm5
mulsd  0x30(%rsp,%rcx,8),%xmm5
addsd  %xmm5,%xmm0
jmp    178e <wedge+0x65e>
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
addsd  0xa9d(%rip),%xmm2
movsd  0xa8d(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm6,%xmm0
lea    -0x2(%rax),%ecx
cmp    %edx,%eax
je     15e0 <wedge+0x4b0>
movsd  0xa7a(%rip),%xmm2
movsd  0xa6a(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
xorps  %xmm4,%xmm4
cvtsi2sd %ecx,%xmm4
addsd  %xmm2,%xmm4
movapd %xmm3,%xmm5
subsd  %xmm0,%xmm5
mulsd  %xmm4,%xmm5
divsd  %xmm6,%xmm5
lea    -0x1(%rcx),%edx
xorps  %xmm4,%xmm4
cvtsi2sd %edx,%xmm4
addsd  %xmm2,%xmm4
movapd %xmm3,%xmm0
subsd  %xmm5,%xmm0
mulsd  %xmm4,%xmm0
divsd  %xmm6,%xmm0
add    $0xfffffffe,%ecx
cmp    %ebx,%edx
jg     15a0 <wedge+0x470>
lea    -0x1(%rbx),%ecx
test   %ecx,%ecx
js     149e <wedge+0x36e>
mov    %ecx,%edx
test   $0x1,%cl
jne    1635 <wedge+0x505>
movsd  0x30(%rsp,%rdx,8),%xmm3
mulsd  %xmm0,%xmm3
xorpd  %xmm2,%xmm2
xorps  %xmm4,%xmm4
cvtsi2sd %ecx,%xmm4
addsd  %xmm3,%xmm2
addsd  0x9f5(%rip),%xmm4
movsd  0x9e5(%rip),%xmm3
subsd  %xmm0,%xmm3
mulsd  %xmm4,%xmm3
divsd  %xmm6,%xmm3
add    $0xffffffffffffffff,%rdx
movapd %xmm3,%xmm0
test   %ecx,%ecx
jne    163d <wedge+0x50d>
jmp    16a4 <wedge+0x574>
xorpd  %xmm2,%xmm2
test   %ecx,%ecx
je     16a4 <wedge+0x574>
movsd  0x9c3(%rip),%xmm3
movsd  0x9b3(%rip),%xmm4
nopl   (%rax)
movapd %xmm4,%xmm5
subsd  %xmm0,%xmm5
mulsd  0x30(%rsp,%rdx,8),%xmm0
addsd  %xmm2,%xmm0
xorps  %xmm2,%xmm2
cvtsi2sd %edx,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm5,%xmm2
divsd  %xmm6,%xmm2
movapd %xmm4,%xmm5
subsd  %xmm2,%xmm5
mulsd  0x28(%rsp,%rdx,8),%xmm2
addsd  %xmm0,%xmm2
add    $0xffffffffffffffff,%rdx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
addsd  %xmm3,%xmm0
mulsd  %xmm5,%xmm0
divsd  %xmm6,%xmm0
sub    $0x1,%rdx
jae    1650 <wedge+0x520>
cmp    %ebx,%eax
jge    16c5 <wedge+0x595>
movslq %eax,%rcx
movslq %ebx,%rdx
sub    %eax,%ebx
mov    %rcx,%rsi
not    %rsi
test   $0x1,%bl
jne    16ce <wedge+0x59e>
add    %rdx,%rsi
jne    1710 <wedge+0x5e0>
jmp    178e <wedge+0x65e>
movapd %xmm2,%xmm0
jmp    178e <wedge+0x65e>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x92b(%rip),%xmm0
mulsd  %xmm6,%xmm1
divsd  %xmm0,%xmm1
movsd  0x913(%rip),%xmm3
subsd  %xmm1,%xmm3
movsd  0x30(%rsp,%rcx,8),%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
add    $0x1,%rcx
movapd %xmm0,%xmm2
movapd %xmm3,%xmm1
add    %rdx,%rsi
je     178e <wedge+0x65e>
movsd  0x8f0(%rip),%xmm3
movsd  0x8e0(%rip),%xmm4
movapd %xmm2,%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mulsd  %xmm6,%xmm1
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
movapd %xmm4,%xmm2
subsd  %xmm1,%xmm2
movapd %xmm6,%xmm5
mulsd  %xmm2,%xmm5
mulsd  0x30(%rsp,%rcx,8),%xmm2
addsd  %xmm0,%xmm2
lea    0x1(%rcx),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  %xmm3,%xmm0
divsd  %xmm0,%xmm5
movapd %xmm4,%xmm1
subsd  %xmm5,%xmm1
movsd  0x38(%rsp,%rcx,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
add    $0x2,%rcx
cmp    %rdx,%rcx
jne    1730 <wedge+0x600>
call   1050 <log@plt>
subsd  0x10(%rsp),%xmm0
add    $0x3f0,%rsp
pop    %rbx
ret

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

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