#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 int64_t;

/* Variables and functions */
void dnansumpw(const int64_t N, double *W, const double *X,
               const int64_t stride) {
  double *xp1;
  double *xp2;
  double sum;
  int64_t ix;
  int64_t M;
  int64_t n;
  int64_t i;
  double s0;
  double s1;
  double s2;
  double s3;
  double s4;
  double s5;
  double s6;
  double s7;
  double v;
  if (stride < 0) {
    ix = (1 - N) * stride;
  } else {
    ix = 0;
  }
  if (N < 8) {
    sum = 0.0;
    n = 0;
    for (i = 0; i < N; i++) {
      v = X[ix];
      if (v == v) {
        sum += X[ix];
        n += 1;
      }
      ix += stride;
    }
    W[0] += sum;
    W[1] += n;
    return;
  }
  if (N <= 128) {
    s0 = 0.0;
    s1 = 0.0;
    s2 = 0.0;
    s3 = 0.0;
    s4 = 0.0;
    s5 = 0.0;
    s6 = 0.0;
    s7 = 0.0;
    n = 0;
    M = N % 8;
    for (i = 0; i < N - M; i += 8) {
      v = X[ix];
      if (v == v) {
        s0 += v;
        n += 1;
      }
      ix += stride;
      v = X[ix];
      if (v == v) {
        s1 += v;
        n += 1;
      }
      ix += stride;
      v = X[ix];
      if (v == v) {
        s2 += v;
        n += 1;
      }
      ix += stride;
      v = X[ix];
      if (v == v) {
        s3 += v;
        n += 1;
      }
      ix += stride;
      v = X[ix];
      if (v == v) {
        s4 += v;
        n += 1;
      }
      ix += stride;
      v = X[ix];
      if (v == v) {
        s5 += v;
        n += 1;
      }
      ix += stride;
      v = X[ix];
      if (v == v) {
        s6 += v;
        n += 1;
      }
      ix += stride;
      v = X[ix];
      if (v == v) {
        s7 += v;
        n += 1;
      }
      ix += stride;
    }
    sum = ((s0 + s1) + (s2 + s3)) + ((s4 + s5) + (s6 + s7));
    for (; i < N; i++) {
      v = X[ix];
      if (v == v) {
        sum += X[ix];
        n += 1;
      }
      ix += stride;
    }
    W[0] += sum;
    W[1] += n;
    return;
  }
  n = N / 2;
  n -= n % 8;
  if (stride < 0) {
    xp1 = (double *)X + ((n - N) * stride);
    xp2 = (double *)X;
  } else {
    xp1 = (double *)X;
    xp2 = (double *)X + (n * stride);
  }
  dnansumpw(n, W, xp1, stride);
  dnansumpw(N - n, W, xp2, stride);
}


x86 assembly (clang, -O0):
<dnansumpw>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    1147 <dnansumpw+0x37>
mov    $0x1,%eax
sub    -0x4(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    114e <dnansumpw+0x3e>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x8,-0x4(%rbp)
jge    120b <dnansumpw+0xfb>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11e2 <dnansumpw+0xd2>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    11cb <dnansumpw+0xbb>
jp     11cb <dnansumpw+0xbb>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    116e <dnansumpw+0x5e>
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
cvtsi2sdl -0x44(%rbp),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x8(%rax),%xmm0
movsd  %xmm0,0x8(%rax)
jmp    16bb <dnansumpw+0x5ab>
cmpl   $0x80,-0x4(%rbp)
jg     161d <dnansumpw+0x50d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x0,-0x44(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x40(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    -0x40(%rbp),%ecx
cmp    %ecx,%eax
jge    1544 <dnansumpw+0x434>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    12d4 <dnansumpw+0x1c4>
jp     12d4 <dnansumpw+0x1c4>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    1329 <dnansumpw+0x219>
jp     1329 <dnansumpw+0x219>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    137e <dnansumpw+0x26e>
jp     137e <dnansumpw+0x26e>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    13d3 <dnansumpw+0x2c3>
jp     13d3 <dnansumpw+0x2c3>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
jne    1428 <dnansumpw+0x318>
jp     1428 <dnansumpw+0x318>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    147d <dnansumpw+0x36d>
jp     147d <dnansumpw+0x36d>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    14d2 <dnansumpw+0x3c2>
jp     14d2 <dnansumpw+0x3c2>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    152d <dnansumpw+0x41d>
jp     152d <dnansumpw+0x41d>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x48(%rbp)
jmp    1277 <dnansumpw+0x167>
movsd  -0x50(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
addsd  -0x68(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
addsd  -0x88(%rbp),%xmm2
ff
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    15f4 <dnansumpw+0x4e4>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x90(%rbp),%xmm0
ff
jne    15dd <dnansumpw+0x4cd>
jp     15dd <dnansumpw+0x4cd>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1580 <dnansumpw+0x470>
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
cvtsi2sdl -0x44(%rbp),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x8(%rax),%xmm0
movsd  %xmm0,0x8(%rax)
jmp    16bb <dnansumpw+0x5ab>
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    -0x44(%rbp),%eax
sub    %edx,%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    1671 <dnansumpw+0x561>
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    -0x4(%rbp),%ecx
imul   -0x1c(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1692 <dnansumpw+0x582>
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x1c(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x44(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x28(%rbp),%rdx
mov    -0x1c(%rbp),%ecx
call   1030 <dnansumpw@plt>
mov    -0x4(%rbp),%edi
sub    -0x44(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x30(%rbp),%rdx
mov    -0x1c(%rbp),%ecx
call   1030 <dnansumpw@plt>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dnansumpw>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %ecx,%r12d
mov    %rsi,%r13
mov    %edi,%r15d
cmp    $0x8,%edi
jge    11c7 <dnansumpw+0xb7>
mov    %rdx,%r14
test   %r15d,%r15d
jle    11f1 <dnansumpw+0xe1>
lea    -0x1(%r15),%eax
neg    %eax
imul   %r12d,%eax
mov    %r12d,%ecx
sar    $0x1f,%ecx
and    %eax,%ecx
mov    %r15d,%eax
movslq %ecx,%rcx
dec    %eax
jne    13f7 <dnansumpw+0x2e7>
xor    %eax,%eax
xorpd  %xmm0,%xmm0
test   $0x1,%r15b
je     1189 <dnansumpw+0x79>
movsd  (%r14,%rcx,8),%xmm1
xor    %ecx,%ecx
ucomisd %xmm1,%xmm1
setnp  %dl
jnp    1181 <dnansumpw+0x71>
movsd  0xe7f(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    %dl,%cl
add    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
jmp    11f9 <dnansumpw+0xe9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
imul   %r12d,%eax
cltq
lea    (%rdx,%rax,8),%r14
mov    %ebp,%edi
mov    %r13,%rsi
mov    %r12d,%ecx
call   1030 <dnansumpw@plt>
sub    %ebp,%r15d
mov    %r14,%rdx
cmp    $0x8,%r15d
jl     1133 <dnansumpw+0x23>
cmp    $0x80,%r15d
jbe    120a <dnansumpw+0xfa>
mov    %r15d,%ebp
shr    %ebp
and    $0xfffffff8,%ebp
mov    %ebp,%eax
test   %r12d,%r12d
jns    11a0 <dnansumpw+0x90>
sub    %r15d,%eax
imul   %r12d,%eax
cltq
mov    %rdx,%r14
lea    (%rdx,%rax,8),%rdx
jmp    11aa <dnansumpw+0x9a>
xorpd  %xmm0,%xmm0
xorpd  %xmm1,%xmm1
addsd  0x0(%r13),%xmm0
movsd  %xmm0,0x0(%r13)
jmp    14fb <dnansumpw+0x3eb>
mov    $0x1,%eax
sub    %r15d,%eax
imul   %r12d,%eax
mov    %r12d,%esi
sar    $0x1f,%esi
and    %eax,%esi
mov    %r15d,%r10d
and    $0xfffffff8,%r10d
je     149c <dnansumpw+0x38c>
mov    %r13,0x8(%rsp)
lea    0x0(,%r12,8),%r9d
sub    %r12d,%r9d
lea    (%r12,%r12,1),%r14d
lea    (%r14,%r14,2),%eax
mov    %rax,0x18(%rsp)
lea    (%r12,%r12,4),%eax
mov    %rax,0x10(%rsp)
lea    0x0(,%r12,4),%r11d
lea    (%r12,%r12,2),%r13d
xor    %ebp,%ebp
xorpd  %xmm11,%xmm11
movsd  0xd94(%rip),%xmm2
xorpd  %xmm0,%xmm0
xorpd  %xmm13,%xmm13
xorpd  %xmm12,%xmm12
xorpd  %xmm6,%xmm6
xorpd  %xmm15,%xmm15
xorpd  %xmm5,%xmm5
xorpd  %xmm7,%xmm7
xor    %eax,%eax
jmp    12ce <dnansumpw+0x1be>
nop
addsd  %xmm8,%xmm11
addsd  0x20(%rsp),%xmm7
addsd  %xmm10,%xmm5
addsd  %xmm14,%xmm15
addsd  %xmm9,%xmm6
addsd  %xmm4,%xmm12
addsd  %xmm1,%xmm13
addsd  %xmm3,%xmm0
mov    %r8b,%bl
add    %ebx,%eax
add    %r12d,%ecx
add    $0x8,%ebp
mov    %ecx,%esi
cmp    %r10d,%ebp
jge    146c <dnansumpw+0x35c>
movslq %esi,%rcx
movsd  (%rdx,%rcx,8),%xmm1
xor    %ecx,%ecx
ucomisd %xmm1,%xmm1
setnp  %bl
jnp    12e5 <dnansumpw+0x1d5>
movapd %xmm2,%xmm1
mov    %bl,%cl
add    %ecx,%eax
lea    (%rsi,%r12,1),%ecx
movslq %ecx,%rdi
movsd  (%rdx,%rdi,8),%xmm10
xor    %edi,%edi
ucomisd %xmm10,%xmm10
setnp  %bl
jnp    1307 <dnansumpw+0x1f7>
movapd %xmm2,%xmm10
mov    %bl,%dil
add    %edi,%eax
add    %r12d,%ecx
lea    (%r14,%rsi,1),%edi
movslq %edi,%rdi
movsd  (%rdx,%rdi,8),%xmm14
xor    %edi,%edi
ucomisd %xmm14,%xmm14
setnp  %bl
jnp    132d <dnansumpw+0x21d>
movapd %xmm2,%xmm14
mov    %bl,%dil
add    %edi,%eax
add    %r12d,%ecx
lea    (%rsi,%r13,1),%edi
movslq %edi,%rdi
movsd  (%rdx,%rdi,8),%xmm9
xor    %edi,%edi
ucomisd %xmm9,%xmm9
setnp  %bl
jnp    1353 <dnansumpw+0x243>
movapd %xmm2,%xmm9
movsd  %xmm1,0x20(%rsp)
mov    %bl,%dil
add    %edi,%eax
add    %r12d,%ecx
lea    (%r11,%rsi,1),%edi
movslq %edi,%rdi
movsd  (%rdx,%rdi,8),%xmm4
xor    %edi,%edi
ucomisd %xmm4,%xmm4
setnp  %bl
jnp    137c <dnansumpw+0x26c>
movapd %xmm2,%xmm4
mov    %bl,%dil
add    %edi,%eax
add    %r12d,%ecx
mov    0x10(%rsp),%rdi
add    %esi,%edi
movslq %edi,%rdi
movsd  (%rdx,%rdi,8),%xmm1
xor    %edi,%edi
ucomisd %xmm1,%xmm1
setnp  %bl
jnp    13a2 <dnansumpw+0x292>
movapd %xmm2,%xmm1
mov    %bl,%dil
add    %edi,%eax
add    %r12d,%ecx
mov    0x18(%rsp),%rdi
add    %esi,%edi
movslq %edi,%rdi
movsd  (%rdx,%rdi,8),%xmm3
xor    %edi,%edi
ucomisd %xmm3,%xmm3
setnp  %bl
jnp    13c8 <dnansumpw+0x2b8>
movapd %xmm2,%xmm3
mov    %bl,%dil
add    %edi,%eax
add    %r12d,%ecx
add    %r9d,%esi
movslq %esi,%rsi
movsd  (%rdx,%rsi,8),%xmm8
xor    %ebx,%ebx
ucomisd %xmm8,%xmm8
setnp  %r8b
jnp    1290 <dnansumpw+0x180>
movapd %xmm2,%xmm8
jmp    1290 <dnansumpw+0x180>
movslq %r12d,%rdx
mov    %r15d,%esi
and    $0xfffffffe,%esi
lea    (%r14,%rdx,8),%rdi
xorpd  %xmm0,%xmm0
xor    %eax,%eax
movsd  0xbee(%rip),%xmm1
jmp    1439 <dnansumpw+0x329>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addsd  %xmm2,%xmm0
addsd  %xmm3,%xmm0
mov    %bl,%bpl
add    %ebp,%eax
add    %rdx,%rcx
add    $0xfffffffe,%esi
je     1162 <dnansumpw+0x52>
movsd  (%r14,%rcx,8),%xmm2
xor    %ebp,%ebp
ucomisd %xmm2,%xmm2
setnp  %bl
jnp    144e <dnansumpw+0x33e>
movapd %xmm1,%xmm2
mov    %bl,%bpl
add    %ebp,%eax
movsd  (%rdi,%rcx,8),%xmm3
add    %rdx,%rcx
xor    %ebp,%ebp
ucomisd %xmm3,%xmm3
setnp  %bl
jnp    1420 <dnansumpw+0x310>
movapd %xmm1,%xmm3
jmp    1420 <dnansumpw+0x310>
addsd  %xmm5,%xmm7
addsd  %xmm6,%xmm15
addsd  %xmm7,%xmm15
addsd  %xmm13,%xmm12
addsd  %xmm11,%xmm0
addsd  %xmm12,%xmm0
addsd  %xmm15,%xmm0
mov    %ecx,%esi
mov    0x8(%rsp),%r13
cmp    %r10d,%r15d
jg     14aa <dnansumpw+0x39a>
jmp    14e8 <dnansumpw+0x3d8>
xor    %eax,%eax
xorpd  %xmm0,%xmm0
xor    %r10d,%r10d
cmp    %r10d,%r15d
jle    14e8 <dnansumpw+0x3d8>
movslq %esi,%rcx
movslq %r12d,%rdi
mov    %r10d,%esi
or     $0x1,%esi
test   $0x1,%r15b
je     14e3 <dnansumpw+0x3d3>
movsd  (%rdx,%rcx,8),%xmm1
xor    %ebp,%ebp
ucomisd %xmm1,%xmm1
setnp  %bl
jnp    14d4 <dnansumpw+0x3c4>
movsd  0xb2c(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    %bl,%bpl
add    %ebp,%eax
add    %rdi,%rcx
mov    %esi,%r10d
cmp    %esi,%r15d
jne    1516 <dnansumpw+0x406>
addsd  0x0(%r13),%xmm0
movsd  %xmm0,0x0(%r13)
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
addsd  0x8(%r13),%xmm1
movsd  %xmm1,0x8(%r13)
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %rdi,%rsi
shl    $0x4,%rsi
shl    $0x3,%rdi
lea    (%rdi,%rcx,8),%rdi
shl    $0x3,%rcx
sub    %r10d,%r15d
movsd  0xacc(%rip),%xmm1
jmp    1556 <dnansumpw+0x446>
cs nopw 0x0(%rax,%rax,1)
addsd  %xmm2,%xmm0
addsd  %xmm3,%xmm0
mov    %bl,%bpl
add    %ebp,%eax
add    %rsi,%rdx
add    $0xfffffffe,%r15d
je     14e8 <dnansumpw+0x3d8>
movsd  (%rdx,%rcx,1),%xmm2
xor    %ebp,%ebp
ucomisd %xmm2,%xmm2
setnp  %bl
jnp    156a <dnansumpw+0x45a>
movapd %xmm1,%xmm2
mov    %bl,%bpl
add    %ebp,%eax
movsd  (%rdx,%rdi,1),%xmm3
xor    %ebp,%ebp
ucomisd %xmm3,%xmm3
setnp  %bl
jnp    1540 <dnansumpw+0x430>
movapd %xmm1,%xmm3
jmp    1540 <dnansumpw+0x430>

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

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