int supportSet(double *x, double *v, double *z, double *g, int *S,
               double lambda, int nn) {
  int i, j, n = nn + 1, numS = 0;
  double temp;
  for (i = 0; i < nn; i++) {
    if (((z[i] == lambda) && (g[i] < 1e-10)) ||
        ((z[i] == -lambda) && (g[i] > 1e-10))) {
      S[numS] = i;
      numS++;
    }
  }
  if (numS == 0) {
    temp = 0;
    for (i = 0; i < n; i++)
      temp += v[i];
    temp = temp / n;
    for (i = 0; i < n; i++)
      x[i] = temp;
    return numS;
  }
  temp = 0;
  for (i = 0; i <= S[0]; i++)
    temp += v[i];
  temp = (temp + z[S[0]]) / (S[0] + 1);
  for (i = 0; i <= S[0]; i++)
    x[i] = temp;
  for (j = 1; j < numS; j++) {
    temp = 0;
    for (i = S[j - 1] + 1; i <= S[j]; i++) {
      temp += v[i];
    }
    temp = (temp - z[S[j - 1]] + z[S[j]]) / (S[j] - S[j - 1]);
    for (i = S[j - 1] + 1; i <= S[j]; i++) {
      x[i] = temp;
    }
  }
  temp = 0;
  for (i = S[numS - 1] + 1; i < n; i++)
    temp += v[i];
  temp = (temp - z[S[numS - 1]]) / (nn - S[numS - 1]);
  for (i = S[numS - 1] + 1; i < n; i++)
    x[i] = temp;
  return numS;
}


x86 assembly (clang, -O0):
<supportSet>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
movsd  %xmm0,-0x38(%rbp)
mov    %r9d,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    11ff <supportSet+0xff>
mov    -0x20(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x38(%rbp),%xmm0
jne    117d <supportSet+0x7d>
jp     117d <supportSet+0x7d>
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  0xe8e(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
ja     11d5 <supportSet+0xd5>
mov    -0x20(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
ucomisd %xmm1,%xmm0
jne    11ec <supportSet+0xec>
jp     11ec <supportSet+0xec>
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe35(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11ec <supportSet+0xec>
mov    -0x40(%rbp),%edx
mov    -0x30(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    11f1 <supportSet+0xf1>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1138 <supportSet+0x38>
cmpl   $0x0,-0x4c(%rbp)
jne    129a <supportSet+0x19a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1249 <supportSet+0x149>
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1218 <supportSet+0x118>
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    128f <supportSet+0x18f>
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1263 <supportSet+0x163>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1537 <supportSet+0x437>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x30(%rbp),%rcx
cmp    (%rcx),%eax
jg     12dd <supportSet+0x1dd>
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    12a9 <supportSet+0x1a9>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x30(%rbp),%rcx
cmp    (%rcx),%eax
jg     133e <supportSet+0x23e>
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    130f <supportSet+0x20f>
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    1461 <supportSet+0x361>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x30(%rbp),%rcx
movslq -0x44(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jg     13a8 <supportSet+0x2a8>
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    136f <supportSet+0x26f>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    -0x44(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq -0x44(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x30(%rbp),%rcx
mov    -0x44(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
sub    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x30(%rbp),%rcx
movslq -0x44(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jg     144e <supportSet+0x34e>
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    141a <supportSet+0x31a>
jmp    1453 <supportSet+0x353>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1345 <supportSet+0x245>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    14b0 <supportSet+0x3b0>
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    147f <supportSet+0x37f>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x3c(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
sub    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1531 <supportSet+0x431>
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1505 <supportSet+0x405>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<supportSet>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %r9d,%r9d
jle    11af <supportSet+0xaf>
mov    %r8,%r13
mov    %r9d,%r10d
movapd 0xedf(%rip),%xmm1
xorpd  %xmm0,%xmm1
xor    %ebp,%ebp
movsd  0xee1(%rip),%xmm2
xor    %eax,%eax
jmp    1153 <supportSet+0x53>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cltq
mov    %ebp,0x0(%r13,%rax,4)
add    $0x1,%eax
add    $0x1,%rbp
cmp    %rbp,%r10
je     117c <supportSet+0x7c>
movsd  (%rdx,%rbp,8),%xmm3
ucomisd %xmm0,%xmm3
jne    1167 <supportSet+0x67>
jp     1167 <supportSet+0x67>
ucomisd (%rcx,%rbp,8),%xmm2
ja     1140 <supportSet+0x40>
ucomisd %xmm1,%xmm3
jne    114a <supportSet+0x4a>
jp     114a <supportSet+0x4a>
movsd  (%rcx,%rbp,8),%xmm3
ucomisd %xmm2,%xmm3
ja     1140 <supportSet+0x40>
jmp    114a <supportSet+0x4a>
test   %eax,%eax
je     11af <supportSet+0xaf>
movslq 0x0(%r13),%r8
test   %r8,%r8
js     150e <supportSet+0x40e>
mov    %r8d,%ebp
lea    0x1(%rbp),%r11
mov    %r11d,%ecx
and    $0x7,%ecx
cmp    $0x7,%rbp
jae    1262 <supportSet+0x162>
xorpd  %xmm0,%xmm0
xor    %ebp,%ebp
jmp    12a8 <supportSet+0x1a8>
test   %r9d,%r9d
js     142e <supportSet+0x32e>
lea    0x1(%r9),%eax
mov    %eax,%ebx
lea    -0x1(%rbx),%rcx
mov    %ebx,%edx
and    $0x7,%edx
cmp    $0x7,%rcx
jae    11d5 <supportSet+0xd5>
xorpd  %xmm0,%xmm0
xor    %ebp,%ebp
jmp    1218 <supportSet+0x118>
mov    %ebx,%ecx
and    $0xfffffff8,%ecx
xorpd  %xmm0,%xmm0
xor    %ebp,%ebp
addsd  (%rsi,%rbp,8),%xmm0
addsd  0x8(%rsi,%rbp,8),%xmm0
addsd  0x10(%rsi,%rbp,8),%xmm0
addsd  0x18(%rsi,%rbp,8),%xmm0
addsd  0x20(%rsi,%rbp,8),%xmm0
addsd  0x28(%rsi,%rbp,8),%xmm0
addsd  0x30(%rsi,%rbp,8),%xmm0
addsd  0x38(%rsi,%rbp,8),%xmm0
add    $0x8,%rbp
cmp    %rbp,%rcx
jne    11e0 <supportSet+0xe0>
test   %rdx,%rdx
je     123e <supportSet+0x13e>
lea    (%rsi,%rbp,8),%rcx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addsd  (%rcx,%rsi,8),%xmm0
add    $0x1,%rsi
cmp    %rsi,%rdx
jne    1230 <supportSet+0x130>
test   %r9d,%r9d
js     142e <supportSet+0x32e>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
cmp    $0x4,%eax
jae    12f7 <supportSet+0x1f7>
xor    %edx,%edx
jmp    1420 <supportSet+0x320>
mov    %r11d,%ebx
and    $0xfffffff8,%ebx
xorpd  %xmm0,%xmm0
xor    %ebp,%ebp
xchg   %ax,%ax
addsd  (%rsi,%rbp,8),%xmm0
addsd  0x8(%rsi,%rbp,8),%xmm0
addsd  0x10(%rsi,%rbp,8),%xmm0
addsd  0x18(%rsi,%rbp,8),%xmm0
addsd  0x20(%rsi,%rbp,8),%xmm0
addsd  0x28(%rsi,%rbp,8),%xmm0
addsd  0x30(%rsi,%rbp,8),%xmm0
addsd  0x38(%rsi,%rbp,8),%xmm0
add    $0x8,%rbp
cmp    %rbp,%rbx
jne    1270 <supportSet+0x170>
test   %rcx,%rcx
je     12cf <supportSet+0x1cf>
lea    (%rsi,%rbp,8),%rbp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addsd  0x0(%rbp,%rbx,8),%xmm0
add    $0x1,%rbx
cmp    %rbx,%rcx
jne    12c0 <supportSet+0x1c0>
test   %r8d,%r8d
js     150e <supportSet+0x40e>
addsd  (%rdx,%r8,8),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r11d,%xmm1
divsd  %xmm1,%xmm0
cmp    $0x3,%r8d
jae    1325 <supportSet+0x225>
xor    %ecx,%ecx
jmp    1500 <supportSet+0x400>
mov    %ebx,%edx
and    $0xfffffffc,%edx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rdx),%rcx
mov    %rcx,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%eax
and    $0x7,%eax
cmp    $0x1c,%rcx
jae    135a <supportSet+0x25a>
xor    %ebp,%ebp
jmp    13e5 <supportSet+0x2e5>
mov    %r11d,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rcx),%rbx
mov    %rbx,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
mov    %ebp,%r14d
and    $0x7,%r14d
cmp    $0x1c,%rbx
jae    1435 <supportSet+0x335>
xor    %ebx,%ebx
jmp    14c5 <supportSet+0x3c5>
and    $0xfffffffffffffff8,%rsi
xor    %ebp,%ebp
movupd %xmm1,(%rdi,%rbp,8)
movupd %xmm1,0x10(%rdi,%rbp,8)
movupd %xmm1,0x20(%rdi,%rbp,8)
movupd %xmm1,0x30(%rdi,%rbp,8)
movupd %xmm1,0x40(%rdi,%rbp,8)
movupd %xmm1,0x50(%rdi,%rbp,8)
movupd %xmm1,0x60(%rdi,%rbp,8)
movupd %xmm1,0x70(%rdi,%rbp,8)
movupd %xmm1,0x80(%rdi,%rbp,8)
movupd %xmm1,0x90(%rdi,%rbp,8)
movupd %xmm1,0xa0(%rdi,%rbp,8)
movupd %xmm1,0xb0(%rdi,%rbp,8)
movupd %xmm1,0xc0(%rdi,%rbp,8)
movupd %xmm1,0xd0(%rdi,%rbp,8)
movupd %xmm1,0xe0(%rdi,%rbp,8)
movupd %xmm1,0xf0(%rdi,%rbp,8)
add    $0x20,%rbp
add    $0xfffffffffffffff8,%rsi
jne    1360 <supportSet+0x260>
test   %rax,%rax
je     1414 <supportSet+0x314>
lea    (%rdi,%rbp,8),%rcx
add    $0x10,%rcx
shl    $0x5,%rax
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movupd %xmm1,-0x10(%rcx,%rsi,1)
movupd %xmm1,(%rcx,%rsi,1)
add    $0x20,%rsi
cmp    %rsi,%rax
jne    1400 <supportSet+0x300>
xor    %eax,%eax
cmp    %rbx,%rdx
je     189f <supportSet+0x79f>
nop
movsd  %xmm0,(%rdi,%rdx,8)
add    $0x1,%rdx
cmp    %rdx,%rbx
jne    1420 <supportSet+0x320>
xor    %eax,%eax
jmp    189f <supportSet+0x79f>
and    $0xfffffffffffffff8,%rbp
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movupd %xmm1,(%rdi,%rbx,8)
movupd %xmm1,0x10(%rdi,%rbx,8)
movupd %xmm1,0x20(%rdi,%rbx,8)
movupd %xmm1,0x30(%rdi,%rbx,8)
movupd %xmm1,0x40(%rdi,%rbx,8)
movupd %xmm1,0x50(%rdi,%rbx,8)
movupd %xmm1,0x60(%rdi,%rbx,8)
movupd %xmm1,0x70(%rdi,%rbx,8)
movupd %xmm1,0x80(%rdi,%rbx,8)
movupd %xmm1,0x90(%rdi,%rbx,8)
movupd %xmm1,0xa0(%rdi,%rbx,8)
movupd %xmm1,0xb0(%rdi,%rbx,8)
movupd %xmm1,0xc0(%rdi,%rbx,8)
movupd %xmm1,0xd0(%rdi,%rbx,8)
movupd %xmm1,0xe0(%rdi,%rbx,8)
movupd %xmm1,0xf0(%rdi,%rbx,8)
add    $0x20,%rbx
add    $0xfffffffffffffff8,%rbp
jne    1440 <supportSet+0x340>
test   %r14,%r14
je     14f5 <supportSet+0x3f5>
lea    (%rdi,%rbx,8),%rbp
add    $0x10,%rbp
shl    $0x5,%r14
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movupd %xmm1,-0x10(%rbp,%rbx,1)
movupd %xmm1,0x0(%rbp,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r14
jne    14e0 <supportSet+0x3e0>
cmp    %r11,%rcx
je     150e <supportSet+0x40e>
nopw   0x0(%rax,%rax,1)
movsd  %xmm0,(%rdi,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%r11
jne    1500 <supportSet+0x400>
mov    %r10,-0x30(%rsp)
mov    %r9,-0x38(%rsp)
cmp    $0x2,%eax
jl     1715 <supportSet+0x615>
movabs $0x7ffffffffffffff8,%rcx
ff ff 7f
mov    %eax,%r9d
lea    0x78(%rdi),%rbp
mov    %rbp,-0x28(%rsp)
lea    0x18(%rdi),%rbp
mov    %rbp,-0x18(%rsp)
mov    $0x1,%r12d
add    $0x4,%rcx
mov    %rcx,-0x20(%rsp)
mov    %r9,-0x10(%rsp)
mov    %rdx,-0x8(%rsp)
jmp    156d <supportSet+0x46d>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12
cmp    %r9,%r12
je     1715 <supportSet+0x615>
mov    %r8d,%r14d
mov    0x0(%r13,%r12,4),%r8d
mov    %r8d,%ebx
movslq %r14d,%r11
movslq %r8d,%rbp
xorpd  %xmm0,%xmm0
sub    %r14d,%ebx
jle    15f9 <supportSet+0x4f9>
mov    %r11,%r15
not    %r15
add    %rbp,%r15
xorpd  %xmm0,%xmm0
mov    %r11,%rcx
and    $0x7,%rbx
je     15b0 <supportSet+0x4b0>
nopl   (%rax)
addsd  0x8(%rsi,%rcx,8),%xmm0
add    $0x1,%rcx
add    $0xffffffffffffffff,%rbx
jne    15a0 <supportSet+0x4a0>
cmp    $0x7,%r15
jb     15f9 <supportSet+0x4f9>
cs nopw 0x0(%rax,%rax,1)
addsd  0x8(%rsi,%rcx,8),%xmm0
addsd  0x10(%rsi,%rcx,8),%xmm0
addsd  0x18(%rsi,%rcx,8),%xmm0
addsd  0x20(%rsi,%rcx,8),%xmm0
addsd  0x28(%rsi,%rcx,8),%xmm0
addsd  0x30(%rsi,%rcx,8),%xmm0
addsd  0x38(%rsi,%rcx,8),%xmm0
addsd  0x40(%rsi,%rcx,8),%xmm0
add    $0x8,%rcx
cmp    %rcx,%rbp
jne    15c0 <supportSet+0x4c0>
mov    %r8d,%ecx
sub    %r14d,%ecx
jle    1560 <supportSet+0x460>
subsd  (%rdx,%r11,8),%xmm0
addsd  (%rdx,%rbp,8),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
divsd  %xmm1,%xmm0
mov    %rbp,%r14
sub    %r11,%r14
cmp    $0x4,%r14
jb     1700 <supportSet+0x600>
mov    %r13,%rdx
mov    %r14,%r15
and    $0xfffffffffffffffc,%r15
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%r15),%rcx
mov    %rcx,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
mov    %ebx,%r13d
and    $0x3,%r13d
cmp    $0xc,%rcx
jae    165e <supportSet+0x55e>
xor    %r9d,%r9d
jmp    16b1 <supportSet+0x5b1>
and    -0x20(%rsp),%rbx
mov    -0x28(%rsp),%rcx
lea    (%rcx,%r11,8),%r10
xor    %r9d,%r9d
nop
movupd %xmm1,-0x70(%r10,%r9,8)
movupd %xmm1,-0x60(%r10,%r9,8)
movupd %xmm1,-0x50(%r10,%r9,8)
movupd %xmm1,-0x40(%r10,%r9,8)
movupd %xmm1,-0x30(%r10,%r9,8)
movupd %xmm1,-0x20(%r10,%r9,8)
movupd %xmm1,-0x10(%r10,%r9,8)
movupd %xmm1,(%r10,%r9,8)
add    $0x10,%r9
add    $0xfffffffffffffffc,%rbx
jne    1670 <supportSet+0x570>
test   %r13,%r13
je     16e4 <supportSet+0x5e4>
add    %r11,%r9
mov    -0x18(%rsp),%rcx
lea    (%rcx,%r9,8),%rbx
shl    $0x5,%r13
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movupd %xmm1,-0x10(%rbx,%rcx,1)
movupd %xmm1,(%rbx,%rcx,1)
add    $0x20,%rcx
cmp    %rcx,%r13
jne    16d0 <supportSet+0x5d0>
cmp    %r15,%r14
mov    %rdx,%r13
mov    -0x8(%rsp),%rdx
mov    -0x10(%rsp),%r9
je     1560 <supportSet+0x460>
add    %r15,%r11
nopl   (%rax)
movsd  %xmm0,0x8(%rdi,%r11,8)
add    $0x1,%r11
cmp    %r11,%rbp
jne    1700 <supportSet+0x600>
jmp    1560 <supportSet+0x460>
movslq %eax,%rcx
movslq -0x4(%r13,%rcx,4),%rbp
mov    -0x30(%rsp),%r10
cmp    %r10d,%ebp
jge    189f <supportSet+0x79f>
mov    -0x38(%rsp),%r9
movslq %r9d,%r11
mov    %r9d,%ebx
sub    %ebp,%ebx
mov    %rbp,%r8
not    %r8
add    %r11,%r8
xorpd  %xmm0,%xmm0
mov    %rbp,%rcx
and    $0x7,%rbx
je     1760 <supportSet+0x660>
xchg   %ax,%ax
addsd  0x8(%rsi,%rcx,8),%xmm0
add    $0x1,%rcx
add    $0xffffffffffffffff,%rbx
jne    1750 <supportSet+0x650>
cmp    $0x7,%r8
jb     17a9 <supportSet+0x6a9>
cs nopw 0x0(%rax,%rax,1)
addsd  0x8(%rsi,%rcx,8),%xmm0
addsd  0x10(%rsi,%rcx,8),%xmm0
addsd  0x18(%rsi,%rcx,8),%xmm0
addsd  0x20(%rsi,%rcx,8),%xmm0
addsd  0x28(%rsi,%rcx,8),%xmm0
addsd  0x30(%rsi,%rcx,8),%xmm0
addsd  0x38(%rsi,%rcx,8),%xmm0
addsd  0x40(%rsi,%rcx,8),%xmm0
add    $0x8,%rcx
cmp    %rcx,%r11
jne    1770 <supportSet+0x670>
cmp    %r10d,%ebp
jge    189f <supportSet+0x79f>
sub    %ebp,%r9d
subsd  (%rdx,%rbp,8),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r9d,%xmm1
divsd  %xmm1,%xmm0
mov    %r11,%r9
sub    %rbp,%r9
cmp    $0x4,%r9
jb     1890 <supportSet+0x790>
mov    %r9,%r8
and    $0xfffffffffffffffc,%r8
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%r8),%rdx
mov    %rdx,%rcx
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %ecx,%esi
and    $0x3,%esi
cmp    $0xc,%rdx
jae    1803 <supportSet+0x703>
xor    %edx,%edx
jmp    1859 <supportSet+0x759>
movabs $0x7ffffffffffffff8,%rdx
ff ff 7f
or     $0x4,%rdx
and    %rdx,%rcx
lea    (%rdi,%rbp,8),%rbx
add    $0x78,%rbx
xor    %edx,%edx
xchg   %ax,%ax
movupd %xmm1,-0x70(%rbx,%rdx,8)
movupd %xmm1,-0x60(%rbx,%rdx,8)
movupd %xmm1,-0x50(%rbx,%rdx,8)
movupd %xmm1,-0x40(%rbx,%rdx,8)
movupd %xmm1,-0x30(%rbx,%rdx,8)
movupd %xmm1,-0x20(%rbx,%rdx,8)
movupd %xmm1,-0x10(%rbx,%rdx,8)
movupd %xmm1,(%rbx,%rdx,8)
add    $0x10,%rdx
add    $0xfffffffffffffffc,%rcx
jne    1820 <supportSet+0x720>
test   %rsi,%rsi
je     1884 <supportSet+0x784>
add    %rbp,%rdx
lea    (%rdi,%rdx,8),%rcx
add    $0x18,%rcx
shl    $0x5,%rsi
xor    %edx,%edx
nop
movupd %xmm1,-0x10(%rcx,%rdx,1)
movupd %xmm1,(%rcx,%rdx,1)
add    $0x20,%rdx
cmp    %rdx,%rsi
jne    1870 <supportSet+0x770>
cmp    %r8,%r9
je     189f <supportSet+0x79f>
add    %r8,%rbp
nopl   0x0(%rax)
movsd  %xmm0,0x8(%rdi,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r11
jne    1890 <supportSet+0x790>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @supportSet(double* nocapture writeonly %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, i32* nocapture %4, double %5, i32 %6) {
%8 = add i32 %6, 1
%9 = icmp sgt i32 %6, 0
br i1 %9, label %10, label %51
10: ; preds = %7
%11 = fneg double %5
%12 = zext i32 %6 to i64
br label %13
13: ; preds = %10, %34
%14 = phi i64 [ 0, %10 ], [ %36, %34 ]
%15 = phi i32 [ 0, %10 ], [ %35, %34 ]
%16 = getelementptr inbounds double, double* %2, i64 %14
%17 = load double, double* %16
%18 = fcmp oeq double %17, %5
br i1 %18, label %19, label %23
19: ; preds = %13
%20 = getelementptr inbounds double, double* %3, i64 %14
%21 = load double, double* %20
%22 = fcmp olt double %21, 1.000000e-10
br i1 %22, label %29, label %23
23: ; preds = %19, %13
%24 = fcmp oeq double %17, %11
br i1 %24, label %25, label %34
25: ; preds = %23
%26 = getelementptr inbounds double, double* %3, i64 %14
%27 = load double, double* %26
%28 = fcmp ogt double %27, 1.000000e-10
br i1 %28, label %29, label %34
29: ; preds = %25, %19
%30 = sext i32 %15 to i64
%31 = getelementptr inbounds i32, i32* %4, i64 %30
%32 = trunc i64 %14 to i32
store i32 %32, i32* %31
%33 = add nsw i32 %15, 1
br label %34
34: ; preds = %23, %25, %29
%35 = phi i32 [ %33, %29 ], [ %15, %25 ], [ %15, %23 ]
%36 = add nuw nsw i64 %14, 1
%37 = icmp eq i64 %36, %12
br i1 %37, label %38, label %13
38: ; preds = %34
%39 = icmp eq i32 %35, 0
br i1 %39, label %51, label %40
40: ; preds = %38
%41 = load i32, i32* %4
%42 = icmp slt i32 %41, 0
br i1 %42, label %339, label %43
43: ; preds = %40
%44 = add nuw i32 %41, 1
%45 = zext i32 %44 to i64
%46 = add nsw i64 %45, -1
%47 = and i64 %45, 7
%48 = icmp ult i64 %46, 7
br i1 %48, label %238, label %49
49: ; preds = %43
%50 = and i64 %45, 4294967288
br label %200
51: ; preds = %7, %38
%52 = icmp slt i32 %6, 0
br i1 %52, label %649, label %53
53: ; preds = %51
%54 = zext i32 %8 to i64
%55 = add nsw i64 %54, -1
%56 = and i64 %54, 7
%57 = icmp ult i64 %55, 7
br i1 %57, label %98, label %58
58: ; preds = %53
%59 = and i64 %54, 4294967288
br label %60
60: ; preds = %60, %58
%61 = phi i64 [ 0, %58 ], [ %95, %60 ]
%62 = phi double [ 0.000000e+00, %58 ], [ %94, %60 ]
%63 = phi i64 [ 0, %58 ], [ %96, %60 ]
%64 = getelementptr inbounds double, double* %1, i64 %61
%65 = load double, double* %64
%66 = fadd double %62, %65
%67 = or i64 %61, 1
%68 = getelementptr inbounds double, double* %1, i64 %67
%69 = load double, double* %68
%70 = fadd double %66, %69
%71 = or i64 %61, 2
%72 = getelementptr inbounds double, double* %1, i64 %71
%73 = load double, double* %72
%74 = fadd double %70, %73
%75 = or i64 %61, 3
%76 = getelementptr inbounds double, double* %1, i64 %75
%77 = load double, double* %76
%78 = fadd double %74, %77
%79 = or i64 %61, 4
%80 = getelementptr inbounds double, double* %1, i64 %79
%81 = load double, double* %80
%82 = fadd double %78, %81
%83 = or i64 %61, 5
%84 = getelementptr inbounds double, double* %1, i64 %83
%85 = load double, double* %84
%86 = fadd double %82, %85
%87 = or i64 %61, 6
%88 = getelementptr inbounds double, double* %1, i64 %87
%89 = load double, double* %88
%90 = fadd double %86, %89
%91 = or i64 %61, 7
%92 = getelementptr inbounds double, double* %1, i64 %91
%93 = load double, double* %92
%94 = fadd double %90, %93
%95 = add nuw nsw i64 %61, 8
%96 = add i64 %63, 8
%97 = icmp eq i64 %96, %59
br i1 %97, label %98, label %60
98: ; preds = %60, %53
%99 = phi double [ undef, %53 ], [ %94, %60 ]
%100 = phi i64 [ 0, %53 ], [ %95, %60 ]
%101 = phi double [ 0.000000e+00, %53 ], [ %94, %60 ]
%102 = icmp eq i64 %56, 0
br i1 %102, label %113, label %103
103: ; preds = %98, %103
%104 = phi i64 [ %110, %103 ], [ %100, %98 ]
%105 = phi double [ %109, %103 ], [ %101, %98 ]
%106 = phi i64 [ %111, %103 ], [ 0, %98 ]
%107 = getelementptr inbounds double, double* %1, i64 %104
%108 = load double, double* %107
%109 = fadd double %105, %108
%110 = add nuw nsw i64 %104, 1
%111 = add i64 %106, 1
%112 = icmp eq i64 %111, %56
br i1 %112, label %113, label %103
113: ; preds = %103, %98
%114 = phi double [ %99, %98 ], [ %109, %103 ]
%115 = sitofp i32 %8 to double
%116 = fdiv double %114, %115
br i1 %52, label %649, label %117
117: ; preds = %113
%118 = zext i32 %8 to i64
%119 = icmp ult i32 %8, 4
br i1 %119, label %193, label %120
120: ; preds = %117
%121 = and i64 %54, 4294967292
%122 = insertelement <2 x double> poison, double %116, i64 0
%123 = shufflevector <2 x double> %122, <2 x double> poison, <2 x i32> zeroinitializer
%124 = insertelement <2 x double> poison, double %116, i64 0
%125 = shufflevector <2 x double> %124, <2 x double> poison, <2 x i32> zeroinitializer
%126 = add nsw i64 %121, -4
%127 = lshr exact i64 %126, 2
%128 = add nuw nsw i64 %127, 1
%129 = and i64 %128, 7
%130 = icmp ult i64 %126, 28
br i1 %130, label %178, label %131
131: ; preds = %120
%132 = and i64 %128, 9223372036854775800
br label %133
133: ; preds = %133, %131
%134 = phi i64 [ 0, %131 ], [ %175, %133 ]
%135 = phi i64 [ 0, %131 ], [ %176, %133 ]
%136 = getelementptr inbounds double, double* %0, i64 %134
%137 = bitcast double* %136 to <2 x double>*
store <2 x double> %123, <2 x double>* %137
%138 = getelementptr inbounds double, double* %136, i64 2
%139 = bitcast double* %138 to <2 x double>*
store <2 x double> %125, <2 x double>* %139
%140 = or i64 %134, 4
%141 = getelementptr inbounds double, double* %0, i64 %140
%142 = bitcast double* %141 to <2 x double>*
store <2 x double> %123, <2 x double>* %142
%143 = getelementptr inbounds double, double* %141, i64 2
%144 = bitcast double* %143 to <2 x double>*
store <2 x double> %125, <2 x double>* %144
%145 = or i64 %134, 8
%146 = getelementptr inbounds double, double* %0, i64 %145
%147 = bitcast double* %146 to <2 x double>*
store <2 x double> %123, <2 x double>* %147
%148 = getelementptr inbounds double, double* %146, i64 2
%149 = bitcast double* %148 to <2 x double>*
store <2 x double> %125, <2 x double>* %149
%150 = or i64 %134, 12
%151 = getelementptr inbounds double, double* %0, i64 %150
%152 = bitcast double* %151 to <2 x double>*
store <2 x double> %123, <2 x double>* %152
%153 = getelementptr inbounds double, double* %151, i64 2
%154 = bitcast double* %153 to <2 x double>*
store <2 x double> %125, <2 x double>* %154
%155 = or i64 %134, 16
%156 = getelementptr inbounds double, double* %0, i64 %155
%157 = bitcast double* %156 to <2 x double>*
store <2 x double> %123, <2 x double>* %157
%158 = getelementptr inbounds double, double* %156, i64 2
%159 = bitcast double* %158 to <2 x double>*
store <2 x double> %125, <2 x double>* %159
%160 = or i64 %134, 20
%161 = getelementptr inbounds double, double* %0, i64 %160
%162 = bitcast double* %161 to <2 x double>*
store <2 x double> %123, <2 x double>* %162
%163 = getelementptr inbounds double, double* %161, i64 2
%164 = bitcast double* %163 to <2 x double>*
store <2 x double> %125, <2 x double>* %164
%165 = or i64 %134, 24
%166 = getelementptr inbounds double, double* %0, i64 %165
%167 = bitcast double* %166 to <2 x double>*
store <2 x double> %123, <2 x double>* %167
%168 = getelementptr inbounds double, double* %166, i64 2
%169 = bitcast double* %168 to <2 x double>*
store <2 x double> %125, <2 x double>* %169
%170 = or i64 %134, 28
%171 = getelementptr inbounds double, double* %0, i64 %170
%172 = bitcast double* %171 to <2 x double>*
store <2 x double> %123, <2 x double>* %172
%173 = getelementptr inbounds double, double* %171, i64 2
%174 = bitcast double* %173 to <2 x double>*
store <2 x double> %125, <2 x double>* %174
%175 = add nuw i64 %134, 32
%176 = add i64 %135, 8
%177 = icmp eq i64 %176, %132
br i1 %177, label %178, label %133
178: ; preds = %133, %120
%179 = phi i64 [ 0, %120 ], [ %175, %133 ]
%180 = icmp eq i64 %129, 0
br i1 %180, label %191, label %181
181: ; preds = %178, %181
%182 = phi i64 [ %188, %181 ], [ %179, %178 ]
%183 = phi i64 [ %189, %181 ], [ 0, %178 ]
%184 = getelementptr inbounds double, double* %0, i64 %182
%185 = bitcast double* %184 to <2 x double>*
store <2 x double> %123, <2 x double>* %185
%186 = getelementptr inbounds double, double* %184, i64 2
%187 = bitcast double* %186 to <2 x double>*
store <2 x double> %125, <2 x double>* %187
%188 = add nuw i64 %182, 4
%189 = add i64 %183, 1
%190 = icmp eq i64 %189, %129
br i1 %190, label %191, label %181
191: ; preds = %181, %178
%192 = icmp eq i64 %121, %54
br i1 %192, label %649, label %193
193: ; preds = %117, %191
%194 = phi i64 [ 0, %117 ], [ %121, %191 ]
br label %195
195: ; preds = %193, %195
%196 = phi i64 [ %198, %195 ], [ %194, %193 ]
%197 = getelementptr inbounds double, double* %0, i64 %196
store double %116, double* %197
%198 = add nuw nsw i64 %196, 1
%199 = icmp eq i64 %198, %118
br i1 %199, label %649, label %195
200: ; preds = %200, %49
%201 = phi i64 [ 0, %49 ], [ %235, %200 ]
%202 = phi double [ 0.000000e+00, %49 ], [ %234, %200 ]
%203 = phi i64 [ 0, %49 ], [ %236, %200 ]
%204 = getelementptr inbounds double, double* %1, i64 %201
%205 = load double, double* %204
%206 = fadd double %202, %205
%207 = or i64 %201, 1
%208 = getelementptr inbounds double, double* %1, i64 %207
%209 = load double, double* %208
%210 = fadd double %206, %209
%211 = or i64 %201, 2
%212 = getelementptr inbounds double, double* %1, i64 %211
%213 = load double, double* %212
%214 = fadd double %210, %213
%215 = or i64 %201, 3
%216 = getelementptr inbounds double, double* %1, i64 %215
%217 = load double, double* %216
%218 = fadd double %214, %217
%219 = or i64 %201, 4
%220 = getelementptr inbounds double, double* %1, i64 %219
%221 = load double, double* %220
%222 = fadd double %218, %221
%223 = or i64 %201, 5
%224 = getelementptr inbounds double, double* %1, i64 %223
%225 = load double, double* %224
%226 = fadd double %222, %225
%227 = or i64 %201, 6
%228 = getelementptr inbounds double, double* %1, i64 %227
%229 = load double, double* %228
%230 = fadd double %226, %229
%231 = or i64 %201, 7
%232 = getelementptr inbounds double, double* %1, i64 %231
%233 = load double, double* %232
%234 = fadd double %230, %233
%235 = add nuw nsw i64 %201, 8
%236 = add i64 %203, 8
%237 = icmp eq i64 %236, %50
br i1 %237, label %238, label %200
238: ; preds = %200, %43
%239 = phi double [ undef, %43 ], [ %234, %200 ]
%240 = phi i64 [ 0, %43 ], [ %235, %200 ]
%241 = phi double [ 0.000000e+00, %43 ], [ %234, %200 ]
%242 = icmp eq i64 %47, 0
br i1 %242, label %253, label %243
243: ; preds = %238, %243
%244 = phi i64 [ %250, %243 ], [ %240, %238 ]
%245 = phi double [ %249, %243 ], [ %241, %238 ]
%246 = phi i64 [ %251, %243 ], [ 0, %238 ]
%247 = getelementptr inbounds double, double* %1, i64 %244
%248 = load double, double* %247
%249 = fadd double %245, %248
%250 = add nuw nsw i64 %244, 1
%251 = add i64 %246, 1
%252 = icmp eq i64 %251, %47
br i1 %252, label %253, label %243
253: ; preds = %243, %238
%254 = phi double [ %239, %238 ], [ %249, %243 ]
%255 = sext i32 %41 to i64
%256 = getelementptr inbounds double, double* %2, i64 %255
%257 = load double, double* %256
%258 = fadd double %254, %257
%259 = sitofp i32 %44 to double
%260 = fdiv double %258, %259
br i1 %42, label %339, label %261
261: ; preds = %253
%262 = zext i32 %44 to i64
%263 = icmp ult i32 %41, 3
br i1 %263, label %337, label %264
264: ; preds = %261
%265 = and i64 %45, 4294967292
%266 = insertelement <2 x double> poison, double %260, i64 0
%267 = shufflevector <2 x double> %266, <2 x double> poison, <2 x i32> zeroinitializer
%268 = insertelement <2 x double> poison, double %260, i64 0
%269 = shufflevector <2 x double> %268, <2 x double> poison, <2 x i32> zeroinitializer
%270 = add nsw i64 %265, -4
%271 = lshr exact i64 %270, 2
%272 = add nuw nsw i64 %271, 1
%273 = and i64 %272, 7
%274 = icmp ult i64 %270, 28
br i1 %274, label %322, label %275
275: ; preds = %264
%276 = and i64 %272, 9223372036854775800
br label %277
277: ; preds = %277, %275
%278 = phi i64 [ 0, %275 ], [ %319, %277 ]
%279 = phi i64 [ 0, %275 ], [ %320, %277 ]
%280 = getelementptr inbounds double, double* %0, i64 %278
%281 = bitcast double* %280 to <2 x double>*
store <2 x double> %267, <2 x double>* %281
%282 = getelementptr inbounds double, double* %280, i64 2
%283 = bitcast double* %282 to <2 x double>*
store <2 x double> %269, <2 x double>* %283
%284 = or i64 %278, 4
%285 = getelementptr inbounds double, double* %0, i64 %284
%286 = bitcast double* %285 to <2 x double>*
store <2 x double> %267, <2 x double>* %286
%287 = getelementptr inbounds double, double* %285, i64 2
%288 = bitcast double* %287 to <2 x double>*
store <2 x double> %269, <2 x double>* %288
%289 = or i64 %278, 8
%290 = getelementptr inbounds double, double* %0, i64 %289
%291 = bitcast double* %290 to <2 x double>*
store <2 x double> %267, <2 x double>* %291
%292 = getelementptr inbounds double, double* %290, i64 2
%293 = bitcast double* %292 to <2 x double>*
store <2 x double> %269, <2 x double>* %293
%294 = or i64 %278, 12
%295 = getelementptr inbounds double, double* %0, i64 %294
%296 = bitcast double* %295 to <2 x double>*
store <2 x double> %267, <2 x double>* %296
%297 = getelementptr inbounds double, double* %295, i64 2
%298 = bitcast double* %297 to <2 x double>*
store <2 x double> %269, <2 x double>* %298
%299 = or i64 %278, 16
%300 = getelementptr inbounds double, double* %0, i64 %299
%301 = bitcast double* %300 to <2 x double>*
store <2 x double> %267, <2 x double>* %301
%302 = getelementptr inbounds double, double* %300, i64 2
%303 = bitcast double* %302 to <2 x double>*
store <2 x double> %269, <2 x double>* %303
%304 = or i64 %278, 20
%305 = getelementptr inbounds double, double* %0, i64 %304
%306 = bitcast double* %305 to <2 x double>*
store <2 x double> %267, <2 x double>* %306
%307 = getelementptr inbounds double, double* %305, i64 2
%308 = bitcast double* %307 to <2 x double>*
store <2 x double> %269, <2 x double>* %308
%309 = or i64 %278, 24
%310 = getelementptr inbounds double, double* %0, i64 %309
%311 = bitcast double* %310 to <2 x double>*
store <2 x double> %267, <2 x double>* %311
%312 = getelementptr inbounds double, double* %310, i64 2
%313 = bitcast double* %312 to <2 x double>*
store <2 x double> %269, <2 x double>* %313
%314 = or i64 %278, 28
%315 = getelementptr inbounds double, double* %0, i64 %314
%316 = bitcast double* %315 to <2 x double>*
store <2 x double> %267, <2 x double>* %316
%317 = getelementptr inbounds double, double* %315, i64 2
%318 = bitcast double* %317 to <2 x double>*
store <2 x double> %269, <2 x double>* %318
%319 = add nuw i64 %278, 32
%320 = add i64 %279, 8
%321 = icmp eq i64 %320, %276
br i1 %321, label %322, label %277
322: ; preds = %277, %264
%323 = phi i64 [ 0, %264 ], [ %319, %277 ]
%324 = icmp eq i64 %273, 0
br i1 %324, label %335, label %325
325: ; preds = %322, %325
%326 = phi i64 [ %332, %325 ], [ %323, %322 ]
%327 = phi i64 [ %333, %325 ], [ 0, %322 ]
%328 = getelementptr inbounds double, double* %0, i64 %326
%329 = bitcast double* %328 to <2 x double>*
store <2 x double> %267, <2 x double>* %329
%330 = getelementptr inbounds double, double* %328, i64 2
%331 = bitcast double* %330 to <2 x double>*
store <2 x double> %269, <2 x double>* %331
%332 = add nuw i64 %326, 4
%333 = add i64 %327, 1
%334 = icmp eq i64 %333, %273
br i1 %334, label %335, label %325
335: ; preds = %325, %322
%336 = icmp eq i64 %265, %45
br i1 %336, label %339, label %337
337: ; preds = %261, %335
%338 = phi i64 [ 0, %261 ], [ %265, %335 ]
br label %343
339: ; preds = %343, %335, %40, %253
%340 = icmp sgt i32 %35, 1
br i1 %340, label %341, label %501
341: ; preds = %339
%342 = zext i32 %35 to i64
br label %348
343: ; preds = %337, %343
%344 = phi i64 [ %346, %343 ], [ %338, %337 ]
%345 = getelementptr inbounds double, double* %0, i64 %344
store double %260, double* %345
%346 = add nuw nsw i64 %344, 1
%347 = icmp eq i64 %346, %262
br i1 %347, label %339, label %343
348: ; preds = %341, %498
%349 = phi i32 [ %41, %341 ], [ %352, %498 ]
%350 = phi i64 [ 1, %341 ], [ %499, %498 ]
%351 = getelementptr inbounds i32, i32* %4, i64 %350
%352 = load i32, i32* %351
%353 = icmp sgt i32 %352, %349
%354 = sext i32 %349 to i64
%355 = sext i32 %352 to i64
br i1 %353, label %356, label %413
356: ; preds = %348
%357 = sub nsw i64 %355, %354
%358 = xor i64 %354, -1
%359 = add nsw i64 %358, %355
%360 = and i64 %357, 7
%361 = icmp eq i64 %360, 0
br i1 %361, label %372, label %362
362: ; preds = %356, %362
%363 = phi i64 [ %366, %362 ], [ %354, %356 ]
%364 = phi double [ %369, %362 ], [ 0.000000e+00, %356 ]
%365 = phi i64 [ %370, %362 ], [ 0, %356 ]
%366 = add nsw i64 %363, 1
%367 = getelementptr inbounds double, double* %1, i64 %366
%368 = load double, double* %367
%369 = fadd double %364, %368
%370 = add i64 %365, 1
%371 = icmp eq i64 %370, %360
br i1 %371, label %372, label %362
372: ; preds = %362, %356
%373 = phi double [ undef, %356 ], [ %369, %362 ]
%374 = phi i64 [ %354, %356 ], [ %366, %362 ]
%375 = phi double [ 0.000000e+00, %356 ], [ %369, %362 ]
%376 = icmp ult i64 %359, 7
br i1 %376, label %413, label %377
377: ; preds = %372, %377
%378 = phi i64 [ %408, %377 ], [ %374, %372 ]
%379 = phi double [ %411, %377 ], [ %375, %372 ]
%380 = add nsw i64 %378, 1
%381 = getelementptr inbounds double, double* %1, i64 %380
%382 = load double, double* %381
%383 = fadd double %379, %382
%384 = add nsw i64 %378, 2
%385 = getelementptr inbounds double, double* %1, i64 %384
%386 = load double, double* %385
%387 = fadd double %383, %386
%388 = add nsw i64 %378, 3
%389 = getelementptr inbounds double, double* %1, i64 %388
%390 = load double, double* %389
%391 = fadd double %387, %390
%392 = add nsw i64 %378, 4
%393 = getelementptr inbounds double, double* %1, i64 %392
%394 = load double, double* %393
%395 = fadd double %391, %394
%396 = add nsw i64 %378, 5
%397 = getelementptr inbounds double, double* %1, i64 %396
%398 = load double, double* %397
%399 = fadd double %395, %398
%400 = add nsw i64 %378, 6
%401 = getelementptr inbounds double, double* %1, i64 %400
%402 = load double, double* %401
%403 = fadd double %399, %402
%404 = add nsw i64 %378, 7
%405 = getelementptr inbounds double, double* %1, i64 %404
%406 = load double, double* %405
%407 = fadd double %403, %406
%408 = add nsw i64 %378, 8
%409 = getelementptr inbounds double, double* %1, i64 %408
%410 = load double, double* %409
%411 = fadd double %407, %410
%412 = icmp eq i64 %408, %355
br i1 %412, label %413, label %377
413: ; preds = %372, %377, %348
%414 = phi double [ 0.000000e+00, %348 ], [ %373, %372 ], [ %411, %377 ]
%415 = getelementptr inbounds double, double* %2, i64 %354
%416 = load double, double* %415
%417 = fsub double %414, %416
%418 = getelementptr inbounds double, double* %2, i64 %355
%419 = load double, double* %418
%420 = fadd double %417, %419
%421 = sub nsw i32 %352, %349
%422 = sitofp i32 %421 to double
%423 = fdiv double %420, %422
br i1 %353, label %424, label %498
424: ; preds = %413
%425 = sub nsw i64 %355, %354
%426 = icmp ult i64 %425, 4
br i1 %426, label %491, label %427
427: ; preds = %424
%428 = and i64 %425, -4
%429 = add nsw i64 %428, %354
%430 = insertelement <2 x double> poison, double %423, i64 0
%431 = shufflevector <2 x double> %430, <2 x double> poison, <2 x i32> zeroinitializer
%432 = insertelement <2 x double> poison, double %423, i64 0
%433 = shufflevector <2 x double> %432, <2 x double> poison, <2 x i32> zeroinitializer
%434 = add nsw i64 %428, -4
%435 = lshr exact i64 %434, 2
%436 = add nuw nsw i64 %435, 1
%437 = and i64 %436, 3
%438 = icmp ult i64 %434, 12
br i1 %438, label %474, label %439
439: ; preds = %427
%440 = and i64 %436, 9223372036854775804
br label %441
441: ; preds = %441, %439
%442 = phi i64 [ 0, %439 ], [ %471, %441 ]
%443 = phi i64 [ 0, %439 ], [ %472, %441 ]
%444 = add i64 %442, %354
%445 = add nsw i64 %444, 1
%446 = getelementptr inbounds double, double* %0, i64 %445
%447 = bitcast double* %446 to <2 x double>*
store <2 x double> %431, <2 x double>* %447
%448 = getelementptr inbounds double, double* %446, i64 2
%449 = bitcast double* %448 to <2 x double>*
store <2 x double> %433, <2 x double>* %449
%450 = or i64 %442, 4
%451 = add i64 %450, %354
%452 = add nsw i64 %451, 1
%453 = getelementptr inbounds double, double* %0, i64 %452
%454 = bitcast double* %453 to <2 x double>*
store <2 x double> %431, <2 x double>* %454
%455 = getelementptr inbounds double, double* %453, i64 2
%456 = bitcast double* %455 to <2 x double>*
store <2 x double> %433, <2 x double>* %456
%457 = or i64 %442, 8
%458 = add i64 %457, %354
%459 = add nsw i64 %458, 1
%460 = getelementptr inbounds double, double* %0, i64 %459
%461 = bitcast double* %460 to <2 x double>*
store <2 x double> %431, <2 x double>* %461
%462 = getelementptr inbounds double, double* %460, i64 2
%463 = bitcast double* %462 to <2 x double>*
store <2 x double> %433, <2 x double>* %463
%464 = or i64 %442, 12
%465 = add i64 %464, %354
%466 = add nsw i64 %465, 1
%467 = getelementptr inbounds double, double* %0, i64 %466
%468 = bitcast double* %467 to <2 x double>*
store <2 x double> %431, <2 x double>* %468
%469 = getelementptr inbounds double, double* %467, i64 2
%470 = bitcast double* %469 to <2 x double>*
store <2 x double> %433, <2 x double>* %470
%471 = add nuw i64 %442, 16
%472 = add nuw i64 %443, 4
%473 = icmp eq i64 %472, %440
br i1 %473, label %474, label %441
474: ; preds = %441, %427
%475 = phi i64 [ 0, %427 ], [ %471, %441 ]
%476 = icmp eq i64 %437, 0
br i1 %476, label %489, label %477
477: ; preds = %474, %477
%478 = phi i64 [ %486, %477 ], [ %475, %474 ]
%479 = phi i64 [ %487, %477 ], [ 0, %474 ]
%480 = add i64 %478, %354
%481 = add nsw i64 %480, 1
%482 = getelementptr inbounds double, double* %0, i64 %481
%483 = bitcast double* %482 to <2 x double>*
store <2 x double> %431, <2 x double>* %483
%484 = getelementptr inbounds double, double* %482, i64 2
%485 = bitcast double* %484 to <2 x double>*
store <2 x double> %433, <2 x double>* %485
%486 = add nuw i64 %478, 4
%487 = add i64 %479, 1
%488 = icmp eq i64 %487, %437
br i1 %488, label %489, label %477
489: ; preds = %477, %474
%490 = icmp eq i64 %425, %428
br i1 %490, label %498, label %491
491: ; preds = %424, %489
%492 = phi i64 [ %354, %424 ], [ %429, %489 ]
br label %493
493: ; preds = %491, %493
%494 = phi i64 [ %495, %493 ], [ %492, %491 ]
%495 = add nsw i64 %494, 1
%496 = getelementptr inbounds double, double* %0, i64 %495
store double %423, double* %496
%497 = icmp eq i64 %495, %355
br i1 %497, label %498, label %493
498: ; preds = %493, %489, %413
%499 = add nuw nsw i64 %350, 1
%500 = icmp eq i64 %499, %342
br i1 %500, label %501, label %348
501: ; preds = %498, %339
%502 = add nsw i32 %35, -1
%503 = sext i32 %502 to i64
%504 = getelementptr inbounds i32, i32* %4, i64 %503
%505 = load i32, i32* %504
%506 = icmp slt i32 %505, %6
br i1 %506, label %507, label %649
507: ; preds = %501
%508 = sext i32 %505 to i64
%509 = sext i32 %6 to i64
%510 = sub nsw i64 %509, %508
%511 = xor i64 %508, -1
%512 = add nsw i64 %511, %509
%513 = and i64 %510, 7
%514 = icmp eq i64 %513, 0
br i1 %514, label %525, label %515
515: ; preds = %507, %515
%516 = phi i64 [ %519, %515 ], [ %508, %507 ]
%517 = phi double [ %522, %515 ], [ 0.000000e+00, %507 ]
%518 = phi i64 [ %523, %515 ], [ 0, %507 ]
%519 = add nsw i64 %516, 1
%520 = getelementptr inbounds double, double* %1, i64 %519
%521 = load double, double* %520
%522 = fadd double %517, %521
%523 = add i64 %518, 1
%524 = icmp eq i64 %523, %513
br i1 %524, label %525, label %515
525: ; preds = %515, %507
%526 = phi double [ undef, %507 ], [ %522, %515 ]
%527 = phi i64 [ %508, %507 ], [ %519, %515 ]
%528 = phi double [ 0.000000e+00, %507 ], [ %522, %515 ]
%529 = icmp ult i64 %512, 7
br i1 %529, label %566, label %530
530: ; preds = %525, %530
%531 = phi i64 [ %561, %530 ], [ %527, %525 ]
%532 = phi double [ %564, %530 ], [ %528, %525 ]
%533 = add nsw i64 %531, 1
%534 = getelementptr inbounds double, double* %1, i64 %533
%535 = load double, double* %534
%536 = fadd double %532, %535
%537 = add nsw i64 %531, 2
%538 = getelementptr inbounds double, double* %1, i64 %537
%539 = load double, double* %538
%540 = fadd double %536, %539
%541 = add nsw i64 %531, 3
%542 = getelementptr inbounds double, double* %1, i64 %541
%543 = load double, double* %542
%544 = fadd double %540, %543
%545 = add nsw i64 %531, 4
%546 = getelementptr inbounds double, double* %1, i64 %545
%547 = load double, double* %546
%548 = fadd double %544, %547
%549 = add nsw i64 %531, 5
%550 = getelementptr inbounds double, double* %1, i64 %549
%551 = load double, double* %550
%552 = fadd double %548, %551
%553 = add nsw i64 %531, 6
%554 = getelementptr inbounds double, double* %1, i64 %553
%555 = load double, double* %554
%556 = fadd double %552, %555
%557 = add nsw i64 %531, 7
%558 = getelementptr inbounds double, double* %1, i64 %557
%559 = load double, double* %558
%560 = fadd double %556, %559
%561 = add nsw i64 %531, 8
%562 = getelementptr inbounds double, double* %1, i64 %561
%563 = load double, double* %562
%564 = fadd double %560, %563
%565 = icmp eq i64 %561, %509
br i1 %565, label %566, label %530
566: ; preds = %530, %525
%567 = phi double [ %526, %525 ], [ %564, %530 ]
%568 = getelementptr inbounds double, double* %2, i64 %508
%569 = load double, double* %568
%570 = fsub double %567, %569
%571 = sub nsw i32 %6, %505
%572 = sitofp i32 %571 to double
%573 = fdiv double %570, %572
br i1 %506, label %574, label %649
574: ; preds = %566
%575 = sext i32 %6 to i64
%576 = sub nsw i64 %509, %508
%577 = icmp ult i64 %576, 4
br i1 %577, label %642, label %578
578: ; preds = %574
%579 = and i64 %576, -4
%580 = add nsw i64 %579, %508
%581 = insertelement <2 x double> poison, double %573, i64 0
%582 = shufflevector <2 x double> %581, <2 x double> poison, <2 x i32> zeroinitializer
%583 = insertelement <2 x double> poison, double %573, i64 0
%584 = shufflevector <2 x double> %583, <2 x double> poison, <2 x i32> zeroinitializer
%585 = add nsw i64 %579, -4
%586 = lshr exact i64 %585, 2
%587 = add nuw nsw i64 %586, 1
%588 = and i64 %587, 3
%589 = icmp ult i64 %585, 12
br i1 %589, label %625, label %590
590: ; preds = %578
%591 = and i64 %587, 9223372036854775804
br label %592
592: ; preds = %592, %590
%593 = phi i64 [ 0, %590 ], [ %622, %592 ]
%594 = phi i64 [ 0, %590 ], [ %623, %592 ]
%595 = add i64 %593, %508
%596 = add nsw i64 %595, 1
%597 = getelementptr inbounds double, double* %0, i64 %596
%598 = bitcast double* %597 to <2 x double>*
store <2 x double> %582, <2 x double>* %598
%599 = getelementptr inbounds double, double* %597, i64 2
%600 = bitcast double* %599 to <2 x double>*
store <2 x double> %584, <2 x double>* %600
%601 = or i64 %593, 4
%602 = add i64 %601, %508
%603 = add nsw i64 %602, 1
%604 = getelementptr inbounds double, double* %0, i64 %603
%605 = bitcast double* %604 to <2 x double>*
store <2 x double> %582, <2 x double>* %605
%606 = getelementptr inbounds double, double* %604, i64 2
%607 = bitcast double* %606 to <2 x double>*
store <2 x double> %584, <2 x double>* %607
%608 = or i64 %593, 8
%609 = add i64 %608, %508
%610 = add nsw i64 %609, 1
%611 = getelementptr inbounds double, double* %0, i64 %610
%612 = bitcast double* %611 to <2 x double>*
store <2 x double> %582, <2 x double>* %612
%613 = getelementptr inbounds double, double* %611, i64 2
%614 = bitcast double* %613 to <2 x double>*
store <2 x double> %584, <2 x double>* %614
%615 = or i64 %593, 12
%616 = add i64 %615, %508
%617 = add nsw i64 %616, 1
%618 = getelementptr inbounds double, double* %0, i64 %617
%619 = bitcast double* %618 to <2 x double>*
store <2 x double> %582, <2 x double>* %619
%620 = getelementptr inbounds double, double* %618, i64 2
%621 = bitcast double* %620 to <2 x double>*
store <2 x double> %584, <2 x double>* %621
%622 = add nuw i64 %593, 16
%623 = add nuw i64 %594, 4
%624 = icmp eq i64 %623, %591
br i1 %624, label %625, label %592
625: ; preds = %592, %578
%626 = phi i64 [ 0, %578 ], [ %622, %592 ]
%627 = icmp eq i64 %588, 0
br i1 %627, label %640, label %628
628: ; preds = %625, %628
%629 = phi i64 [ %637, %628 ], [ %626, %625 ]
%630 = phi i64 [ %638, %628 ], [ 0, %625 ]
%631 = add i64 %629, %508
%632 = add nsw i64 %631, 1
%633 = getelementptr inbounds double, double* %0, i64 %632
%634 = bitcast double* %633 to <2 x double>*
store <2 x double> %582, <2 x double>* %634
%635 = getelementptr inbounds double, double* %633, i64 2
%636 = bitcast double* %635 to <2 x double>*
store <2 x double> %584, <2 x double>* %636
%637 = add nuw i64 %629, 4
%638 = add i64 %630, 1
%639 = icmp eq i64 %638, %588
br i1 %639, label %640, label %628
640: ; preds = %628, %625
%641 = icmp eq i64 %576, %579
br i1 %641, label %649, label %642
642: ; preds = %574, %640
%643 = phi i64 [ %508, %574 ], [ %580, %640 ]
br label %644
644: ; preds = %642, %644
%645 = phi i64 [ %646, %644 ], [ %643, %642 ]
%646 = add nsw i64 %645, 1
%647 = getelementptr inbounds double, double* %0, i64 %646
store double %573, double* %647
%648 = icmp eq i64 %646, %575
br i1 %648, label %649, label %644
649: ; preds = %644, %195, %640, %191, %501, %51, %566, %113
%650 = phi i32 [ %35, %566 ], [ 0, %113 ], [ 0, %51 ], [ %35, %501 ], [ 0, %191 ], [ %35, %640 ], [ 0, %195 ], [ %35, %644 ]
ret i32 %650
}