#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 DBL_MAX;
scalar_t__ isnan(double);
double pnf_cooc_detail(double lambda_i, double lambda_r, double v_i, double v_r,
                       double delta, double *pleft, double *pbothleft,
                       double *pmiddle, double *pbothright, double *pright,
                       int *left, int *bothleft, int *middle, int *bothright,
                       int *right, int *boundguard) {
  double t, N, v1, v2, cooc;
  if (lambda_r < 0)
    lambda_r = -lambda_r;
  if (v_i < 0)
    v_i = -v_i;
  if (v_r < 0)
    v_r = -v_r;
  if (delta < 0)
    delta = -delta;
  if ((lambda_r <= DBL_EPSILON) || (lambda_r >= DBL_MAX) || isnan(lambda_r) ||
      (v_i <= DBL_EPSILON) || (v_i >= DBL_MAX) || isnan(v_i) ||
      (v_r <= DBL_EPSILON) || (v_r >= DBL_MAX) || isnan(v_r) ||
      (delta <= DBL_EPSILON) || (delta >= DBL_MAX) || isnan(delta) ||
      isnan(lambda_i)) {
    (*boundguard) = 1;
    return 0;
  }
  t = lambda_r / v_r;
  N = t / (delta / v_r) + 0.5;
  v1 = (lambda_i - delta / 2) / t;
  v2 = (lambda_i + delta / 2) / t;
  (*pleft) =
      (v1 + v_i) / v_i + (N - 1) / N * (v1 * v1 - v_i * v_i) / (2 * v_i * v_i);
  (*pbothleft) =
      (v2 - v1) / v_i + (N - 1) / N * (v2 * v2 - v1 * v1) / (2 * v_i * v_i);
  (*pmiddle) =
      (v2 - v1) / v_i - (N - 1) / N * (v2 * v2 + v1 * v1) / (2 * v_i * v_i);
  (*pbothright) =
      (v2 - v1) / v_i - (N - 1) / N * (v2 * v2 - v1 * v1) / (2 * v_i * v_i);
  (*pright) =
      (v_i - v2) / v_i - (N - 1) / N * (v_i * v_i - v2 * v2) / (2 * v_i * v_i);
  if ((v1 < -v_i) && (-v_i < v2) && (v2 < 0))
    (*left) = 1;
  else
    (*left) = 0;
  if ((-v_i <= v1) && (v1 < 0) && (-v_i <= v2) && (v2 < 0))
    (*bothleft) = 1;
  else
    (*bothleft) = 0;
  if ((-v_i <= v1) && (v1 < 0) && (0 <= v2) && (v2 < v_i))
    (*middle) = 1;
  else
    (*middle) = 0;
  if ((0 <= v1) && (v1 < v_i) && (0 <= v2) && (v2 < v_i))
    (*bothright) = 1;
  else
    (*bothright) = 0;
  if ((0 <= v1) && (v1 < v_i) && (v_i <= v2))
    (*right) = 1;
  else
    (*right) = 0;
  cooc = (*left) * (*pleft) + (*bothleft) * (*pbothleft) +
         (*middle) * (*pmiddle) + (*bothright) * (*pbothright) +
         (*right) * (*pright);
  if (cooc < 0) {
    (*boundguard) = 1;
    return 0;
  }
  if (cooc > 1) {
    (*boundguard) = 1;
    return 1;
  }
  if (isnan(cooc)) {
    (*boundguard) = 1;
    return 0;
  }
  (*boundguard) = 0;
  return cooc;
}


x86 assembly (clang, -O0):
<pnf_cooc_detail>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
mov    %rdi,-0x38(%rbp)
mov    %rsi,-0x40(%rbp)
mov    %rdx,-0x48(%rbp)
mov    %rcx,-0x50(%rbp)
mov    %r8,-0x58(%rbp)
mov    %r9,-0x60(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    118f <pnf_cooc_detail+0x7f>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    11be <pnf_cooc_detail+0xae>
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    11ed <pnf_cooc_detail+0xdd>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    121c <pnf_cooc_detail+0x10c>
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm1
mov    0x2dc0(%rip),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x18(%rbp),%xmm0
mov    0x2d96(%rip),%rax
ucomisd (%rax),%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x18(%rbp),%xmm0
call   1030 <isnan@plt>
cmp    $0x0,%rax
jne    1340 <pnf_cooc_detail+0x230>
movsd  -0x20(%rbp),%xmm1
mov    0x2d7c(%rip),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x20(%rbp),%xmm0
mov    0x2d52(%rip),%rax
ucomisd (%rax),%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x20(%rbp),%xmm0
call   1030 <isnan@plt>
cmp    $0x0,%rax
jne    1340 <pnf_cooc_detail+0x230>
movsd  -0x28(%rbp),%xmm1
mov    0x2d38(%rip),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x28(%rbp),%xmm0
mov    0x2d0e(%rip),%rax
ucomisd (%rax),%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x28(%rbp),%xmm0
call   1030 <isnan@plt>
cmp    $0x0,%rax
jne    1340 <pnf_cooc_detail+0x230>
movsd  -0x30(%rbp),%xmm1
mov    0x2cf4(%rip),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x30(%rbp),%xmm0
mov    0x2cca(%rip),%rax
ucomisd (%rax),%xmm0
jae    1340 <pnf_cooc_detail+0x230>
movsd  -0x30(%rbp),%xmm0
call   1030 <isnan@plt>
cmp    $0x0,%rax
jne    1340 <pnf_cooc_detail+0x230>
movsd  -0x10(%rbp),%xmm0
call   1030 <isnan@plt>
cmp    $0x0,%rax
je     1357 <pnf_cooc_detail+0x247>
mov    0x30(%rbp),%rax
movl   $0x1,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1984 <pnf_cooc_detail+0x874>
movsd  -0x18(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
divsd  -0x28(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xc8f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  0xc64(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  0xc40(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  0xc1a(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  -0x70(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm4
movsd  -0x20(%rbp),%xmm3
mulsd  -0x20(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xbca(%rip),%xmm2
mulsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  0xb9c(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  -0x70(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm4
movsd  -0x78(%rbp),%xmm3
mulsd  -0x78(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb4c(%rip),%xmm2
mulsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  0xb1e(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  -0x70(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm4
movsd  -0x78(%rbp),%xmm3
mulsd  -0x78(%rbp),%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xae5(%rip),%xmm2
mulsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  0xab7(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  -0x70(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm4
movsd  -0x78(%rbp),%xmm3
mulsd  -0x78(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xa67(%rip),%xmm2
mulsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  0xa39(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  -0x70(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm4
movsd  -0x80(%rbp),%xmm3
mulsd  -0x80(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0x9e9(%rip),%xmm2
mulsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd %xmm1,%xmm0
jbe    16a4 <pnf_cooc_detail+0x594>
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x80(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    16a4 <pnf_cooc_detail+0x594>
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jbe    16a4 <pnf_cooc_detail+0x594>
mov    -0x60(%rbp),%rax
movl   $0x1,(%rax)
jmp    16ae <pnf_cooc_detail+0x59e>
mov    -0x60(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x78(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     172f <pnf_cooc_detail+0x61f>
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jbe    172f <pnf_cooc_detail+0x61f>
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x80(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     172f <pnf_cooc_detail+0x61f>
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jbe    172f <pnf_cooc_detail+0x61f>
mov    0x10(%rbp),%rax
movl   $0x1,(%rax)
jmp    1739 <pnf_cooc_detail+0x629>
mov    0x10(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x78(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     17a7 <pnf_cooc_detail+0x697>
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jbe    17a7 <pnf_cooc_detail+0x697>
movsd  -0x80(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     17a7 <pnf_cooc_detail+0x697>
movsd  -0x80(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    17a7 <pnf_cooc_detail+0x697>
mov    0x18(%rbp),%rax
movl   $0x1,(%rax)
jmp    17b1 <pnf_cooc_detail+0x6a1>
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x78(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     180c <pnf_cooc_detail+0x6fc>
movsd  -0x78(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    180c <pnf_cooc_detail+0x6fc>
movsd  -0x80(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     180c <pnf_cooc_detail+0x6fc>
movsd  -0x80(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    180c <pnf_cooc_detail+0x6fc>
mov    0x20(%rbp),%rax
movl   $0x1,(%rax)
jmp    1816 <pnf_cooc_detail+0x706>
mov    0x20(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x78(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     185f <pnf_cooc_detail+0x74f>
movsd  -0x78(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    185f <pnf_cooc_detail+0x74f>
movsd  -0x20(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     185f <pnf_cooc_detail+0x74f>
mov    0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    1869 <pnf_cooc_detail+0x759>
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x60(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x10(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x28(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
mov    -0x58(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x88(%rbp),%xmm0
ff
jbe    1909 <pnf_cooc_detail+0x7f9>
mov    0x30(%rbp),%rax
movl   $0x1,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1984 <pnf_cooc_detail+0x874>
movsd  -0x88(%rbp),%xmm0
ff
movsd  0x6ef(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    193f <pnf_cooc_detail+0x82f>
mov    0x30(%rbp),%rax
movl   $0x1,(%rax)
movsd  0x6d3(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1984 <pnf_cooc_detail+0x874>
movsd  -0x88(%rbp),%xmm0
ff
call   1030 <isnan@plt>
cmp    $0x0,%rax
je     196d <pnf_cooc_detail+0x85d>
mov    0x30(%rbp),%rax
movl   $0x1,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1984 <pnf_cooc_detail+0x874>
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pnf_cooc_detail>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    0xd0(%rsp),%rbx
movapd %xmm1,%xmm7
xorpd  0xece(%rip),%xmm7
xorpd  %xmm5,%xmm5
movapd %xmm1,%xmm6
cmpltsd %xmm5,%xmm6
andpd  %xmm6,%xmm7
andnpd %xmm1,%xmm6
orpd   %xmm7,%xmm6
mov    0x2e96(%rip),%r15
movsd  (%r15),%xmm1
ucomisd %xmm6,%xmm1
mov    $0x1,%r14d
jae    12cb <pnf_cooc_detail+0x1bb>
mov    0x2e6a(%rip),%r12
ucomisd (%r12),%xmm6
jae    12cb <pnf_cooc_detail+0x1bb>
mov    %r8,%rbp
mov    %rsi,%r13
movapd %xmm2,(%rsp)
movapd %xmm3,0x40(%rsp)
movapd %xmm4,0x30(%rsp)
movsd  %xmm0,0x28(%rsp)
mov    %r9,0x10(%rsp)
mov    %rdi,0x18(%rsp)
mov    %rdx,0x20(%rsp)
mov    %rcx,0x58(%rsp)
movapd %xmm6,0x60(%rsp)
movapd %xmm6,%xmm0
call   1030 <isnan@plt>
test   %rax,%rax
jne    12c7 <pnf_cooc_detail+0x1b7>
movapd (%rsp),%xmm2
movapd %xmm2,%xmm1
xorpd  0xe2c(%rip),%xmm1
movapd %xmm2,%xmm0
xorpd  %xmm5,%xmm5
cmpltsd %xmm5,%xmm0
andpd  %xmm0,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
movsd  (%r15),%xmm1
ucomisd %xmm0,%xmm1
jae    12cb <pnf_cooc_detail+0x1bb>
ucomisd (%r12),%xmm0
jae    12cb <pnf_cooc_detail+0x1bb>
movapd %xmm0,(%rsp)
call   1030 <isnan@plt>
test   %rax,%rax
jne    12c7 <pnf_cooc_detail+0x1b7>
movapd 0x40(%rsp),%xmm1
movapd %xmm1,%xmm2
xorpd  0xdd3(%rip),%xmm2
movapd %xmm1,%xmm0
xorpd  %xmm5,%xmm5
cmpltsd %xmm5,%xmm0
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
movsd  (%r15),%xmm1
ucomisd %xmm0,%xmm1
jae    12cb <pnf_cooc_detail+0x1bb>
ucomisd (%r12),%xmm0
jae    12cb <pnf_cooc_detail+0x1bb>
movapd %xmm0,0x40(%rsp)
call   1030 <isnan@plt>
test   %rax,%rax
jne    12c7 <pnf_cooc_detail+0x1b7>
movapd 0x30(%rsp),%xmm1
movapd 0xd89(%rip),%xmm2
xorpd  %xmm1,%xmm2
movapd %xmm1,%xmm0
xorpd  %xmm5,%xmm5
cmpltsd %xmm5,%xmm0
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
movsd  (%r15),%xmm1
ucomisd %xmm0,%xmm1
jae    12cb <pnf_cooc_detail+0x1bb>
ucomisd (%r12),%xmm0
jae    12cb <pnf_cooc_detail+0x1bb>
movapd %xmm0,0x30(%rsp)
call   1030 <isnan@plt>
test   %rax,%rax
jne    12c7 <pnf_cooc_detail+0x1b7>
movsd  0x28(%rsp),%xmm0
call   1030 <isnan@plt>
test   %rax,%rax
je     12e1 <pnf_cooc_detail+0x1d1>
xorpd  %xmm5,%xmm5
mov    %r14d,(%rbx)
movapd %xmm5,%xmm0
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movapd 0x60(%rsp),%xmm2
movapd 0x40(%rsp),%xmm1
divsd  %xmm1,%xmm2
movapd 0x30(%rsp),%xmm11
movapd %xmm11,%xmm0
divsd  %xmm1,%xmm0
movapd %xmm2,%xmm1
divsd  %xmm0,%xmm1
movsd  0xcff(%rip),%xmm0
addsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm11
movsd  0x28(%rsp),%xmm0
movapd %xmm0,%xmm9
subsd  %xmm11,%xmm9
divsd  %xmm2,%xmm9
addsd  %xmm0,%xmm11
divsd  %xmm2,%xmm11
movapd (%rsp),%xmm10
movapd %xmm10,%xmm6
addsd  %xmm9,%xmm6
divsd  %xmm10,%xmm6
movsd  0xcc2(%rip),%xmm3
addsd  %xmm1,%xmm3
divsd  %xmm1,%xmm3
movapd 0xc99(%rip),%xmm8
xorpd  %xmm10,%xmm8
movapd %xmm9,%xmm1
mulsd  %xmm9,%xmm1
movapd %xmm10,%xmm4
mulsd  %xmm10,%xmm4
movapd %xmm1,%xmm7
subsd  %xmm4,%xmm7
mulsd  %xmm3,%xmm7
movapd %xmm10,%xmm5
addsd  %xmm10,%xmm5
mulsd  %xmm10,%xmm5
divsd  %xmm5,%xmm7
addsd  %xmm6,%xmm7
mov    0x18(%rsp),%rax
movsd  %xmm7,(%rax)
movapd %xmm11,%xmm0
subsd  %xmm9,%xmm0
divsd  %xmm10,%xmm0
movapd %xmm11,%xmm2
mulsd  %xmm11,%xmm2
movapd %xmm2,%xmm7
subsd  %xmm1,%xmm7
mulsd  %xmm3,%xmm7
divsd  %xmm5,%xmm7
movapd %xmm0,%xmm6
addsd  %xmm7,%xmm6
movsd  %xmm6,0x0(%r13)
addsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm1
divsd  %xmm5,%xmm1
movapd %xmm0,%xmm6
subsd  %xmm1,%xmm6
mov    0x20(%rsp),%rax
movsd  %xmm6,(%rax)
subsd  %xmm7,%xmm0
mov    0x58(%rsp),%rdi
movsd  %xmm0,(%rdi)
movapd %xmm10,%xmm1
subsd  %xmm11,%xmm1
divsd  %xmm10,%xmm1
subsd  %xmm2,%xmm4
mulsd  %xmm3,%xmm4
divsd  %xmm5,%xmm4
subsd  %xmm4,%xmm1
movsd  %xmm1,0x0(%rbp)
ucomisd %xmm9,%xmm8
jbe    144f <pnf_cooc_detail+0x33f>
ucomisd %xmm8,%xmm11
jbe    144f <pnf_cooc_detail+0x33f>
mov    $0x1,%edx
xorpd  %xmm0,%xmm0
ucomisd %xmm11,%xmm0
ja     1451 <pnf_cooc_detail+0x341>
xor    %edx,%edx
mov    0xc8(%rsp),%r8
mov    0xc0(%rsp),%r9
mov    0xb8(%rsp),%r11
mov    0xb0(%rsp),%rsi
mov    0x10(%rsp),%rax
mov    %edx,(%rax)
ucomisd %xmm8,%xmm9
setae  %al
xorpd  %xmm0,%xmm0
ucomisd %xmm9,%xmm0
seta   %dl
and    %al,%dl
cmp    $0x1,%dl
jne    14aa <pnf_cooc_detail+0x39a>
ucomisd %xmm8,%xmm11
jb     14aa <pnf_cooc_detail+0x39a>
mov    $0x1,%ebp
xorpd  %xmm0,%xmm0
ucomisd %xmm11,%xmm0
ja     14ac <pnf_cooc_detail+0x39c>
xor    %ebp,%ebp
mov    %ebp,(%rsi)
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm11
setae  %al
and    %al,%dl
ucomisd %xmm11,%xmm10
seta   %cl
and    %cl,%dl
movzbl %dl,%edx
ucomisd %xmm5,%xmm9
mov    %edx,(%r11)
setae  %dl
ucomisd %xmm9,%xmm10
seta   %r10b
and    %dl,%al
and    %r10b,%al
and    %cl,%al
movzbl %al,%eax
ucomisd %xmm10,%xmm11
mov    %eax,(%r9)
setae  %al
and    %dl,%al
and    %r10b,%al
movzbl %al,%eax
mov    %eax,(%r8)
mov    0x10(%rsp),%rcx
xorps  %xmm0,%xmm0
cvtsi2sdl (%rcx),%xmm0
cvtsi2sdl (%rsi),%xmm2
mulsd  0x0(%r13),%xmm2
mov    0x18(%rsp),%rcx
mulsd  (%rcx),%xmm0
addsd  %xmm2,%xmm0
xorps  %xmm2,%xmm2
cvtsi2sdl (%r11),%xmm2
mov    0x20(%rsp),%rcx
mulsd  (%rcx),%xmm2
cvtsi2sdl (%r9),%xmm3
mulsd  (%rdi),%xmm3
addsd  %xmm0,%xmm2
addsd  %xmm2,%xmm3
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm3,%xmm0
ucomisd %xmm0,%xmm5
ja     12cb <pnf_cooc_detail+0x1bb>
movsd  0xabd(%rip),%xmm5
ucomisd %xmm5,%xmm0
ja     12cb <pnf_cooc_detail+0x1bb>
movsd  %xmm0,(%rsp)
movsd  (%rsp),%xmm0
call   1030 <isnan@plt>
movsd  (%rsp),%xmm5
xor    %r14d,%r14d
test   %rax,%rax
setne  %al
je     1590 <pnf_cooc_detail+0x480>
xorpd  %xmm5,%xmm5
mov    %al,%r14b
jmp    12cb <pnf_cooc_detail+0x1bb>

LLVM IR (-O0):
@DBL_EPSILON = global double 0.000000e+00
@DBL_MAX = global double 0.000000e+00
define double @pnf_cooc_detail(double %0, double %1, double %2, double %3, double %4, double* %5, double* %6, double* %7, double* %8, double* %9, i32* %10, i32* %11, i32* %12, i32* %13, i32* %14, i32* %15) {
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double*
%24 = alloca double*
%25 = alloca double*
%26 = alloca double*
%27 = alloca double*
%28 = alloca i32*
%29 = alloca i32*
%30 = alloca i32*
%31 = alloca i32*
%32 = alloca i32*
%33 = alloca i32*
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
store double %0, double* %18
store double %1, double* %19
store double %2, double* %20
store double %3, double* %21
store double %4, double* %22
store double* %5, double** %23
store double* %6, double** %24
store double* %7, double** %25
store double* %8, double** %26
store double* %9, double** %27
store i32* %10, i32** %28
store i32* %11, i32** %29
store i32* %12, i32** %30
store i32* %13, i32** %31
store i32* %14, i32** %32
store i32* %15, i32** %33
%39 = load double, double* %19
%40 = fcmp olt double %39, 0.000000e+00
br i1 %40, label %41, label %44
41: ; preds = %16
%42 = load double, double* %19
%43 = fneg double %42
store double %43, double* %19
br label %44
44: ; preds = %41, %16
%45 = load double, double* %20
%46 = fcmp olt double %45, 0.000000e+00
br i1 %46, label %47, label %50
47: ; preds = %44
%48 = load double, double* %20
%49 = fneg double %48
store double %49, double* %20
br label %50
50: ; preds = %47, %44
%51 = load double, double* %21
%52 = fcmp olt double %51, 0.000000e+00
br i1 %52, label %53, label %56
53: ; preds = %50
%54 = load double, double* %21
%55 = fneg double %54
store double %55, double* %21
br label %56
56: ; preds = %53, %50
%57 = load double, double* %22
%58 = fcmp olt double %57, 0.000000e+00
br i1 %58, label %59, label %62
59: ; preds = %56
%60 = load double, double* %22
%61 = fneg double %60
store double %61, double* %22
br label %62
62: ; preds = %59, %56
%63 = load double, double* %19
%64 = load double, double* @DBL_EPSILON
%65 = fcmp ole double %63, %64
br i1 %65, label %114, label %66
66: ; preds = %62
%67 = load double, double* %19
%68 = load double, double* @DBL_MAX
%69 = fcmp oge double %67, %68
br i1 %69, label %114, label %70
70: ; preds = %66
%71 = load double, double* %19
%72 = call i64 @isnan(double %71)
%73 = icmp ne i64 %72, 0
br i1 %73, label %114, label %74
74: ; preds = %70
%75 = load double, double* %20
%76 = load double, double* @DBL_EPSILON
%77 = fcmp ole double %75, %76
br i1 %77, label %114, label %78
78: ; preds = %74
%79 = load double, double* %20
%80 = load double, double* @DBL_MAX
%81 = fcmp oge double %79, %80
br i1 %81, label %114, label %82
82: ; preds = %78
%83 = load double, double* %20
%84 = call i64 @isnan(double %83)
%85 = icmp ne i64 %84, 0
br i1 %85, label %114, label %86
86: ; preds = %82
%87 = load double, double* %21
%88 = load double, double* @DBL_EPSILON
%89 = fcmp ole double %87, %88
br i1 %89, label %114, label %90
90: ; preds = %86
%91 = load double, double* %21
%92 = load double, double* @DBL_MAX
%93 = fcmp oge double %91, %92
br i1 %93, label %114, label %94
94: ; preds = %90
%95 = load double, double* %21
%96 = call i64 @isnan(double %95)
%97 = icmp ne i64 %96, 0
br i1 %97, label %114, label %98
98: ; preds = %94
%99 = load double, double* %22
%100 = load double, double* @DBL_EPSILON
%101 = fcmp ole double %99, %100
br i1 %101, label %114, label %102
102: ; preds = %98
%103 = load double, double* %22
%104 = load double, double* @DBL_MAX
%105 = fcmp oge double %103, %104
br i1 %105, label %114, label %106
106: ; preds = %102
%107 = load double, double* %22
%108 = call i64 @isnan(double %107)
%109 = icmp ne i64 %108, 0
br i1 %109, label %114, label %110
110: ; preds = %106
%111 = load double, double* %18
%112 = call i64 @isnan(double %111)
%113 = icmp ne i64 %112, 0
br i1 %113, label %114, label %116
114: ; preds = %110, %106, %102, %98, %94, %90, %86, %82, %78, %74, %70, %66, %62
%115 = load i32*, i32** %33
store i32 1, i32* %115
store double 0.000000e+00, double* %17
br label %394
116: ; preds = %110
%117 = load double, double* %19
%118 = load double, double* %21
%119 = fdiv double %117, %118
store double %119, double* %34
%120 = load double, double* %34
%121 = load double, double* %22
%122 = load double, double* %21
%123 = fdiv double %121, %122
%124 = fdiv double %120, %123
%125 = fadd double %124, 5.000000e-01
store double %125, double* %35
%126 = load double, double* %18
%127 = load double, double* %22
%128 = fdiv double %127, 2.000000e+00
%129 = fsub double %126, %128
%130 = load double, double* %34
%131 = fdiv double %129, %130
store double %131, double* %36
%132 = load double, double* %18
%133 = load double, double* %22
%134 = fdiv double %133, 2.000000e+00
%135 = fadd double %132, %134
%136 = load double, double* %34
%137 = fdiv double %135, %136
store double %137, double* %37
%138 = load double, double* %36
%139 = load double, double* %20
%140 = fadd double %138, %139
%141 = load double, double* %20
%142 = fdiv double %140, %141
%143 = load double, double* %35
%144 = fsub double %143, 1.000000e+00
%145 = load double, double* %35
%146 = fdiv double %144, %145
%147 = load double, double* %36
%148 = load double, double* %36
%149 = load double, double* %20
%150 = load double, double* %20
%151 = fmul double %149, %150
%152 = fneg double %151
%153 = call double @llvm.fmuladd.f64(double %147, double %148, double %152)
%154 = fmul double %146, %153
%155 = load double, double* %20
%156 = fmul double 2.000000e+00, %155
%157 = load double, double* %20
%158 = fmul double %156, %157
%159 = fdiv double %154, %158
%160 = fadd double %142, %159
%161 = load double*, double** %23
store double %160, double* %161
%162 = load double, double* %37
%163 = load double, double* %36
%164 = fsub double %162, %163
%165 = load double, double* %20
%166 = fdiv double %164, %165
%167 = load double, double* %35
%168 = fsub double %167, 1.000000e+00
%169 = load double, double* %35
%170 = fdiv double %168, %169
%171 = load double, double* %37
%172 = load double, double* %37
%173 = load double, double* %36
%174 = load double, double* %36
%175 = fmul double %173, %174
%176 = fneg double %175
%177 = call double @llvm.fmuladd.f64(double %171, double %172, double %176)
%178 = fmul double %170, %177
%179 = load double, double* %20
%180 = fmul double 2.000000e+00, %179
%181 = load double, double* %20
%182 = fmul double %180, %181
%183 = fdiv double %178, %182
%184 = fadd double %166, %183
%185 = load double*, double** %24
store double %184, double* %185
%186 = load double, double* %37
%187 = load double, double* %36
%188 = fsub double %186, %187
%189 = load double, double* %20
%190 = fdiv double %188, %189
%191 = load double, double* %35
%192 = fsub double %191, 1.000000e+00
%193 = load double, double* %35
%194 = fdiv double %192, %193
%195 = load double, double* %37
%196 = load double, double* %37
%197 = load double, double* %36
%198 = load double, double* %36
%199 = fmul double %197, %198
%200 = call double @llvm.fmuladd.f64(double %195, double %196, double %199)
%201 = fmul double %194, %200
%202 = load double, double* %20
%203 = fmul double 2.000000e+00, %202
%204 = load double, double* %20
%205 = fmul double %203, %204
%206 = fdiv double %201, %205
%207 = fsub double %190, %206
%208 = load double*, double** %25
store double %207, double* %208
%209 = load double, double* %37
%210 = load double, double* %36
%211 = fsub double %209, %210
%212 = load double, double* %20
%213 = fdiv double %211, %212
%214 = load double, double* %35
%215 = fsub double %214, 1.000000e+00
%216 = load double, double* %35
%217 = fdiv double %215, %216
%218 = load double, double* %37
%219 = load double, double* %37
%220 = load double, double* %36
%221 = load double, double* %36
%222 = fmul double %220, %221
%223 = fneg double %222
%224 = call double @llvm.fmuladd.f64(double %218, double %219, double %223)
%225 = fmul double %217, %224
%226 = load double, double* %20
%227 = fmul double 2.000000e+00, %226
%228 = load double, double* %20
%229 = fmul double %227, %228
%230 = fdiv double %225, %229
%231 = fsub double %213, %230
%232 = load double*, double** %26
store double %231, double* %232
%233 = load double, double* %20
%234 = load double, double* %37
%235 = fsub double %233, %234
%236 = load double, double* %20
%237 = fdiv double %235, %236
%238 = load double, double* %35
%239 = fsub double %238, 1.000000e+00
%240 = load double, double* %35
%241 = fdiv double %239, %240
%242 = load double, double* %20
%243 = load double, double* %20
%244 = load double, double* %37
%245 = load double, double* %37
%246 = fmul double %244, %245
%247 = fneg double %246
%248 = call double @llvm.fmuladd.f64(double %242, double %243, double %247)
%249 = fmul double %241, %248
%250 = load double, double* %20
%251 = fmul double 2.000000e+00, %250
%252 = load double, double* %20
%253 = fmul double %251, %252
%254 = fdiv double %249, %253
%255 = fsub double %237, %254
%256 = load double*, double** %27
store double %255, double* %256
%257 = load double, double* %36
%258 = load double, double* %20
%259 = fneg double %258
%260 = fcmp olt double %257, %259
br i1 %260, label %261, label %271
261: ; preds = %116
%262 = load double, double* %20
%263 = fneg double %262
%264 = load double, double* %37
%265 = fcmp olt double %263, %264
br i1 %265, label %266, label %271
266: ; preds = %261
%267 = load double, double* %37
%268 = fcmp olt double %267, 0.000000e+00
br i1 %268, label %269, label %271
269: ; preds = %266
%270 = load i32*, i32** %28
store i32 1, i32* %270
br label %273
271: ; preds = %266, %261, %116
%272 = load i32*, i32** %28
store i32 0, i32* %272
br label %273
273: ; preds = %271, %269
%274 = load double, double* %20
%275 = fneg double %274
%276 = load double, double* %36
%277 = fcmp ole double %275, %276
br i1 %277, label %278, label %291
278: ; preds = %273
%279 = load double, double* %36
%280 = fcmp olt double %279, 0.000000e+00
br i1 %280, label %281, label %291
281: ; preds = %278
%282 = load double, double* %20
%283 = fneg double %282
%284 = load double, double* %37
%285 = fcmp ole double %283, %284
br i1 %285, label %286, label %291
286: ; preds = %281
%287 = load double, double* %37
%288 = fcmp olt double %287, 0.000000e+00
br i1 %288, label %289, label %291
289: ; preds = %286
%290 = load i32*, i32** %29
store i32 1, i32* %290
br label %293
291: ; preds = %286, %281, %278, %273
%292 = load i32*, i32** %29
store i32 0, i32* %292
br label %293
293: ; preds = %291, %289
%294 = load double, double* %20
%295 = fneg double %294
%296 = load double, double* %36
%297 = fcmp ole double %295, %296
br i1 %297, label %298, label %310
298: ; preds = %293
%299 = load double, double* %36
%300 = fcmp olt double %299, 0.000000e+00
br i1 %300, label %301, label %310
301: ; preds = %298
%302 = load double, double* %37
%303 = fcmp ole double 0.000000e+00, %302
br i1 %303, label %304, label %310
304: ; preds = %301
%305 = load double, double* %37
%306 = load double, double* %20
%307 = fcmp olt double %305, %306
br i1 %307, label %308, label %310
308: ; preds = %304
%309 = load i32*, i32** %30
store i32 1, i32* %309
br label %312
310: ; preds = %304, %301, %298, %293
%311 = load i32*, i32** %30
store i32 0, i32* %311
br label %312
312: ; preds = %310, %308
%313 = load double, double* %36
%314 = fcmp ole double 0.000000e+00, %313
br i1 %314, label %315, label %328
315: ; preds = %312
%316 = load double, double* %36
%317 = load double, double* %20
%318 = fcmp olt double %316, %317
br i1 %318, label %319, label %328
319: ; preds = %315
%320 = load double, double* %37
%321 = fcmp ole double 0.000000e+00, %320
br i1 %321, label %322, label %328
322: ; preds = %319
%323 = load double, double* %37
%324 = load double, double* %20
%325 = fcmp olt double %323, %324
br i1 %325, label %326, label %328
326: ; preds = %322
%327 = load i32*, i32** %31
store i32 1, i32* %327
br label %330
328: ; preds = %322, %319, %315, %312
%329 = load i32*, i32** %31
store i32 0, i32* %329
br label %330
330: ; preds = %328, %326
%331 = load double, double* %36
%332 = fcmp ole double 0.000000e+00, %331
br i1 %332, label %333, label %343
333: ; preds = %330
%334 = load double, double* %36
%335 = load double, double* %20
%336 = fcmp olt double %334, %335
br i1 %336, label %337, label %343
337: ; preds = %333
%338 = load double, double* %20
%339 = load double, double* %37
%340 = fcmp ole double %338, %339
br i1 %340, label %341, label %343
341: ; preds = %337
%342 = load i32*, i32** %32
store i32 1, i32* %342
br label %345
343: ; preds = %337, %333, %330
%344 = load i32*, i32** %32
store i32 0, i32* %344
br label %345
345: ; preds = %343, %341
%346 = load i32*, i32** %28
%347 = load i32, i32* %346
%348 = sitofp i32 %347 to double
%349 = load double*, double** %23
%350 = load double, double* %349
%351 = load i32*, i32** %29
%352 = load i32, i32* %351
%353 = sitofp i32 %352 to double
%354 = load double*, double** %24
%355 = load double, double* %354
%356 = fmul double %353, %355
%357 = call double @llvm.fmuladd.f64(double %348, double %350, double %356)
%358 = load i32*, i32** %30
%359 = load i32, i32* %358
%360 = sitofp i32 %359 to double
%361 = load double*, double** %25
%362 = load double, double* %361
%363 = call double @llvm.fmuladd.f64(double %360, double %362, double %357)
%364 = load i32*, i32** %31
%365 = load i32, i32* %364
%366 = sitofp i32 %365 to double
%367 = load double*, double** %26
%368 = load double, double* %367
%369 = call double @llvm.fmuladd.f64(double %366, double %368, double %363)
%370 = load i32*, i32** %32
%371 = load i32, i32* %370
%372 = sitofp i32 %371 to double
%373 = load double*, double** %27
%374 = load double, double* %373
%375 = call double @llvm.fmuladd.f64(double %372, double %374, double %369)
store double %375, double* %38
%376 = load double, double* %38
%377 = fcmp olt double %376, 0.000000e+00
br i1 %377, label %378, label %380
378: ; preds = %345
%379 = load i32*, i32** %33
store i32 1, i32* %379
store double 0.000000e+00, double* %17
br label %394
380: ; preds = %345
%381 = load double, double* %38
%382 = fcmp ogt double %381, 1.000000e+00
br i1 %382, label %383, label %385
383: ; preds = %380
%384 = load i32*, i32** %33
store i32 1, i32* %384
store double 1.000000e+00, double* %17
br label %394
385: ; preds = %380
%386 = load double, double* %38
%387 = call i64 @isnan(double %386)
%388 = icmp ne i64 %387, 0
br i1 %388, label %389, label %391
389: ; preds = %385
%390 = load i32*, i32** %33
store i32 1, i32* %390
store double 0.000000e+00, double* %17
br label %394
391: ; preds = %385
%392 = load i32*, i32** %33
store i32 0, i32* %392
%393 = load double, double* %38
store double %393, double* %17
br label %394
394: ; preds = %391, %389, %383, %378, %114
%395 = load double, double* %17
ret double %395
}

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