#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 */
typedef int uint32_t;
typedef int int32_t;

/* Variables and functions */
int32_t fisher23_tailsum(double *base_probp, double *saved12p, double *saved13p,
                         double *saved22p, double *saved23p, double *totalp,
                         uint32_t *tie_ctp, uint32_t right_side) {
  double total = 0;
  double cur_prob = *base_probp;
  double tmp12 = *saved12p;
  double tmp13 = *saved13p;
  double tmp22 = *saved22p;
  double tmp23 = *saved23p;
  double tmps12;
  double tmps13;
  double tmps22;
  double tmps23;
  double prev_prob;
  if (right_side) {
    if (cur_prob >
        0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
      prev_prob = tmp13 * tmp22;
      while (prev_prob > 0.5) {
        tmp12 += 1;
        tmp23 += 1;
        cur_prob *= prev_prob / (tmp12 * tmp23);
        tmp13 -= 1;
        tmp22 -= 1;
        if (cur_prob <=
            0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
          break;
        }
        prev_prob = tmp13 * tmp22;
      }
      *base_probp = cur_prob;
      tmps12 = tmp12;
      tmps13 = tmp13;
      tmps22 = tmp22;
      tmps23 = tmp23;
    } else {
      tmps12 = tmp12;
      tmps13 = tmp13;
      tmps22 = tmp22;
      tmps23 = tmp23;
      while (1) {
        prev_prob = cur_prob;
        tmp13 += 1;
        tmp22 += 1;
        cur_prob *= (tmp12 * tmp23) / (tmp13 * tmp22);
        if (cur_prob < prev_prob) {
          return 1;
        }
        tmp12 -= 1;
        tmp23 -= 1;
        if (cur_prob >
            (1 - 2 * 0.00000000003) *
                0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
          if (cur_prob >
              (1 - 0.0000000000001) *
                  0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
            break;
          }
          *tie_ctp += 1;
        }
        total += cur_prob;
      }
      prev_prob = cur_prob;
      cur_prob = *base_probp;
      *base_probp = prev_prob;
    }
  } else {
    if (cur_prob >
        0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
      prev_prob = tmp12 * tmp23;
      while (prev_prob > 0.5) {
        tmp13 += 1;
        tmp22 += 1;
        cur_prob *= prev_prob / (tmp13 * tmp22);
        tmp12 -= 1;
        tmp23 -= 1;
        if (cur_prob <=
            0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
          break;
        }
        prev_prob = tmp12 * tmp23;
      }
      *base_probp = cur_prob;
      tmps12 = tmp12;
      tmps13 = tmp13;
      tmps22 = tmp22;
      tmps23 = tmp23;
    } else {
      tmps12 = tmp12;
      tmps13 = tmp13;
      tmps22 = tmp22;
      tmps23 = tmp23;
      while (1) {
        prev_prob = cur_prob;
        tmp12 += 1;
        tmp23 += 1;
        cur_prob *= (tmp13 * tmp22) / (tmp12 * tmp23);
        if (cur_prob < prev_prob) {
          return 1;
        }
        tmp13 -= 1;
        tmp22 -= 1;
        if (cur_prob >
            (1 - 2 * 0.00000000003) *
                0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
          if (cur_prob >
              0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
            break;
          }
          *tie_ctp += 1;
        }
        total += cur_prob;
      }
      prev_prob = cur_prob;
      cur_prob = *base_probp;
      *base_probp = prev_prob;
    }
  }
  *saved12p = tmp12;
  *saved13p = tmp13;
  *saved22p = tmp22;
  *saved23p = tmp23;
  if (cur_prob >
      (1 - 2 * 0.00000000003) *
          0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
    if (cur_prob >
        0.00000000000000000000000010339757656912845935892608650874535669572651386260986328125) {
      *totalp = 0;
      return 0;
    }
    *tie_ctp += 1;
  }
  if (right_side) {
    prev_prob = total;
    total += cur_prob;
    while (total > prev_prob) {
      tmps12 += 1;
      tmps23 += 1;
      cur_prob *= (tmps13 * tmps22) / (tmps12 * tmps23);
      tmps13 -= 1;
      tmps22 -= 1;
      prev_prob = total;
      total += cur_prob;
    }
  } else {
    prev_prob = total;
    total += cur_prob;
    while (total > prev_prob) {
      tmps13 += 1;
      tmps22 += 1;
      cur_prob *= (tmps12 * tmps23) / (tmps13 * tmps22);
      tmps12 -= 1;
      tmps23 -= 1;
      prev_prob = total;
      total += cur_prob;
    }
  }
  *totalp = total;
  return 0;
}


x86 assembly (clang, -O0):
<fisher23_tailsum>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
cmpl   $0x0,0x18(%rbp)
je     13e7 <fisher23_tailsum+0x2e7>
movsd  -0x48(%rbp),%xmm0
movsd  0xe79(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1299 <fisher23_tailsum+0x199>
movsd  -0x58(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  0xe65(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    125c <fisher23_tailsum+0x15c>
movsd  0xe43(%rip),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe31(%rip),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x50(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  0xdfa(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  0xde4(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xdcb(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
jb     1245 <fisher23_tailsum+0x145>
jmp    125c <fisher23_tailsum+0x15c>
movsd  -0x58(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    11a3 <fisher23_tailsum+0xa3>
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    13e2 <fisher23_tailsum+0x2e2>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xd2f(%rip),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xd1d(%rip),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x90(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    133a <fisher23_tailsum+0x23a>
movl   $0x1,-0x4(%rbp)
jmp    1896 <fisher23_tailsum+0x796>
movsd  -0x50(%rbp),%xmm0
movsd  0xcc1(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  0xcab(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0xc9d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13a4 <fisher23_tailsum+0x2a4>
movsd  -0x48(%rbp),%xmm0
movsd  0xc96(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1399 <fisher23_tailsum+0x299>
jmp    13b8 <fisher23_tailsum+0x2b8>
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    12c4 <fisher23_tailsum+0x1c4>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1654 <fisher23_tailsum+0x554>
movsd  -0x48(%rbp),%xmm0
movsd  0xc0c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1506 <fisher23_tailsum+0x406>
movsd  -0x50(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  0xbf8(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    14c9 <fisher23_tailsum+0x3c9>
movsd  0xbd6(%rip),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xbc4(%rip),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  0xb8d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  0xb77(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xb5e(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
jb     14b2 <fisher23_tailsum+0x3b2>
jmp    14c9 <fisher23_tailsum+0x3c9>
movsd  -0x50(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    1410 <fisher23_tailsum+0x310>
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
jmp    164f <fisher23_tailsum+0x54f>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xac2(%rip),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xab0(%rip),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x90(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    15a7 <fisher23_tailsum+0x4a7>
movl   $0x1,-0x4(%rbp)
jmp    1896 <fisher23_tailsum+0x796>
movsd  -0x58(%rbp),%xmm0
movsd  0xa54(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  0xa3e(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0xa30(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1611 <fisher23_tailsum+0x511>
movsd  -0x48(%rbp),%xmm0
movsd  0xa09(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1606 <fisher23_tailsum+0x506>
jmp    1625 <fisher23_tailsum+0x525>
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1531 <fisher23_tailsum+0x431>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1654 <fisher23_tailsum+0x554>
movsd  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x60(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x48(%rbp),%xmm0
movsd  0x97b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16d8 <fisher23_tailsum+0x5d8>
movsd  -0x48(%rbp),%xmm0
movsd  0x954(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16cd <fisher23_tailsum+0x5cd>
mov    -0x38(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1896 <fisher23_tailsum+0x796>
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
cmpl   $0x0,0x18(%rbp)
je     17b2 <fisher23_tailsum+0x6b2>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
ucomisd -0x90(%rbp),%xmm0
ff
jbe    17ad <fisher23_tailsum+0x6ad>
movsd  0x8ef(%rip),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0x8dd(%rip),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  0x89b(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  0x885(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    16fe <fisher23_tailsum+0x5fe>
jmp    1882 <fisher23_tailsum+0x782>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
ucomisd -0x90(%rbp),%xmm0
ff
jbe    187d <fisher23_tailsum+0x77d>
movsd  0x81f(%rip),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0x80d(%rip),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0x7d1(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  0x7b8(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    17ce <fisher23_tailsum+0x6ce>
jmp    1882 <fisher23_tailsum+0x782>
movsd  -0x40(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fisher23_tailsum>:
mov    0x10(%rsp),%r10d
mov    0x8(%rsp),%r11
movsd  (%rdi),%xmm2
movsd  (%rsi),%xmm14
movsd  (%rdx),%xmm0
movsd  (%rcx),%xmm5
movsd  (%r8),%xmm6
test   %r10d,%r10d
je     11ca <fisher23_tailsum+0xca>
ucomisd 0xecf(%rip),%xmm2
jbe    1322 <fisher23_tailsum+0x222>
movapd %xmm0,%xmm4
mulsd  %xmm5,%xmm4
ucomisd 0xed1(%rip),%xmm4
unpcklpd %xmm6,%xmm14
unpcklpd %xmm5,%xmm0
xorpd  %xmm12,%xmm12
jbe    1261 <fisher23_tailsum+0x161>
movapd 0xebc(%rip),%xmm8
movapd 0xec3(%rip),%xmm9
movsd  0xe8b(%rip),%xmm7
movsd  0xe9b(%rip),%xmm5
nopl   (%rax)
movapd %xmm2,%xmm6
addpd  %xmm8,%xmm14
movapd %xmm14,%xmm2
unpckhpd %xmm14,%xmm2
mulsd  %xmm14,%xmm2
divsd  %xmm2,%xmm4
movapd %xmm4,%xmm2
mulsd  %xmm6,%xmm2
addpd  %xmm9,%xmm0
ucomisd %xmm2,%xmm7
jae    1261 <fisher23_tailsum+0x161>
movapd %xmm0,%xmm4
unpckhpd %xmm0,%xmm4
mulsd  %xmm0,%xmm4
ucomisd %xmm5,%xmm4
ja     1180 <fisher23_tailsum+0x80>
jmp    1261 <fisher23_tailsum+0x161>
ucomisd 0xe2e(%rip),%xmm2
jbe    13fc <fisher23_tailsum+0x2fc>
movapd %xmm14,%xmm4
mulsd  %xmm6,%xmm4
ucomisd 0xe2f(%rip),%xmm4
unpcklpd %xmm6,%xmm14
unpcklpd %xmm5,%xmm0
xorpd  %xmm12,%xmm12
jbe    1261 <fisher23_tailsum+0x161>
movapd 0xe1e(%rip),%xmm8
movapd 0xe26(%rip),%xmm6
movsd  0xdee(%rip),%xmm7
movsd  0xdfe(%rip),%xmm5
nopw   0x0(%rax,%rax,1)
movapd %xmm2,%xmm3
addpd  %xmm8,%xmm0
movapd %xmm0,%xmm2
unpckhpd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
divsd  %xmm2,%xmm4
movapd %xmm4,%xmm2
mulsd  %xmm3,%xmm2
addpd  %xmm6,%xmm14
ucomisd %xmm2,%xmm7
jae    1261 <fisher23_tailsum+0x161>
movapd %xmm14,%xmm4
unpckhpd %xmm14,%xmm4
mulsd  %xmm14,%xmm4
ucomisd %xmm5,%xmm4
ja     1220 <fisher23_tailsum+0x120>
movapd %xmm2,%xmm13
movapd %xmm0,%xmm5
movapd %xmm14,%xmm3
movsd  %xmm13,(%rdi)
movlpd %xmm3,(%rsi)
movlpd %xmm5,(%rdx)
movhpd %xmm5,(%rcx)
movhpd %xmm3,(%r8)
ucomisd 0xd7b(%rip),%xmm2
jbe    12a5 <fisher23_tailsum+0x1a5>
xorpd  %xmm5,%xmm5
ucomisd 0xd65(%rip),%xmm2
ja     1533 <fisher23_tailsum+0x433>
addl   $0x1,(%r11)
movapd %xmm12,%xmm4
addsd  %xmm2,%xmm4
test   %r10d,%r10d
je     14ca <fisher23_tailsum+0x3ca>
ucomisd %xmm12,%xmm4
jbe    152f <fisher23_tailsum+0x42f>
movapd 0xd56(%rip),%xmm3
movapd 0xd5e(%rip),%xmm6
movapd %xmm4,%xmm5
cs nopw 0x0(%rax,%rax,1)
addpd  %xmm3,%xmm14
movapd %xmm0,%xmm7
unpcklpd %xmm14,%xmm7
movapd %xmm0,%xmm1
unpckhpd %xmm14,%xmm1
mulpd  %xmm7,%xmm1
movapd %xmm1,%xmm7
unpckhpd %xmm1,%xmm7
divsd  %xmm7,%xmm1
mulsd  %xmm1,%xmm2
addpd  %xmm6,%xmm0
addsd  %xmm2,%xmm5
ucomisd %xmm4,%xmm5
movapd %xmm5,%xmm4
ja     12e0 <fisher23_tailsum+0x1e0>
jmp    1533 <fisher23_tailsum+0x433>
unpcklpd %xmm5,%xmm0
movapd 0xcf2(%rip),%xmm5
addpd  %xmm0,%xmm5
movapd %xmm14,%xmm13
mulsd  %xmm6,%xmm13
movapd %xmm5,%xmm3
unpckhpd %xmm5,%xmm3
mulsd  %xmm5,%xmm3
divsd  %xmm3,%xmm13
mulsd  %xmm2,%xmm13
ucomisd %xmm13,%xmm2
mov    $0x1,%eax
ja     153a <fisher23_tailsum+0x43a>
unpcklpd %xmm6,%xmm14
xorpd  %xmm12,%xmm12
movapd 0xcbb(%rip),%xmm8
movsd  0xc8a(%rip),%xmm10
movsd  0xc89(%rip),%xmm9
movapd 0xc90(%rip),%xmm11
movapd %xmm14,%xmm3
jmp    13df <fisher23_tailsum+0x2df>
nopw   0x0(%rax,%rax,1)
addsd  %xmm13,%xmm12
addpd  %xmm11,%xmm5
movapd %xmm3,%xmm6
unpcklpd %xmm5,%xmm6
movapd %xmm3,%xmm4
unpckhpd %xmm5,%xmm4
mulpd  %xmm6,%xmm4
movapd %xmm4,%xmm6
unpckhpd %xmm4,%xmm6
divsd  %xmm6,%xmm4
mulsd  %xmm13,%xmm4
ucomisd %xmm4,%xmm13
movapd %xmm4,%xmm13
ja     153a <fisher23_tailsum+0x43a>
addpd  %xmm8,%xmm3
ucomisd %xmm10,%xmm13
jbe    13a0 <fisher23_tailsum+0x2a0>
ucomisd %xmm9,%xmm13
ja     126f <fisher23_tailsum+0x16f>
addl   $0x1,(%r11)
jmp    13a0 <fisher23_tailsum+0x2a0>
unpcklpd %xmm6,%xmm14
movapd 0xc17(%rip),%xmm3
addpd  %xmm14,%xmm3
movapd %xmm0,%xmm13
mulsd  %xmm5,%xmm13
movapd %xmm3,%xmm4
unpckhpd %xmm3,%xmm4
mulsd  %xmm3,%xmm4
divsd  %xmm4,%xmm13
mulsd  %xmm2,%xmm13
ucomisd %xmm13,%xmm2
mov    $0x1,%eax
ja     153a <fisher23_tailsum+0x43a>
unpcklpd %xmm5,%xmm0
xorpd  %xmm12,%xmm12
movapd 0xbe0(%rip),%xmm8
movsd  0xbaf(%rip),%xmm10
movsd  0xb9e(%rip),%xmm9
movapd 0xbb6(%rip),%xmm6
movapd %xmm0,%xmm5
jmp    14b2 <fisher23_tailsum+0x3b2>
addl   $0x1,(%r11)
addsd  %xmm13,%xmm12
addpd  %xmm6,%xmm3
movapd %xmm5,%xmm4
unpcklpd %xmm3,%xmm4
movapd %xmm5,%xmm7
unpckhpd %xmm3,%xmm7
mulpd  %xmm4,%xmm7
movapd %xmm7,%xmm4
unpckhpd %xmm7,%xmm4
divsd  %xmm4,%xmm7
mulsd  %xmm13,%xmm7
ucomisd %xmm7,%xmm13
movapd %xmm7,%xmm13
ja     153a <fisher23_tailsum+0x43a>
addpd  %xmm8,%xmm5
ucomisd %xmm10,%xmm13
jbe    1474 <fisher23_tailsum+0x374>
ucomisd %xmm9,%xmm13
jbe    1470 <fisher23_tailsum+0x370>
jmp    126f <fisher23_tailsum+0x16f>
ucomisd %xmm12,%xmm4
jbe    152f <fisher23_tailsum+0x42f>
movapd 0xb47(%rip),%xmm3
movapd 0xb4f(%rip),%xmm6
movapd %xmm4,%xmm5
cs nopw 0x0(%rax,%rax,1)
nop
addpd  %xmm3,%xmm0
movapd %xmm14,%xmm1
unpcklpd %xmm0,%xmm1
movapd %xmm14,%xmm7
unpckhpd %xmm0,%xmm7
mulpd  %xmm1,%xmm7
movapd %xmm7,%xmm1
unpckhpd %xmm7,%xmm1
divsd  %xmm1,%xmm7
mulsd  %xmm7,%xmm2
addpd  %xmm6,%xmm14
addsd  %xmm2,%xmm5
ucomisd %xmm4,%xmm5
movapd %xmm5,%xmm4
ja     14f0 <fisher23_tailsum+0x3f0>
jmp    1533 <fisher23_tailsum+0x433>
movapd %xmm4,%xmm5
movsd  %xmm5,(%r9)
xor    %eax,%eax
ret

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

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