void ElmHes(n, low, high, a, intchg) int n, low, high;
double **a;
int *intchg;
{
  int i, j, m;
  double x, y;
  int la, mm1, kp1, mp1;
  la = high - 1;
  kp1 = low + 1;
  if (la < kp1)
    return;
  for (m = kp1; m <= la; m++) {
    mm1 = m - 1;
    x = 0.0;
    i = m;
    for (j = m; j <= high; j++) {
      if (fabs(a[j][mm1]) > fabs(x)) {
        x = a[j][mm1];
        i = j;
      }
    }
    intchg[m] = i;
    if (i != m) {
      for (j = mm1; j < n; j++) {
        y = a[i][j];
        a[i][j] = a[m][j];
        a[m][j] = y;
      }
      for (j = 0; j <= high; j++) {
        y = a[j][i];
        a[j][i] = a[j][m];
        a[j][m] = y;
      }
    }
    if (fabs(x) > (1E-30)) {
      mp1 = m + 1;
      for (i = mp1; i <= high; i++) {
        y = a[i][mm1];
        if (fabs(y) > (1E-30)) {
          y /= x;
          a[i][mm1] = y;
          for (j = m; j < n; j++)
            a[i][j] -= y * a[m][j];
          for (j = 0; j <= high; j++)
            a[j][m] += y * a[j][i];
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<ElmHes>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    1138 <ElmHes+0x38>
jmp    14a2 <ElmHes+0x3a2>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     14a2 <ElmHes+0x3a2>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     11e0 <ElmHes+0xe0>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xe81(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  -0x38(%rbp),%xmm1
movaps 0xe71(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    11cd <ElmHes+0xcd>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    11d2 <ElmHes+0xd2>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1167 <ElmHes+0x67>
mov    -0x24(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
cmp    -0x2c(%rbp),%eax
je     12fc <ElmHes+0x1fc>
mov    -0x48(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1278 <ElmHes+0x178>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1200 <ElmHes+0x100>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     12f7 <ElmHes+0x1f7>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    127f <ElmHes+0x17f>
jmp    12fc <ElmHes+0x1fc>
movsd  -0x38(%rbp),%xmm0
movaps 0xd08(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xcec(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    148f <ElmHes+0x38f>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     148a <ElmHes+0x38a>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movaps 0xcb1(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xc95(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1477 <ElmHes+0x377>
movsd  -0x38(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1415 <ElmHes+0x315>
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%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    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    13a8 <ElmHes+0x2a8>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1472 <ElmHes+0x372>
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    141c <ElmHes+0x31c>
jmp    1477 <ElmHes+0x377>
jmp    147c <ElmHes+0x37c>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    132d <ElmHes+0x22d>
jmp    148f <ElmHes+0x38f>
jmp    1494 <ElmHes+0x394>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    113e <ElmHes+0x3e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<ElmHes>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
add    $0x1,%esi
cmp    %edx,%esi
jge    16ff <ElmHes+0x5ff>
mov    %r8,%r13
movslq %esi,%r11
movslq %edx,%r12
movslq %edi,%r15
lea    0x1(%rdx),%r8d
lea    -0x1(%r8),%rax
mov    %rax,-0x58(%rsp)
mov    %r8d,%r9d
and    $0xfffffffe,%r9d
lea    -0x1(%r11),%rsi
lea    0x6(%r11),%rax
mov    %rax,-0x68(%rsp)
mov    %r15,%rdi
sub    %r11,%rdi
add    $0xfffffffffffffffc,%rdi
xor    %ebp,%ebp
movapd 0xea9(%rip),%xmm11
movapd 0xea0(%rip),%xmm9
movsd  0xeb7(%rip),%xmm10
movapd 0xe9e(%rip),%xmm8
mov    %r11,%rax
mov    %r11,-0x48(%rsp)
mov    %r8,-0x60(%rsp)
mov    %r13,-0x50(%rsp)
jmp    11be <ElmHes+0xbe>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r11
mov    -0x18(%rsp),%rsi
add    $0x1,%rsi
mov    -0x28(%rsp),%rbp
add    $0x1,%rbp
addq   $0x1,-0x68(%rsp)
mov    -0x20(%rsp),%rdi
add    $0xffffffffffffffff,%rdi
cmp    %edx,%r11d
je     16ff <ElmHes+0x5ff>
mov    %rdi,-0x20(%rsp)
shr    $0x2,%rdi
add    $0x1,%rdi
and    $0xfffffffffffffffe,%rdi
mov    %rdi,-0x30(%rsp)
movslq %esi,%rbx
lea    0x1(%rbx),%r10
cmp    %r15,%r10
cmovle %r15,%r10
mov    %r10,-0x78(%rsp)
sub    %rbx,%r10
lea    -0x4(%r10),%r14
mov    %r14,-0x40(%rsp)
shr    $0x2,%r14
add    $0x1,%r14
mov    %r14,%rax
mov    %r14,-0x38(%rsp)
and    $0xfffffffffffffffe,%r14
mov    -0x48(%rsp),%rax
mov    %rbp,-0x28(%rsp)
add    %rbp,%rax
mov    %r15,%rdi
sub    %rax,%rdi
mov    %rdi,-0x70(%rsp)
neg    %rax
add    %r15,%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x8(%rsp)
shr    $0x2,%rax
add    $0x1,%rax
mov    %rax,-0x10(%rsp)
xorpd  %xmm4,%xmm4
mov    %r11d,%ebp
mov    %rsi,-0x18(%rsp)
mov    %r11d,%edi
nopw   0x0(%rax,%rax,1)
mov    0x8(%rcx,%rsi,8),%rax
movsd  -0x8(%rax,%r11,8),%xmm5
movapd %xmm5,%xmm6
andpd  %xmm11,%xmm6
movapd %xmm4,%xmm7
andpd  %xmm11,%xmm7
ucomisd %xmm7,%xmm6
cmpltsd %xmm6,%xmm7
andpd  %xmm7,%xmm5
andnpd %xmm4,%xmm7
movapd %xmm7,%xmm4
cmova  %ebp,%edi
orpd   %xmm5,%xmm4
add    $0x1,%rsi
add    $0x1,%ebp
cmp    %r12,%rsi
jl     1250 <ElmHes+0x150>
mov    %edi,0x0(%r13,%r11,4)
cmp    %r11d,%edi
je     1480 <ElmHes+0x380>
mov    %rdx,%r8
movslq %edi,%rbp
cmp    %r15,%r11
jg     13f3 <ElmHes+0x2f3>
mov    %r10,%rsi
mov    (%rcx,%rbp,8),%r10
mov    (%rcx,%r11,8),%r13
cmp    $0x4,%rsi
jb     13d0 <ElmHes+0x2d0>
lea    (%r10,%rbx,8),%rax
mov    -0x78(%rsp),%rdi
lea    0x0(,%rdi,8),%rdx
add    %r13,%rdx
cmp    %rdx,%rax
jae    12f9 <ElmHes+0x1f9>
lea    (%r10,%rdi,8),%rax
lea    0x0(,%rbx,8),%rdx
add    %r13,%rdx
cmp    %rax,%rdx
jb     13d0 <ElmHes+0x2d0>
cmpq   $0x4,-0x40(%rsp)
jae    1305 <ElmHes+0x205>
xor    %edx,%edx
jmp    137e <ElmHes+0x27e>
lea    0x30(,%rbx,8),%rdi
add    %r13,%rdi
lea    (%r10,%rbx,8),%rax
add    $0x30,%rax
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
movups -0x30(%rax,%rdx,8),%xmm5
movups -0x20(%rax,%rdx,8),%xmm6
movups -0x30(%rdi,%rdx,8),%xmm7
movups -0x20(%rdi,%rdx,8),%xmm3
movups %xmm7,-0x30(%rax,%rdx,8)
movups %xmm3,-0x20(%rax,%rdx,8)
movups %xmm5,-0x30(%rdi,%rdx,8)
movups %xmm6,-0x20(%rdi,%rdx,8)
movupd -0x10(%rax,%rdx,8),%xmm3
movupd (%rax,%rdx,8),%xmm5
movupd -0x10(%rdi,%rdx,8),%xmm6
movupd (%rdi,%rdx,8),%xmm7
movupd %xmm6,-0x10(%rax,%rdx,8)
movupd %xmm7,(%rax,%rdx,8)
movupd %xmm3,-0x10(%rdi,%rdx,8)
movupd %xmm5,(%rdi,%rdx,8)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%r14
jne    1320 <ElmHes+0x220>
mov    %rsi,%rax
and    $0xfffffffffffffffc,%rax
testb  $0x1,-0x38(%rsp)
je     13c5 <ElmHes+0x2c5>
add    %rbx,%rdx
movupd (%r10,%rdx,8),%xmm3
movupd 0x10(%r10,%rdx,8),%xmm5
movupd 0x0(%r13,%rdx,8),%xmm6
movupd 0x10(%r13,%rdx,8),%xmm7
movupd %xmm6,(%r10,%rdx,8)
movupd %xmm7,0x10(%r10,%rdx,8)
movupd %xmm3,0x0(%r13,%rdx,8)
movupd %xmm5,0x10(%r13,%rdx,8)
cmp    %rax,%rsi
je     13f3 <ElmHes+0x2f3>
add    %rax,%rbx
nopl   (%rax)
movsd  (%r10,%rbx,8),%xmm3
movsd  0x0(%r13,%rbx,8),%xmm5
movsd  %xmm5,(%r10,%rbx,8)
movsd  %xmm3,0x0(%r13,%rbx,8)
add    $0x1,%rbx
cmp    %r15,%rbx
jl     13d0 <ElmHes+0x2d0>
mov    %r8,%rdx
test   %edx,%edx
mov    -0x50(%rsp),%r13
mov    -0x60(%rsp),%r8
js     1480 <ElmHes+0x380>
cmpq   $0x0,-0x58(%rsp)
je     16ee <ElmHes+0x5ee>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%rcx,%rax,8),%rsi
movsd  (%rsi,%rbp,8),%xmm3
movsd  (%rsi,%r11,8),%xmm5
movsd  %xmm5,(%rsi,%rbp,8)
movsd  %xmm3,(%rsi,%r11,8)
mov    0x8(%rcx,%rax,8),%rsi
movsd  (%rsi,%rbp,8),%xmm3
movsd  (%rsi,%r11,8),%xmm5
movsd  %xmm5,(%rsi,%rbp,8)
movsd  %xmm3,(%rsi,%r11,8)
add    $0x2,%rax
cmp    %rax,%r9
jne    1420 <ElmHes+0x320>
test   $0x1,%r8b
je     1480 <ElmHes+0x380>
mov    (%rcx,%rax,8),%rax
movsd  (%rax,%rbp,8),%xmm3
movsd  (%rax,%r11,8),%xmm5
movsd  %xmm5,(%rax,%rbp,8)
movsd  %xmm3,(%rax,%r11,8)
xchg   %ax,%ax
movapd %xmm4,%xmm3
andpd  %xmm9,%xmm3
ucomisd %xmm10,%xmm3
jbe    1190 <ElmHes+0x90>
mov    -0x70(%rsp),%r14
and    $0xfffffffffffffffc,%r14
lea    (%r11,%r14,1),%rax
mov    %rax,-0x78(%rsp)
mov    %r11,%rbx
jmp    14b9 <ElmHes+0x3b9>
nopl   0x0(%rax,%rax,1)
cmp    %r12,%rbx
jge    1190 <ElmHes+0x90>
mov    0x8(%rcx,%rbx,8),%rbp
add    $0x1,%rbx
movsd  -0x8(%rbp,%r11,8),%xmm5
movapd %xmm5,%xmm3
andpd  %xmm9,%xmm3
ucomisd %xmm10,%xmm3
jbe    14b0 <ElmHes+0x3b0>
divsd  %xmm4,%xmm5
movsd  %xmm5,-0x8(%rbp,%r11,8)
cmp    %r15,%r11
jge    165f <ElmHes+0x55f>
mov    (%rcx,%r11,8),%r10
movapd %xmm5,%xmm6
xorpd  %xmm8,%xmm6
mov    %r11,%rax
cmpq   $0x4,-0x70(%rsp)
jb     1640 <ElmHes+0x540>
lea    0x0(,%r11,8),%rax
add    %rbp,%rax
lea    (%r10,%r15,8),%rsi
cmp    %rsi,%rax
jae    1538 <ElmHes+0x438>
lea    0x0(,%r15,8),%rdi
add    %rbp,%rdi
lea    (%r10,%r11,8),%rsi
mov    %r11,%rax
cmp    %rdi,%rsi
jb     1640 <ElmHes+0x540>
movapd %xmm6,%xmm12
unpcklpd %xmm6,%xmm12
cmpq   $0x4,-0x8(%rsp)
jae    1551 <ElmHes+0x451>
xor    %edi,%edi
jmp    15e7 <ElmHes+0x4e7>
mov    -0x68(%rsp),%rsi
lea    0x0(,%rsi,8),%rax
add    %rbp,%rax
lea    (%r10,%rsi,8),%r8
mov    -0x30(%rsp),%rsi
xor    %edi,%edi
nopl   0x0(%rax)
movupd -0x30(%r8,%rdi,8),%xmm3
movupd -0x20(%r8,%rdi,8),%xmm1
mulpd  %xmm12,%xmm3
movupd -0x30(%rax,%rdi,8),%xmm2
addpd  %xmm3,%xmm2
movupd -0x20(%rax,%rdi,8),%xmm3
movupd -0x10(%rax,%rdi,8),%xmm0
movupd (%rax,%rdi,8),%xmm7
mulpd  %xmm12,%xmm1
addpd  %xmm3,%xmm1
movupd %xmm2,-0x30(%rax,%rdi,8)
movupd %xmm1,-0x20(%rax,%rdi,8)
movupd -0x10(%r8,%rdi,8),%xmm1
movupd (%r8,%rdi,8),%xmm2
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
mulpd  %xmm12,%xmm2
addpd  %xmm7,%xmm2
movupd %xmm1,-0x10(%rax,%rdi,8)
movupd %xmm2,(%rax,%rdi,8)
add    $0x8,%rdi
add    $0xfffffffffffffffe,%rsi
jne    1570 <ElmHes+0x470>
testb  $0x1,-0x10(%rsp)
mov    -0x60(%rsp),%r8
je     162d <ElmHes+0x52d>
add    %r11,%rdi
movupd (%r10,%rdi,8),%xmm0
movupd 0x10(%r10,%rdi,8),%xmm1
movupd 0x0(%rbp,%rdi,8),%xmm2
movupd 0x10(%rbp,%rdi,8),%xmm3
mulpd  %xmm12,%xmm0
addpd  %xmm2,%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm3,%xmm1
movupd %xmm0,0x0(%rbp,%rdi,8)
movupd %xmm1,0x10(%rbp,%rdi,8)
mov    -0x78(%rsp),%rax
cmp    %r14,-0x70(%rsp)
je     165f <ElmHes+0x55f>
nopl   0x0(%rax)
movsd  (%r10,%rax,8),%xmm0
mulsd  %xmm6,%xmm0
addsd  0x0(%rbp,%rax,8),%xmm0
movsd  %xmm0,0x0(%rbp,%rax,8)
add    $0x1,%rax
cmp    %r15,%rax
jl     1640 <ElmHes+0x540>
test   %edx,%edx
js     14b0 <ElmHes+0x3b0>
cmpq   $0x0,-0x58(%rsp)
je     16c8 <ElmHes+0x5c8>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%rcx,%rax,8),%rsi
movsd  (%rsi,%rbx,8),%xmm0
mulsd  %xmm5,%xmm0
addsd  (%rsi,%r11,8),%xmm0
movsd  %xmm0,(%rsi,%r11,8)
mov    0x8(%rcx,%rax,8),%rsi
movsd  (%rsi,%rbx,8),%xmm0
mulsd  %xmm5,%xmm0
addsd  (%rsi,%r11,8),%xmm0
movsd  %xmm0,(%rsi,%r11,8)
add    $0x2,%rax
cmp    %rax,%r9
jne    1680 <ElmHes+0x580>
test   $0x1,%r8b
je     14b0 <ElmHes+0x3b0>
jmp    16d4 <ElmHes+0x5d4>
xor    %eax,%eax
test   $0x1,%r8b
je     14b0 <ElmHes+0x3b0>
mov    (%rcx,%rax,8),%rax
mulsd  (%rax,%rbx,8),%xmm5
addsd  (%rax,%r11,8),%xmm5
movsd  %xmm5,(%rax,%r11,8)
jmp    14b0 <ElmHes+0x3b0>
xor    %eax,%eax
test   $0x1,%r8b
jne    1464 <ElmHes+0x364>
jmp    1480 <ElmHes+0x380>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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