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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double *dgetmem(int const);
int /*<<< orphan*/ fillz(double *, int, int const);
int /*<<< orphan*/ free(double *);
int toeplitz(double *t, double *a, double *b, const int n, double eps) {
  int l, k;
  static double *c = NULL, *cc;
  static int size;
  double rmd, mue, mue2;
  if (c == NULL) {
    c = dgetmem(n + n + 2);
    cc = c + n;
    size = n;
  }
  if (n > size) {
    free(c);
    c = dgetmem(n + n + 2);
    cc = c + n;
    size = n;
  }
  if (eps < 0.0)
    eps = 1.0e-6;
  fillz(c, sizeof(*c), n + 1);
  rmd = t[0];
  if (((rmd < 0.0) ? -rmd : rmd) <= eps)
    return (-1);
  a[0] = b[0] / rmd;
  for (l = 1; l < n; l++) {
    mue = -t[l];
    for (k = 1; k < l; k++)
      mue -= c[k] * t[l - k];
    mue /= rmd;
    for (k = 1; k < l; k++)
      cc[k] = c[k] + mue * c[l - k];
    cc[l] = mue;
    rmd = (1.0 - mue * mue) * rmd;
    if (((rmd < 0.0) ? -rmd : rmd) <= eps)
      return (-1);
    for (k = 1; k <= l; k++)
      c[k] = cc[k];
    mue2 = b[l];
    for (k = 0; k <= l - 1; k++)
      mue2 += c[l - k] * b[k];
    mue2 /= rmd;
    for (k = 0; k < l; k++)
      a[k] += mue2 * c[l - k];
    a[l] = mue2;
  }
  return (0);
}


x86 assembly (clang, -O0):
<toeplitz>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
movsd  %xmm0,-0x30(%rbp)
cmpq   $0x0,0x2eec(%rip)
jne    1191 <toeplitz+0x61>
mov    -0x24(%rbp),%edi
add    -0x24(%rbp),%edi
add    $0x2,%edi
call   1050 <dgetmem@plt>
mov    %rax,0x2ed1(%rip)
mov    0x2eca(%rip),%rax
movslq -0x24(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x2ec0(%rip)
mov    -0x24(%rbp),%eax
mov    %eax,0x2ebf(%rip)
mov    -0x24(%rbp),%eax
cmp    0x2eb6(%rip),%eax
jle    11e3 <toeplitz+0xb3>
mov    0x2e99(%rip),%rdi
call   1030 <free@plt>
mov    -0x24(%rbp),%edi
add    -0x24(%rbp),%edi
add    $0x2,%edi
call   1050 <dgetmem@plt>
mov    %rax,0x2e7f(%rip)
mov    0x2e78(%rip),%rax
movslq -0x24(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x2e6e(%rip)
mov    -0x24(%rbp),%eax
mov    %eax,0x2e6d(%rip)
xorps  %xmm0,%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    11fe <toeplitz+0xce>
movsd  0xe07(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    0x2e3b(%rip),%rdi
mov    -0x24(%rbp),%edx
add    $0x1,%edx
mov    $0x8,%esi
call   1040 <fillz@plt>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    1256 <toeplitz+0x126>
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1260 <toeplitz+0x130>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1280 <toeplitz+0x150>
movl   $0xffffffff,-0x4(%rbp)
jmp    159d <toeplitz+0x46d>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
divsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1596 <toeplitz+0x466>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    133d <toeplitz+0x20d>
mov    0x2d55(%rip),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x48(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    12d8 <toeplitz+0x1a8>
movsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    13b3 <toeplitz+0x283>
mov    0x2cd6(%rip),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x48(%rbp),%xmm0
mov    0x2cc1(%rip),%rax
mov    -0x34(%rbp),%ecx
sub    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2cac(%rip),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1357 <toeplitz+0x227>
movsd  -0x48(%rbp),%xmm0
mov    0x2c89(%rip),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc13(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    1437 <toeplitz+0x307>
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1441 <toeplitz+0x311>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1461 <toeplitz+0x331>
movl   $0xffffffff,-0x4(%rbp)
jmp    159d <toeplitz+0x46d>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     14a2 <toeplitz+0x372>
mov    0x2bcd(%rip),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2bb5(%rip),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1468 <toeplitz+0x338>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     150e <toeplitz+0x3de>
mov    0x2b6d(%rip),%rax
mov    -0x34(%rbp),%ecx
sub    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    14bb <toeplitz+0x38b>
movsd  -0x40(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1576 <toeplitz+0x446>
movsd  -0x50(%rbp),%xmm0
mov    0x2b00(%rip),%rax
mov    -0x34(%rbp),%ecx
sub    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1528 <toeplitz+0x3f8>
movsd  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    129c <toeplitz+0x16c>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<toeplitz>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %ecx,%ebx
mov    %rdx,%rbp
mov    %rsi,%r14
mov    %rdi,%r12
mov    0x2eed(%rip),%rdi
test   %rdi,%rdi
movapd %xmm0,0x20(%rsp)
je     116b <toeplitz+0x3b>
cmp    %ebx,0x2eec(%rip)
jge    119a <toeplitz+0x6a>
call   1030 <free@plt>
lea    (%rbx,%rbx,1),%edi
add    $0x2,%edi
call   1050 <dgetmem@plt>
movapd 0x20(%rsp),%xmm0
mov    %rax,%rdi
mov    %rax,0x2eba(%rip)
movslq %ebx,%rax
lea    (%rdi,%rax,8),%rcx
mov    %rcx,0x2eb4(%rip)
mov    %eax,0x2eb6(%rip)
xorpd  %xmm1,%xmm1
movapd %xmm0,%xmm2
cmpltsd %xmm1,%xmm2
movsd  0xe51(%rip),%xmm1
andpd  %xmm2,%xmm1
andnpd %xmm0,%xmm2
orpd   %xmm1,%xmm2
movapd %xmm2,0x70(%rsp)
lea    0x1(%rbx),%edx
mov    $0x8,%esi
call   1040 <fillz@plt>
movapd 0x70(%rsp),%xmm10
movsd  (%r12),%xmm0
movapd 0xe3d(%rip),%xmm1
xorpd  %xmm0,%xmm1
movapd %xmm0,%xmm2
cmpltsd 0xe1c(%rip),%xmm2
andpd  %xmm2,%xmm1
andnpd %xmm0,%xmm2
orpd   %xmm1,%xmm2
ucomisd %xmm2,%xmm10
jae    18a4 <toeplitz+0x774>
movsd  0x0(%rbp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%r14)
xor    %eax,%eax
cmp    $0x2,%ebx
jl     18a9 <toeplitz+0x779>
mov    0x2e15(%rip),%rcx
mov    0x2e16(%rip),%rdx
mov    %ebx,%eax
mov    %rax,0x58(%rsp)
lea    0x8(%rcx),%r11
lea    0x8(%rdx),%rax
mov    %rax,0x18(%rsp)
lea    -0x8(%rcx),%r13
lea    0x18(%rbp),%rax
mov    %rax,0x50(%rsp)
lea    0x10(%r14),%rax
mov    %rax,0x30(%rsp)
lea    0x8(%r14),%rax
mov    %rax,0x48(%rsp)
mov    $0x2,%r15d
mov    $0x1,%r9d
xor    %r10d,%r10d
movapd 0xda4(%rip),%xmm1
movsd  0xd83(%rip),%xmm9
xorpd  %xmm8,%xmm8
mov    %r11,0x8(%rsp)
mov    %rcx,%r8
mov    %r12,%rbx
mov    %rbp,0x10(%rsp)
mov    %r14,0x40(%rsp)
mov    %r12,0x38(%rsp)
jmp    12e7 <toeplitz+0x1b7>
cs nopw 0x0(%rax,%rax,1)
movsd  %xmm4,(%r14,%r9,8)
add    $0x1,%r9
add    $0x1,%r15
add    $0x1,%r10
mov    0x68(%rsp),%rbx
add    $0x8,%rbx
mov    0x20(%rsp),%r13
add    $0x8,%r13
add    $0x8,%r8
add    $0x8,%r11
cmp    0x58(%rsp),%r9
je     18bb <toeplitz+0x78b>
movsd  (%r12,%r9,8),%xmm4
xorpd  %xmm1,%xmm4
cmp    $0x2,%r9
jb     14a0 <toeplitz+0x370>
mov    $0x1,%esi
cmp    $0x1,%r10
je     1353 <toeplitz+0x223>
mov    %r10,%rax
and    $0xfffffffffffffffe,%rax
neg    %rax
mov    $0x1,%esi
mov    %rbx,%rbp
nopl   0x0(%rax,%rax,1)
movsd  (%rcx,%rsi,8),%xmm5
movsd  0x8(%rcx,%rsi,8),%xmm6
mulsd  0x0(%rbp),%xmm5
subsd  %xmm5,%xmm4
mulsd  -0x8(%rbp),%xmm6
subsd  %xmm6,%xmm4
add    $0xfffffffffffffff0,%rbp
lea    (%rax,%rsi,1),%rdi
add    $0x2,%rdi
add    $0x2,%rsi
cmp    $0x1,%rdi
jne    1320 <toeplitz+0x1f0>
test   $0x1,%r10b
je     136e <toeplitz+0x23e>
movsd  (%rcx,%rsi,8),%xmm5
mov    %r9,%rax
sub    %rsi,%rax
mulsd  (%r12,%rax,8),%xmm5
subsd  %xmm5,%xmm4
divsd  %xmm0,%xmm4
cmp    $0x2,%r9
jb     14a4 <toeplitz+0x374>
mov    $0x1,%eax
cmp    $0x4,%r10
jb     1420 <toeplitz+0x2f0>
lea    (%rcx,%r9,8),%rsi
cmp    %rsi,0x18(%rsp)
jae    13a1 <toeplitz+0x271>
lea    (%rdx,%r9,8),%rsi
cmp    %rsi,0x8(%rsp)
jb     1420 <toeplitz+0x2f0>
mov    %r10,%rbp
and    $0xfffffffffffffffc,%rbp
lea    0x1(%rbp),%rax
movapd %xmm4,%xmm5
unpcklpd %xmm4,%xmm5
mov    %r13,%rsi
xor    %edi,%edi
nopl   0x0(%rax)
movupd 0x8(%rcx,%rdi,8),%xmm6
movupd 0x18(%rcx,%rdi,8),%xmm7
movupd -0x10(%rsi),%xmm3
movupd (%rsi),%xmm2
shufpd $0x1,%xmm2,%xmm2
shufpd $0x1,%xmm3,%xmm3
mulpd  %xmm5,%xmm2
addpd  %xmm6,%xmm2
mulpd  %xmm5,%xmm3
addpd  %xmm7,%xmm3
movupd %xmm2,0x8(%rdx,%rdi,8)
movupd %xmm3,0x18(%rdx,%rdi,8)
add    $0x4,%rdi
add    $0xffffffffffffffe0,%rsi
cmp    %rdi,%rbp
jne    13c0 <toeplitz+0x290>
cmp    %rbp,%r10
je     14a4 <toeplitz+0x374>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rax,%rsi
test   $0x1,%r9b
jne    1446 <toeplitz+0x316>
mov    %r9,%rsi
sub    %rax,%rsi
movsd  (%rcx,%rsi,8),%xmm2
mulsd  %xmm4,%xmm2
addsd  (%rcx,%rax,8),%xmm2
movsd  %xmm2,(%rdx,%rax,8)
lea    0x1(%rax),%rsi
cmp    %rax,%r10
je     14a4 <toeplitz+0x374>
lea    0x0(,%rsi,8),%rdi
mov    %r8,%rax
sub    %rdi,%rax
nopl   0x0(%rax)
movsd  0x8(%rax),%xmm2
mulsd  %xmm4,%xmm2
addsd  (%rcx,%rsi,8),%xmm2
movsd  %xmm2,(%rdx,%rsi,8)
movsd  (%rax),%xmm2
mulsd  %xmm4,%xmm2
addsd  0x8(%rcx,%rsi,8),%xmm2
movsd  %xmm2,0x8(%rdx,%rsi,8)
add    $0x2,%rsi
add    $0xfffffffffffffff0,%rax
cmp    %rsi,%r9
jne    1460 <toeplitz+0x330>
jmp    14a4 <toeplitz+0x374>
cs nopw 0x0(%rax,%rax,1)
divsd  %xmm0,%xmm4
movsd  %xmm4,(%rdx,%r9,8)
mulsd  %xmm4,%xmm4
movapd %xmm9,%xmm2
subsd  %xmm4,%xmm2
mulsd  %xmm2,%xmm0
movapd %xmm0,%xmm2
xorpd  %xmm1,%xmm2
movapd %xmm0,%xmm3
cmpltsd %xmm8,%xmm3
andpd  %xmm3,%xmm2
andnpd %xmm0,%xmm3
orpd   %xmm2,%xmm3
ucomisd %xmm3,%xmm10
jae    18a4 <toeplitz+0x774>
mov    %rbx,0x68(%rsp)
mov    %r13,0x20(%rsp)
mov    %r9,%rbp
and    $0xfffffffffffffffc,%rbp
mov    %r9,%r13
movabs $0x7ffffffffffffffc,%rax
ff ff 7f
and    %rax,%r13
lea    (%rcx,%r15,8),%rbx
mov    $0x1,%esi
cmp    $0x4,%r9
mov    %rbx,0x60(%rsp)
jb     1620 <toeplitz+0x4f0>
lea    (%rdx,%r15,8),%rax
cmp    %rax,0x8(%rsp)
jae    1533 <toeplitz+0x403>
cmp    %rbx,0x18(%rsp)
jb     1620 <toeplitz+0x4f0>
lea    -0x4(%rbp),%r14
shr    $0x2,%r14
lea    -0x4(%r13),%rax
mov    %rax,%r12
shr    $0x2,%r12
add    $0x1,%r12
cmp    $0xc,%rax
jae    1554 <toeplitz+0x424>
xor    %esi,%esi
jmp    15be <toeplitz+0x48e>
lea    0x1(%r14),%rax
and    $0xfffffffffffffffc,%rax
xor    %esi,%esi
xchg   %ax,%ax
movups 0x8(%rdx,%rsi,8),%xmm2
movups 0x18(%rdx,%rsi,8),%xmm3
movups %xmm2,0x8(%rcx,%rsi,8)
movups %xmm3,0x18(%rcx,%rsi,8)
movups 0x28(%rdx,%rsi,8),%xmm2
movups 0x38(%rdx,%rsi,8),%xmm3
movups %xmm2,0x28(%rcx,%rsi,8)
movups %xmm3,0x38(%rcx,%rsi,8)
movups 0x48(%rdx,%rsi,8),%xmm2
movups 0x58(%rdx,%rsi,8),%xmm3
movups %xmm2,0x48(%rcx,%rsi,8)
movups %xmm3,0x58(%rcx,%rsi,8)
movupd 0x68(%rdx,%rsi,8),%xmm2
movupd 0x78(%rdx,%rsi,8),%xmm3
movupd %xmm2,0x68(%rcx,%rsi,8)
movupd %xmm3,0x78(%rcx,%rsi,8)
add    $0x10,%rsi
add    $0xfffffffffffffffc,%rax
jne    1560 <toeplitz+0x430>
test   $0x3,%r12b
je     15fc <toeplitz+0x4cc>
add    $0x1,%r14b
movzbl %r14b,%eax
and    $0x3,%eax
nop
lea    0x0(,%rsi,8),%rdi
or     $0x8,%rdi
movupd (%rdx,%rdi,1),%xmm2
movupd 0x10(%rdx,%rdi,1),%xmm3
movupd %xmm2,(%rcx,%rdi,1)
movupd %xmm3,0x10(%rcx,%rdi,1)
add    $0x4,%rsi
add    $0xffffffffffffffff,%rax
jne    15d0 <toeplitz+0x4a0>
cmp    %r13,%r9
mov    0x10(%rsp),%rbx
mov    0x40(%rsp),%r14
mov    0x38(%rsp),%r12
je     16a7 <toeplitz+0x577>
mov    %r13,%rsi
or     $0x1,%rsi
nopl   0x0(%rax,%rax,1)
mov    %r15d,%edi
sub    %esi,%edi
mov    %r9,%rax
sub    %rsi,%rax
test   $0x3,%dil
je     1820 <toeplitz+0x6f0>
mov    %r15d,%ebx
sub    %sil,%bl
movzbl %bl,%edi
and    $0x3,%edi
mov    0x10(%rsp),%rbx
cs nopw 0x0(%rax,%rax,1)
movsd  (%rdx,%rsi,8),%xmm2
movsd  %xmm2,(%rcx,%rsi,8)
add    $0x1,%rsi
add    $0xffffffffffffffff,%rdi
jne    1650 <toeplitz+0x520>
cmp    $0x3,%rax
jb     16a7 <toeplitz+0x577>
nopw   0x0(%rax,%rax,1)
movsd  (%rdx,%rsi,8),%xmm2
movsd  %xmm2,(%rcx,%rsi,8)
movsd  0x8(%rdx,%rsi,8),%xmm2
movsd  %xmm2,0x8(%rcx,%rsi,8)
movsd  0x10(%rdx,%rsi,8),%xmm2
movsd  %xmm2,0x10(%rcx,%rsi,8)
movsd  0x18(%rdx,%rsi,8),%xmm2
movsd  %xmm2,0x18(%rcx,%rsi,8)
add    $0x4,%rsi
cmp    %rsi,%r15
jne    1670 <toeplitz+0x540>
neg    %rbp
movsd  (%rbx,%r9,8),%xmm4
cmp    $0x3,%r10
jae    16d0 <toeplitz+0x5a0>
xor    %esi,%esi
test   $0x3,%r9b
jne    1734 <toeplitz+0x604>
jmp    176a <toeplitz+0x63a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x50(%rsp),%rax
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
movsd  0x8(%r8,%rsi,8),%xmm2
mulsd  -0x18(%rax),%xmm2
addsd  %xmm4,%xmm2
movsd  (%r8,%rsi,8),%xmm3
mulsd  -0x10(%rax),%xmm3
addsd  %xmm2,%xmm3
movsd  -0x8(%r8,%rsi,8),%xmm2
mulsd  -0x8(%rax),%xmm2
movsd  -0x10(%r8,%rsi,8),%xmm4
addsd  %xmm3,%xmm2
mulsd  (%rax),%xmm4
addsd  %xmm2,%xmm4
add    $0xfffffffffffffffc,%rsi
add    $0x20,%rax
cmp    %rsi,%rbp
jne    16e0 <toeplitz+0x5b0>
neg    %rsi
test   $0x3,%r9b
je     176a <toeplitz+0x63a>
mov    %r9d,%eax
and    $0x3,%eax
lea    (%rbx,%rsi,8),%rdi
shl    $0x3,%rsi
mov    %r11,%rbx
sub    %rsi,%rbx
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
movsd  (%rbx),%xmm2
mulsd  (%rdi,%rsi,8),%xmm2
addsd  %xmm2,%xmm4
add    $0x1,%rsi
add    $0xfffffffffffffff8,%rbx
cmp    %rsi,%rax
jne    1750 <toeplitz+0x620>
divsd  %xmm0,%xmm4
cmp    $0x4,%r9
jb     178e <toeplitz+0x65e>
cmp    %r14,0x60(%rsp)
jbe    1840 <toeplitz+0x710>
lea    (%r14,%r9,8),%rax
cmp    %rax,0x8(%rsp)
jae    1840 <toeplitz+0x710>
xor    %r13d,%r13d
mov    %r13,%rsi
test   $0x1,%r9b
je     17bc <toeplitz+0x68c>
mov    %r9,%rax
sub    %r13,%rax
movsd  (%rcx,%rax,8),%xmm2
mulsd  %xmm4,%xmm2
addsd  (%r14,%r13,8),%xmm2
movsd  %xmm2,(%r14,%r13,8)
mov    %r13,%rsi
or     $0x1,%rsi
cmp    %r13,%r10
je     12b0 <toeplitz+0x180>
mov    0x48(%rsp),%rax
lea    (%rax,%rsi,8),%rax
neg    %rsi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  0x8(%r8,%rsi,8),%xmm2
mulsd  %xmm4,%xmm2
addsd  -0x8(%rax),%xmm2
movsd  %xmm2,-0x8(%rax)
movsd  (%r8,%rsi,8),%xmm2
mulsd  %xmm4,%xmm2
addsd  (%rax),%xmm2
movsd  %xmm2,(%rax)
add    $0xfffffffffffffffe,%rsi
add    $0x10,%rax
mov    %r9,%rdi
add    %rsi,%rdi
jne    17e0 <toeplitz+0x6b0>
jmp    12b0 <toeplitz+0x180>
nopl   0x0(%rax)
mov    0x10(%rsp),%rbx
cmp    $0x3,%rax
jae    1670 <toeplitz+0x540>
jmp    16a7 <toeplitz+0x577>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movapd %xmm4,%xmm5
unpcklpd %xmm4,%xmm5
mov    0x30(%rsp),%rax
xor    %esi,%esi
nop
movupd -0x10(%r8,%rsi,8),%xmm2
movupd (%r8,%rsi,8),%xmm3
shufpd $0x1,%xmm3,%xmm3
shufpd $0x1,%xmm2,%xmm2
movupd -0x10(%rax),%xmm6
movupd (%rax),%xmm7
mulpd  %xmm5,%xmm3
addpd  %xmm6,%xmm3
mulpd  %xmm5,%xmm2
addpd  %xmm7,%xmm2
movupd %xmm3,-0x10(%rax)
movupd %xmm2,(%rax)
add    $0xfffffffffffffffc,%rsi
add    $0x20,%rax
cmp    %rsi,%rbp
jne    1850 <toeplitz+0x720>
cmp    %r13,%r9
je     12b0 <toeplitz+0x180>
jmp    1791 <toeplitz+0x661>
mov    $0xffffffff,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %eax,%eax
jmp    18a9 <toeplitz+0x779>

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

LLVM IR (-O2):
@toeplitz.c = internal unnamed_addr global double* null
@toeplitz.cc = internal unnamed_addr global double* null
@toeplitz.size = internal unnamed_addr global i32 0
define i32 @toeplitz(double* nocapture %0, double* nocapture %1, double* nocapture %2, i32 %3, double %4) {
%6 = load double*, double** @toeplitz.c
%7 = icmp eq double* %6, null
br i1 %7, label %13, label %8
8: ; preds = %5
%9 = load i32, i32* @toeplitz.size
%10 = icmp slt i32 %9, %3
br i1 %10, label %11, label %19
11: ; preds = %8
%12 = tail call i32 @free(double* %6)
br label %13
13: ; preds = %5, %11
%14 = shl nsw i32 %3, 1
%15 = add nsw i32 %14, 2
%16 = tail call double* @dgetmem(i32 %15)
store double* %16, double** @toeplitz.c
%17 = sext i32 %3 to i64
%18 = getelementptr inbounds double, double* %16, i64 %17
store double* %18, double** @toeplitz.cc
store i32 %3, i32* @toeplitz.size
br label %19
19: ; preds = %13, %8
%20 = phi double* [ %6, %8 ], [ %16, %13 ]
%21 = fcmp olt double %4, 0.000000e+00
%22 = select i1 %21, double 0x3EB0C6F7A0B5ED8D, double %4
%23 = add nsw i32 %3, 1
%24 = tail call i32 @fillz(double* %20, i32 8, i32 %23)
%25 = load double, double* %0
%26 = fcmp olt double %25, 0.000000e+00
%27 = fneg double %25
%28 = select i1 %26, double %27, double %25
%29 = fcmp ugt double %28, %22
br i1 %29, label %30, label %455
30: ; preds = %19
%31 = load double, double* %2
%32 = fdiv double %31, %25
store double %32, double* %1
%33 = icmp sgt i32 %3, 1
br i1 %33, label %34, label %455
34: ; preds = %30
%35 = load double*, double** @toeplitz.c
%36 = load double*, double** @toeplitz.cc
%37 = zext i32 %3 to i64
%38 = getelementptr double, double* %35, i64 1
%39 = getelementptr double, double* %35, i64 1
%40 = getelementptr double, double* %36, i64 1
%41 = getelementptr double, double* %36, i64 1
%42 = getelementptr double, double* %35, i64 1
br label %43
43: ; preds = %34, %449
%44 = phi i64 [ 0, %34 ], [ %454, %449 ]
%45 = phi i64 [ 1, %34 ], [ %451, %449 ]
%46 = phi i64 [ 2, %34 ], [ %452, %449 ]
%47 = phi double [ %25, %34 ], [ %190, %449 ]
%48 = and i64 %45, 9223372036854775804
%49 = add nsw i64 %48, -4
%50 = lshr exact i64 %49, 2
%51 = add nuw nsw i64 %50, 1
%52 = getelementptr double, double* %36, i64 %45
%53 = getelementptr double, double* %35, i64 %45
%54 = getelementptr double, double* %35, i64 %46
%55 = getelementptr double, double* %36, i64 %46
%56 = getelementptr double, double* %1, i64 %45
%57 = getelementptr double, double* %35, i64 %46
%58 = getelementptr inbounds double, double* %0, i64 %45
%59 = load double, double* %58
%60 = fneg double %59
%61 = icmp ugt i64 %45, 1
br i1 %61, label %62, label %67
62: ; preds = %43
%63 = and i64 %44, 1
%64 = icmp eq i64 %44, 1
br i1 %64, label %91, label %65
65: ; preds = %62
%66 = and i64 %44, -2
br label %69
67: ; preds = %43
%68 = fdiv double %60, %47
br label %185
69: ; preds = %69, %65
%70 = phi i64 [ 1, %65 ], [ %88, %69 ]
%71 = phi double [ %60, %65 ], [ %87, %69 ]
%72 = phi i64 [ 0, %65 ], [ %89, %69 ]
%73 = getelementptr inbounds double, double* %35, i64 %70
%74 = load double, double* %73
%75 = sub nsw i64 %45, %70
%76 = getelementptr inbounds double, double* %0, i64 %75
%77 = load double, double* %76
%78 = fneg double %74
%79 = tail call double @llvm.fmuladd.f64(double %78, double %77, double %71)
%80 = add nuw nsw i64 %70, 1
%81 = getelementptr inbounds double, double* %35, i64 %80
%82 = load double, double* %81
%83 = sub nsw i64 %45, %80
%84 = getelementptr inbounds double, double* %0, i64 %83
%85 = load double, double* %84
%86 = fneg double %82
%87 = tail call double @llvm.fmuladd.f64(double %86, double %85, double %79)
%88 = add nuw nsw i64 %70, 2
%89 = add i64 %72, 2
%90 = icmp eq i64 %89, %66
br i1 %90, label %91, label %69
91: ; preds = %69, %62
%92 = phi double [ undef, %62 ], [ %87, %69 ]
%93 = phi i64 [ 1, %62 ], [ %88, %69 ]
%94 = phi double [ %60, %62 ], [ %87, %69 ]
%95 = icmp eq i64 %63, 0
br i1 %95, label %104, label %96
96: ; preds = %91
%97 = getelementptr inbounds double, double* %35, i64 %93
%98 = load double, double* %97
%99 = sub nsw i64 %45, %93
%100 = getelementptr inbounds double, double* %0, i64 %99
%101 = load double, double* %100
%102 = fneg double %98
%103 = tail call double @llvm.fmuladd.f64(double %102, double %101, double %94)
br label %104
104: ; preds = %91, %96
%105 = phi double [ %92, %91 ], [ %103, %96 ]
%106 = fdiv double %105, %47
br i1 %61, label %107, label %185
107: ; preds = %104
%108 = icmp ult i64 %44, 4
br i1 %108, label %150, label %109
109: ; preds = %107
%110 = icmp ult double* %41, %53
%111 = icmp ult double* %42, %52
%112 = and i1 %110, %111
br i1 %112, label %150, label %113
113: ; preds = %109
%114 = and i64 %44, -4
%115 = or i64 %114, 1
%116 = insertelement <2 x double> poison, double %106, i64 0
%117 = shufflevector <2 x double> %116, <2 x double> poison, <2 x i32> zeroinitializer
%118 = insertelement <2 x double> poison, double %106, i64 0
%119 = shufflevector <2 x double> %118, <2 x double> poison, <2 x i32> zeroinitializer
br label %120
120: ; preds = %120, %113
%121 = phi i64 [ 0, %113 ], [ %146, %120 ]
%122 = or i64 %121, 1
%123 = getelementptr inbounds double, double* %35, i64 %122
%124 = bitcast double* %123 to <2 x double>*
%125 = load <2 x double>, <2 x double>* %124
%126 = getelementptr inbounds double, double* %123, i64 2
%127 = bitcast double* %126 to <2 x double>*
%128 = load <2 x double>, <2 x double>* %127
%129 = sub nsw i64 %45, %122
%130 = getelementptr inbounds double, double* %35, i64 %129
%131 = getelementptr inbounds double, double* %130, i64 -1
%132 = bitcast double* %131 to <2 x double>*
%133 = load <2 x double>, <2 x double>* %132
%134 = shufflevector <2 x double> %133, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%135 = getelementptr inbounds double, double* %130, i64 -2
%136 = getelementptr inbounds double, double* %135, i64 -1
%137 = bitcast double* %136 to <2 x double>*
%138 = load <2 x double>, <2 x double>* %137
%139 = shufflevector <2 x double> %138, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%140 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %117, <2 x double> %134, <2 x double> %125)
%141 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %119, <2 x double> %139, <2 x double> %128)
%142 = getelementptr inbounds double, double* %36, i64 %122
%143 = bitcast double* %142 to <2 x double>*
store <2 x double> %140, <2 x double>* %143
%144 = getelementptr inbounds double, double* %142, i64 2
%145 = bitcast double* %144 to <2 x double>*
store <2 x double> %141, <2 x double>* %145
%146 = add nuw i64 %121, 4
%147 = icmp eq i64 %146, %114
br i1 %147, label %148, label %120
148: ; preds = %120
%149 = icmp eq i64 %44, %114
br i1 %149, label %185, label %150
150: ; preds = %109, %107, %148
%151 = phi i64 [ 1, %109 ], [ 1, %107 ], [ %115, %148 ]
%152 = and i64 %45, 1
%153 = icmp eq i64 %152, 0
br i1 %153, label %154, label %163
154: ; preds = %150
%155 = getelementptr inbounds double, double* %35, i64 %151
%156 = load double, double* %155
%157 = sub nsw i64 %45, %151
%158 = getelementptr inbounds double, double* %35, i64 %157
%159 = load double, double* %158
%160 = tail call double @llvm.fmuladd.f64(double %106, double %159, double %156)
%161 = getelementptr inbounds double, double* %36, i64 %151
store double %160, double* %161
%162 = add nuw nsw i64 %151, 1
br label %163
163: ; preds = %154, %150
%164 = phi i64 [ %151, %150 ], [ %162, %154 ]
%165 = icmp eq i64 %44, %151
br i1 %165, label %185, label %166
166: ; preds = %163, %166
%167 = phi i64 [ %183, %166 ], [ %164, %163 ]
%168 = getelementptr inbounds double, double* %35, i64 %167
%169 = load double, double* %168
%170 = sub nsw i64 %45, %167
%171 = getelementptr inbounds double, double* %35, i64 %170
%172 = load double, double* %171
%173 = tail call double @llvm.fmuladd.f64(double %106, double %172, double %169)
%174 = getelementptr inbounds double, double* %36, i64 %167
store double %173, double* %174
%175 = add nuw nsw i64 %167, 1
%176 = getelementptr inbounds double, double* %35, i64 %175
%177 = load double, double* %176
%178 = sub nsw i64 %45, %175
%179 = getelementptr inbounds double, double* %35, i64 %178
%180 = load double, double* %179
%181 = tail call double @llvm.fmuladd.f64(double %106, double %180, double %177)
%182 = getelementptr inbounds double, double* %36, i64 %175
store double %181, double* %182
%183 = add nuw nsw i64 %167, 2
%184 = icmp eq i64 %183, %45
br i1 %184, label %185, label %166
185: ; preds = %163, %166, %148, %67, %104
%186 = phi double [ %68, %67 ], [ %106, %104 ], [ %106, %148 ], [ %106, %166 ], [ %106, %163 ]
%187 = getelementptr inbounds double, double* %36, i64 %45
store double %186, double* %187
%188 = fneg double %186
%189 = tail call double @llvm.fmuladd.f64(double %188, double %186, double 1.000000e+00)
%190 = fmul double %47, %189
%191 = fcmp olt double %190, 0.000000e+00
%192 = fneg double %190
%193 = select i1 %191, double %192, double %190
%194 = fcmp ugt double %193, %22
br i1 %194, label %195, label %455
195: ; preds = %185
%196 = icmp ult i64 %45, 4
br i1 %196, label %280, label %197
197: ; preds = %195
%198 = icmp ult double* %39, %55
%199 = icmp ult double* %40, %54
%200 = and i1 %198, %199
br i1 %200, label %280, label %201
201: ; preds = %197
%202 = and i64 %45, 9223372036854775804
%203 = or i64 %202, 1
%204 = and i64 %51, 3
%205 = icmp ult i64 %49, 12
br i1 %205, label %258, label %206
206: ; preds = %201
%207 = and i64 %51, 9223372036854775804
br label %208
208: ; preds = %208, %206
%209 = phi i64 [ 0, %206 ], [ %255, %208 ]
%210 = phi i64 [ 0, %206 ], [ %256, %208 ]
%211 = or i64 %209, 1
%212 = getelementptr inbounds double, double* %36, i64 %211
%213 = bitcast double* %212 to <2 x double>*
%214 = load <2 x double>, <2 x double>* %213
%215 = getelementptr inbounds double, double* %212, i64 2
%216 = bitcast double* %215 to <2 x double>*
%217 = load <2 x double>, <2 x double>* %216
%218 = getelementptr inbounds double, double* %35, i64 %211
%219 = bitcast double* %218 to <2 x double>*
store <2 x double> %214, <2 x double>* %219
%220 = getelementptr inbounds double, double* %218, i64 2
%221 = bitcast double* %220 to <2 x double>*
store <2 x double> %217, <2 x double>* %221
%222 = or i64 %209, 5
%223 = getelementptr inbounds double, double* %36, i64 %222
%224 = bitcast double* %223 to <2 x double>*
%225 = load <2 x double>, <2 x double>* %224
%226 = getelementptr inbounds double, double* %223, i64 2
%227 = bitcast double* %226 to <2 x double>*
%228 = load <2 x double>, <2 x double>* %227
%229 = getelementptr inbounds double, double* %35, i64 %222
%230 = bitcast double* %229 to <2 x double>*
store <2 x double> %225, <2 x double>* %230
%231 = getelementptr inbounds double, double* %229, i64 2
%232 = bitcast double* %231 to <2 x double>*
store <2 x double> %228, <2 x double>* %232
%233 = or i64 %209, 9
%234 = getelementptr inbounds double, double* %36, i64 %233
%235 = bitcast double* %234 to <2 x double>*
%236 = load <2 x double>, <2 x double>* %235
%237 = getelementptr inbounds double, double* %234, i64 2
%238 = bitcast double* %237 to <2 x double>*
%239 = load <2 x double>, <2 x double>* %238
%240 = getelementptr inbounds double, double* %35, i64 %233
%241 = bitcast double* %240 to <2 x double>*
store <2 x double> %236, <2 x double>* %241
%242 = getelementptr inbounds double, double* %240, i64 2
%243 = bitcast double* %242 to <2 x double>*
store <2 x double> %239, <2 x double>* %243
%244 = or i64 %209, 13
%245 = getelementptr inbounds double, double* %36, i64 %244
%246 = bitcast double* %245 to <2 x double>*
%247 = load <2 x double>, <2 x double>* %246
%248 = getelementptr inbounds double, double* %245, i64 2
%249 = bitcast double* %248 to <2 x double>*
%250 = load <2 x double>, <2 x double>* %249
%251 = getelementptr inbounds double, double* %35, i64 %244
%252 = bitcast double* %251 to <2 x double>*
store <2 x double> %247, <2 x double>* %252
%253 = getelementptr inbounds double, double* %251, i64 2
%254 = bitcast double* %253 to <2 x double>*
store <2 x double> %250, <2 x double>* %254
%255 = add nuw i64 %209, 16
%256 = add nuw i64 %210, 4
%257 = icmp eq i64 %256, %207
br i1 %257, label %258, label %208
258: ; preds = %208, %201
%259 = phi i64 [ 0, %201 ], [ %255, %208 ]
%260 = icmp eq i64 %204, 0
br i1 %260, label %278, label %261
261: ; preds = %258, %261
%262 = phi i64 [ %275, %261 ], [ %259, %258 ]
%263 = phi i64 [ %276, %261 ], [ 0, %258 ]
%264 = or i64 %262, 1
%265 = getelementptr inbounds double, double* %36, i64 %264
%266 = bitcast double* %265 to <2 x double>*
%267 = load <2 x double>, <2 x double>* %266
%268 = getelementptr inbounds double, double* %265, i64 2
%269 = bitcast double* %268 to <2 x double>*
%270 = load <2 x double>, <2 x double>* %269
%271 = getelementptr inbounds double, double* %35, i64 %264
%272 = bitcast double* %271 to <2 x double>*
store <2 x double> %267, <2 x double>* %272
%273 = getelementptr inbounds double, double* %271, i64 2
%274 = bitcast double* %273 to <2 x double>*
store <2 x double> %270, <2 x double>* %274
%275 = add nuw i64 %262, 4
%276 = add i64 %263, 1
%277 = icmp eq i64 %276, %204
br i1 %277, label %278, label %261
278: ; preds = %261, %258
%279 = icmp eq i64 %45, %202
br i1 %279, label %317, label %280
280: ; preds = %197, %195, %278
%281 = phi i64 [ 1, %197 ], [ 1, %195 ], [ %203, %278 ]
%282 = sub i64 %46, %281
%283 = sub i64 %45, %281
%284 = and i64 %282, 3
%285 = icmp eq i64 %284, 0
br i1 %285, label %295, label %286
286: ; preds = %280, %286
%287 = phi i64 [ %292, %286 ], [ %281, %280 ]
%288 = phi i64 [ %293, %286 ], [ 0, %280 ]
%289 = getelementptr inbounds double, double* %36, i64 %287
%290 = load double, double* %289
%291 = getelementptr inbounds double, double* %35, i64 %287
store double %290, double* %291
%292 = add nuw nsw i64 %287, 1
%293 = add i64 %288, 1
%294 = icmp eq i64 %293, %284
br i1 %294, label %295, label %286
295: ; preds = %286, %280
%296 = phi i64 [ %281, %280 ], [ %292, %286 ]
%297 = icmp ult i64 %283, 3
br i1 %297, label %317, label %298
298: ; preds = %295, %298
%299 = phi i64 [ %315, %298 ], [ %296, %295 ]
%300 = getelementptr inbounds double, double* %36, i64 %299
%301 = load double, double* %300
%302 = getelementptr inbounds double, double* %35, i64 %299
store double %301, double* %302
%303 = add nuw nsw i64 %299, 1
%304 = getelementptr inbounds double, double* %36, i64 %303
%305 = load double, double* %304
%306 = getelementptr inbounds double, double* %35, i64 %303
store double %305, double* %306
%307 = add nuw nsw i64 %299, 2
%308 = getelementptr inbounds double, double* %36, i64 %307
%309 = load double, double* %308
%310 = getelementptr inbounds double, double* %35, i64 %307
store double %309, double* %310
%311 = add nuw nsw i64 %299, 3
%312 = getelementptr inbounds double, double* %36, i64 %311
%313 = load double, double* %312
%314 = getelementptr inbounds double, double* %35, i64 %311
store double %313, double* %314
%315 = add nuw nsw i64 %299, 4
%316 = icmp eq i64 %315, %46
br i1 %316, label %317, label %298
317: ; preds = %295, %298, %278
%318 = getelementptr inbounds double, double* %2, i64 %45
%319 = load double, double* %318
%320 = and i64 %45, 3
%321 = icmp ult i64 %44, 3
br i1 %321, label %358, label %322
322: ; preds = %317
%323 = and i64 %45, 9223372036854775804
br label %324
324: ; preds = %324, %322
%325 = phi i64 [ 0, %322 ], [ %355, %324 ]
%326 = phi double [ %319, %322 ], [ %354, %324 ]
%327 = phi i64 [ 0, %322 ], [ %356, %324 ]
%328 = sub nsw i64 %45, %325
%329 = getelementptr inbounds double, double* %35, i64 %328
%330 = load double, double* %329
%331 = getelementptr inbounds double, double* %2, i64 %325
%332 = load double, double* %331
%333 = tail call double @llvm.fmuladd.f64(double %330, double %332, double %326)
%334 = or i64 %325, 1
%335 = sub nsw i64 %45, %334
%336 = getelementptr inbounds double, double* %35, i64 %335
%337 = load double, double* %336
%338 = getelementptr inbounds double, double* %2, i64 %334
%339 = load double, double* %338
%340 = tail call double @llvm.fmuladd.f64(double %337, double %339, double %333)
%341 = or i64 %325, 2
%342 = sub nsw i64 %45, %341
%343 = getelementptr inbounds double, double* %35, i64 %342
%344 = load double, double* %343
%345 = getelementptr inbounds double, double* %2, i64 %341
%346 = load double, double* %345
%347 = tail call double @llvm.fmuladd.f64(double %344, double %346, double %340)
%348 = or i64 %325, 3
%349 = sub nsw i64 %45, %348
%350 = getelementptr inbounds double, double* %35, i64 %349
%351 = load double, double* %350
%352 = getelementptr inbounds double, double* %2, i64 %348
%353 = load double, double* %352
%354 = tail call double @llvm.fmuladd.f64(double %351, double %353, double %347)
%355 = add nuw nsw i64 %325, 4
%356 = add i64 %327, 4
%357 = icmp eq i64 %356, %323
br i1 %357, label %358, label %324
358: ; preds = %324, %317
%359 = phi double [ undef, %317 ], [ %354, %324 ]
%360 = phi i64 [ 0, %317 ], [ %355, %324 ]
%361 = phi double [ %319, %317 ], [ %354, %324 ]
%362 = icmp eq i64 %320, 0
br i1 %362, label %376, label %363
363: ; preds = %358, %363
%364 = phi i64 [ %373, %363 ], [ %360, %358 ]
%365 = phi double [ %372, %363 ], [ %361, %358 ]
%366 = phi i64 [ %374, %363 ], [ 0, %358 ]
%367 = sub nsw i64 %45, %364
%368 = getelementptr inbounds double, double* %35, i64 %367
%369 = load double, double* %368
%370 = getelementptr inbounds double, double* %2, i64 %364
%371 = load double, double* %370
%372 = tail call double @llvm.fmuladd.f64(double %369, double %371, double %365)
%373 = add nuw nsw i64 %364, 1
%374 = add i64 %366, 1
%375 = icmp eq i64 %374, %320
br i1 %375, label %376, label %363
376: ; preds = %363, %358
%377 = phi double [ %359, %358 ], [ %372, %363 ]
%378 = fdiv double %377, %190
%379 = icmp ult i64 %45, 4
br i1 %379, label %417, label %380
380: ; preds = %376
%381 = icmp ugt double* %57, %1
%382 = icmp ult double* %38, %56
%383 = and i1 %381, %382
br i1 %383, label %417, label %384
384: ; preds = %380
%385 = and i64 %45, 9223372036854775804
%386 = insertelement <2 x double> poison, double %378, i64 0
%387 = shufflevector <2 x double> %386, <2 x double> poison, <2 x i32> zeroinitializer
%388 = insertelement <2 x double> poison, double %378, i64 0
%389 = shufflevector <2 x double> %388, <2 x double> poison, <2 x i32> zeroinitializer
br label %390
390: ; preds = %390, %384
%391 = phi i64 [ 0, %384 ], [ %413, %390 ]
%392 = sub nsw i64 %45, %391
%393 = getelementptr inbounds double, double* %35, i64 %392
%394 = getelementptr inbounds double, double* %393, i64 -1
%395 = bitcast double* %394 to <2 x double>*
%396 = load <2 x double>, <2 x double>* %395
%397 = shufflevector <2 x double> %396, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%398 = getelementptr inbounds double, double* %393, i64 -2
%399 = getelementptr inbounds double, double* %398, i64 -1
%400 = bitcast double* %399 to <2 x double>*
%401 = load <2 x double>, <2 x double>* %400
%402 = shufflevector <2 x double> %401, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%403 = getelementptr inbounds double, double* %1, i64 %391
%404 = bitcast double* %403 to <2 x double>*
%405 = load <2 x double>, <2 x double>* %404
%406 = getelementptr inbounds double, double* %403, i64 2
%407 = bitcast double* %406 to <2 x double>*
%408 = load <2 x double>, <2 x double>* %407
%409 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %387, <2 x double> %397, <2 x double> %405)
%410 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %389, <2 x double> %402, <2 x double> %408)
%411 = bitcast double* %403 to <2 x double>*
store <2 x double> %409, <2 x double>* %411
%412 = bitcast double* %406 to <2 x double>*
store <2 x double> %410, <2 x double>* %412
%413 = add nuw i64 %391, 4
%414 = icmp eq i64 %413, %385
br i1 %414, label %415, label %390
415: ; preds = %390
%416 = icmp eq i64 %45, %385
br i1 %416, label %449, label %417
417: ; preds = %380, %376, %415
%418 = phi i64 [ 0, %380 ], [ 0, %376 ], [ %385, %415 ]
%419 = and i64 %45, 1
%420 = icmp eq i64 %419, 0
br i1 %420, label %429, label %421
421: ; preds = %417
%422 = sub nsw i64 %45, %418
%423 = getelementptr inbounds double, double* %35, i64 %422
%424 = load double, double* %423
%425 = getelementptr inbounds double, double* %1, i64 %418
%426 = load double, double* %425
%427 = tail call double @llvm.fmuladd.f64(double %378, double %424, double %426)
store double %427, double* %425
%428 = or i64 %418, 1
br label %429
429: ; preds = %421, %417
%430 = phi i64 [ %418, %417 ], [ %428, %421 ]
%431 = icmp eq i64 %44, %418
br i1 %431, label %449, label %432
432: ; preds = %429, %432
%433 = phi i64 [ %447, %432 ], [ %430, %429 ]
%434 = sub nsw i64 %45, %433
%435 = getelementptr inbounds double, double* %35, i64 %434
%436 = load double, double* %435
%437 = getelementptr inbounds double, double* %1, i64 %433
%438 = load double, double* %437
%439 = tail call double @llvm.fmuladd.f64(double %378, double %436, double %438)
store double %439, double* %437
%440 = add nuw nsw i64 %433, 1
%441 = sub nsw i64 %45, %440
%442 = getelementptr inbounds double, double* %35, i64 %441
%443 = load double, double* %442
%444 = getelementptr inbounds double, double* %1, i64 %440
%445 = load double, double* %444
%446 = tail call double @llvm.fmuladd.f64(double %378, double %443, double %445)
store double %446, double* %444
%447 = add nuw nsw i64 %433, 2
%448 = icmp eq i64 %447, %45
br i1 %448, label %449, label %432
449: ; preds = %429, %432, %415
%450 = getelementptr inbounds double, double* %1, i64 %45
store double %378, double* %450
%451 = add nuw nsw i64 %45, 1
%452 = add nuw nsw i64 %46, 1
%453 = icmp eq i64 %451, %37
%454 = add i64 %44, 1
br i1 %453, label %455, label %43
455: ; preds = %185, %449, %30, %19
%456 = phi i32 [ -1, %19 ], [ 0, %30 ], [ -1, %185 ], [ 0, %449 ]
ret i32 %456
}