#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 */
double stdlib_strided_dsapxsumpw(const int64_t N, const float alpha,
                                 const float *X, const int64_t stride) {
  float *xp1;
  float *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 a;
  if (N <= 0) {
    return 0.0;
  }
  a = (double)alpha;
  if (N == 1 || stride == 0) {
    return a + (double)X[0];
  }
  if (stride < 0) {
    ix = (1 - N) * stride;
  } else {
    ix = 0;
  }
  if (N < 8) {
    sum = 0.0;
    for (i = 0; i < N; i++) {
      sum += a + (double)X[ix];
      ix += stride;
    }
    return sum;
  }
  if (N <= 128) {
    s0 = a + (double)X[ix];
    s1 = a + (double)X[ix + stride];
    s2 = a + (double)X[ix + (2 * stride)];
    s3 = a + (double)X[ix + (3 * stride)];
    s4 = a + (double)X[ix + (4 * stride)];
    s5 = a + (double)X[ix + (5 * stride)];
    s6 = a + (double)X[ix + (6 * stride)];
    s7 = a + (double)X[ix + (7 * stride)];
    ix += 8 * stride;
    M = N % 8;
    for (i = 8; i < N - M; i += 8) {
      s0 += a + (double)X[ix];
      s1 += a + (double)X[ix + stride];
      s2 += a + (double)X[ix + (2 * stride)];
      s3 += a + (double)X[ix + (3 * stride)];
      s4 += a + (double)X[ix + (4 * stride)];
      s5 += a + (double)X[ix + (5 * stride)];
      s6 += a + (double)X[ix + (6 * stride)];
      s7 += a + (double)X[ix + (7 * stride)];
      ix += 8 * stride;
    }
    sum = ((s0 + s1) + (s2 + s3)) + ((s4 + s5) + (s6 + s7));
    for (; i < N; i++) {
      sum += a + (double)X[ix];
      ix += stride;
    }
    return sum;
  }
  n = N / 2;
  n -= n % 8;
  if (stride < 0) {
    xp1 = (float *)X + ((n - N) * stride);
    xp2 = (float *)X;
  } else {
    xp1 = (float *)X;
    xp2 = (float *)X + (n * stride);
  }
  return stdlib_strided_dsapxsumpw(n, alpha, xp1, stride) +
         stdlib_strided_dsapxsumpw(N - n, alpha, xp2, stride);
}


x86 assembly (clang, -O0):
<stdlib_strided_dsapxsumpw>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %edi,-0xc(%rbp)
movss  %xmm0,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
cmpl   $0x0,-0xc(%rbp)
jg     1141 <stdlib_strided_dsapxsumpw+0x31>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    168c <stdlib_strided_dsapxsumpw+0x57c>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cmpl   $0x1,-0xc(%rbp)
je     1166 <stdlib_strided_dsapxsumpw+0x56>
cmpl   $0x0,-0x1c(%rbp)
jne    1188 <stdlib_strided_dsapxsumpw+0x78>
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    168c <stdlib_strided_dsapxsumpw+0x57c>
cmpl   $0x0,-0x1c(%rbp)
jge    11a6 <stdlib_strided_dsapxsumpw+0x96>
mov    $0x1,%eax
sub    -0xc(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    11ad <stdlib_strided_dsapxsumpw+0x9d>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x8,-0xc(%rbp)
jge    121f <stdlib_strided_dsapxsumpw+0x10f>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1210 <stdlib_strided_dsapxsumpw+0x100>
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%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    11c6 <stdlib_strided_dsapxsumpw+0xb6>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    168c <stdlib_strided_dsapxsumpw+0x57c>
cmpl   $0x80,-0xc(%rbp)
jg     15d0 <stdlib_strided_dsapxsumpw+0x4c0>
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x3,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x5,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x6,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x7,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x1c(%rbp),%eax
shl    $0x3,%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x40(%rbp)
movl   $0x8,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    -0x40(%rbp),%ecx
cmp    %ecx,%eax
jge    153b <stdlib_strided_dsapxsumpw+0x42b>
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x3,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x5,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x6,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x7,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x1c(%rbp),%eax
shl    $0x3,%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x48(%rbp)
jmp    1399 <stdlib_strided_dsapxsumpw+0x289>
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    -0xc(%rbp),%eax
jge    15c1 <stdlib_strided_dsapxsumpw+0x4b1>
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%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    1577 <stdlib_strided_dsapxsumpw+0x467>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    168c <stdlib_strided_dsapxsumpw+0x57c>
mov    -0xc(%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    1624 <stdlib_strided_dsapxsumpw+0x514>
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    -0xc(%rbp),%ecx
imul   -0x1c(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1645 <stdlib_strided_dsapxsumpw+0x535>
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x1c(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x44(%rbp),%edi
movss  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rsi
mov    -0x1c(%rbp),%edx
call   1030 <stdlib_strided_dsapxsumpw@plt>
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0xc(%rbp),%edi
sub    -0x44(%rbp),%edi
movss  -0x10(%rbp),%xmm0
mov    -0x30(%rbp),%rsi
mov    -0x1c(%rbp),%edx
call   1030 <stdlib_strided_dsapxsumpw@plt>
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<stdlib_strided_dsapxsumpw>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
test   %edi,%edi
jle    1216 <stdlib_strided_dsapxsumpw+0x106>
mov    %edi,%ebx
cvtss2sd %xmm0,%xmm1
cmp    $0x1,%edi
je     121c <stdlib_strided_dsapxsumpw+0x10c>
mov    %edx,%r14d
test   %edx,%edx
je     121c <stdlib_strided_dsapxsumpw+0x10c>
mov    $0x1,%eax
sub    %ebx,%eax
imul   %r14d,%eax
mov    %r14d,%ecx
sar    $0x1f,%ecx
and    %eax,%ecx
cmp    $0x7,%ebx
ja     123b <stdlib_strided_dsapxsumpw+0x12b>
movslq %ecx,%rax
movss  (%rsi,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm0,%xmm0
addsd  %xmm2,%xmm0
cmp    $0x1,%ebx
je     122c <stdlib_strided_dsapxsumpw+0x11c>
movslq %r14d,%rcx
add    %rcx,%rax
movss  (%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cmp    $0x2,%ebx
je     122c <stdlib_strided_dsapxsumpw+0x11c>
add    %rcx,%rax
movss  (%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cmp    $0x3,%ebx
je     122c <stdlib_strided_dsapxsumpw+0x11c>
add    %rcx,%rax
movss  (%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cmp    $0x4,%ebx
je     122c <stdlib_strided_dsapxsumpw+0x11c>
add    %rcx,%rax
movss  (%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cmp    $0x5,%ebx
je     122c <stdlib_strided_dsapxsumpw+0x11c>
add    %rcx,%rax
movss  (%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cmp    $0x6,%ebx
je     122c <stdlib_strided_dsapxsumpw+0x11c>
add    %rcx,%rax
movss  (%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
jmp    122c <stdlib_strided_dsapxsumpw+0x11c>
xorpd  %xmm0,%xmm0
jmp    122c <stdlib_strided_dsapxsumpw+0x11c>
movss  (%rsi),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x80,%ebx
ja     13cb <stdlib_strided_dsapxsumpw+0x2bb>
movslq %ecx,%rdx
lea    (%rcx,%r14,1),%eax
cltq
lea    (%r14,%r14,1),%r15d
lea    (%rdx,%r14,2),%edi
movslq %edi,%rbp
lea    (%r14,%r14,2),%r12d
lea    (%rcx,%r12,1),%edi
movslq %edi,%r10
lea    (%rdx,%r14,4),%edi
movslq %edi,%rdi
movss  (%rsi,%rdi,4),%xmm0
movss  (%rsi,%rdx,4),%xmm2
unpcklps %xmm0,%xmm2
cvtps2pd %xmm2,%xmm2
movaps %xmm1,%xmm4
movlhps %xmm1,%xmm4
lea    (%r14,%r14,4),%r9d
lea    (%rcx,%r9,1),%edi
movslq %edi,%rdi
movss  (%rsi,%rax,4),%xmm0
movss  (%rsi,%rdi,4),%xmm3
unpcklps %xmm3,%xmm0
cvtps2pd %xmm0,%xmm0
addpd  %xmm4,%xmm2
addpd  %xmm4,%xmm0
lea    (%r15,%r15,2),%eax
lea    (%rcx,%rax,1),%edi
movslq %edi,%rdi
movss  (%rsi,%rbp,4),%xmm3
movss  (%rsi,%rdi,4),%xmm5
unpcklps %xmm5,%xmm3
cvtps2pd %xmm3,%xmm3
addpd  %xmm4,%xmm3
lea    0x0(,%r14,8),%r8d
mov    %r8d,0x8(%rsp)
sub    %r14d,%r8d
add    %r8d,%ecx
movslq %ecx,%rcx
movss  (%rsi,%rcx,4),%xmm5
movss  (%rsi,%r10,4),%xmm6
unpcklps %xmm5,%xmm6
cvtps2pd %xmm6,%xmm5
addpd  %xmm4,%xmm5
mov    %ebx,%ebp
and    $0xfffffff8,%ebp
lea    (%rdx,%r14,8),%ecx
cmp    $0x9,%ebp
jb     13ec <stdlib_strided_dsapxsumpw+0x2dc>
lea    0x0(,%r14,4),%r13d
movslq %ecx,%rdi
mov    %r9,%rdx
mov    %ebp,%r9d
movslq 0x8(%rsp),%r10
movslq %r14d,%r11
movslq %r15d,%r15
movslq %r12d,%r12
movslq %r13d,%r13
movslq %edx,%rdx
movslq %eax,%rbp
movslq %r8d,%rax
add    %rdi,%rax
shl    $0x2,%r10
add    %rdi,%rbp
add    %rdi,%rdx
add    %rdi,%r13
add    %rdi,%r12
add    %rdi,%r15
add    %rdi,%r11
mov    $0x8,%r8d
mov    %rsi,0x10(%rsp)
movss  (%rsi,%r13,4),%xmm6
movss  (%rsi,%rdi,4),%xmm7
unpcklps %xmm6,%xmm7
cvtps2pd %xmm7,%xmm6
addpd  %xmm4,%xmm6
addpd  %xmm6,%xmm2
movss  (%rsi,%rdx,4),%xmm6
movss  (%rsi,%r11,4),%xmm7
unpcklps %xmm6,%xmm7
cvtps2pd %xmm7,%xmm6
addpd  %xmm4,%xmm6
addpd  %xmm6,%xmm0
movss  (%rsi,%rbp,4),%xmm6
movss  (%rsi,%r15,4),%xmm7
unpcklps %xmm6,%xmm7
cvtps2pd %xmm7,%xmm6
addpd  %xmm4,%xmm6
addpd  %xmm6,%xmm3
movss  (%rsi,%rax,4),%xmm6
movss  (%rsi,%r12,4),%xmm7
unpcklps %xmm6,%xmm7
cvtps2pd %xmm7,%xmm6
addpd  %xmm4,%xmm6
addpd  %xmm6,%xmm5
add    $0x8,%r8d
add    %r10,%rsi
add    0x8(%rsp),%ecx
cmp    %r9d,%r8d
jl     1350 <stdlib_strided_dsapxsumpw+0x240>
mov    0x10(%rsp),%rsi
jmp    13f2 <stdlib_strided_dsapxsumpw+0x2e2>
mov    %ebx,%ebp
shr    %ebp
and    $0xfffffff8,%ebp
mov    %ebp,%eax
test   %r14d,%r14d
js     14d2 <stdlib_strided_dsapxsumpw+0x3c2>
imul   %r14d,%eax
cltq
lea    (%rsi,%rax,4),%r15
jmp    14e1 <stdlib_strided_dsapxsumpw+0x3d1>
mov    $0x8,%r9d
addpd  %xmm5,%xmm3
addpd  %xmm0,%xmm2
addpd  %xmm3,%xmm2
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
addsd  %xmm2,%xmm0
cmp    %ebx,%r9d
jge    122c <stdlib_strided_dsapxsumpw+0x11c>
movslq %ecx,%rax
movslq %r14d,%rbp
mov    %r9d,%edx
not    %edx
add    %ebx,%edx
mov    %ebx,%ecx
and    $0x3,%ecx
je     144e <stdlib_strided_dsapxsumpw+0x33e>
neg    %ecx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movss  (%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
add    %rbp,%rax
add    $0xffffffff,%edi
cmp    %edi,%ecx
jne    1430 <stdlib_strided_dsapxsumpw+0x320>
sub    %edi,%r9d
cmp    $0x3,%edx
jb     122c <stdlib_strided_dsapxsumpw+0x11c>
lea    (%rsi,%rax,4),%rdx
mov    %rbp,%rcx
shl    $0x4,%rcx
lea    0x0(,%rbp,4),%rdi
lea    (%rdi,%rdi,2),%rdi
add    %rbp,%rax
lea    (%rsi,%rax,4),%rax
sub    %r9d,%ebx
nopl   0x0(%rax,%rax,1)
movss  (%rdx),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
movss  (%rdx,%rbp,8),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
movss  (%rdx,%rdi,1),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
add    %rcx,%rdx
add    %rcx,%rax
add    $0xfffffffc,%ebx
jne    1480 <stdlib_strided_dsapxsumpw+0x370>
jmp    122c <stdlib_strided_dsapxsumpw+0x11c>
sub    %ebx,%eax
imul   %r14d,%eax
cltq
mov    %rsi,%r15
lea    (%rsi,%rax,4),%rsi
mov    %ebp,%edi
movss  %xmm0,0x10(%rsp)
mov    %r14d,%edx
call   1030 <stdlib_strided_dsapxsumpw@plt>
movsd  %xmm0,0x8(%rsp)
sub    %ebp,%ebx
mov    %ebx,%edi
movss  0x10(%rsp),%xmm0
mov    %r15,%rsi
mov    %r14d,%edx
call   1030 <stdlib_strided_dsapxsumpw@plt>
addsd  0x8(%rsp),%xmm0
jmp    122c <stdlib_strided_dsapxsumpw+0x11c>

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

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