#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
int xcorr_range(double *output, int len_output, double *rev, int len_rev,
                double *local, int len_local, double max_threshold,
                double min_threshold) {
  int len_out = len_rev + len_local - 1;
  int oBuff;
  int len_win;
  int i;
  int len_dummy;
  if (len_output < len_out)
    printf("[xcorr] output vector is shorter than which it was expected\n");
  else if ((len_dummy = len_output - len_out) > 0)
    printf("[xcorr] output vector has %d dummy values at the end of it\n",
           len_dummy);
  for (oBuff = 0; oBuff < len_output; oBuff++) {
    output[oBuff] = 0.;
    if (oBuff > len_out)
      continue;
    if (len_rev >= len_local) {
      if (oBuff < len_local) {
        len_win = oBuff;
        for (i = 0; i <= oBuff; i++)
          output[oBuff] += rev[len_win - i] * local[len_local - 1 - i];
      } else if (oBuff >= len_rev) {
        len_win = len_out - oBuff;
        for (i = 0; i < len_win; i++)
          output[oBuff] +=
              rev[len_rev - len_win + i] * local[len_local - len_win - 1 + i];
      } else {
        len_win = len_local;
        for (i = 0; i < len_win; i++)
          output[oBuff] += rev[oBuff - i] * local[len_win - 1 - i];
      }
    } else {
      if (oBuff < len_rev) {
        len_win = oBuff;
        for (i = 0; i <= len_win; i++)
          output[oBuff] += rev[len_win - i] * local[len_local - 1 - i];
      } else if (oBuff >= len_local) {
        len_win = len_out - oBuff;
        for (i = 0; i < len_win; i++)
          output[oBuff] += rev[len_rev - len_win + i] * local[i];
      } else {
        len_win = len_rev;
        for (i = 0; i < len_win; i++)
          output[oBuff] += rev[len_win - 1 - i] *
                           local[len_local - 1 - (oBuff + 1 - len_rev) - i];
      }
    }
    if ((max_threshold != -65534 && output[oBuff] > max_threshold) ||
        (min_threshold != 65533 && output[oBuff] < min_threshold))
      return oBuff;
  }
  return 0;
}


x86 assembly (clang, -O0):
<xcorr_range>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9d,-0x34(%rbp)
movsd  %xmm0,-0x40(%rbp)
movsd  %xmm1,-0x48(%rbp)
mov    -0x24(%rbp),%eax
add    -0x34(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    1163 <xcorr_range+0x53>
lea    0xeb9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    118b <xcorr_range+0x7b>
mov    -0x14(%rbp),%eax
sub    -0x4c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
cmp    $0x0,%eax
jle    1186 <xcorr_range+0x76>
mov    -0x5c(%rbp),%esi
lea    0xece(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    118b <xcorr_range+0x7b>
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1548 <xcorr_range+0x438>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jle    11bf <xcorr_range+0xaf>
jmp    153a <xcorr_range+0x42a>
mov    -0x24(%rbp),%eax
cmp    -0x34(%rbp),%eax
jl     133d <xcorr_range+0x22d>
mov    -0x50(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1244 <xcorr_range+0x134>
mov    -0x50(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x50(%rbp),%eax
jg     123f <xcorr_range+0x12f>
mov    -0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    11e4 <xcorr_range+0xd4>
jmp    1338 <xcorr_range+0x228>
mov    -0x50(%rbp),%eax
cmp    -0x24(%rbp),%eax
jl     12c6 <xcorr_range+0x1b6>
mov    -0x4c(%rbp),%eax
sub    -0x50(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x54(%rbp),%eax
jge    12c1 <xcorr_range+0x1b1>
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    -0x54(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x54(%rbp),%ecx
sub    $0x1,%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1260 <xcorr_range+0x150>
jmp    1333 <xcorr_range+0x223>
mov    -0x34(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x54(%rbp),%eax
jge    132e <xcorr_range+0x21e>
mov    -0x20(%rbp),%rax
mov    -0x50(%rbp),%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    12d3 <xcorr_range+0x1c3>
jmp    1333 <xcorr_range+0x223>
jmp    1338 <xcorr_range+0x228>
jmp    14b2 <xcorr_range+0x3a2>
mov    -0x50(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    13b6 <xcorr_range+0x2a6>
mov    -0x50(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x54(%rbp),%eax
jg     13b1 <xcorr_range+0x2a1>
mov    -0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1356 <xcorr_range+0x246>
jmp    14ad <xcorr_range+0x39d>
mov    -0x50(%rbp),%eax
cmp    -0x34(%rbp),%eax
jl     142d <xcorr_range+0x31d>
mov    -0x4c(%rbp),%eax
sub    -0x50(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x54(%rbp),%eax
jge    1428 <xcorr_range+0x318>
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    -0x54(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    13d2 <xcorr_range+0x2c2>
jmp    14a8 <xcorr_range+0x398>
mov    -0x24(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x54(%rbp),%eax
jge    14a3 <xcorr_range+0x393>
mov    -0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x50(%rbp),%edx
add    $0x1,%edx
sub    -0x24(%rbp),%edx
sub    %edx,%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    143a <xcorr_range+0x32a>
jmp    14a8 <xcorr_range+0x398>
jmp    14ad <xcorr_range+0x39d>
jmp    14b2 <xcorr_range+0x3a2>
movsd  -0x40(%rbp),%xmm0
movsd  0xb41(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    14d4 <xcorr_range+0x3c4>
jp     14d4 <xcorr_range+0x3c4>
jmp    14ec <xcorr_range+0x3dc>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x40(%rbp),%xmm0
ja     152a <xcorr_range+0x41a>
movsd  -0x48(%rbp),%xmm0
movsd  0xb0f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    150e <xcorr_range+0x3fe>
jp     150e <xcorr_range+0x3fe>
jmp    1535 <xcorr_range+0x425>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1535 <xcorr_range+0x425>
mov    -0x50(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    154f <xcorr_range+0x43f>
jmp    153a <xcorr_range+0x42a>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1192 <xcorr_range+0x82>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<xcorr_range>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
mov    %r8,%r13
mov    %ecx,%r14d
mov    %rdx,%r15
mov    %esi,%r12d
mov    %r9,0x10(%rsp)
mov    %rdi,%rbx
lea    (%r9,%r14,1),%ebp
add    $0xffffffff,%ebp
cmp    %esi,%ebp
jle    116a <xcorr_range+0x4a>
lea    0xef5(%rip),%rdi
movsd  %xmm1,0x8(%rsp)
movsd  %xmm0,0x28(%rsp)
call   1030 <puts@plt>
jmp    118b <xcorr_range+0x6b>
mov    %r12d,%esi
sub    %ebp,%esi
jle    1197 <xcorr_range+0x77>
lea    0xe98(%rip),%rdi
xor    %eax,%eax
movsd  %xmm1,0x8(%rsp)
movsd  %xmm0,0x28(%rsp)
call   1040 <printf@plt>
movsd  0x28(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
test   %r12d,%r12d
jle    17b1 <xcorr_range+0x691>
mov    0x10(%rsp),%rsi
lea    (%rsi,%r14,1),%eax
movslq %eax,%rcx
mov    %ebp,0x4c(%rsp)
movslq %ebp,%r10
movslq %esi,%rax
mov    %rax,0x60(%rsp)
movslq %r14d,%rax
mov    %rax,0x58(%rsp)
mov    %r12d,%edi
mov    %esi,%eax
mov    %r14d,%r8d
mov    %r10,%rbp
neg    %rbp
mov    %rbp,0x50(%rsp)
lea    0x8(%r15),%rbp
mov    %rbp,0xb0(%rsp)
mov    $0x1,%r9d
sub    %esi,%r9d
lea    0x8(%r13),%rbp
mov    %rbp,0x88(%rsp)
mov    %r15,%rbp
mov    %r14d,%edx
neg    %edx
lea    -0x2(%rsi),%r15d
mov    %rax,0x98(%rsp)
and    $0xfffffffe,%eax
neg    %rax
mov    %rax,0x80(%rsp)
mov    %r8,0x90(%rsp)
and    $0xfffffffe,%r8d
neg    %r8
mov    %r8,0x78(%rsp)
movsd  0xdcb(%rip),%xmm5
movsd  0xdcb(%rip),%xmm4
lea    -0x1(%rsi),%eax
mov    %rax,0x38(%rsp)
lea    -0x2(%r14),%eax
mov    %rax,0x70(%rsp)
lea    -0x3(%rsi,%r14,1),%r8d
lea    -0x1(%r14),%eax
mov    %rax,0x68(%rsp)
mov    %r14,0x30(%rsp)
lea    (%rsi,%r14,1),%r11d
add    $0xfffffffe,%r11d
mov    $0x1,%r14d
xor    %eax,%eax
mov    %rbp,%r12
mov    %r10,0x28(%rsp)
mov    %rbp,0x18(%rsp)
mov    %rcx,0xa8(%rsp)
mov    %rdi,0xa0(%rsp)
mov    %r15,0x40(%rsp)
jmp    12c8 <xcorr_range+0x1a8>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rax
add    $0x1,%r14
add    $0x1,%r9d
add    $0x1,%edx
add    $0xffffffffffffffff,%r10
add    $0x8,%r12
add    $0xffffffffffffffff,%r8
add    $0xffffffffffffffff,%r11
cmp    %rdi,%rax
je     17b1 <xcorr_range+0x691>
movq   $0x0,(%rbx,%rax,8)
cmp    %rcx,%rax
jge    12a0 <xcorr_range+0x180>
mov    %r14,%rdi
and    $0xfffffffffffffffe,%rdi
neg    %rdi
mov    %r9d,0x8(%rsp)
movslq %r9d,%rcx
mov    0xb0(%rsp),%rbp
lea    0x0(,%rcx,8),%r15
add    %rbp,%r15
mov    %r10,%rbp
and    $0xfffffffffffffffe,%rbp
mov    0x28(%rsp),%rcx
sub    %rax,%rcx
mov    %rax,%r9
not    %r9
cmp    %esi,0x30(%rsp)
jge    1390 <xcorr_range+0x270>
cmp    0x58(%rsp),%rax
jge    1470 <xcorr_range+0x350>
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
test   %rax,%rax
je     13fb <xcorr_range+0x2db>
mov    0x40(%rsp),%r15
mov    0x38(%rsp),%rbp
nopl   0x0(%rax)
movsd  (%r12,%rcx,8),%xmm3
lea    (%rcx,%rbp,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rbx,%rax,8)
movsd  -0x8(%r12,%rcx,8),%xmm2
lea    (%r15,%rcx,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rbx,%rax,8)
add    $0xfffffffffffffffe,%rcx
cmp    %rcx,%rdi
jne    1340 <xcorr_range+0x220>
jmp    13f3 <xcorr_range+0x2d3>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    0x60(%rsp),%rax
jge    14ac <xcorr_range+0x38c>
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
test   %rax,%rax
je     13fb <xcorr_range+0x2db>
mov    0x40(%rsp),%r15
mov    0x38(%rsp),%rbp
movsd  (%r12,%rcx,8),%xmm3
lea    (%rcx,%rbp,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rbx,%rax,8)
movsd  -0x8(%r12,%rcx,8),%xmm2
lea    (%r15,%rcx,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rbx,%rax,8)
add    $0xfffffffffffffffe,%rcx
cmp    %rcx,%rdi
jne    13b0 <xcorr_range+0x290>
neg    %rcx
mov    0x10(%rsp),%rsi
mov    0x18(%rsp),%rbp
mov    0x8(%rsp),%r9d
test   $0x1,%r14b
je     1433 <xcorr_range+0x313>
mov    %rax,%rsi
sub    %rcx,%rsi
movsd  0x0(%rbp,%rsi,8),%xmm3
mov    0x10(%rsp),%rsi
not    %ecx
add    %esi,%ecx
movslq %ecx,%rcx
mulsd  0x0(%r13,%rcx,8),%xmm3
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rbx,%rax,8)
ucomisd %xmm5,%xmm0
jne    143b <xcorr_range+0x31b>
jnp    1445 <xcorr_range+0x325>
ucomisd %xmm0,%xmm2
ja     17b3 <xcorr_range+0x693>
ucomisd %xmm4,%xmm1
mov    0xa8(%rsp),%rcx
mov    0xa0(%rsp),%rdi
jne    1461 <xcorr_range+0x341>
jnp    12a0 <xcorr_range+0x180>
ucomisd %xmm2,%xmm1
jbe    12a0 <xcorr_range+0x180>
jmp    17b3 <xcorr_range+0x693>
cmp    0x60(%rsp),%rax
jge    14ec <xcorr_range+0x3cc>
mov    0x30(%rsp),%rcx
test   %ecx,%ecx
mov    0x8(%rsp),%r9d
jle    154e <xcorr_range+0x42e>
cmp    $0x1,%ecx
jne    1557 <xcorr_range+0x437>
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
mov    0x18(%rsp),%rbp
testb  $0x1,0x90(%rsp)
01
je     1433 <xcorr_range+0x313>
jmp    15ee <xcorr_range+0x4ce>
cmp    0x58(%rsp),%rax
jge    1516 <xcorr_range+0x3f6>
test   %esi,%esi
mov    0x18(%rsp),%rbp
mov    0x8(%rsp),%r9d
mov    0x40(%rsp),%r15
jle    154e <xcorr_range+0x42e>
cmp    $0x1,%esi
jne    1614 <xcorr_range+0x4f4>
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
testb  $0x1,0x98(%rsp)
01
jne    140b <xcorr_range+0x2eb>
jmp    1433 <xcorr_range+0x313>
mov    0x28(%rsp),%rdi
sub    %rax,%rdi
jle    1540 <xcorr_range+0x420>
mov    %rdi,0x20(%rsp)
cmp    0x50(%rsp),%r9
jne    1696 <xcorr_range+0x576>
xorpd  %xmm2,%xmm2
xor    %edi,%edi
mov    0x8(%rsp),%r9d
jmp    16e6 <xcorr_range+0x5c6>
mov    0x28(%rsp),%rdi
sub    %rax,%rdi
jle    1540 <xcorr_range+0x420>
mov    %rdi,0x20(%rsp)
cmp    0x50(%rsp),%r9
jne    1715 <xcorr_range+0x5f5>
xorpd  %xmm2,%xmm2
xor    %edi,%edi
mov    0x8(%rsp),%r9d
jmp    1763 <xcorr_range+0x643>
xorpd  %xmm2,%xmm2
mov    0x8(%rsp),%r9d
jmp    1433 <xcorr_range+0x313>
xorpd  %xmm2,%xmm2
jmp    1433 <xcorr_range+0x313>
mov    %r10,0x20(%rsp)
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
mov    0x18(%rsp),%r10
mov    0x78(%rsp),%r15
mov    0x70(%rsp),%rbp
mov    0x68(%rsp),%rdi
cs nopw 0x0(%rax,%rax,1)
lea    (%rdi,%rcx,1),%esi
movslq %esi,%rsi
movsd  (%r10,%rsi,8),%xmm3
lea    (%r11,%rcx,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rbx,%rax,8)
lea    0x0(%rbp,%rcx,1),%esi
movslq %esi,%rsi
movsd  (%r10,%rsi,8),%xmm2
lea    (%r8,%rcx,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rbx,%rax,8)
add    $0xfffffffffffffffe,%rcx
cmp    %rcx,%r15
jne    1580 <xcorr_range+0x460>
neg    %rcx
mov    0x10(%rsp),%rsi
mov    %r10,%rbp
mov    0x20(%rsp),%r10
testb  $0x1,0x90(%rsp)
01
je     1433 <xcorr_range+0x313>
mov    %eax,%esi
not    %esi
add    0x4c(%rsp),%esi
sub    %ecx,%esi
not    %ecx
add    0x30(%rsp),%ecx
movslq %ecx,%rcx
movsd  0x0(%rbp,%rcx,8),%xmm3
movslq %esi,%rcx
mov    0x10(%rsp),%rsi
jmp    1423 <xcorr_range+0x303>
mov    %r10,0x20(%rsp)
mov    %rbp,%r10
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
mov    0x80(%rsp),%rdi
mov    0x38(%rsp),%rbp
nop
movsd  (%r12,%rcx,8),%xmm3
lea    (%rcx,%rbp,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rbx,%rax,8)
movsd  -0x8(%r12,%rcx,8),%xmm2
lea    (%r15,%rcx,1),%esi
movslq %esi,%rsi
mulsd  0x0(%r13,%rsi,8),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rbx,%rax,8)
add    $0xfffffffffffffffe,%rcx
cmp    %rcx,%rdi
jne    1630 <xcorr_range+0x510>
neg    %rcx
mov    0x10(%rsp),%rsi
mov    %r10,%rbp
mov    0x20(%rsp),%r10
testb  $0x1,0x98(%rsp)
01
jne    140b <xcorr_range+0x2eb>
jmp    1433 <xcorr_range+0x313>
xorpd  %xmm2,%xmm2
xor    %edi,%edi
mov    0x8(%rsp),%r9d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  -0x8(%r15,%rdi,8),%xmm3
mulsd  0x0(%r13,%rdi,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rbx,%rax,8)
movsd  (%r15,%rdi,8),%xmm2
mulsd  0x8(%r13,%rdi,8),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rbx,%rax,8)
add    $0x2,%rdi
cmp    %rdi,%rbp
jne    16b0 <xcorr_range+0x590>
test   $0x1,%cl
mov    0x18(%rsp),%rbp
je     1433 <xcorr_range+0x313>
mov    0x30(%rsp),%rcx
sub    0x20(%rsp),%ecx
movslq %ecx,%rcx
add    %rdi,%rcx
movsd  0x0(%rbp,%rcx,8),%xmm3
mulsd  0x0(%r13,%rdi,8),%xmm3
jmp    142a <xcorr_range+0x30a>
movslq %edx,%rsi
mov    0x88(%rsp),%rdi
lea    (%rdi,%rsi,8),%rsi
xorpd  %xmm2,%xmm2
xor    %edi,%edi
mov    0x8(%rsp),%r9d
nop
movsd  -0x8(%r15,%rdi,8),%xmm3
mulsd  -0x8(%rsi,%rdi,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rbx,%rax,8)
movsd  (%r15,%rdi,8),%xmm2
mulsd  (%rsi,%rdi,8),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rbx,%rax,8)
add    $0x2,%rdi
cmp    %rdi,%rbp
jne    1730 <xcorr_range+0x610>
test   $0x1,%cl
mov    0x10(%rsp),%rsi
mov    0x18(%rsp),%rbp
je     1433 <xcorr_range+0x313>
mov    0x30(%rsp),%rcx
mov    %ecx,0x8(%rsp)
mov    0x20(%rsp),%rcx
sub    %ecx,0x8(%rsp)
not    %ecx
add    %esi,%ecx
movslq 0x8(%rsp),%rsi
movslq %ecx,%rcx
add    %rdi,%rsi
movsd  0x0(%rbp,%rsi,8),%xmm3
add    %rdi,%rcx
mulsd  0x0(%r13,%rcx,8),%xmm3
mov    0x10(%rsp),%rsi
jmp    142a <xcorr_range+0x30a>
xor    %eax,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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