#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double *calloc(int, int);
int /*<<< orphan*/ free(double *);
double sqrt(double);
void ktau(double *X, double *Y, int *N, double *tau, double *S, double *D,
          int *T, int *U, int *V) {
  int K, L, I, J, Iend, Jend;
  int i, j, m;
  double *Y2 = calloc(*N, sizeof(double));
  double *X2 = calloc(*N, sizeof(double));
  double *xptr, *yptr;
  bool Iflag, Jflag, Xflag;
  *S = 0.;
  *D = 0.;
  *T = 0;
  *U = 0;
  *V = 0;
  K = 1;
  do {
    L = 0;
    do {
      I = L;
      J = (I + K) < (*N) ? (I + K) : (*N);
      Iend = J;
      Jend = (J + K) < (*N) ? (J + K) : (*N);
      do {
        Iflag = (I < Iend);
        Jflag = (J < Jend);
        if (Iflag & Jflag) {
          Xflag = ((X[I] > X[J]) | ((X[I] == X[J]) & (Y[I] > Y[J])));
        } else {
          Xflag = false;
        }
        if ((Iflag & !Jflag) | (Iflag & Jflag & !Xflag)) {
          X2[L] = X[I];
          Y2[L] = Y[I];
          I++;
          L++;
        };
        if ((!Iflag && Jflag) | (Iflag && Jflag && Xflag)) {
          X2[L] = X[J];
          Y2[L] = Y[J];
          J++;
          L++;
        };
      } while (Iflag | Jflag);
    } while (L < *N);
    xptr = X;
    X = X2;
    X2 = xptr;
    yptr = Y;
    Y = Y2;
    Y2 = yptr;
    K *= 2;
  } while (K < *N);
  j = 1;
  m = 1;
  for (i = 1; i < *N; i++)
    if (X[i] == X[i - 1]) {
      j++;
      if (Y[i] == Y[i - 1])
        m++;
    } else if (j > 1) {
      *T += j * (j - 1) / 2;
      if (m > 1)
        *V += m * (m - 1) / 2;
      j = 1;
      m = 1;
    };
  *T += j * (j - 1) / 2;
  *V += m * (m - 1) / 2;
  K = 1;
  do {
    L = 0;
    do {
      I = L;
      J = (I + K) < (*N) ? (I + K) : (*N);
      Iend = J;
      Jend = (J + K) < (*N) ? (J + K) : (*N);
      do {
        Iflag = (I < Iend);
        Jflag = (J < Jend);
        if (Iflag & Jflag) {
          Xflag = (Y[I] > Y[J]);
        } else {
          Xflag = false;
        }
        if ((Iflag & !Jflag) | (Iflag & Jflag & !Xflag)) {
          X2[L] = X[I];
          Y2[L] = Y[I];
          I++;
          L++;
        };
        if ((!Iflag && Jflag) | (Iflag && Jflag && Xflag)) {
          X2[L] = X[J];
          Y2[L] = Y[J];
          *S += Iend - I;
          J++;
          L++;
        };
      } while ((Iflag | Jflag));
    } while (L < *N);
    xptr = X;
    X = X2;
    X2 = xptr;
    yptr = Y;
    Y = Y2;
    Y2 = yptr;
    K *= 2;
  } while (K < *N);
  j = 1;
  for (i = 1; i < *N; i++)
    if (Y[i] == Y[i - 1])
      j++;
    else if (j > 1) {
      *U += j * (j - 1) / 2;
      j = 1;
    };
  *U += j * (j - 1) / 2;
  *D = 0.5 * (*N) * (*N - 1);
  *S = *D - (2. * (*S) + *T + *U - *V);
  *D = sqrt((*D - *T) * (*D - *U));
  *tau = (*S) / (*D);
  free(Y2);
  free(X2);
}


x86 assembly (clang, -O0):
<ktau>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%edi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0x60(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%edi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0x68(%rbp)
mov    -0x28(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
movl   $0x0,(%rax)
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    0x20(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x1,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    11f2 <ktau+0xc2>
mov    -0x3c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x88(%rbp)
jmp    11fe <ktau+0xce>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x88(%rbp)
mov    -0x88(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
add    -0x34(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    1230 <ktau+0x100>
mov    -0x40(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x8c(%rbp)
jmp    123c <ktau+0x10c>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x44(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x80(%rbp)
mov    -0x7c(%rbp),%eax
and    -0x80(%rbp),%eax
cmp    $0x0,%eax
je     12f2 <ktau+0x1c2>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x8(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm0
mov    -0x8(%rbp),%rcx
movslq -0x40(%rbp),%rdx
ucomisd (%rcx,%rdx,8),%xmm0
sete   %cl
setnp  %dl
and    %dl,%cl
and    $0x1,%cl
movzbl %cl,%ecx
mov    -0x10(%rbp),%rdx
movslq -0x3c(%rbp),%rsi
movsd  (%rdx,%rsi,8),%xmm0
mov    -0x10(%rbp),%rdx
movslq -0x40(%rbp),%rsi
ucomisd (%rdx,%rsi,8),%xmm0
seta   %dl
and    $0x1,%dl
movzbl %dl,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x84(%rbp)
jmp    12fc <ktau+0x1cc>
movl   $0x0,-0x84(%rbp)
mov    -0x7c(%rbp),%eax
cmpl   $0x0,-0x80(%rbp)
setne  %cl
xor    $0xff,%cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
mov    -0x7c(%rbp),%ecx
and    -0x80(%rbp),%ecx
cmpl   $0x0,-0x84(%rbp)
setne  %dl
xor    $0xff,%dl
and    $0x1,%dl
movzbl %dl,%edx
and    %edx,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     137d <ktau+0x24d>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x7c(%rbp)
mov    %al,-0x8d(%rbp)
jne    139c <ktau+0x26c>
cmpl   $0x0,-0x80(%rbp)
setne  %al
mov    %al,-0x8d(%rbp)
mov    -0x8d(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x94(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x7c(%rbp)
mov    %al,-0x8e(%rbp)
je     13e1 <ktau+0x2b1>
xor    %eax,%eax
cmpl   $0x0,-0x80(%rbp)
mov    %al,-0x8e(%rbp)
je     13e1 <ktau+0x2b1>
cmpl   $0x0,-0x84(%rbp)
setne  %al
mov    %al,-0x8e(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x8e(%rbp),%cl
and    $0x1,%cl
movzbl %cl,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     1444 <ktau+0x314>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1449 <ktau+0x319>
mov    -0x7c(%rbp),%eax
or     -0x80(%rbp),%eax
cmp    $0x0,%eax
jne    1245 <ktau+0x115>
jmp    145d <ktau+0x32d>
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jl     11c9 <ktau+0x99>
mov    -0x8(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x68(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x60(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x78(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jl     11c2 <ktau+0x92>
movl   $0x1,-0x50(%rbp)
movl   $0x1,-0x54(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    15bb <ktau+0x48b>
mov    -0x8(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jne    1545 <ktau+0x415>
jp     1545 <ktau+0x415>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jne    1540 <ktau+0x410>
jp     1540 <ktau+0x410>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    15a8 <ktau+0x478>
cmpl   $0x1,-0x50(%rbp)
jle    15a3 <ktau+0x473>
mov    -0x50(%rbp),%eax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x10(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
cmpl   $0x1,-0x54(%rbp)
jle    1595 <ktau+0x465>
mov    -0x54(%rbp),%eax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x20(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
movl   $0x1,-0x50(%rbp)
movl   $0x1,-0x54(%rbp)
jmp    15a8 <ktau+0x478>
jmp    15ad <ktau+0x47d>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    14c9 <ktau+0x399>
mov    -0x50(%rbp),%eax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x10(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x54(%rbp),%eax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x20(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
movl   $0x1,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    162e <ktau+0x4fe>
mov    -0x3c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x98(%rbp)
jmp    163a <ktau+0x50a>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x98(%rbp)
mov    -0x98(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
add    -0x34(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    166c <ktau+0x53c>
mov    -0x40(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x9c(%rbp)
jmp    1678 <ktau+0x548>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x44(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x80(%rbp)
mov    -0x7c(%rbp),%eax
and    -0x80(%rbp),%eax
cmp    $0x0,%eax
je     16df <ktau+0x5af>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x84(%rbp)
jmp    16e9 <ktau+0x5b9>
movl   $0x0,-0x84(%rbp)
mov    -0x7c(%rbp),%eax
cmpl   $0x0,-0x80(%rbp)
setne  %cl
xor    $0xff,%cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
mov    -0x7c(%rbp),%ecx
and    -0x80(%rbp),%ecx
cmpl   $0x0,-0x84(%rbp)
setne  %dl
xor    $0xff,%dl
and    $0x1,%dl
movzbl %dl,%edx
and    %edx,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     176a <ktau+0x63a>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x7c(%rbp)
mov    %al,-0x9d(%rbp)
jne    1789 <ktau+0x659>
cmpl   $0x0,-0x80(%rbp)
setne  %al
mov    %al,-0x9d(%rbp)
mov    -0x9d(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xa4(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x7c(%rbp)
mov    %al,-0x9e(%rbp)
je     17ce <ktau+0x69e>
xor    %eax,%eax
cmpl   $0x0,-0x80(%rbp)
mov    %al,-0x9e(%rbp)
je     17ce <ktau+0x69e>
cmpl   $0x0,-0x84(%rbp)
setne  %al
mov    %al,-0x9e(%rbp)
mov    -0xa4(%rbp),%eax
mov    -0x9e(%rbp),%cl
and    $0x1,%cl
movzbl %cl,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     1847 <ktau+0x717>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
sub    -0x3c(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    184c <ktau+0x71c>
mov    -0x7c(%rbp),%eax
or     -0x80(%rbp),%eax
cmp    $0x0,%eax
jne    1681 <ktau+0x551>
jmp    1860 <ktau+0x730>
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jl     1605 <ktau+0x4d5>
mov    -0x8(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x68(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x60(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x78(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jl     15fe <ktau+0x4ce>
movl   $0x1,-0x50(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    1954 <ktau+0x824>
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jne    190d <ktau+0x7dd>
jp     190d <ktau+0x7dd>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1941 <ktau+0x811>
cmpl   $0x1,-0x50(%rbp)
jle    193c <ktau+0x80c>
mov    -0x50(%rbp),%eax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x18(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
movl   $0x1,-0x50(%rbp)
jmp    1941 <ktau+0x811>
jmp    1946 <ktau+0x816>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    18c5 <ktau+0x795>
mov    -0x50(%rbp),%eax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x18(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
movsd  0x67e(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x10(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
addsd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
mov    0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
addsd  %xmm2,%xmm1
mov    0x20(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
subsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x10(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
subsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x18(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
divsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x60(%rbp),%rdi
call   1030 <free@plt>
mov    -0x68(%rbp),%rdi
call   1030 <free@plt>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ktau>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r9,0x30(%rsp)
mov    %r8,0x28(%rsp)
mov    %rcx,0x50(%rsp)
mov    %rdx,%r13
mov    %rsi,%rbp
mov    %rdi,%r14
mov    0xa0(%rsp),%rax
mov    %rax,0x20(%rsp)
mov    0x98(%rsp),%rax
mov    %rax,0x38(%rsp)
mov    0x90(%rsp),%r12
mov    (%rdx),%ebx
mov    %ebx,%edi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,%r15
mov    %ebx,%edi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,0x8(%rsp)
mov    0x28(%rsp),%rax
movq   $0x0,(%rax)
mov    0x30(%rsp),%rax
movq   $0x0,(%rax)
mov    %r12,0x48(%rsp)
movl   $0x0,(%r12)
mov    0x38(%rsp),%rax
movl   $0x0,(%rax)
mov    0x20(%rsp),%rax
movl   $0x0,(%rax)
mov    %r13,0x40(%rsp)
mov    0x0(%r13),%edx
mov    $0x1,%eax
mov    %rax,0x10(%rsp)
mov    %edx,0x1c(%rsp)
nopl   0x0(%rax)
mov    0x8(%rsp),%r10
mov    %r15,%r8
mov    %r14,0x8(%rsp)
mov    %rbp,%r15
xor    %r12d,%r12d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x10(%rsp),%rax
lea    (%r12,%rax,1),%r14d
cmp    %edx,%r14d
cmovge %edx,%r14d
add    %r14d,%eax
cmp    %edx,%eax
cmovge %edx,%eax
mov    %r12d,%ebp
mov    %r14d,%edi
xchg   %ax,%ax
mov    %r8,%rdx
mov    %edi,%r11d
cmp    %r14d,%ebp
setl   %cl
cmp    %eax,%edi
setl   %r8b
and    %cl,%r8b
xor    %edi,%edi
movslq %ebp,%rsi
movslq %r11d,%r9
cmp    $0x1,%r8b
jne    1289 <ktau+0x159>
mov    0x8(%rsp),%rcx
movsd  (%rcx,%rsi,8),%xmm0
ucomisd (%rcx,%r9,8),%xmm0
seta   %dil
setnp  %bl
sete   %cl
and    %bl,%cl
mov    %r15,%rbx
movsd  (%r15,%rsi,8),%xmm0
ucomisd (%r15,%r9,8),%xmm0
seta   %bl
and    %cl,%bl
or     %dil,%bl
movzbl %bl,%edi
cmp    %eax,%r11d
setge  %bl
cmp    %r14d,%ebp
setl   %r13b
test   %edi,%edi
sete   %cl
test   %bl,%r13b
jne    12b0 <ktau+0x180>
and    %cl,%r8b
jne    12b0 <ktau+0x180>
mov    %ebp,%esi
mov    %rdx,%r8
jmp    12d9 <ktau+0x1a9>
nopl   0x0(%rax)
mov    0x8(%rsp),%rcx
movsd  (%rcx,%rsi,8),%xmm0
movslq %r12d,%r12
movsd  %xmm0,(%r10,%r12,8)
movsd  (%r15,%rsi,8),%xmm0
mov    %rdx,%r8
movsd  %xmm0,(%rdx,%r12,8)
lea    0x1(%rbp),%esi
add    $0x1,%r12d
test   %edi,%edi
setne  %dil
cmp    %eax,%r11d
setl   %cl
cmp    %r14d,%ebp
setge  %dl
setl   %bl
test   %cl,%dl
jne    1300 <ktau+0x1d0>
and    %cl,%bl
and    %dil,%bl
jne    1300 <ktau+0x1d0>
mov    %r11d,%edi
jmp    1328 <ktau+0x1f8>
xchg   %ax,%ax
mov    0x8(%rsp),%rcx
movsd  (%rcx,%r9,8),%xmm0
movslq %r12d,%r12
movsd  %xmm0,(%r10,%r12,8)
movsd  (%r15,%r9,8),%xmm0
movsd  %xmm0,(%r8,%r12,8)
lea    0x1(%r11),%edi
add    $0x1,%r12d
cmp    %r14d,%ebp
mov    %esi,%ebp
jl     1230 <ktau+0x100>
mov    %esi,%ebp
cmp    %eax,%r11d
jl     1230 <ktau+0x100>
mov    0x1c(%rsp),%edx
cmp    %edx,%r12d
jl     1210 <ktau+0xe0>
mov    0x10(%rsp),%rax
add    %eax,%eax
mov    %r8,%rbp
mov    %r10,%r14
mov    %rax,0x10(%rsp)
cmp    %edx,%eax
jl     11f0 <ktau+0xc0>
mov    $0x1,%eax
mov    %rax,0x10(%rsp)
mov    $0x1,%esi
mov    $0x1,%ecx
cmp    $0x2,%edx
mov    0x48(%rsp),%rbp
mov    0x40(%rsp),%rbx
jl     1425 <ktau+0x2f5>
movsd  (%r10),%xmm0
mov    $0x1,%ecx
mov    $0x1,%edx
mov    $0x1,%esi
jmp    13c1 <ktau+0x291>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x2,%esi
jge    13ec <ktau+0x2bc>
add    $0x1,%rdx
movslq (%rbx),%rdi
cmp    %rdi,%rdx
jge    1425 <ktau+0x2f5>
movapd %xmm0,%xmm1
movsd  (%r10,%rdx,8),%xmm0
ucomisd %xmm1,%xmm0
jne    13b0 <ktau+0x280>
jp     13b0 <ktau+0x280>
add    $0x1,%esi
movsd  (%r8,%rdx,8),%xmm1
ucomisd -0x8(%r8,%rdx,8),%xmm1
jne    13b5 <ktau+0x285>
jp     13b5 <ktau+0x285>
add    $0x1,%ecx
jmp    13b5 <ktau+0x285>
lea    -0x1(%rsi),%edi
imul   %esi,%edi
mov    %edi,%esi
shr    $0x1f,%esi
add    %edi,%esi
sar    %esi
add    %esi,0x0(%rbp)
mov    $0x1,%esi
cmp    $0x2,%ecx
jl     141e <ktau+0x2ee>
lea    -0x1(%rcx),%edi
imul   %ecx,%edi
mov    %edi,%ecx
shr    $0x1f,%ecx
add    %edi,%ecx
sar    %ecx
mov    0x20(%rsp),%rdi
add    %ecx,(%rdi)
mov    $0x1,%ecx
jmp    13b5 <ktau+0x285>
lea    -0x1(%rsi),%edx
imul   %esi,%edx
mov    %edx,%esi
shr    $0x1f,%esi
add    %edx,%esi
sar    %esi
add    %esi,0x0(%rbp)
lea    -0x1(%rcx),%edx
imul   %ecx,%edx
mov    %edx,%ecx
shr    $0x1f,%ecx
add    %edx,%ecx
sar    %ecx
mov    0x20(%rsp),%rdx
add    %ecx,(%rdx)
mov    (%rbx),%ebx
mov    %ebx,0x1c(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r15,%r9
mov    %r10,%r14
mov    %r8,%r15
xor    %r10d,%r10d
nopl   0x0(%rax)
mov    0x10(%rsp),%rax
lea    (%r10,%rax,1),%r12d
cmp    %ebx,%r12d
cmovge %ebx,%r12d
lea    (%r12,%rax,1),%r11d
cmp    %ebx,%r11d
cmovge %ebx,%r11d
mov    %r10d,%ebp
mov    %r12d,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r9,%rcx
mov    %r14,%rax
mov    %ebx,%edi
cmp    %r12d,%ebp
setl   %dl
cmp    %r11d,%ebx
setl   %r8b
and    %dl,%r8b
xor    %ebx,%ebx
movslq %ebp,%rsi
movslq %edi,%r13
cmp    $0x1,%r8b
jne    14d7 <ktau+0x3a7>
movsd  (%r15,%rsi,8),%xmm0
xor    %ebx,%ebx
ucomisd (%r15,%r13,8),%xmm0
seta   %bl
cmp    %r11d,%edi
setge  %r9b
cmp    %r12d,%ebp
setl   %r14b
test   %ebx,%ebx
sete   %dl
test   %r9b,%r14b
jne    1500 <ktau+0x3d0>
and    %dl,%r8b
jne    1500 <ktau+0x3d0>
mov    %ebp,%esi
mov    %rax,%r14
mov    %rcx,%r9
jmp    152c <ktau+0x3fc>
xchg   %ax,%ax
mov    %rax,%r14
movsd  (%rax,%rsi,8),%xmm0
movslq %r10d,%r10
mov    0x8(%rsp),%rax
movsd  %xmm0,(%rax,%r10,8)
movsd  (%r15,%rsi,8),%xmm0
mov    %rcx,%r9
movsd  %xmm0,(%rcx,%r10,8)
lea    0x1(%rbp),%esi
add    $0x1,%r10d
test   %ebx,%ebx
setne  %r8b
cmp    %r11d,%edi
setl   %dl
cmp    %r12d,%ebp
setge  %cl
setl   %bl
test   %dl,%cl
jne    1550 <ktau+0x420>
and    %dl,%bl
and    %r8b,%bl
jne    1550 <ktau+0x420>
mov    %edi,%ebx
jmp    1590 <ktau+0x460>
movsd  (%r14,%r13,8),%xmm0
movslq %r10d,%r10
mov    0x8(%rsp),%rax
movsd  %xmm0,(%rax,%r10,8)
movsd  (%r15,%r13,8),%xmm0
movsd  %xmm0,(%r9,%r10,8)
mov    %r12d,%ecx
sub    %esi,%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mov    0x28(%rsp),%rcx
addsd  (%rcx),%xmm0
movsd  %xmm0,(%rcx)
lea    0x1(%rdi),%ebx
add    $0x1,%r10d
cmp    %r12d,%ebp
mov    %esi,%ebp
jl     14a0 <ktau+0x370>
mov    %esi,%ebp
cmp    %r11d,%edi
jl     14a0 <ktau+0x370>
mov    0x1c(%rsp),%ebx
cmp    %ebx,%r10d
jl     1470 <ktau+0x340>
mov    0x10(%rsp),%rax
add    %eax,%eax
mov    %r9,%r8
mov    0x8(%rsp),%r10
mov    %r14,0x8(%rsp)
mov    %rax,0x10(%rsp)
cmp    %ebx,%eax
jl     1460 <ktau+0x330>
mov    $0x1,%eax
cmp    $0x2,%ebx
mov    0x48(%rsp),%rsi
mov    0x40(%rsp),%rdi
mov    0x38(%rsp),%rbp
jl     1641 <ktau+0x511>
movsd  (%r9),%xmm0
mov    $0x1,%eax
mov    $0x1,%ecx
jmp    160f <ktau+0x4df>
xchg   %ax,%ax
add    $0x1,%eax
add    $0x1,%rcx
movslq %ebx,%rdx
cmp    %rdx,%rcx
jge    1641 <ktau+0x511>
movapd %xmm0,%xmm1
movsd  (%r9,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jne    1621 <ktau+0x4f1>
jnp    1600 <ktau+0x4d0>
cmp    $0x2,%eax
jl     1603 <ktau+0x4d3>
lea    -0x1(%rax),%edx
imul   %eax,%edx
mov    %edx,%eax
shr    $0x1f,%eax
add    %edx,%eax
sar    %eax
add    %eax,0x0(%rbp)
mov    (%rdi),%ebx
mov    $0x1,%eax
jmp    1603 <ktau+0x4d3>
lea    -0x1(%rax),%ecx
imul   %eax,%ecx
mov    %ecx,%eax
shr    $0x1f,%eax
add    %ecx,%eax
sar    %eax
add    0x0(%rbp),%eax
mov    %eax,0x0(%rbp)
mov    (%rdi),%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  0x999(%rip),%xmm0
add    $0xffffffff,%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm0,%xmm1
mov    0x30(%rsp),%rdx
movsd  %xmm1,(%rdx)
mov    0x28(%rsp),%rcx
movsd  (%rcx),%xmm0
cvtsi2sdl (%rsi),%xmm2
addsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
cvtsi2sd %eax,%xmm3
addsd  %xmm3,%xmm0
mov    0x20(%rsp),%rax
cvtsi2sdl (%rax),%xmm4
subsd  %xmm4,%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rcx)
movsd  (%rdx),%xmm0
movapd %xmm0,%xmm1
subsd  %xmm2,%xmm1
subsd  %xmm3,%xmm0
mulsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     16d4 <ktau+0x5a4>
sqrtsd %xmm0,%xmm0
jmp    16d9 <ktau+0x5a9>
call   1050 <sqrt@plt>
mov    0x30(%rsp),%rax
movsd  %xmm0,(%rax)
mov    0x28(%rsp),%rax
movsd  (%rax),%xmm1
divsd  %xmm0,%xmm1
mov    0x50(%rsp),%rax
movsd  %xmm1,(%rax)
mov    %r15,%rdi
call   1030 <free@plt>
mov    %r14,%rdi
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>

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

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