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


x86 assembly (clang, -O0):
<stdlib_strided_dssumpw>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %edi,-0xc(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
cmpl   $0x0,-0xc(%rbp)
jg     113c <stdlib_strided_dssumpw+0x2c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1588 <stdlib_strided_dssumpw+0x478>
cmpl   $0x1,-0xc(%rbp)
je     1150 <stdlib_strided_dssumpw+0x40>
cmpl   $0x0,-0x1c(%rbp)
jne    1166 <stdlib_strided_dssumpw+0x56>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1588 <stdlib_strided_dssumpw+0x478>
cmpl   $0x0,-0x1c(%rbp)
jge    1184 <stdlib_strided_dssumpw+0x74>
mov    $0x1,%eax
sub    -0xc(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    118b <stdlib_strided_dssumpw+0x7b>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x8,-0xc(%rbp)
jge    11f1 <stdlib_strided_dssumpw+0xe1>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11e2 <stdlib_strided_dssumpw+0xd2>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%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    11a4 <stdlib_strided_dssumpw+0x94>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1588 <stdlib_strided_dssumpw+0x478>
cmpl   $0x80,-0xc(%rbp)
jg     14d6 <stdlib_strided_dssumpw+0x3c6>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
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),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x3,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
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),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x5,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x6,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x7,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%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    144d <stdlib_strided_dssumpw+0x33d>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
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),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x3,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
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),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x5,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x6,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   $0x7,-0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%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    130b <stdlib_strided_dssumpw+0x1fb>
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    14c7 <stdlib_strided_dssumpw+0x3b7>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%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    1489 <stdlib_strided_dssumpw+0x379>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1588 <stdlib_strided_dssumpw+0x478>
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    152a <stdlib_strided_dssumpw+0x41a>
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    154b <stdlib_strided_dssumpw+0x43b>
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
mov    -0x28(%rbp),%rsi
mov    -0x1c(%rbp),%edx
call   1030 <stdlib_strided_dssumpw@plt>
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0xc(%rbp),%edi
sub    -0x44(%rbp),%edi
mov    -0x30(%rbp),%rsi
mov    -0x1c(%rbp),%edx
call   1030 <stdlib_strided_dssumpw@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<stdlib_strided_dssumpw>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
test   %edi,%edi
jle    11fb <stdlib_strided_dssumpw+0xeb>
mov    %rsi,%r12
mov    %edi,%ebx
cmp    $0x1,%edi
je     1201 <stdlib_strided_dssumpw+0xf1>
mov    %edx,%r15d
test   %edx,%edx
je     1201 <stdlib_strided_dssumpw+0xf1>
mov    $0x1,%ecx
sub    %ebx,%ecx
imul   %r15d,%ecx
mov    %r15d,%eax
sar    $0x1f,%eax
and    %ecx,%eax
cmp    $0x7,%ebx
ja     121a <stdlib_strided_dssumpw+0x10a>
cltq
movss  (%r12,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
addsd  %xmm1,%xmm0
cmp    $0x1,%ebx
je     120b <stdlib_strided_dssumpw+0xfb>
movslq %r15d,%rcx
add    %rcx,%rax
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cmp    $0x2,%ebx
je     120b <stdlib_strided_dssumpw+0xfb>
add    %rcx,%rax
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cmp    $0x3,%ebx
je     120b <stdlib_strided_dssumpw+0xfb>
add    %rcx,%rax
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cmp    $0x4,%ebx
je     120b <stdlib_strided_dssumpw+0xfb>
add    %rcx,%rax
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cmp    $0x5,%ebx
je     120b <stdlib_strided_dssumpw+0xfb>
add    %rcx,%rax
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cmp    $0x6,%ebx
je     120b <stdlib_strided_dssumpw+0xfb>
add    %rcx,%rax
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
jmp    120b <stdlib_strided_dssumpw+0xfb>
xorpd  %xmm0,%xmm0
jmp    120b <stdlib_strided_dssumpw+0xfb>
movss  (%r12),%xmm0
cvtss2sd %xmm0,%xmm0
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x80,%ebx
ja     138f <stdlib_strided_dssumpw+0x27f>
movslq %eax,%rcx
lea    (%rax,%r15,1),%edx
movslq %edx,%rdx
lea    (%r15,%r15,1),%r8d
lea    (%rcx,%r15,2),%esi
movslq %esi,%rdi
lea    (%r15,%r15,2),%r13d
lea    (%rax,%r13,1),%esi
movslq %esi,%r10
lea    (%rcx,%r15,4),%ebp
movslq %ebp,%rbp
movss  (%r12,%rbp,4),%xmm0
movss  (%r12,%rcx,4),%xmm1
unpcklps %xmm0,%xmm1
cvtps2pd %xmm1,%xmm1
lea    (%r15,%r15,4),%ebp
lea    (%rax,%rbp,1),%esi
movslq %esi,%rsi
movss  (%r12,%rdx,4),%xmm0
movss  (%r12,%rsi,4),%xmm2
unpcklps %xmm2,%xmm0
cvtps2pd %xmm0,%xmm0
lea    (%r8,%r8,2),%r14d
lea    (%rax,%r14,1),%edx
movslq %edx,%rdx
movss  (%r12,%rdi,4),%xmm2
movss  (%r12,%rdx,4),%xmm3
unpcklps %xmm3,%xmm2
cvtps2pd %xmm2,%xmm2
lea    0x0(,%r15,8),%edx
mov    %edx,0x8(%rsp)
sub    %r15d,%edx
add    %edx,%eax
cltq
movss  (%r12,%rax,4),%xmm3
movss  (%r12,%r10,4),%xmm4
unpcklps %xmm3,%xmm4
cvtps2pd %xmm4,%xmm3
mov    %ebx,%r9d
and    $0xfffffff8,%r9d
lea    (%rcx,%r15,8),%ecx
cmp    $0x9,%r9d
jb     13b3 <stdlib_strided_dssumpw+0x2a3>
lea    0x0(,%r15,4),%eax
movslq %ecx,%rsi
movslq 0x8(%rsp),%r10
movslq %r15d,%r11
mov    %r12,0x10(%rsp)
movslq %r8d,%r12
movslq %r13d,%r13
movslq %eax,%rdi
movslq %ebp,%rbp
movslq %r14d,%rax
movslq %edx,%rdx
add    %rsi,%rdx
shl    $0x2,%r10
add    %rsi,%rax
add    %rsi,%rbp
add    %rsi,%rdi
add    %rsi,%r13
add    %rsi,%r12
add    %rsi,%r11
mov    $0x8,%r8d
mov    0x10(%rsp),%r14
movss  (%r14,%rdi,4),%xmm4
movss  (%r14,%rsi,4),%xmm5
unpcklps %xmm4,%xmm5
cvtps2pd %xmm5,%xmm4
addpd  %xmm4,%xmm1
movss  (%r14,%rbp,4),%xmm4
movss  (%r14,%r11,4),%xmm5
unpcklps %xmm4,%xmm5
movss  (%r14,%rax,4),%xmm4
movss  (%r14,%r12,4),%xmm6
unpcklps %xmm4,%xmm6
cvtps2pd %xmm5,%xmm4
cvtps2pd %xmm6,%xmm5
addpd  %xmm4,%xmm0
addpd  %xmm5,%xmm2
movss  (%r14,%rdx,4),%xmm4
movss  (%r14,%r13,4),%xmm5
unpcklps %xmm4,%xmm5
cvtps2pd %xmm5,%xmm4
addpd  %xmm4,%xmm3
add    $0x8,%r8d
add    %r10,%r14
add    0x8(%rsp),%ecx
cmp    %r9d,%r8d
jl     1320 <stdlib_strided_dssumpw+0x210>
mov    0x10(%rsp),%r12
jmp    13b9 <stdlib_strided_dssumpw+0x2a9>
mov    %ebx,%ebp
shr    %ebp
and    $0xfffffff8,%ebp
mov    %ebp,%eax
test   %r15d,%r15d
js     1492 <stdlib_strided_dssumpw+0x382>
imul   %r15d,%eax
cltq
mov    %r12,%rsi
lea    (%r12,%rax,4),%r12
jmp    149e <stdlib_strided_dssumpw+0x38e>
mov    $0x8,%r9d
addpd  %xmm3,%xmm2
addpd  %xmm0,%xmm1
addpd  %xmm2,%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
cmp    %ebx,%r9d
jge    120b <stdlib_strided_dssumpw+0xfb>
movslq %ecx,%rax
movslq %r15d,%rcx
mov    %r9d,%edx
not    %edx
add    %ebx,%edx
mov    %ebx,%esi
and    $0x3,%esi
je     141b <stdlib_strided_dssumpw+0x30b>
neg    %esi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
add    %rcx,%rax
add    $0xffffffff,%edi
cmp    %edi,%esi
jne    1400 <stdlib_strided_dssumpw+0x2f0>
sub    %edi,%r9d
cmp    $0x3,%edx
jb     120b <stdlib_strided_dssumpw+0xfb>
lea    (%r12,%rax,4),%rdx
mov    %rcx,%rsi
shl    $0x4,%rsi
lea    0x0(,%rcx,4),%rdi
lea    (%rdi,%rdi,2),%rdi
add    %rcx,%rax
lea    (%r12,%rax,4),%rax
sub    %r9d,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
movss  (%rdx),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm0,%xmm1
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movss  (%rdx,%rcx,8),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm0,%xmm1
movss  (%rdx,%rdi,1),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm1,%xmm0
add    %rsi,%rdx
add    %rsi,%rax
add    $0xfffffffc,%ebx
jne    1450 <stdlib_strided_dssumpw+0x340>
jmp    120b <stdlib_strided_dssumpw+0xfb>
sub    %ebx,%eax
imul   %r15d,%eax
cltq
lea    (%r12,%rax,4),%rsi
mov    %ebp,%edi
mov    %r15d,%edx
call   1030 <stdlib_strided_dssumpw@plt>
movsd  %xmm0,0x8(%rsp)
sub    %ebp,%ebx
mov    %ebx,%edi
mov    %r12,%rsi
mov    %r15d,%edx
call   1030 <stdlib_strided_dssumpw@plt>
addsd  0x8(%rsp),%xmm0
jmp    120b <stdlib_strided_dssumpw+0xfb>

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

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