#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 */
int /*<<< orphan*/ free(double *);
scalar_t__ log(double);
scalar_t__ malloc(int);
int /*<<< orphan*/ printf(char *, int, double, int, double);
void nllkunstrord(int np, double *th, double *fnv) {
  extern int *y, nn, nc, ncl, norc, d;
  extern double **x;
  double rh[20][20], L[20][20], *pa, *pb;
  double pr, nlk, eps, sd;
  double *b0, *b, *rr, tem;
  int i, j, k, jc;
  int nsim, ifail;
  double pnorms(double);
  int pdef(double[][20], double[][20], int, double);
  void mvn1(int, double[], double[], double[][20], int, double, double *,
            double *, int *);
  pa = (double *)malloc((d + 1) * sizeof(double));
  pb = (double *)malloc((d + 1) * sizeof(double));
  b0 = (double *)malloc((norc + 1) * sizeof(double));
  b = (double *)malloc((nc + 1) * sizeof(double));
  rr = (double *)malloc((d + 1) * sizeof(double));
  nlk = 0.;
  eps = 1.e-6;
  for (i = 1; i < norc; i++) {
    b0[i] = th[i];
    if (i >= 2) {
      if (b0[i - 1] >= b0[i]) {
        *fnv = 1.e9;
        free(b);
        free(pa);
        free(pb);
        free(rr);
        return;
      }
    }
  }
  for (i = 1; i <= nc; i++)
    b[i] = th[norc - 1 + i];
  for (i = 1, k = 1; i <= d; i++) {
    for (j = i; j <= d; j++) {
      if (i == j)
        rh[i][j] = 1;
      else {
        rh[i][j] = th[nc + norc - 1 + k];
        k++;
        if (rh[i][j] > 1 || rh[i][j] < -1) {
          *fnv = 1.e9;
          free(b);
          free(pa);
          free(pb);
          free(rr);
          return;
        }
      }
    }
    for (j = 1; j <= i - 1; j++)
      rh[i][j] = rh[j][i];
  }
  if (!pdef(rh, L, d, 1.e10)) {
    *fnv = 1.e9;
    free(b);
    free(pa);
    free(pb);
    free(rr);
    return;
  }
  for (i = 1; i <= ncl; i++) {
    if (d <= 7)
      nsim = 0;
    else
      nsim = 2000;
    for (j = 1; j <= d; j++) {
      for (jc = 1, tem = 0.0; jc <= nc; jc++)
        tem += b[jc] * x[d * (i - 1) + j][jc];
      k = y[d * (i - 1) + j];
      if (k == 1) {
        pa[j] = -6.;
        pb[j] = tem + b0[k];
        if (tem + b0[k] < -6)
          pa[j] = pb[j] - 1;
      } else if (k == norc) {
        pa[j] = tem + b0[k - 1];
        pb[j] = 6.;
        if (tem + b0[k - 1] > 6)
          pb[j] = pa[j] + 1;
      } else {
        pa[j] = tem + b0[k - 1];
        pb[j] = tem + b0[k];
      }
    }
    if (d >= 2) {
      mvn1(d, pa, pb, rh, nsim, eps, &pr, &sd, &ifail);
      if (ifail > 0) {
        *fnv = 1.e9;
        free(b);
        free(pa);
        free(pb);
        free(rr);
        return;
      }
    } else
      pr = pnorms(pb[1]) - pnorms(pa[1]);
    if (pr <= -.1) {
      *fnv = 1.e9;
      for (j = 1; j <= d; j++)
        printf("pa[%d]=%6.3f, pb[%d]=%6.3f\n", j, pa[j], j, pb[j]);
      return;
    }
    if (pr <= 0.)
      pr = 1.e-15;
    nlk -= log(pr);
  }
  *fnv = nlk;
  free(b0);
  free(b);
  free(pa);
  free(pb);
  free(rr);
  return;
}


x86 assembly (clang, -O0):
<nllkunstrord>:
push   %rbp
mov    %rsp,%rbp
sub    $0x19a0,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    0x2e2b(%rip),%rax
mov    (%rax),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x1928(%rbp)
mov    0x2e0b(%rip),%rax
mov    (%rax),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x1930(%rbp)
mov    0x2dfb(%rip),%rax
mov    (%rax),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x1958(%rbp)
mov    0x2deb(%rip),%rax
mov    (%rax),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x1960(%rbp)
mov    0x2dab(%rip),%rax
mov    (%rax),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x1968(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x1940(%rbp)
ff
movsd  0xdc7(%rip),%xmm0
movsd  %xmm0,-0x1948(%rbp)
ff
movl   $0x1,-0x1974(%rbp)
mov    -0x1974(%rbp),%eax
mov    0x2d70(%rip),%rcx
cmp    (%rcx),%eax
jge    1324 <nllkunstrord+0x1b4>
mov    -0x10(%rbp),%rax
movslq -0x1974(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x1958(%rbp),%rax
movslq -0x1974(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x2,-0x1974(%rbp)
jl     130b <nllkunstrord+0x19b>
mov    -0x1958(%rbp),%rax
mov    -0x1974(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x1958(%rbp),%rax
movslq -0x1974(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     1306 <nllkunstrord+0x196>
mov    -0x18(%rbp),%rax
movsd  0xd43(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x1960(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1928(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1930(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1968(%rbp),%rdi
call   1030 <free@plt>
jmp    1bb7 <nllkunstrord+0xa47>
jmp    130b <nllkunstrord+0x19b>
jmp    1310 <nllkunstrord+0x1a0>
mov    -0x1974(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1974(%rbp)
jmp    124b <nllkunstrord+0xdb>
movl   $0x1,-0x1974(%rbp)
mov    -0x1974(%rbp),%eax
mov    0x2c9d(%rip),%rcx
cmp    (%rcx),%eax
jg     1388 <nllkunstrord+0x218>
mov    -0x10(%rbp),%rax
mov    0x2c7a(%rip),%rcx
mov    (%rcx),%ecx
sub    $0x1,%ecx
add    -0x1974(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x1960(%rbp),%rax
movslq -0x1974(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1974(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1974(%rbp)
jmp    132e <nllkunstrord+0x1be>
movl   $0x1,-0x1974(%rbp)
movl   $0x1,-0x197c(%rbp)
mov    -0x1974(%rbp),%eax
mov    0x2c0f(%rip),%rcx
cmp    (%rcx),%eax
jg     15d0 <nllkunstrord+0x460>
mov    -0x1974(%rbp),%eax
mov    %eax,-0x1978(%rbp)
mov    -0x1978(%rbp),%eax
mov    0x2bee(%rip),%rcx
cmp    (%rcx),%eax
jg     153a <nllkunstrord+0x3ca>
mov    -0x1974(%rbp),%eax
cmp    -0x1978(%rbp),%eax
jne    1415 <nllkunstrord+0x2a5>
movslq -0x1974(%rbp),%rcx
lea    -0xca0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
movslq -0x1978(%rbp),%rcx
movsd  0xc25(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1521 <nllkunstrord+0x3b1>
mov    -0x10(%rbp),%rax
mov    0x2bb8(%rip),%rcx
mov    (%rcx),%ecx
mov    0x2b9f(%rip),%rdx
add    (%rdx),%ecx
sub    $0x1,%ecx
add    -0x197c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x1974(%rbp),%rcx
lea    -0xca0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x197c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x197c(%rbp)
movslq -0x1974(%rbp),%rcx
lea    -0xca0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
movslq -0x1978(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xb95(%rip),%xmm1
ucomisd %xmm1,%xmm0
ja     14d7 <nllkunstrord+0x367>
movslq -0x1974(%rbp),%rcx
lea    -0xca0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
movslq -0x1978(%rbp),%rcx
movsd  0xb74(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    151c <nllkunstrord+0x3ac>
mov    -0x18(%rbp),%rax
movsd  0xb2d(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x1960(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1928(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1930(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1968(%rbp),%rdi
call   1030 <free@plt>
jmp    1bb7 <nllkunstrord+0xa47>
jmp    1521 <nllkunstrord+0x3b1>
jmp    1526 <nllkunstrord+0x3b6>
mov    -0x1978(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1978(%rbp)
jmp    13bd <nllkunstrord+0x24d>
movl   $0x1,-0x1978(%rbp)
mov    -0x1978(%rbp),%eax
mov    -0x1974(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     15b7 <nllkunstrord+0x447>
movslq -0x1978(%rbp),%rcx
lea    -0xca0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
movslq -0x1974(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x1974(%rbp),%rcx
lea    -0xca0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1978(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1978(%rbp)
jmp    1544 <nllkunstrord+0x3d4>
jmp    15bc <nllkunstrord+0x44c>
mov    -0x1974(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1974(%rbp)
jmp    139c <nllkunstrord+0x22c>
lea    -0xca0(%rbp),%rdi
lea    -0x1920(%rbp),%rsi
mov    0x29d3(%rip),%rax
mov    (%rax),%edx
movsd  0xa19(%rip),%xmm0
call   1060 <pdef@plt>
cmp    $0x0,%eax
jne    1642 <nllkunstrord+0x4d2>
mov    -0x18(%rbp),%rax
movsd  0xa07(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x1960(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1928(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1930(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1968(%rbp),%rdi
call   1030 <free@plt>
jmp    1bb7 <nllkunstrord+0xa47>
movl   $0x1,-0x1974(%rbp)
mov    -0x1974(%rbp),%eax
mov    0x298f(%rip),%rcx
cmp    (%rcx),%eax
jg     1b6b <nllkunstrord+0x9fb>
mov    0x2950(%rip),%rax
cmpl   $0x7,(%rax)
jg     1680 <nllkunstrord+0x510>
movl   $0x0,-0x1984(%rbp)
jmp    168a <nllkunstrord+0x51a>
movl   $0x7d0,-0x1984(%rbp)
movl   $0x1,-0x1978(%rbp)
mov    -0x1978(%rbp),%eax
mov    0x2917(%rip),%rcx
cmp    (%rcx),%eax
jg     197c <nllkunstrord+0x80c>
movl   $0x1,-0x1980(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x1970(%rbp)
ff
mov    -0x1980(%rbp),%eax
mov    0x290d(%rip),%rcx
cmp    (%rcx),%eax
jg     174a <nllkunstrord+0x5da>
mov    -0x1960(%rbp),%rax
movslq -0x1980(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28d3(%rip),%rax
mov    (%rax),%rax
mov    0x28c1(%rip),%rcx
mov    (%rcx),%ecx
mov    -0x1974(%rbp),%edx
sub    $0x1,%edx
imul   %edx,%ecx
add    -0x1978(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1980(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x1970(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1970(%rbp)
ff
mov    -0x1980(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1980(%rbp)
jmp    16be <nllkunstrord+0x54e>
mov    0x288f(%rip),%rax
mov    (%rax),%rax
mov    0x285d(%rip),%rcx
mov    (%rcx),%ecx
mov    -0x1974(%rbp),%edx
sub    $0x1,%edx
imul   %edx,%ecx
add    -0x1978(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x197c(%rbp)
cmpl   $0x1,-0x197c(%rbp)
jne    1835 <nllkunstrord+0x6c5>
mov    -0x1928(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  0x89a(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1970(%rbp),%xmm0
ff
mov    -0x1958(%rbp),%rax
movslq -0x197c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x1930(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1970(%rbp),%xmm1
ff
mov    -0x1958(%rbp),%rax
movslq -0x197c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0x844(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1830 <nllkunstrord+0x6c0>
mov    -0x1930(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0x817(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x1928(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1963 <nllkunstrord+0x7f3>
mov    -0x197c(%rbp),%eax
mov    0x2786(%rip),%rcx
cmp    (%rcx),%eax
jne    18fd <nllkunstrord+0x78d>
movsd  -0x1970(%rbp),%xmm0
ff
mov    -0x1958(%rbp),%rax
mov    -0x197c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x1928(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1930(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  0x795(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1970(%rbp),%xmm0
ff
mov    -0x1958(%rbp),%rax
mov    -0x197c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x768(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    18f8 <nllkunstrord+0x788>
mov    -0x1928(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  0x750(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
mov    -0x1930(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    195e <nllkunstrord+0x7ee>
movsd  -0x1970(%rbp),%xmm0
ff
mov    -0x1958(%rbp),%rax
mov    -0x197c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x1928(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1970(%rbp),%xmm0
ff
mov    -0x1958(%rbp),%rax
movslq -0x197c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x1930(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1963 <nllkunstrord+0x7f3>
jmp    1968 <nllkunstrord+0x7f8>
mov    -0x1978(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1978(%rbp)
jmp    1694 <nllkunstrord+0x524>
mov    0x2635(%rip),%rax
cmpl   $0x2,(%rax)
jl     1a33 <nllkunstrord+0x8c3>
mov    0x2625(%rip),%rax
mov    (%rax),%edi
mov    -0x1928(%rbp),%rsi
mov    -0x1930(%rbp),%rdx
lea    -0xca0(%rbp),%rcx
mov    -0x1984(%rbp),%r8d
movsd  -0x1948(%rbp),%xmm0
ff
lea    -0x1938(%rbp),%r9
lea    -0x1950(%rbp),%r10
lea    -0x1988(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   1050 <mvn1@plt>
cmpl   $0x0,-0x1988(%rbp)
jle    1a2e <nllkunstrord+0x8be>
mov    -0x18(%rbp),%rax
movsd  0x61b(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x1960(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1928(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1930(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1968(%rbp),%rdi
call   1030 <free@plt>
jmp    1bb7 <nllkunstrord+0xa47>
jmp    1a74 <nllkunstrord+0x904>
mov    -0x1930(%rbp),%rax
movsd  0x8(%rax),%xmm0
call   1040 <pnorms@plt>
movsd  %xmm0,-0x1990(%rbp)
ff
mov    -0x1928(%rbp),%rax
movsd  0x8(%rax),%xmm0
call   1040 <pnorms@plt>
movaps %xmm0,%xmm1
movsd  -0x1990(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x1938(%rbp)
ff
movsd  0x59c(%rip),%xmm0
ucomisd -0x1938(%rbp),%xmm0
ff
jb     1b10 <nllkunstrord+0x9a0>
mov    -0x18(%rbp),%rax
movsd  0x57a(%rip),%xmm0
movsd  %xmm0,(%rax)
movl   $0x1,-0x1978(%rbp)
mov    -0x1978(%rbp),%eax
mov    0x2507(%rip),%rcx
cmp    (%rcx),%eax
jg     1b0b <nllkunstrord+0x99b>
mov    -0x1978(%rbp),%esi
mov    -0x1928(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x1978(%rbp),%edx
mov    -0x1930(%rbp),%rax
movslq -0x1978(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
lea    0x556(%rip),%rdi
call   1070 <printf@plt>
mov    -0x1978(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1978(%rbp)
jmp    1aa4 <nllkunstrord+0x934>
jmp    1bb7 <nllkunstrord+0xa47>
xorps  %xmm0,%xmm0
ucomisd -0x1938(%rbp),%xmm0
ff
jb     1b31 <nllkunstrord+0x9c1>
movsd  0x4f7(%rip),%xmm0
movsd  %xmm0,-0x1938(%rbp)
ff
movsd  -0x1938(%rbp),%xmm0
ff
call   1090 <log@plt>
cvtsi2sd %rax,%xmm1
movsd  -0x1940(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x1940(%rbp)
ff
mov    -0x1974(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1974(%rbp)
jmp    164c <nllkunstrord+0x4dc>
movsd  -0x1940(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x1958(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1960(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1928(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1930(%rbp),%rdi
call   1030 <free@plt>
mov    -0x1968(%rbp),%rdi
call   1030 <free@plt>
add    $0x19a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nllkunstrord>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1978,%rsp
mov    %rdx,0x10(%rsp)
mov    %rsi,%r15
mov    0x2e28(%rip),%r13
mov    0x0(%r13),%eax
lea    0x8(,%rax,8),%edi
call   1080 <malloc@plt>
mov    %rax,0x8(%rsp)
mov    0x0(%r13),%eax
lea    0x8(,%rax,8),%edi
call   1080 <malloc@plt>
mov    %rax,%r14
mov    0x2e09(%rip),%r12
mov    (%r12),%eax
lea    0x8(,%rax,8),%edi
call   1080 <malloc@plt>
mov    %rax,%rbp
mov    0x2dff(%rip),%rax
mov    (%rax),%eax
lea    0x8(,%rax,8),%edi
call   1080 <malloc@plt>
mov    %rax,%rbx
mov    0x0(%r13),%eax
lea    0x8(,%rax,8),%edi
call   1080 <malloc@plt>
mov    %rax,%r13
mov    (%r12),%eax
cmp    $0x2,%eax
jl     126b <nllkunstrord+0xfb>
mov    $0x1,%ecx
jmp    1219 <nllkunstrord+0xa9>
nopl   (%rax)
add    $0x1,%rcx
cmp    %rcx,%rax
je     126b <nllkunstrord+0xfb>
movsd  (%r15,%rcx,8),%xmm0
movsd  %xmm0,0x0(%rbp,%rcx,8)
cmp    $0x2,%rcx
jb     1210 <nllkunstrord+0xa0>
movsd  -0x8(%rbp,%rcx,8),%xmm1
ucomisd %xmm0,%xmm1
jb     1210 <nllkunstrord+0xa0>
movabs $0x41cdcd6500000000,%rax
cd cd 41
mov    0x10(%rsp),%rcx
mov    %rax,(%rcx)
mov    %rbx,%rdi
call   1030 <free@plt>
mov    0x8(%rsp),%rdi
call   1030 <free@plt>
mov    %r14,%rdi
call   1030 <free@plt>
mov    %r13,%rdi
jmp    1622 <nllkunstrord+0x4b2>
mov    %r15,(%rsp)
mov    %rbp,0x40(%rsp)
mov    0x2d5d(%rip),%rcx
mov    (%rcx),%r10d
test   %r10d,%r10d
jle    13e7 <nllkunstrord+0x277>
lea    -0x1(%rax),%ecx
movslq %ecx,%r8
lea    0x1(%r10),%rbp
mov    $0x1,%esi
cmp    $0x4,%r10
jb     1365 <nllkunstrord+0x1f5>
lea    0x8(%rbx),%rcx
lea    (%r8,%rbp,1),%rdx
mov    (%rsp),%rdi
lea    (%rdi,%rdx,8),%rdx
cmp    %rdx,%rcx
jae    12ce <nllkunstrord+0x15e>
lea    (%rbx,%rbp,8),%rcx
mov    (%rsp),%rdx
lea    (%rdx,%r8,8),%rdx
add    $0x8,%rdx
cmp    %rcx,%rdx
jb     1365 <nllkunstrord+0x1f5>
mov    %r10d,%esi
and    $0xfffffffc,%esi
lea    -0x4(%rsi),%rcx
mov    %rcx,%r9
shr    $0x2,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     1b1a <nllkunstrord+0x9aa>
mov    %r9,%rdx
and    $0xfffffffffffffffe,%rdx
mov    (%rsp),%rcx
lea    (%rcx,%r8,8),%rcx
mov    $0x1,%edi
movups (%rcx,%rdi,8),%xmm0
movups 0x10(%rcx,%rdi,8),%xmm1
movups %xmm0,(%rbx,%rdi,8)
movups %xmm1,0x10(%rbx,%rdi,8)
movupd 0x20(%rcx,%rdi,8),%xmm0
movupd 0x30(%rcx,%rdi,8),%xmm1
movupd %xmm0,0x20(%rbx,%rdi,8)
movupd %xmm1,0x30(%rbx,%rdi,8)
add    $0x8,%rdi
add    $0xfffffffffffffffe,%rdx
jne    1300 <nllkunstrord+0x190>
test   $0x1,%r9b
je     1358 <nllkunstrord+0x1e8>
lea    (%rdi,%r8,1),%rcx
mov    (%rsp),%rdx
movupd (%rdx,%rcx,8),%xmm0
movupd 0x10(%rdx,%rcx,8),%xmm1
movupd %xmm0,(%rbx,%rdi,8)
movupd %xmm1,0x10(%rbx,%rdi,8)
cmp    %rsi,%r10
je     13e7 <nllkunstrord+0x277>
or     $0x1,%rsi
mov    %ebp,%edx
sub    %esi,%edx
mov    %rsi,%rdi
not    %rdi
add    %rbp,%rdi
and    $0x3,%rdx
je     1394 <nllkunstrord+0x224>
mov    (%rsp),%rcx
lea    (%rcx,%r8,8),%rcx
movsd  (%rcx,%rsi,8),%xmm0
movsd  %xmm0,(%rbx,%rsi,8)
add    $0x1,%rsi
add    $0xffffffffffffffff,%rdx
jne    1380 <nllkunstrord+0x210>
cmp    $0x3,%rdi
jb     13e7 <nllkunstrord+0x277>
mov    (%rsp),%rcx
lea    (%rcx,%r8,8),%rcx
add    $0x18,%rcx
cs nopw 0x0(%rax,%rax,1)
movsd  -0x18(%rcx,%rsi,8),%xmm0
movsd  %xmm0,(%rbx,%rsi,8)
movsd  -0x10(%rcx,%rsi,8),%xmm0
movsd  %xmm0,0x8(%rbx,%rsi,8)
movsd  -0x8(%rcx,%rsi,8),%xmm0
movsd  %xmm0,0x10(%rbx,%rsi,8)
movsd  (%rcx,%rsi,8),%xmm0
movsd  %xmm0,0x18(%rbx,%rsi,8)
add    $0x4,%rsi
cmp    %rsi,%rbp
jne    13b0 <nllkunstrord+0x240>
mov    %r13,0x20(%rsp)
mov    %r14,0x18(%rsp)
mov    0x2bc0(%rip),%rcx
mov    (%rcx),%edx
test   %edx,%edx
jle    1638 <nllkunstrord+0x4c8>
lea    (%rax,%r10,1),%r13d
add    $0xffffffff,%r13d
lea    0x1(%rdx),%rax
mov    %rax,0x48(%rsp)
lea    0x118(%rsp),%r12
lea    0x110(%rsp),%r15
lea    0x130(%rsp),%rcx
lea    0x2f8(%rsp),%rbp
lea    0x78(%rsp),%rax
mov    %rax,0x28(%rsp)
mov    $0x1,%edi
mov    $0x1,%esi
xor    %eax,%eax
movsd  0xbaf(%rip),%xmm0
movsd  0xbaf(%rip),%xmm1
mov    %rdx,%r14
jmp    14a3 <nllkunstrord+0x333>
xchg   %ax,%ax
mov    0x38(%rsp),%rsi
add    $0x1,%rsi
mov    0x30(%rsp),%rax
add    $0x1,%rax
add    $0xa8,%r12
add    $0xffffffffffffffff,%r14
add    $0xa0,%rcx
mov    %r10,%rbp
add    $0x8,%rbp
add    $0xa0,%r15
addq   $0x8,0x28(%rsp)
cmp    0x48(%rsp),%rsi
je     1638 <nllkunstrord+0x4c8>
mov    %eax,%r8d
and    $0x3,%r8d
mov    %rax,%r11
and    $0xfffffffffffffffc,%r11
mov    %rax,0x30(%rsp)
add    $0xffffffffffffffff,%rax
mov    %rax,0x50(%rsp)
lea    (%rsi,%rsi,4),%rax
shl    $0x5,%rax
add    %rsp,%rax
add    $0x70,%rax
mov    %rsi,0x38(%rsp)
lea    (%rax,%rsi,8),%r9
xor    %r10d,%r10d
mov    (%rsp),%rsi
jmp    14f6 <nllkunstrord+0x386>
movabs $0x3ff0000000000000,%rax
mov    %rax,(%r9)
add    $0x1,%r10
cmp    %r10,%r14
je     1530 <nllkunstrord+0x3c0>
test   %r10,%r10
je     14e0 <nllkunstrord+0x370>
lea    (%rdi,%r13,1),%eax
cltq
movsd  (%rsi,%rax,8),%xmm2
movsd  %xmm2,(%r12,%r10,8)
ucomisd %xmm0,%xmm2
ja     15ef <nllkunstrord+0x47f>
ucomisd %xmm2,%xmm1
ja     15ef <nllkunstrord+0x47f>
add    $0x1,%edi
jmp    14ed <nllkunstrord+0x37d>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %rbp,%r10
cmpq   $0x2,0x38(%rsp)
jb     1460 <nllkunstrord+0x2f0>
mov    $0x1,%ebp
cmpq   $0x3,0x50(%rsp)
jb     15a6 <nllkunstrord+0x436>
mov    %r10,%rax
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  -0x1e0(%rax),%xmm2
ff
movsd  %xmm2,-0x18(%rcx,%rbp,8)
movsd  -0x140(%rax),%xmm2
ff
movsd  %xmm2,-0x10(%rcx,%rbp,8)
movsd  -0xa0(%rax),%xmm2
ff
movsd  %xmm2,-0x8(%rcx,%rbp,8)
movsd  (%rax),%xmm2
movsd  %xmm2,(%rcx,%rbp,8)
add    $0x4,%rbp
add    $0x280,%rax
cmp    %rbp,%r11
jne    1560 <nllkunstrord+0x3f0>
add    $0x1,%rbp
testb  $0x3,0x30(%rsp)
je     1460 <nllkunstrord+0x2f0>
lea    (%r15,%rbp,8),%rax
lea    0x0(%rbp,%rbp,4),%rbp
shl    $0x5,%rbp
add    0x28(%rsp),%rbp
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0x0(%rbp),%xmm2
movsd  %xmm2,(%rax,%rsi,8)
add    $0x1,%rsi
add    $0xa0,%rbp
cmp    %rsi,%r8
jne    15d0 <nllkunstrord+0x460>
jmp    1460 <nllkunstrord+0x2f0>
movabs $0x41cdcd6500000000,%rax
cd cd 41
mov    0x10(%rsp),%rcx
mov    %rax,(%rcx)
mov    %rbx,%rdi
call   1030 <free@plt>
mov    0x8(%rsp),%rdi
call   1030 <free@plt>
mov    0x18(%rsp),%rdi
call   1030 <free@plt>
mov    0x20(%rsp),%rdi
add    $0x1978,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>
lea    0x70(%rsp),%rdi
lea    0xcf0(%rsp),%rsi
movsd  0x9c3(%rip),%xmm0
call   1060 <pdef@plt>
test   %eax,%eax
je     1a45 <nllkunstrord+0x8d5>
mov    0x2987(%rip),%rax
cmpl   $0x0,(%rax)
jle    1a70 <nllkunstrord+0x900>
mov    $0x1,%r14d
movsd  0x9a8(%rip),%xmm4
movsd  0x988(%rip),%xmm5
movsd  0x990(%rip),%xmm7
movsd  0x96f(%rip),%xmm8
xorpd  %xmm6,%xmm6
mov    0x18(%rsp),%r13
mov    0x8(%rsp),%rbp
mov    0x2912(%rip),%r15
jmp    1703 <nllkunstrord+0x593>
nopl   0x0(%rax,%rax,1)
movapd %xmm1,%xmm0
call   1090 <log@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  0x50(%rsp),%xmm6
subsd  %xmm0,%xmm6
lea    0x1(%r14),%eax
mov    0x2912(%rip),%rcx
cmp    (%rcx),%r14d
mov    %eax,%r14d
movsd  0x93c(%rip),%xmm4
movsd  0x91c(%rip),%xmm5
movsd  0x924(%rip),%xmm7
movsd  0x903(%rip),%xmm8
jge    1a7e <nllkunstrord+0x90e>
mov    (%r15),%ecx
cmp    $0x8,%ecx
mov    $0x7d0,%edx
mov    $0x0,%eax
cmovl  %eax,%edx
test   %ecx,%ecx
movsd  %xmm6,0x50(%rsp)
jle    19e0 <nllkunstrord+0x870>
mov    %edx,0x60(%rsp)
mov    0x28a9(%rip),%rax
mov    (%rax),%esi
mov    0x2888(%rip),%rax
mov    (%rax),%rax
mov    %rax,0x38(%rsp)
mov    %r14,0x28(%rsp)
lea    -0x1(%r14),%eax
imul   %ecx,%eax
mov    %rcx,%rdx
mov    0x288a(%rip),%rcx
mov    (%rcx),%rcx
mov    %rcx,(%rsp)
mov    0x2864(%rip),%rcx
movslq (%rcx),%r10
mov    %rsi,%r12
add    $0x1,%esi
movslq %eax,%r11
mov    %rdx,0x48(%rsp)
lea    0x1(%rdx),%rcx
lea    -0x1(%rsi),%r15
add    $0xfffffffffffffffe,%rsi
mov    %rsi,0x30(%rsp)
mov    %r15d,%eax
and    $0x3,%eax
and    $0xfffffffffffffffc,%r15
mov    $0x1,%r14d
jmp    17cf <nllkunstrord+0x65f>
nopl   0x0(%rax,%rax,1)
mov    0x40(%rsp),%rsi
movsd  -0x8(%rsi,%rdx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x0(%rbp,%r14,8)
addsd  (%rsi,%rdx,8),%xmm0
movsd  %xmm0,0x0(%r13,%r14,8)
add    $0x1,%r14
cmp    %rcx,%r14
je     1980 <nllkunstrord+0x810>
lea    (%r14,%r11,1),%r13
test   %r12d,%r12d
jle    1810 <nllkunstrord+0x6a0>
mov    0x38(%rsp),%rdx
mov    (%rdx,%r13,8),%r9
cmpq   $0x3,0x30(%rsp)
jae    1820 <nllkunstrord+0x6b0>
xorpd  %xmm0,%xmm0
mov    $0x1,%r8d
test   %rax,%rax
jne    188a <nllkunstrord+0x71a>
jmp    18b7 <nllkunstrord+0x747>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorpd  %xmm0,%xmm0
jmp    18b7 <nllkunstrord+0x747>
nopl   0x0(%rax)
xorpd  %xmm0,%xmm0
xor    %r8d,%r8d
nopw   0x0(%rax,%rax,1)
movsd  0x8(%rbx,%r8,8),%xmm1
movsd  0x10(%rbx,%r8,8),%xmm2
mulsd  0x8(%r9,%r8,8),%xmm1
mulsd  0x10(%r9,%r8,8),%xmm2
addsd  %xmm0,%xmm1
movsd  0x18(%rbx,%r8,8),%xmm3
mulsd  0x18(%r9,%r8,8),%xmm3
addsd  %xmm1,%xmm2
movsd  0x20(%rbx,%r8,8),%xmm0
mulsd  0x20(%r9,%r8,8),%xmm0
addsd  %xmm2,%xmm3
addsd  %xmm3,%xmm0
add    $0x4,%r8
cmp    %r8,%r15
jne    1830 <nllkunstrord+0x6c0>
add    $0x1,%r8
test   %rax,%rax
je     18b7 <nllkunstrord+0x747>
lea    (%r9,%r8,8),%rdi
lea    (%rbx,%r8,8),%rdx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rdx,%rsi,8),%xmm1
mulsd  (%rdi,%rsi,8),%xmm1
addsd  %xmm1,%xmm0
add    $0x1,%rsi
cmp    %rsi,%rax
jne    18a0 <nllkunstrord+0x730>
mov    (%rsp),%rdx
movslq (%rdx,%r13,4),%rdx
cmp    $0x1,%rdx
jne    1920 <nllkunstrord+0x7b0>
mov    0x8(%rsp),%rbp
movabs $0xc018000000000000,%rdx
mov    %rdx,0x0(%rbp,%r14,8)
mov    0x40(%rsp),%rdx
movsd  0x8(%rdx),%xmm1
addsd  %xmm0,%xmm1
mov    0x18(%rsp),%r13
movsd  %xmm1,0x0(%r13,%r14,8)
addsd  0x8(%rdx),%xmm0
ucomisd %xmm0,%xmm4
jbe    17c2 <nllkunstrord+0x652>
addsd  %xmm5,%xmm1
movsd  %xmm1,0x0(%rbp,%r14,8)
jmp    17c2 <nllkunstrord+0x652>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    %r10d,%edx
mov    0x18(%rsp),%r13
mov    0x8(%rsp),%rbp
jne    17a0 <nllkunstrord+0x630>
mov    0x40(%rsp),%rdx
movsd  -0x8(%rdx,%r10,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x0(%rbp,%r14,8)
movabs $0x4018000000000000,%rsi
mov    %rsi,0x0(%r13,%r14,8)
addsd  -0x8(%rdx,%r10,8),%xmm0
ucomisd %xmm7,%xmm0
jbe    17c2 <nllkunstrord+0x652>
movsd  0x0(%rbp,%r14,8),%xmm0
addsd  %xmm8,%xmm0
jmp    17bb <nllkunstrord+0x64b>
nopl   0x0(%rax,%rax,1)
mov    0x48(%rsp),%rdi
cmp    $0x2,%edi
mov    0x2629(%rip),%r15
mov    0x28(%rsp),%r14
mov    0x60(%rsp),%r8d
jl     19e0 <nllkunstrord+0x870>
mov    %rbp,%rsi
mov    %r13,%rdx
lea    0x70(%rsp),%rcx
movsd  0x67a(%rip),%xmm0
lea    0x58(%rsp),%r9
lea    0x64(%rsp),%rax
push   %rax
lea    0x70(%rsp),%rax
push   %rax
call   1050 <mvn1@plt>
add    $0x10,%rsp
cmpl   $0x0,0x64(%rsp)
jg     1b2e <nllkunstrord+0x9be>
movsd  0x58(%rsp),%xmm1
jmp    1a09 <nllkunstrord+0x899>
nopl   0x0(%rax,%rax,1)
movsd  0x8(%r13),%xmm0
call   1040 <pnorms@plt>
movsd  %xmm0,(%rsp)
movsd  0x8(%rbp),%xmm0
call   1040 <pnorms@plt>
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x58(%rsp)
movsd  0x61f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    1ac5 <nllkunstrord+0x955>
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     16b0 <nllkunstrord+0x540>
movabs $0x3cd203af9ee75616,%rax
03 d2 3c
mov    %rax,0x58(%rsp)
movsd  0x5f8(%rip),%xmm1
jmp    16b0 <nllkunstrord+0x540>
movabs $0x41cdcd6500000000,%rax
cd cd 41
mov    0x10(%rsp),%rcx
mov    %rax,(%rcx)
mov    %rbx,%rdi
call   1030 <free@plt>
mov    0x8(%rsp),%rdi
call   1030 <free@plt>
mov    0x18(%rsp),%rdi
jmp    1aa4 <nllkunstrord+0x934>
xorpd  %xmm6,%xmm6
mov    0x18(%rsp),%r13
mov    0x8(%rsp),%rbp
mov    0x10(%rsp),%rax
movsd  %xmm6,(%rax)
mov    0x40(%rsp),%rdi
call   1030 <free@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
mov    %rbp,%rdi
call   1030 <free@plt>
mov    %r13,%rdi
call   1030 <free@plt>
mov    0x20(%rsp),%rdi
call   1030 <free@plt>
add    $0x1978,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movabs $0x41cdcd6500000000,%rax
cd cd 41
mov    0x10(%rsp),%rcx
mov    %rax,(%rcx)
cmpl   $0x0,(%r15)
jle    1ab3 <nllkunstrord+0x943>
mov    $0x1,%ebx
lea    0x55f(%rip),%r14
nopl   0x0(%rax)
movsd  0x0(%rbp,%rbx,8),%xmm0
movsd  0x0(%r13,%rbx,8),%xmm1
mov    %r14,%rdi
mov    %ebx,%esi
mov    %ebx,%edx
call   1070 <printf@plt>
lea    0x1(%rbx),%rax
movslq (%r15),%rcx
cmp    %rcx,%rbx
mov    %rax,%rbx
jl     1af0 <nllkunstrord+0x980>
jmp    1ab3 <nllkunstrord+0x943>
mov    $0x1,%edi
test   $0x1,%r9b
jne    133a <nllkunstrord+0x1ca>
jmp    1358 <nllkunstrord+0x1e8>
movabs $0x41cdcd6500000000,%rax
cd cd 41
mov    0x10(%rsp),%rcx
mov    %rax,(%rcx)
jmp    1a91 <nllkunstrord+0x921>

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

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