void chdecomp(double *_rr, double *_tau, int _r, int _n) {
  int k;
  int i;
  int j;
  for (k = _r; k-- > 0;) {
    double alpha;
    double beta;
    double s;
    double d2;
    for (i = _r; --i > k;) {
      s = _rr[(((((_n) * ((_n) + 1) >> 1)) -
                ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
               (i) - (k))];
      for (j = _r; j < _n; j++)
        s += _rr[(((((_n) * ((_n) + 1) >> 1)) -
                   ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
                  (j) - (k))] *
             _rr[(((((_n) * ((_n) + 1) >> 1)) -
                   ((((_n) - (i)) * (((_n) - (i)) + 1) >> 1))) +
                  (j) - (i))];
      s *= _tau[i];
      _rr[(((((_n) * ((_n) + 1) >> 1)) -
            ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
           (i) - (k))] = s - _rr[(((((_n) * ((_n) + 1) >> 1)) -
                                   ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
                                  (i) - (k))];
      for (j = _r; j < _n; j++)
        _rr[(((((_n) * ((_n) + 1) >> 1)) -
              ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
             (j) - (k))] -=
            s * _rr[(((((_n) * ((_n) + 1) >> 1)) -
                      ((((_n) - (i)) * (((_n) - (i)) + 1) >> 1))) +
                     (j) - (i))];
    }
    alpha = _rr[(((((_n) * ((_n) + 1) >> 1)) -
                  ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
                 (k) - (k))];
    beta = alpha;
    for (j = _r; j < _n; j++) {
      if (fabs(_rr[(((((_n) * ((_n) + 1) >> 1)) -
                     ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
                    (j) - (k))]) > beta)
        beta = fabs(_rr[(((((_n) * ((_n) + 1) >> 1)) -
                          ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
                         (j) - (k))]);
    }
    s = 1 / beta;
    d2 = (alpha * s) * (alpha * s);
    for (j = _r; j < _n; j++)
      d2 += (_rr[(((((_n) * ((_n) + 1) >> 1)) -
                   ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
                  (j) - (k))] *
             s) *
            (_rr[(((((_n) * ((_n) + 1) >> 1)) -
                   ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
                  (j) - (k))] *
             s);
    beta *= sqrt(d2);
    _tau[k] = alpha / beta + 1;
    s = 1 / (alpha + beta);
    _rr[(((((_n) * ((_n) + 1) >> 1)) -
          ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
         (k) - (k))] = beta;
    for (j = _r; j < _n; j++)
      _rr[(((((_n) * ((_n) + 1) >> 1)) -
            ((((_n) - (k)) * (((_n) - (k)) + 1) >> 1))) +
           (j) - (k))] *= s;
  }
}


x86 assembly (clang, -O0):
<chdecomp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x1c(%rbp)
cmp    $0x0,%eax
jle    1654 <chdecomp+0x544>
mov    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
cmp    -0x1c(%rbp),%eax
jle    1381 <chdecomp+0x271>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x20(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1237 <chdecomp+0x127>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x20(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x20(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    119b <chdecomp+0x8b>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x20(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x20(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    137c <chdecomp+0x26c>
movsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x20(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x20(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm0,%rdx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rdx
movq   %rdx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12c9 <chdecomp+0x1b9>
jmp    1146 <chdecomp+0x36>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x1c(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1483 <chdecomp+0x373>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xbf7(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    1470 <chdecomp+0x360>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xba9(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    1475 <chdecomp+0x365>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    13ce <chdecomp+0x2be>
movsd  0xb75(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    155e <chdecomp+0x44e>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  -0x40(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    14b8 <chdecomp+0x3a8>
movsd  -0x48(%rbp),%xmm0
call   1030 <sqrt@plt>
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  0xa7c(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x30(%rbp),%xmm1
addsd  -0x38(%rbp),%xmm1
movsd  0xa59(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x1c(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    164f <chdecomp+0x53f>
movsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
sar    $0x1,%ecx
mov    -0x18(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
sar    $0x1,%edx
sub    %edx,%ecx
add    -0x24(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    15f3 <chdecomp+0x4e3>
jmp    112c <chdecomp+0x1c>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<chdecomp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x138,%rsp
mov    %rsi,0x88(%rsp)
test   %edx,%edx
jle    1b20 <chdecomp+0xa10>
mov    %ecx,%r12d
mov    %edx,%r14d
mov    %rdi,%r15
lea    0x1(%r12),%ecx
imul   %r12d,%ecx
sar    %ecx
mov    %edx,%edx
movslq %r12d,%rdi
mov    %rdx,%rax
not    %rax
add    %rdi,%rax
mov    %rax,0x18(%rsp)
lea    0x1(%rcx),%r8d
mov    %rdi,%rbp
sub    %rdx,%rbp
lea    0x0(,%rdx,8),%rax
mov    %r15,%rbx
sub    %rax,%rbx
mov    %rbx,0xa8(%rsp)
lea    -0x4(%rbp),%rax
mov    %rax,0x108(%rsp)
mov    %rax,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
lea    0x1(%rdx),%rax
mov    %rax,0x80(%rsp)
mov    %rbp,%rax
mov    %rbp,0x20(%rsp)
and    $0xfffffffffffffffc,%rbp
mov    %rdi,%rax
neg    %rax
mov    %rax,0xc8(%rsp)
mov    %rbx,%rax
mov    %rbx,0x100(%rsp)
and    $0xfffffffffffffffe,%rbx
mov    %rbx,0xf8(%rsp)
mov    %ecx,%eax
sub    %r14d,%eax
add    $0x2,%eax
mov    %r8d,%esi
sub    %r14d,%esi
movapd 0xe1e(%rip),%xmm6
movsd  0xe36(%rip),%xmm7
movapd 0xe1d(%rip),%xmm8
xorpd  %xmm9,%xmm9
mov    %rbp,0x60(%rsp)
add    %rdx,%rbp
mov    %rbp,0xa0(%rsp)
mov    %rcx,0xd0(%rsp)
lea    0x5(%rcx),%ebx
xor    %ebp,%ebp
mov    %r8,0x78(%rsp)
mov    %r8d,%ecx
mov    %r8d,0x2c(%rsp)
mov    %esi,0x94(%rsp)
mov    %esi,%ecx
mov    %rcx,0x38(%rsp)
mov    %eax,0x98(%rsp)
mov    %rax,0x30(%rsp)
mov    %rdx,0x10(%rsp)
mov    %rdx,%r8
mov    %rdi,0x58(%rsp)
mov    %r12,0x130(%rsp)
jmp    1294 <chdecomp+0x184>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%ebp
mov    0x30(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x30(%rsp)
mov    0x38(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x38(%rsp)
addl   $0x1,0x2c(%rsp)
add    $0x1,%ebx
cmpq   $0x2,0xd8(%rsp)
jl     1b20 <chdecomp+0xa10>
mov    %ebx,0x4c(%rsp)
mov    %r8,%rbx
mov    0x78(%rsp),%rax
mov    %rbp,0xc0(%rsp)
add    %ebp,%eax
mov    %rax,0xb0(%rsp)
lea    -0x1(%r8),%rcx
mov    $0x1,%eax
sub    %ebx,%eax
mov    %rax,0x68(%rsp)
mov    %r12d,%eax
mov    %rcx,0xb8(%rsp)
sub    %ecx,%eax
lea    0x1(%rax),%ecx
imul   %eax,%ecx
sar    %ecx
mov    0xd0(%rsp),%rax
mov    %ecx,0xc(%rsp)
sub    %ecx,%eax
mov    %rax,0x70(%rsp)
cmp    0x10(%rsp),%r8
mov    %r8,0xd8(%rsp)
jge    1710 <chdecomp+0x600>
mov    0x18(%rsp),%r9
mov    %r9,%rax
shr    $0x20,%rax
mov    %rax,0x120(%rsp)
setne  %r8b
mov    0x70(%rsp),%rax
mov    0x68(%rsp),%rcx
lea    (%rax,%rcx,1),%esi
mov    0xb0(%rsp),%rax
mov    %eax,%ecx
mov    0xc(%rsp),%eax
sub    %eax,%ecx
movslq %ecx,%rcx
lea    (%r15,%rcx,8),%rdx
mov    %rdx,0x118(%rsp)
lea    (%rdi,%rcx,1),%rdx
mov    0xa8(%rsp),%rbp
lea    0x0(%rbp,%rdx,8),%rdx
mov    %rdx,0x110(%rsp)
mov    %rsi,0xe0(%rsp)
lea    (%rsi,%r14,1),%edx
movslq %edx,%rdx
mov    %rdx,0x128(%rsp)
lea    (%rcx,%r9,1),%edx
cmp    %ecx,%edx
setl   %cl
or     %r8b,%cl
mov    %cl,0xb(%rsp)
mov    0x30(%rsp),%r8
sub    %eax,%r8d
mov    0x38(%rsp),%r13
sub    %eax,%r13d
mov    0x2c(%rsp),%ecx
sub    %eax,%ecx
mov    %ecx,0x9c(%rsp)
xor    %eax,%eax
mov    %rax,0x40(%rsp)
mov    0x78(%rsp),%rax
mov    %eax,0x54(%rsp)
mov    0x94(%rsp),%r11d
mov    0x98(%rsp),%r10d
mov    0x10(%rsp),%r9
jmp    1415 <chdecomp+0x305>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x88(%rsp),%rcx
movsd  (%rcx,%r9,8),%xmm0
mulsd  %xmm1,%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r15,%rax,8)
mov    %rdi,%rax
mov    0x40(%rsp),%rcx
add    $0x1,%ecx
mov    %rcx,0x40(%rsp)
add    $0x1,%r10d
add    $0x1,%r11d
addl   $0x1,0x54(%rsp)
cmp    %rbx,%r9
mov    %rax,%rdi
jle    1710 <chdecomp+0x600>
mov    %r9,%rcx
add    $0xffffffffffffffff,%r9
mov    0xe0(%rsp),%rax
lea    (%rax,%r9,1),%edx
movslq %edx,%rax
movsd  (%r15,%rax,8),%xmm1
cmp    %r12d,%r14d
jge    13d0 <chdecomp+0x2c0>
mov    %r14,%rbp
mov    $0x1,%ebx
sub    %ecx,%ebx
mov    %r12d,%esi
sub    %r9d,%esi
add    $0x1,%esi
mov    %r12d,%edx
sub    %r9d,%edx
imul   %esi,%edx
sar    %edx
add    0xd0(%rsp),%ebx
mov    %ebx,0x50(%rsp)
mov    0x10(%rsp),%r14
movapd %xmm1,%xmm0
testb  $0x1,0x20(%rsp)
je     149a <chdecomp+0x38a>
mov    0x50(%rsp),%ecx
sub    %edx,%ecx
mov    0x128(%rsp),%rbx
movsd  (%r15,%rbx,8),%xmm0
add    %ebp,%ecx
movslq %ecx,%rcx
mulsd  (%r15,%rcx,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x80(%rsp),%r14
cmpq   $0x0,0x18(%rsp)
je     14f5 <chdecomp+0x3e5>
mov    %r10d,%ecx
sub    %edx,%ecx
mov    %r11d,%r12d
sub    %edx,%r12d
nopl   (%rax)
lea    (%r14,%r13,1),%edx
movslq %edx,%rdx
movsd  (%r15,%rdx,8),%xmm2
lea    (%r12,%r14,1),%edx
movslq %edx,%rdx
mulsd  (%r15,%rdx,8),%xmm2
addsd  %xmm0,%xmm2
lea    (%r8,%r14,1),%edx
movslq %edx,%rdx
movsd  (%r15,%rdx,8),%xmm0
lea    (%rcx,%r14,1),%edx
movslq %edx,%rdx
mulsd  (%r15,%rdx,8),%xmm0
addsd  %xmm2,%xmm0
add    $0x2,%r14
cmp    %r14,%rdi
jne    14b0 <chdecomp+0x3a0>
mov    0x88(%rsp),%rcx
mulsd  (%rcx,%r9,8),%xmm0
movapd %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%r15,%rax,8)
mov    0x130(%rsp),%r12
mov    %rbp,%r14
cmp    %r12d,%r14d
mov    %rdi,%rax
mov    0xd8(%rsp),%rbx
jge    13ef <chdecomp+0x2df>
mov    %r12d,%ecx
sub    %r9d,%ecx
imul   %ecx,%esi
sar    %esi
xorpd  %xmm6,%xmm0
mov    0x10(%rsp),%rdi
cmpq   $0x4,0x20(%rsp)
jb     1650 <chdecomp+0x540>
mov    0x78(%rsp),%rcx
mov    0x40(%rsp),%rdx
add    %edx,%ecx
cmpq   $0x0,0x120(%rsp)
setne  %r14b
sub    %esi,%ecx
mov    0x18(%rsp),%rdx
lea    (%rcx,%rdx,1),%edi
cmp    %ecx,%edi
setl   %dl
or     %r14b,%dl
mov    %rbp,%r14
or     0xb(%rsp),%dl
mov    0x10(%rsp),%rdi
jne    1650 <chdecomp+0x540>
movslq %ecx,%rcx
lea    (%rax,%rcx,1),%rdx
mov    0xa8(%rsp),%rax
lea    (%rax,%rdx,8),%rdx
cmp    %rdx,0x118(%rsp)
jae    15c1 <chdecomp+0x4b1>
lea    (%r15,%rcx,8),%rcx
mov    0x10(%rsp),%rdi
cmp    0x110(%rsp),%rcx
jb     1650 <chdecomp+0x540>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
mov    0x54(%rsp),%eax
mov    %eax,%ecx
sub    %esi,%ecx
mov    0x60(%rsp),%rdx
mov    0x9c(%rsp),%eax
mov    %eax,%edi
nop
movslq %ecx,%rcx
movupd (%r15,%rcx,8),%xmm2
movupd 0x10(%r15,%rcx,8),%xmm3
movslq %edi,%rdi
movupd (%r15,%rdi,8),%xmm4
movupd 0x10(%r15,%rdi,8),%xmm5
mulpd  %xmm1,%xmm2
addpd  %xmm4,%xmm2
mulpd  %xmm1,%xmm3
addpd  %xmm5,%xmm3
movupd %xmm2,(%r15,%rdi,8)
movupd %xmm3,0x10(%r15,%rdi,8)
add    $0x4,%ecx
add    $0x4,%edi
add    $0xfffffffffffffffc,%rdx
jne    15e0 <chdecomp+0x4d0>
mov    0xa0(%rsp),%rdi
mov    0x60(%rsp),%rax
cmp    %rax,0x20(%rsp)
mov    0x58(%rsp),%rax
je     13ef <chdecomp+0x2df>
cs nopw 0x0(%rax,%rax,1)
mov    %r12d,%edx
sub    %edi,%edx
mov    %rdi,%rcx
test   $0x1,%dl
je     1690 <chdecomp+0x580>
mov    0x50(%rsp),%eax
sub    %esi,%eax
add    %edi,%eax
movslq %eax,%rcx
mov    0xe0(%rsp),%rax
lea    (%rax,%rdi,1),%edx
movslq %edx,%rdx
movsd  (%r15,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r15,%rdx,8),%xmm1
movsd  %xmm1,(%r15,%rdx,8)
lea    0x1(%rdi),%rcx
not    %rdi
cmp    0xc8(%rsp),%rdi
mov    0x58(%rsp),%rax
je     13ef <chdecomp+0x2df>
mov    %r10d,%edi
sub    %esi,%edi
mov    %r11d,%edx
sub    %esi,%edx
lea    (%rdx,%rcx,1),%ebp
movslq %ebp,%rbp
lea    (%rcx,%r13,1),%esi
movslq %esi,%rsi
movsd  (%r15,%rbp,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r15,%rsi,8),%xmm1
movsd  %xmm1,(%r15,%rsi,8)
lea    (%rdi,%rcx,1),%esi
movslq %esi,%rsi
lea    (%r8,%rcx,1),%ebp
movslq %ebp,%rbp
movsd  (%r15,%rsi,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r15,%rbp,8),%xmm1
movsd  %xmm1,(%r15,%rbp,8)
add    $0x2,%rcx
cmp    %rcx,%rax
jne    16b0 <chdecomp+0x5a0>
jmp    13ef <chdecomp+0x2df>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x70(%rsp),%r9
movslq %r9d,%r13
movsd  (%r15,%r13,8),%xmm3
cmp    %r12d,%r14d
jge    1800 <chdecomp+0x6f0>
mov    0x68(%rsp),%rax
lea    (%r9,%rax,1),%r8d
mov    0x10(%rsp),%rsi
movapd %xmm3,%xmm4
testb  $0x1,0x20(%rsp)
je     1761 <chdecomp+0x651>
lea    (%r8,%r14,1),%ecx
movslq %ecx,%rcx
movsd  (%r15,%rcx,8),%xmm4
andpd  0x8bb(%rip),%xmm4
maxsd  %xmm3,%xmm4
mov    0x80(%rsp),%rsi
cmpq   $0x0,0x18(%rsp)
je     17c0 <chdecomp+0x6b0>
mov    0x30(%rsp),%rcx
add    %esi,%ecx
mov    0xc(%rsp),%eax
sub    %eax,%ecx
mov    %rdi,%rdx
sub    %rsi,%rdx
mov    0x38(%rsp),%rbp
add    %ebp,%esi
sub    %eax,%esi
cs nopw 0x0(%rax,%rax,1)
nop
movslq %esi,%rsi
movsd  (%r15,%rsi,8),%xmm0
andpd  %xmm8,%xmm0
maxsd  %xmm4,%xmm0
movslq %ecx,%rcx
movsd  (%r15,%rcx,8),%xmm4
andpd  %xmm8,%xmm4
maxsd  %xmm0,%xmm4
add    $0x2,%ecx
add    $0x2,%esi
add    $0xfffffffffffffffe,%rdx
jne    1790 <chdecomp+0x680>
movapd %xmm7,%xmm1
divsd  %xmm4,%xmm1
movapd %xmm3,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm0,%xmm0
cmp    %r12d,%r14d
jge    18a0 <chdecomp+0x790>
testb  $0x1,0x20(%rsp)
jne    1819 <chdecomp+0x709>
mov    0x10(%rsp),%rdx
cmpq   $0x0,0x18(%rsp)
jne    1841 <chdecomp+0x731>
jmp    18a0 <chdecomp+0x790>
cs nopw 0x0(%rax,%rax,1)
movapd %xmm7,%xmm0
divsd  %xmm3,%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm0,%xmm0
movapd %xmm3,%xmm4
jmp    18a0 <chdecomp+0x790>
add    %r14d,%r8d
movslq %r8d,%rax
movsd  (%r15,%rax,8),%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm0
mov    0x80(%rsp),%rdx
cmpq   $0x0,0x18(%rsp)
je     18a0 <chdecomp+0x790>
mov    0x30(%rsp),%rax
add    %edx,%eax
mov    0xc(%rsp),%ebp
sub    %ebp,%eax
mov    %rdi,%rcx
sub    %rdx,%rcx
mov    0x38(%rsp),%rsi
add    %esi,%edx
sub    %ebp,%edx
nopl   (%rax)
movslq %edx,%rdx
movsd  (%r15,%rdx,8),%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm0,%xmm2
cltq
movsd  (%r15,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
add    $0x2,%eax
add    $0x2,%edx
add    $0xfffffffffffffffe,%rcx
jne    1860 <chdecomp+0x750>
cs nopw 0x0(%rax,%rax,1)
nop
ucomisd %xmm9,%xmm0
jb     18b0 <chdecomp+0x7a0>
sqrtsd %xmm0,%xmm0
jmp    18fb <chdecomp+0x7eb>
nopl   (%rax)
movsd  %xmm3,0x40(%rsp)
movapd %xmm4,0xe0(%rsp)
call   1030 <sqrt@plt>
movapd 0xe0(%rsp),%xmm4
movsd  0x40(%rsp),%xmm3
mov    0x70(%rsp),%r9
xorpd  %xmm9,%xmm9
movapd 0x72a(%rip),%xmm8
movsd  0x732(%rip),%xmm7
movapd 0x70a(%rip),%xmm6
mov    0x58(%rsp),%rdi
mov    0x4c(%rsp),%ebx
mov    0xc0(%rsp),%rbp
mov    0xb8(%rsp),%r8
mulsd  %xmm0,%xmm4
movapd %xmm3,%xmm0
divsd  %xmm4,%xmm0
addsd  %xmm7,%xmm0
mov    0x88(%rsp),%rax
movsd  %xmm0,(%rax,%r8,8)
movsd  %xmm4,(%r15,%r13,8)
cmp    %r12d,%r14d
jge    1260 <chdecomp+0x150>
addsd  %xmm4,%xmm3
movapd %xmm7,%xmm0
divsd  %xmm3,%xmm0
add    0x68(%rsp),%r9d
mov    0x10(%rsp),%rax
cmpq   $0x4,0x20(%rsp)
jae    1a00 <chdecomp+0x8f0>
mov    %r12d,%ecx
sub    %eax,%ecx
mov    %rax,%rdx
test   $0x1,%cl
je     1985 <chdecomp+0x875>
add    %eax,%r9d
movslq %r9d,%rcx
movsd  (%r15,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%r15,%rcx,8)
lea    0x1(%rax),%rdx
not    %rax
cmp    0xc8(%rsp),%rax
je     1260 <chdecomp+0x150>
mov    0x30(%rsp),%rax
add    %edx,%eax
mov    0xc(%rsp),%r9d
sub    %r9d,%eax
mov    %rdi,%rcx
sub    %rdx,%rcx
mov    0x38(%rsp),%rsi
add    %esi,%edx
sub    %r9d,%edx
cs nopw 0x0(%rax,%rax,1)
nop
movslq %edx,%rdx
movsd  (%r15,%rdx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%r15,%rdx,8)
cltq
movsd  (%r15,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%r15,%rax,8)
add    $0x2,%eax
add    $0x2,%edx
add    $0xfffffffffffffffe,%rcx
jne    19c0 <chdecomp+0x8b0>
jmp    1260 <chdecomp+0x150>
cs nopw 0x0(%rax,%rax,1)
mov    0xb0(%rsp),%rdx
sub    0xc(%rsp),%edx
mov    0x18(%rsp),%rax
lea    (%rdx,%rax,1),%ecx
mov    0x10(%rsp),%rax
cmp    %edx,%ecx
jl     195e <chdecomp+0x84e>
mov    0x18(%rsp),%rax
shr    $0x20,%rax
mov    0x10(%rsp),%rax
jne    195e <chdecomp+0x84e>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
cmpq   $0x4,0x108(%rsp)
jae    1a4c <chdecomp+0x93c>
xor    %eax,%eax
jmp    1aca <chdecomp+0x9ba>
mov    %ebx,%ecx
mov    0xc(%rsp),%esi
sub    %esi,%ecx
mov    0x2c(%rsp),%eax
mov    %eax,%edx
sub    %esi,%edx
mov    0xf8(%rsp),%rsi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
lea    (%rdx,%rax,1),%edi
movslq %edi,%rdi
movupd (%r15,%rdi,8),%xmm2
movupd 0x10(%r15,%rdi,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,(%r15,%rdi,8)
movupd %xmm3,0x10(%r15,%rdi,8)
lea    (%rcx,%rax,1),%edi
movslq %edi,%rdi
movupd (%r15,%rdi,8),%xmm2
movupd 0x10(%r15,%rdi,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,(%r15,%rdi,8)
movupd %xmm3,0x10(%r15,%rdi,8)
add    $0x8,%rax
add    $0xfffffffffffffffe,%rsi
jne    1a70 <chdecomp+0x960>
testb  $0x1,0x100(%rsp)
01
je     1afe <chdecomp+0x9ee>
add    %r14d,%eax
add    %r9d,%eax
cltq
movupd (%r15,%rax,8),%xmm2
movupd 0x10(%r15,%rax,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,(%r15,%rax,8)
movupd %xmm3,0x10(%r15,%rax,8)
mov    0xa0(%rsp),%rax
mov    0x60(%rsp),%rcx
cmp    %rcx,0x20(%rsp)
mov    0x58(%rsp),%rdi
je     1260 <chdecomp+0x150>
jmp    195e <chdecomp+0x84e>
add    $0x138,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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