void tqli(d, e, n, z) float d[], e[], **z;
int n;
{
  int m, l, iter, i, k;
  float s, r, p, g, f, dd, c, b;
  void erhand();
  for (i = 2; i <= n; i++)
    e[i - 1] = e[i];
  e[n] = 0.0;
  for (l = 1; l <= n; l++) {
    iter = 0;
    do {
      for (m = l; m <= n - 1; m++) {
        dd = fabs(d[m]) + fabs(d[m + 1]);
        if (fabs(e[m]) + dd == dd)
          break;
      }
      if (m != l) {
        if (iter++ == 30)
          erhand("No convergence in TLQI.");
        g = (d[l + 1] - d[l]) / (2.0 * e[l]);
        r = sqrt((g * g) + 1.0);
        g = d[m] - d[l] + e[l] / (g + ((g) < 0 ? -fabs(r) : fabs(r)));
        s = c = 1.0;
        p = 0.0;
        for (i = m - 1; i >= l; i--) {
          f = s * e[i];
          b = c * e[i];
          if (fabs(f) >= fabs(g)) {
            c = g / f;
            r = sqrt((c * c) + 1.0);
            e[i + 1] = f * r;
            c *= (s = 1.0 / r);
          } else {
            s = f / g;
            r = sqrt((s * s) + 1.0);
            e[i + 1] = g * r;
            s *= (c = 1.0 / r);
          }
          g = d[i + 1] - p;
          r = (d[i] - g) * s + 2.0 * c * b;
          p = s * r;
          d[i + 1] = g + p;
          g = c * r - b;
          for (k = 1; k <= n; k++) {
            f = z[k][i + 1];
            z[k][i + 1] = s * z[k][i] + c * f;
            z[k][i] = c * z[k][i] - s * f;
          }
        }
        d[l] = d[l] - p;
        e[l] = g;
        e[m] = 0.0;
      }
    } while (m != l);
  }
}


x86 assembly (clang, -O0):
<tqli>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
movl   $0x2,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     117a <tqli+0x5a>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1141 <tqli+0x21>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     1765 <tqli+0x645>
movl   $0x0,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     125f <tqli+0x13f>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xe2d(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
movaps 0xe0c(%rip),%xmm2
pand   %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xde3(%rip),%xmm1
pand   %xmm1,%xmm0
movss  -0x4c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movss  -0x4c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    124c <tqli+0x12c>
jp     124c <tqli+0x12c>
jmp    125f <tqli+0x13f>
jmp    1251 <tqli+0x131>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11aa <tqli+0x8a>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1741 <tqli+0x621>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x2c(%rbp)
cmp    $0x1e,%eax
jne    128d <tqli+0x16d>
lea    0xd9e(%rip),%rdi
mov    $0x0,%al
call   1040 <erhand@plt>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xd4f(%rip),%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
mulss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd20(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x44(%rbp),%xmm0
jbe    138b <tqli+0x26b>
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xc9a(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    13a4 <tqli+0x284>
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xc65(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm3
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  0xc4b(%rip),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  0xc3e(%rip),%xmm0
movss  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x28(%rbp),%eax
jl     1700 <tqli+0x5e0>
movss  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xbbe(%rip),%xmm1
pand   %xmm1,%xmm0
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movaps 0xbaa(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     14e4 <tqli+0x3c4>
movss  -0x44(%rbp),%xmm0
divss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
mulss  -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb87(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x48(%rbp),%xmm0
mulss  -0x3c(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb48(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
mulss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    155f <tqli+0x43f>
movss  -0x48(%rbp),%xmm0
divss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x38(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb07(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x44(%rbp),%xmm0
mulss  -0x3c(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xac8(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x50(%rbp)
mulss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x44(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xa71(%rip),%xmm0
mulsd  %xmm2,%xmm0
movss  -0x54(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x38(%rbp),%xmm0
mulss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x44(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x50(%rbp),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     16ed <tqli+0x5cd>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x38(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  -0x48(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x50(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
movss  -0x38(%rbp),%xmm1
mulss  -0x48(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1620 <tqli+0x500>
jmp    16f2 <tqli+0x5d2>
mov    -0x30(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x30(%rbp)
jmp    13f8 <tqli+0x2d8>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x44(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    1746 <tqli+0x626>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jne    11a4 <tqli+0x84>
jmp    1757 <tqli+0x637>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1191 <tqli+0x71>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tqli>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %rcx,%rbx
mov    %rsi,%r15
mov    %rdi,%r12
cmp    $0x2,%edx
mov    %rdx,0x48(%rsp)
jge    1176 <tqli+0x46>
movslq %edx,%rbp
movl   $0x0,(%r15,%rbp,4)
cmp    $0x1,%edx
je     1199 <tqli+0x69>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0x4(%r15),%rdi
lea    0x8(%r15),%rsi
add    $0xffffffff,%edx
shl    $0x2,%rdx
call   1030 <memmove@plt>
mov    0x48(%rsp),%rdx
mov    %edx,%ebp
movl   $0x0,(%r15,%rbp,4)
lea    0x1(%rdx),%r14d
mov    $0x1,%esi
movdqa 0xe56(%rip),%xmm6
mov    %rbp,0x78(%rsp)
jmp    11d2 <tqli+0xa2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x70(%rsp),%rax
mov    %rax,%rsi
cmp    %r14,%rax
mov    0x48(%rsp),%rdx
je     1164 <tqli+0x34>
cmp    %esi,%edx
mov    %esi,%eax
cmovg  %edx,%eax
mov    %eax,0x2c(%rsp)
lea    0x1(%rsi),%rax
mov    %rax,0x70(%rsp)
mov    %eax,%r13d
movl   $0x0,0x14(%rsp)
mov    %rsi,0x18(%rsp)
mov    %r13,0x80(%rsp)
jmp    121e <tqli+0xee>
subss  %xmm8,%xmm0
addl   $0x1,0x14(%rsp)
movss  %xmm0,(%r12,%rsi,4)
movss  %xmm9,(%r15,%rsi,4)
movl   $0x0,(%r15,%rdx,4)
mov    %rsi,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    %rbp,%rcx
jge    1280 <tqli+0x150>
lea    0x1(%rcx),%rax
movq   (%r12,%rcx,4),%xmm0
pand   %xmm6,%xmm0
pshufd $0x55,%xmm0,%xmm1
addss  %xmm0,%xmm1
movd   (%r15,%rcx,4),%xmm0
pand   %xmm6,%xmm0
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
ucomisd %xmm1,%xmm0
mov    %rax,%rcx
jne    1230 <tqli+0x100>
jp     1230 <tqli+0x100>
add    $0xffffffff,%eax
jmp    1284 <tqli+0x154>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x2c(%rsp),%eax
mov    %eax,%edx
cmp    %rdx,%rsi
je     11c0 <tqli+0x90>
cmpl   $0x1e,0x14(%rsp)
mov    %rdx,0x20(%rsp)
jne    12bb <tqli+0x18b>
lea    0xda2(%rip),%rdi
xor    %eax,%eax
call   1050 <erhand@plt>
mov    0x20(%rsp),%rdx
mov    0x18(%rsp),%rsi
movdqa 0xd45(%rip),%xmm6
movss  (%r12,%r13,4),%xmm0
subss  (%r12,%rsi,4),%xmm0
cvtss2sd %xmm0,%xmm0
movss  (%r15,%rsi,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm1
divsd  %xmm1,%xmm0
xorps  %xmm4,%xmm4
cvtsd2ss %xmm0,%xmm4
movaps %xmm4,%xmm0
mulss  %xmm4,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xd39(%rip),%xmm0
ucomisd 0xd39(%rip),%xmm0
jb     1310 <tqli+0x1e0>
sqrtsd %xmm0,%xmm0
jmp    1333 <tqli+0x203>
nopw   0x0(%rax,%rax,1)
movss  %xmm4,0x30(%rsp)
call   1040 <sqrt@plt>
movss  0x30(%rsp),%xmm4
mov    0x20(%rsp),%rdx
mov    0x18(%rsp),%rsi
movdqa 0xccd(%rip),%xmm6
xorps  %xmm3,%xmm3
cvtsd2ss %xmm0,%xmm3
movss  (%r12,%rdx,4),%xmm1
movss  (%r12,%rsi,4),%xmm0
movss  (%r15,%rsi,4),%xmm2
xorps  %xmm8,%xmm8
ucomiss %xmm4,%xmm8
andps  %xmm6,%xmm3
cvtss2sd %xmm3,%xmm3
jbe    1364 <tqli+0x234>
xorps  0xcac(%rip),%xmm3
subss  %xmm0,%xmm1
cvtss2sd %xmm1,%xmm1
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm4,%xmm4
addsd  %xmm3,%xmm4
divsd  %xmm4,%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm9,%xmm9
cvtsd2ss %xmm2,%xmm9
cmp    %rdx,%rsi
jae    1200 <tqli+0xd0>
xorps  %xmm8,%xmm8
mov    %rdx,%r13
movss  0xc9f(%rip),%xmm0
movaps %xmm0,%xmm5
movaps %xmm0,%xmm7
nopw   0x0(%rax,%rax,1)
lea    -0x1(%r13),%rbp
movss  -0x4(%r15,%r13,4),%xmm3
mulss  %xmm3,%xmm7
movaps %xmm7,%xmm0
andps  %xmm6,%xmm0
movaps %xmm9,%xmm1
andps  %xmm6,%xmm1
ucomiss %xmm1,%xmm0
jae    1400 <tqli+0x2d0>
divss  %xmm9,%xmm7
movaps %xmm7,%xmm0
mulss  %xmm7,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xc47(%rip),%xmm0
ucomisd 0xc47(%rip),%xmm0
jb     1440 <tqli+0x310>
sqrtsd %xmm0,%xmm0
jmp    1490 <tqli+0x360>
nopl   0x0(%rax)
divss  %xmm7,%xmm9
movaps %xmm9,%xmm0
mulss  %xmm9,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xc16(%rip),%xmm0
ucomisd 0xc16(%rip),%xmm0
jb     14c0 <tqli+0x390>
sqrtsd %xmm0,%xmm0
jmp    1510 <tqli+0x3e0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movaps %xmm8,0x30(%rsp)
movaps %xmm9,0x60(%rsp)
movaps %xmm7,0x50(%rsp)
movss  %xmm5,0x10(%rsp)
movss  %xmm3,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm3
movss  0x10(%rsp),%xmm5
movaps 0x50(%rsp),%xmm7
movaps 0x60(%rsp),%xmm9
movaps 0x30(%rsp),%xmm8
mov    0x20(%rsp),%rdx
mov    0x18(%rsp),%rsi
movaps 0xb70(%rip),%xmm6
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
mulss  %xmm1,%xmm9
movss  0xb9c(%rip),%xmm0
divss  %xmm1,%xmm0
mulss  %xmm0,%xmm7
movaps %xmm9,%xmm1
jmp    1533 <tqli+0x403>
cs nopw 0x0(%rax,%rax,1)
nop
movaps %xmm8,0x30(%rsp)
movaps %xmm9,0x60(%rsp)
movaps %xmm7,0x50(%rsp)
movss  %xmm5,0x10(%rsp)
movss  %xmm3,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm3
movss  0x10(%rsp),%xmm5
movaps 0x50(%rsp),%xmm7
movaps 0x60(%rsp),%xmm9
movaps 0x30(%rsp),%xmm8
mov    0x20(%rsp),%rdx
mov    0x18(%rsp),%rsi
movaps 0xaf0(%rip),%xmm6
cvtsd2ss %xmm0,%xmm0
mulss  %xmm0,%xmm7
movaps %xmm7,%xmm1
movss  0xb1d(%rip),%xmm2
divss  %xmm0,%xmm2
mulss  %xmm2,%xmm9
movaps %xmm2,%xmm7
movaps %xmm9,%xmm0
mulss  %xmm3,%xmm5
movss  %xmm1,(%r15,%r13,4)
movss  (%r12,%r13,4),%xmm1
subss  %xmm8,%xmm1
movss  (%r12,%rbp,4),%xmm2
subss  %xmm1,%xmm2
mulss  %xmm7,%xmm2
cvtss2sd %xmm2,%xmm2
xorps  %xmm3,%xmm3
cvtss2sd %xmm0,%xmm3
addsd  %xmm3,%xmm3
xorps  %xmm4,%xmm4
cvtss2sd %xmm5,%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm2,%xmm4
xorps  %xmm9,%xmm9
cvtsd2ss %xmm4,%xmm9
movaps %xmm7,%xmm8
mulss  %xmm9,%xmm8
addss  %xmm8,%xmm1
movss  %xmm1,(%r12,%r13,4)
mulss  %xmm0,%xmm9
subss  %xmm5,%xmm9
movaps %xmm7,%xmm1
xorps  0xa7b(%rip),%xmm1
mov    $0x1,%eax
nopw   0x0(%rax,%rax,1)
mov    (%rbx,%rax,8),%rcx
movss  (%rcx,%r13,4),%xmm2
movss  (%rcx,%rbp,4),%xmm3
movaps %xmm0,%xmm4
mulss  %xmm2,%xmm4
movaps %xmm7,%xmm5
mulss  %xmm3,%xmm5
addss  %xmm4,%xmm5
movss  %xmm5,(%rcx,%r13,4)
mulss  %xmm1,%xmm2
mulss  %xmm0,%xmm3
addss  %xmm2,%xmm3
movss  %xmm3,(%rcx,%rbp,4)
add    $0x1,%rax
cmp    %rax,%r14
jne    15b0 <tqli+0x480>
mov    %rbp,%r13
movaps %xmm0,%xmm5
cmp    %rsi,%rbp
jg     13b0 <tqli+0x280>
movss  (%r12,%rsi,4),%xmm0
mov    0x78(%rsp),%rbp
mov    0x80(%rsp),%r13
jmp    1200 <tqli+0xd0>

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

LLVM IR (-O2):
@.str = [24 x i8] c"No convergence in TLQI.\00"
define void @tqli(float* nocapture %0, float* nocapture %1, i32 %2, float** nocapture %3) {
%5 = icmp slt i32 %2, 2
br i1 %5, label %16, label %6
6: ; preds = %4
%7 = getelementptr float, float* %1, i64 1
%8 = bitcast float* %7 to i8*
%9 = getelementptr float, float* %1, i64 2
%10 = bitcast float* %9 to i8*
%11 = add nsw i32 %2, -1
%12 = zext i32 %11 to i64
%13 = shl nuw nsw i64 %12, 2
%14 = zext i32 %2 to i64
%15 = getelementptr inbounds float, float* %1, i64 %14
store float 0.000000e+00, float* %15
br label %20
16: ; preds = %4
%17 = sext i32 %2 to i64
%18 = getelementptr inbounds float, float* %1, i64 %17
store float 0.000000e+00, float* %18
%19 = icmp eq i32 %2, 1
br i1 %19, label %20, label %180
20: ; preds = %6, %16
%21 = phi i64 [ %14, %6 ], [ %17, %16 ]
%22 = add nuw i32 %2, 1
%23 = zext i32 %22 to i64
br label %24
24: ; preds = %20, %178
%25 = phi i64 [ 1, %20 ], [ %28, %178 ]
%26 = trunc i64 %25 to i32
%27 = call i32 @llvm.smax.i32(i32 %2, i32 %26)
%28 = add nuw nsw i64 %25, 1
%29 = and i64 %28, 4294967295
%30 = getelementptr inbounds float, float* %0, i64 %29
%31 = getelementptr inbounds float, float* %0, i64 %25
%32 = getelementptr inbounds float, float* %1, i64 %25
br label %33
33: ; preds = %172, %24
%34 = phi i32 [ %61, %172 ], [ 0, %24 ]
br label %35
35: ; preds = %38, %33
%36 = phi i64 [ %40, %38 ], [ %25, %33 ]
%37 = icmp slt i64 %36, %21
br i1 %37, label %38, label %56
38: ; preds = %35
%39 = getelementptr inbounds float, float* %0, i64 %36
%40 = add nuw nsw i64 %36, 1
%41 = bitcast float* %39 to <2 x float>*
%42 = load <2 x float>, <2 x float>* %41
%43 = call <2 x float> @llvm.fabs.v2f32(<2 x float> %42)
%44 = shufflevector <2 x float> %43, <2 x float> poison, <2 x i32> <i32 1, i32 undef>
%45 = fadd <2 x float> %43, %44
%46 = extractelement <2 x float> %45, i64 0
%47 = getelementptr inbounds float, float* %1, i64 %36
%48 = load float, float* %47
%49 = tail call float @llvm.fabs.f32(float %48)
%50 = fpext float %49 to double
%51 = fpext float %46 to double
%52 = fadd double %50, %51
%53 = fcmp oeq double %52, %51
br i1 %53, label %54, label %35
54: ; preds = %38
%55 = trunc i64 %36 to i32
br label %56
56: ; preds = %35, %54
%57 = phi i32 [ %55, %54 ], [ %27, %35 ]
%58 = zext i32 %57 to i64
%59 = icmp eq i64 %25, %58
br i1 %59, label %178, label %60
60: ; preds = %56
%61 = add nuw nsw i32 %34, 1
%62 = icmp eq i32 %34, 30
br i1 %62, label %63, label %64
63: ; preds = %60
tail call void (i8*, ...) bitcast (void (...)* @erhand to void (i8*, ...)*)(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0))
br label %64
64: ; preds = %63, %60
%65 = load float, float* %30
%66 = load float, float* %31
%67 = fsub float %65, %66
%68 = fpext float %67 to double
%69 = load float, float* %32
%70 = fpext float %69 to double
%71 = fmul double %70, 2.000000e+00
%72 = fdiv double %68, %71
%73 = fptrunc double %72 to float
%74 = fmul float %73, %73
%75 = fpext float %74 to double
%76 = fadd double %75, 1.000000e+00
%77 = tail call double @sqrt(double %76)
%78 = fptrunc double %77 to float
%79 = getelementptr inbounds float, float* %0, i64 %58
%80 = load float, float* %79
%81 = load float, float* %31
%82 = fsub float %80, %81
%83 = fpext float %82 to double
%84 = load float, float* %32
%85 = fpext float %84 to double
%86 = fpext float %73 to double
%87 = fcmp olt float %73, 0.000000e+00
%88 = tail call float @llvm.fabs.f32(float %78)
%89 = fpext float %88 to double
%90 = fneg double %89
%91 = select i1 %87, double %90, double %89
%92 = fadd double %91, %86
%93 = fdiv double %85, %92
%94 = fadd double %93, %83
%95 = fptrunc double %94 to float
%96 = icmp ult i64 %25, %58
br i1 %96, label %99, label %172
97: ; preds = %156
%98 = icmp sgt i64 %105, %25
br i1 %98, label %99, label %170
99: ; preds = %64, %97
%100 = phi i64 [ %105, %97 ], [ %58, %64 ]
%101 = phi float [ %136, %97 ], [ 1.000000e+00, %64 ]
%102 = phi float [ %154, %97 ], [ %95, %64 ]
%103 = phi float [ %151, %97 ], [ 0.000000e+00, %64 ]
%104 = phi float [ %135, %97 ], [ 1.000000e+00, %64 ]
%105 = add nsw i64 %100, -1
%106 = getelementptr inbounds float, float* %1, i64 %105
%107 = load float, float* %106
%108 = fmul float %104, %107
%109 = fmul float %101, %107
%110 = tail call float @llvm.fabs.f32(float %108)
%111 = tail call float @llvm.fabs.f32(float %102)
%112 = fcmp ult float %110, %111
br i1 %112, label %123, label %113
113: ; preds = %99
%114 = fdiv float %102, %108
%115 = fmul float %114, %114
%116 = fpext float %115 to double
%117 = fadd double %116, 1.000000e+00
%118 = tail call double @sqrt(double %117)
%119 = fptrunc double %118 to float
%120 = fmul float %108, %119
%121 = fdiv float 1.000000e+00, %119
%122 = fmul float %114, %121
br label %133
123: ; preds = %99
%124 = fdiv float %108, %102
%125 = fmul float %124, %124
%126 = fpext float %125 to double
%127 = fadd double %126, 1.000000e+00
%128 = tail call double @sqrt(double %127)
%129 = fptrunc double %128 to float
%130 = fmul float %102, %129
%131 = fdiv float 1.000000e+00, %129
%132 = fmul float %124, %131
br label %133
133: ; preds = %113, %123
%134 = phi float [ %130, %123 ], [ %120, %113 ]
%135 = phi float [ %132, %123 ], [ %121, %113 ]
%136 = phi float [ %131, %123 ], [ %122, %113 ]
%137 = getelementptr inbounds float, float* %1, i64 %100
store float %134, float* %137
%138 = getelementptr inbounds float, float* %0, i64 %100
%139 = load float, float* %138
%140 = fsub float %139, %103
%141 = getelementptr inbounds float, float* %0, i64 %105
%142 = load float, float* %141
%143 = fsub float %142, %140
%144 = fmul float %135, %143
%145 = fpext float %144 to double
%146 = fpext float %136 to double
%147 = fmul double %146, 2.000000e+00
%148 = fpext float %109 to double
%149 = tail call double @llvm.fmuladd.f64(double %147, double %148, double %145)
%150 = fptrunc double %149 to float
%151 = fmul float %135, %150
%152 = fadd float %140, %151
store float %152, float* %138
%153 = fneg float %109
%154 = tail call float @llvm.fmuladd.f32(float %136, float %150, float %153)
%155 = fneg float %135
br label %156
156: ; preds = %133, %156
%157 = phi i64 [ 1, %133 ], [ %168, %156 ]
%158 = getelementptr inbounds float*, float** %3, i64 %157
%159 = load float*, float** %158
%160 = getelementptr inbounds float, float* %159, i64 %100
%161 = load float, float* %160
%162 = getelementptr inbounds float, float* %159, i64 %105
%163 = load float, float* %162
%164 = fmul float %136, %161
%165 = tail call float @llvm.fmuladd.f32(float %135, float %163, float %164)
store float %165, float* %160
%166 = fmul float %161, %155
%167 = tail call float @llvm.fmuladd.f32(float %136, float %163, float %166)
store float %167, float* %162
%168 = add nuw nsw i64 %157, 1
%169 = icmp eq i64 %168, %23
br i1 %169, label %97, label %156
170: ; preds = %97
%171 = load float, float* %31
br label %172
172: ; preds = %170, %64
%173 = phi float [ %81, %64 ], [ %171, %170 ]
%174 = phi float [ 0.000000e+00, %64 ], [ %151, %170 ]
%175 = phi float [ %95, %64 ], [ %154, %170 ]
%176 = fsub float %173, %174
store float %176, float* %31
store float %175, float* %32
%177 = getelementptr inbounds float, float* %1, i64 %58
store float 0.000000e+00, float* %177
br label %33
178: ; preds = %56
%179 = icmp eq i64 %28, %23
br i1 %179, label %180, label %24
180: ; preds = %178, %16
ret void
}