void QLalgo2(int n, double *d, double *e, double **V) {
  int i, k, l, m;
  double f = 0.0;
  double tst1 = 0.0;
  double eps = 2.22e-16;
  for (i = 1; i < n; i++) {
    e[i - 1] = e[i];
  }
  e[n - 1] = 0.0;
  for (l = 0; l < n; l++) {
    if (tst1 < fabs(d[l]) + fabs(e[l]))
      tst1 = fabs(d[l]) + fabs(e[l]);
    m = l;
    while (m < n) {
      if (fabs(e[m]) <= eps * tst1) {
        break;
      }
      m++;
    }
    if (m > l) {
      int iter = 0;
      do {
        double dl1, h;
        double g = d[l];
        double p = (d[l + 1] - g) / (2.0 * e[l]);
        double r = myhypot(p, 1.);
        iter = iter + 1;
        if (p < 0) {
          r = -r;
        }
        d[l] = e[l] / (p + r);
        d[l + 1] = e[l] * (p + r);
        dl1 = d[l + 1];
        h = g - d[l];
        for (i = l + 2; i < n; i++) {
          d[i] -= h;
        }
        f = f + h;
        p = d[m];
        {
          double c = 1.0;
          double c2 = c;
          double c3 = c;
          double el1 = e[l + 1];
          double s = 0.0;
          double s2 = 0.0;
          for (i = m - 1; i >= l; i--) {
            c3 = c2;
            c2 = c;
            s2 = s;
            g = c * e[i];
            h = c * p;
            r = myhypot(p, e[i]);
            e[i + 1] = s * r;
            s = e[i] / r;
            c = p / r;
            p = c * d[i] - s * g;
            d[i + 1] = h + s * (c * g + s * d[i]);
            for (k = 0; k < n; k++) {
              h = V[k][i + 1];
              V[k][i + 1] = s * V[k][i] + c * h;
              V[k][i] = c * V[k][i] - s * h;
            }
          }
          p = -s * s2 * c3 * el1 * e[l] / dl1;
          e[l] = s * p;
          d[l] = c * p;
        }
      } while (fabs(e[l]) > eps * tst1);
    }
    d[l] = d[l] + f;
    e[l] = 0.0;
  }
  {
    int j;
    double p;
    for (i = 0; i < n - 1; i++) {
      k = i;
      p = d[i];
      for (j = i + 1; j < n; j++) {
        if (d[j] < p) {
          k = j;
          p = d[j];
        }
      }
      if (k != i) {
        d[k] = d[i];
        d[i] = p;
        for (j = 0; j < n; j++) {
          p = V[j][i];
          V[j][i] = V[j][k];
          V[j][k] = p;
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<QLalgo2>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xebe(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1187 <QLalgo2+0x77>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    114e <QLalgo2+0x3e>
mov    -0x18(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    17ab <QLalgo2+0x69b>
movsd  -0x40(%rbp),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xe58(%rip),%xmm2
pand   %xmm2,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movaps 0xe40(%rip),%xmm3
pand   %xmm3,%xmm2
addsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    122b <QLalgo2+0x11b>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xe1a(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movaps 0xe02(%rip),%xmm2
pand   %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    127c <QLalgo2+0x16c>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movaps 0xdcf(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     126e <QLalgo2+0x15e>
jmp    127c <QLalgo2+0x16c>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1231 <QLalgo2+0x121>
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jle    176e <QLalgo2+0x65e>
movl   $0x0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  0xd48(%rip),%xmm1
mulsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0xd25(%rip),%xmm1
mov    $0x2,%al
call   1030 <myhypot@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x70(%rbp),%xmm0
jbe    132b <QLalgo2+0x21b>
movsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    13ec <QLalgo2+0x2dc>
movsd  -0x60(%rbp),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    13b7 <QLalgo2+0x2a7>
movsd  -0x38(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xbf3(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jl     16be <QLalgo2+0x5ae>
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x80(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    $0x2,%al
call   1030 <myhypot@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm4
movsd  -0xa0(%rbp),%xmm3
ff
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    16ab <QLalgo2+0x59b>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0xa0(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x60(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    15ce <QLalgo2+0x4be>
jmp    16b0 <QLalgo2+0x5a0>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    146d <QLalgo2+0x35d>
movsd  -0xa0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0x8cf(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
ucomisd %xmm1,%xmm0
ja     128f <QLalgo2+0x17f>
jmp    176e <QLalgo2+0x65e>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11a3 <QLalgo2+0x93>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1945 <QLalgo2+0x835>
mov    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
mov    -0xac(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1855 <QLalgo2+0x745>
mov    -0x10(%rbp),%rax
movslq -0xac(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    183c <QLalgo2+0x72c>
mov    -0xac(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0xac(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1841 <QLalgo2+0x731>
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
jmp    17ea <QLalgo2+0x6da>
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1932 <QLalgo2+0x822>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0xac(%rbp)
mov    -0xac(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    192d <QLalgo2+0x81d>
mov    -0x20(%rbp),%rax
movslq -0xac(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0xac(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0xac(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb8(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0xac(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
jmp    189a <QLalgo2+0x78a>
jmp    1932 <QLalgo2+0x822>
jmp    1937 <QLalgo2+0x827>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    17b2 <QLalgo2+0x6a2>
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<QLalgo2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x128,%rsp
mov    %rcx,%rbx
mov    %rdx,%r15
cmp    $0x2,%edi
mov    %rsi,0x20(%rsp)
jl     1172 <QLalgo2+0x52>
lea    0x8(%r15),%rsi
lea    -0x1(%rdi),%ebp
mov    %rdi,%r12
lea    0x0(,%rbp,8),%rdx
mov    %r15,%rdi
call   1040 <memmove@plt>
mov    0x20(%rsp),%rsi
mov    %r12,%rdi
mov    %rbp,0x30(%rsp)
movq   $0x0,(%r15,%rbp,8)
jmp    118e <QLalgo2+0x6e>
movslq %edi,%rax
movq   $0x0,-0x8(%r15,%rax,8)
cmp    $0x1,%edi
jne    18dd <QLalgo2+0x7bd>
xor    %eax,%eax
mov    %rax,0x30(%rsp)
mov    %rdi,0x38(%rsp)
mov    %edi,%edx
lea    -0x2(%rdx),%rax
mov    %rax,0x70(%rsp)
lea    -0x1(%rdx),%rax
mov    %rax,0x10(%rsp)
mov    %edx,%ebp
and    $0xfffffffe,%ebp
lea    0x40(%rsi),%rcx
lea    -0x6(%rdx),%rdi
mov    $0x2,%eax
mov    %rax,0x8(%rsp)
xor    %r12d,%r12d
xorpd  %xmm1,%xmm1
xorpd  %xmm4,%xmm4
mov    %rdx,0x18(%rsp)
jmp    1213 <QLalgo2+0xf3>
movapd %xmm6,%xmm2
addsd  %xmm4,%xmm2
movsd  %xmm2,(%rsi,%r12,8)
movq   $0x0,(%r15,%r12,8)
addq   $0x1,0x8(%rsp)
mov    0x40(%rsp),%rcx
add    $0x8,%rcx
mov    0x78(%rsp),%rdi
add    $0xffffffffffffffff,%rdi
mov    %r14,%r12
cmp    %rdx,%r14
movapd 0xe0(%rsp),%xmm1
je     17bf <QLalgo2+0x69f>
movsd  (%rsi,%r12,8),%xmm5
movapd %xmm5,%xmm6
movapd 0xddb(%rip),%xmm3
andpd  %xmm3,%xmm5
movsd  (%r15,%r12,8),%xmm7
movapd %xmm7,%xmm2
andpd  %xmm3,%xmm2
addsd  %xmm2,%xmm5
maxsd  %xmm1,%xmm5
movapd %xmm5,%xmm1
mulsd  0xdd5(%rip),%xmm1
ucomisd %xmm2,%xmm1
mov    %r12,%rax
jae    1295 <QLalgo2+0x175>
mov    %r12,%rax
nopw   0x0(%rax,%rax,1)
cmp    %rax,0x10(%rsp)
je     1290 <QLalgo2+0x170>
movsd  0x8(%r15,%rax,8),%xmm2
andpd  0xd8a(%rip),%xmm2
add    $0x1,%rax
ucomisd %xmm2,%xmm1
jb     1260 <QLalgo2+0x140>
jmp    1295 <QLalgo2+0x175>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x38(%rsp),%rax
mov    %eax,%r8d
lea    0x1(%r12),%r14
cmp    %r8,%r12
mov    %rcx,0x40(%rsp)
mov    %rdi,0x78(%rsp)
movapd %xmm5,0xe0(%rsp)
jae    11d0 <QLalgo2+0xb0>
mov    0x70(%rsp),%rax
sub    %r12,%rax
shr    $0x2,%rdi
lea    -0x4(%rax),%rcx
add    $0x1,%rdi
mov    %rcx,0xa0(%rsp)
shr    $0x2,%rcx
and    $0xfffffffffffffffe,%rdi
mov    %rdi,0x80(%rsp)
add    $0x1,%rcx
mov    %rcx,0x98(%rsp)
lea    0x2(%r12),%rcx
mov    %rcx,0xb0(%rsp)
mov    %r8,%rcx
mov    %r8,0xa8(%rsp)
movslq %r8d,%rcx
mov    %rcx,0x50(%rsp)
mulsd  0xd07(%rip),%xmm5
movapd %xmm5,0xf0(%rsp)
mov    %rax,0x48(%rsp)
mov    %rax,%rcx
and    $0xfffffffffffffffc,%rcx
mov    0x8(%rsp),%rax
mov    %rcx,0x90(%rsp)
add    %rcx,%rax
mov    %rax,0x88(%rsp)
mov    %r14,0xb8(%rsp)
jmp    13eb <QLalgo2+0x2cb>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  0xc8(%rsp),%xmm4
addsd  0x60(%rsp),%xmm4
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
movapd %xmm1,%xmm2
xorpd  %xmm6,%xmm2
mulsd  %xmm8,%xmm2
mulsd  0x58(%rsp),%xmm2
movsd  0xc0(%rsp),%xmm3
mulsd  %xmm2,%xmm3
movapd %xmm3,%xmm2
mulsd  (%r15,%r12,8),%xmm2
divsd  0x100(%rsp),%xmm2
mulsd  %xmm2,%xmm1
movsd  %xmm1,(%r15,%r12,8)
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%rsi,%r12,8)
movsd  (%r15,%r12,8),%xmm7
movapd %xmm7,%xmm1
andpd  0xc30(%rip),%xmm1
ucomisd 0xf0(%rsp),%xmm1
movapd %xmm2,%xmm6
mov    0xb8(%rsp),%r14
jbe    11d4 <QLalgo2+0xb4>
movapd %xmm6,0x60(%rsp)
movsd  %xmm4,0xc8(%rsp)
movsd  (%rsi,%r14,8),%xmm0
subsd  %xmm6,%xmm0
addsd  %xmm7,%xmm7
divsd  %xmm7,%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0xc0e(%rip),%xmm1
mov    $0x2,%al
call   1030 <myhypot@plt>
mov    0x20(%rsp),%rsi
movapd 0xbe2(%rip),%xmm6
mov    0x18(%rsp),%rdx
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  0x28(%rsp),%xmm3
movapd %xmm3,%xmm0
cmpltsd 0xbe3(%rip),%xmm0
movapd %xmm0,%xmm1
andnpd %xmm2,%xmm1
xorpd  %xmm6,%xmm2
andpd  %xmm0,%xmm2
orpd   %xmm1,%xmm2
movapd 0x60(%rsp),%xmm5
movsd  (%r15,%r12,8),%xmm0
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm0
movsd  %xmm0,(%rsi,%r12,8)
mulsd  (%r15,%r12,8),%xmm2
movapd %xmm2,0x100(%rsp)
movsd  %xmm2,(%rsi,%r14,8)
subsd  %xmm0,%xmm5
cmp    %rdx,0xb0(%rsp)
jae    1587 <QLalgo2+0x467>
mov    0x8(%rsp),%rax
cmpq   $0x4,0x48(%rsp)
jb     1570 <QLalgo2+0x450>
movapd %xmm5,%xmm0
unpcklpd %xmm5,%xmm0
cmpq   $0x4,0xa0(%rsp)
jae    14ca <QLalgo2+0x3aa>
xor    %eax,%eax
jmp    1528 <QLalgo2+0x408>
mov    0x80(%rsp),%rcx
xor    %eax,%eax
mov    0x40(%rsp),%rdi
nopl   0x0(%rax)
movupd -0x30(%rdi,%rax,8),%xmm1
movupd -0x20(%rdi,%rax,8),%xmm2
movupd -0x10(%rdi,%rax,8),%xmm3
movupd (%rdi,%rax,8),%xmm4
subpd  %xmm0,%xmm1
subpd  %xmm0,%xmm2
movupd %xmm1,-0x30(%rdi,%rax,8)
movupd %xmm2,-0x20(%rdi,%rax,8)
subpd  %xmm0,%xmm3
subpd  %xmm0,%xmm4
movupd %xmm3,-0x10(%rdi,%rax,8)
movupd %xmm4,(%rdi,%rax,8)
add    $0x8,%rax
add    $0xfffffffffffffffe,%rcx
jne    14e0 <QLalgo2+0x3c0>
testb  $0x1,0x98(%rsp)
01
je     1555 <QLalgo2+0x435>
add    0x8(%rsp),%rax
movupd (%rsi,%rax,8),%xmm1
movupd 0x10(%rsi,%rax,8),%xmm2
subpd  %xmm0,%xmm1
subpd  %xmm0,%xmm2
movupd %xmm1,(%rsi,%rax,8)
movupd %xmm2,0x10(%rsi,%rax,8)
mov    0x88(%rsp),%rax
mov    0x90(%rsp),%rcx
cmp    %rcx,0x48(%rsp)
je     1587 <QLalgo2+0x467>
nopl   0x0(%rax)
movsd  (%rsi,%rax,8),%xmm0
subsd  %xmm5,%xmm0
movsd  %xmm0,(%rsi,%rax,8)
add    $0x1,%rax
cmp    %rax,%rdx
jne    1570 <QLalgo2+0x450>
movapd %xmm5,0x60(%rsp)
movsd  (%r15,%r14,8),%xmm0
movsd  %xmm0,0xc0(%rsp)
xorpd  %xmm8,%xmm8
movsd  0xa7f(%rip),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0xa71(%rip),%xmm0
cmp    0x50(%rsp),%r12
jge    1360 <QLalgo2+0x240>
mov    0xa8(%rsp),%rax
movsd  (%rsi,%rax,8),%xmm7
xorpd  %xmm1,%xmm1
mov    0x50(%rsp),%r13
movsd  0xa48(%rip),%xmm0
movaps %xmm0,%xmm2
movaps %xmm0,%xmm3
jmp    1613 <QLalgo2+0x4f3>
nopl   0x0(%rax,%rax,1)
mulsd  %xmm1,%xmm10
mulsd  %xmm0,%xmm7
subsd  %xmm10,%xmm7
movapd %xmm9,%xmm2
movapd %xmm0,%xmm3
mov    %r14,%r12
cmp    %r14,%r13
jle    1360 <QLalgo2+0x240>
movaps %xmm7,0x110(%rsp)
movsd  %xmm3,0x28(%rsp)
mov    %r12,%r14
movsd  %xmm2,0x58(%rsp)
movsd  %xmm1,0xd8(%rsp)
mov    %r13,%r12
add    $0xffffffffffffffff,%r13
movsd  -0x8(%r15,%r12,8),%xmm1
movsd  %xmm1,0xd0(%rsp)
movaps %xmm7,%xmm0
mov    $0x2,%al
call   1030 <myhypot@plt>
movsd  0xd0(%rsp),%xmm10
movsd  0x28(%rsp),%xmm9
movsd  0xd8(%rsp),%xmm8
mov    0x20(%rsp),%rsi
movapd 0x994(%rip),%xmm6
mulsd  %xmm9,%xmm10
movapd 0x110(%rsp),%xmm2
movapd %xmm2,%xmm3
mulsd  %xmm9,%xmm3
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm8,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,(%r15,%r12,8)
movhpd -0x8(%r15,%r12,8),%xmm2
movapd %xmm2,%xmm0
unpcklpd %xmm1,%xmm1
divpd  %xmm1,%xmm0
movsd  -0x8(%rsi,%r12,8),%xmm7
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
movapd %xmm1,%xmm2
xorpd  %xmm6,%xmm2
movapd %xmm1,%xmm4
mulsd  %xmm7,%xmm4
movapd %xmm0,%xmm5
mulsd  %xmm10,%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm3,%xmm5
movsd  %xmm5,(%rsi,%r12,8)
unpcklpd %xmm0,%xmm2
cmpq   $0x0,0x10(%rsp)
je     1780 <QLalgo2+0x660>
xor    %eax,%eax
mov    0x18(%rsp),%rdx
nopl   (%rax)
mov    (%rbx,%rax,8),%rcx
movsd  (%rcx,%r12,8),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm2,%xmm3
movsd  (%rcx,%r13,8),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm0,%xmm4
addpd  %xmm3,%xmm4
movupd %xmm4,(%rcx,%r13,8)
mov    0x8(%rbx,%rax,8),%rcx
movsd  (%rcx,%r12,8),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm2,%xmm3
movsd  (%rcx,%r13,8),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm0,%xmm4
addpd  %xmm3,%xmm4
movupd %xmm4,(%rcx,%r13,8)
add    $0x2,%rax
cmp    %rax,%rbp
jne    1710 <QLalgo2+0x5f0>
test   $0x1,%dl
je     15f0 <QLalgo2+0x4d0>
jmp    1790 <QLalgo2+0x670>
nopl   0x0(%rax)
xor    %eax,%eax
mov    0x18(%rsp),%rdx
test   $0x1,%dl
je     15f0 <QLalgo2+0x4d0>
mov    (%rbx,%rax,8),%rax
movsd  (%rax,%r12,8),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm2,%xmm3
movsd  (%rax,%r13,8),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm0,%xmm2
addpd  %xmm3,%xmm2
movupd %xmm2,(%rax,%r13,8)
jmp    15f0 <QLalgo2+0x4d0>
cmpl   $0x2,0x38(%rsp)
mov    0x30(%rsp),%r9
jl     18dd <QLalgo2+0x7bd>
mov    %edx,%r11d
and    $0xfffffffe,%r11d
mov    $0x1,%r10d
xor    %r8d,%r8d
jmp    17fd <QLalgo2+0x6dd>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r10
cmp    %r9,%r8
je     18dd <QLalgo2+0x7bd>
mov    %r8,%rax
movsd  (%rsi,%r8,8),%xmm0
add    $0x1,%r8
cmp    %rdx,%r8
jae    1840 <QLalgo2+0x720>
mov    %r10,%rcx
movapd %xmm0,%xmm2
mov    %eax,%edi
nopl   0x0(%rax,%rax,1)
movsd  (%rsi,%rcx,8),%xmm1
ucomisd %xmm1,%xmm2
cmova  %ecx,%edi
minsd  %xmm2,%xmm1
add    $0x1,%rcx
movapd %xmm1,%xmm2
cmp    %rcx,%rdx
jne    1820 <QLalgo2+0x700>
jmp    1846 <QLalgo2+0x726>
nop
mov    %eax,%edi
movapd %xmm0,%xmm1
mov    %edi,%ecx
cmp    %rcx,%rax
je     17f0 <QLalgo2+0x6d0>
movslq %edi,%rdi
movsd  %xmm0,(%rsi,%rdi,8)
movsd  %xmm1,(%rsi,%rax,8)
cmpq   $0x0,0x10(%rsp)
je     18b5 <QLalgo2+0x795>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rbx,%rbp,8),%rcx
movsd  (%rcx,%rax,8),%xmm0
movsd  (%rcx,%rdi,8),%xmm1
movsd  %xmm1,(%rcx,%rax,8)
movsd  %xmm0,(%rcx,%rdi,8)
mov    0x8(%rbx,%rbp,8),%rcx
movsd  (%rcx,%rax,8),%xmm0
movsd  (%rcx,%rdi,8),%xmm1
movsd  %xmm1,(%rcx,%rax,8)
movsd  %xmm0,(%rcx,%rdi,8)
add    $0x2,%rbp
cmp    %rbp,%r11
jne    1870 <QLalgo2+0x750>
test   $0x1,%dl
je     17f0 <QLalgo2+0x6d0>
jmp    18c0 <QLalgo2+0x7a0>
xor    %ebp,%ebp
test   $0x1,%dl
je     17f0 <QLalgo2+0x6d0>
mov    (%rbx,%rbp,8),%rcx
movsd  (%rcx,%rax,8),%xmm0
movsd  (%rcx,%rdi,8),%xmm1
movsd  %xmm1,(%rcx,%rax,8)
movsd  %xmm0,(%rcx,%rdi,8)
jmp    17f0 <QLalgo2+0x6d0>
add    $0x128,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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