#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 cos(double);
double exp(double);
double log(double);
double sin(double);
double zabs_(double *, double *);
int /*<<< orphan*/ zlog_(double *, double *, double *, double *, int *);
int /*<<< orphan*/ zuchk_(double *, double *, int *, double *, double *);
int zkscl_(double *zrr, double *zri, double *fnu, int *n, double *yr,
           double *yi, int *nz, double *rzr, double *rzi, double *ascle,
           double *tol, double *elim) {
  static double zeror = 0.;
  static double zeroi = 0.;
  int i__1;
  int i__, ic;
  double as, fn;
  int kk, nn, nw;
  double s1i, s2i, s1r, s2r, acs, cki, elm, csi, ckr, cyi[2], zdi, csr, cyr[2],
      zdr, str, alas;
  int idum;
  double helim, celmr;
  --yi;
  --yr;
  *nz = 0;
  ic = 0;
  nn = ((2) <= (*n) ? (2) : (*n));
  i__1 = nn;
  for (i__ = 1; i__ <= i__1; ++i__) {
    s1r = yr[i__];
    s1i = yi[i__];
    cyr[i__ - 1] = s1r;
    cyi[i__ - 1] = s1i;
    as = zabs_(&s1r, &s1i);
    acs = -(*zrr) + log(as);
    ++(*nz);
    yr[i__] = zeror;
    yi[i__] = zeroi;
    if (acs < -(*elim)) {
      goto L10;
    }
    zlog_(&s1r, &s1i, &csr, &csi, &idum);
    csr -= *zrr;
    csi -= *zri;
    str = exp(csr) / *tol;
    csr = str * cos(csi);
    csi = str * sin(csi);
    zuchk_(&csr, &csi, &nw, ascle, tol);
    if (nw != 0) {
      goto L10;
    }
    yr[i__] = csr;
    yi[i__] = csi;
    ic = i__;
    --(*nz);
  L10:;
  }
  if (*n == 1) {
    return 0;
  }
  if (ic > 1) {
    goto L20;
  }
  yr[1] = zeror;
  yi[1] = zeroi;
  *nz = 2;
L20:
  if (*n == 2) {
    return 0;
  }
  if (*nz == 0) {
    return 0;
  }
  fn = *fnu + 1.;
  ckr = fn * *rzr;
  cki = fn * *rzi;
  s1r = cyr[0];
  s1i = cyi[0];
  s2r = cyr[1];
  s2i = cyi[1];
  helim = *elim * .5;
  elm = exp(-(*elim));
  celmr = elm;
  zdr = *zrr;
  zdi = *zri;
  i__1 = *n;
  for (i__ = 3; i__ <= i__1; ++i__) {
    kk = i__;
    csr = s2r;
    csi = s2i;
    s2r = ckr * csr - cki * csi + s1r;
    s2i = cki * csr + ckr * csi + s1i;
    s1r = csr;
    s1i = csi;
    ckr += *rzr;
    cki += *rzi;
    as = zabs_(&s2r, &s2i);
    alas = log(as);
    acs = -zdr + alas;
    ++(*nz);
    yr[i__] = zeror;
    yi[i__] = zeroi;
    if (acs < -(*elim)) {
      goto L25;
    }
    zlog_(&s2r, &s2i, &csr, &csi, &idum);
    csr -= zdr;
    csi -= zdi;
    str = exp(csr) / *tol;
    csr = str * cos(csi);
    csi = str * sin(csi);
    zuchk_(&csr, &csi, &nw, ascle, tol);
    if (nw != 0) {
      goto L25;
    }
    yr[i__] = csr;
    yi[i__] = csi;
    --(*nz);
    if (ic == kk - 1) {
      goto L40;
    }
    ic = kk;
    goto L30;
  L25:
    if (alas < helim) {
      goto L30;
    }
    zdr -= *elim;
    s1r *= celmr;
    s1i *= celmr;
    s2r *= celmr;
    s2i *= celmr;
  L30:;
  }
  *nz = *n;
  if (ic == *n) {
    *nz = *n - 1;
  }
  goto L45;
L40:
  *nz = kk - 2;
L45:
  i__1 = *nz;
  for (i__ = 1; i__ <= i__1; ++i__) {
    yr[i__] = zeror;
    yi[i__] = zeroi;
  }
  return 0;
}


x86 assembly (clang, -O0):
<zkscl_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x38(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x30(%rbp)
mov    0x10(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x44(%rbp)
mov    -0x28(%rbp),%rcx
mov    $0x2,%eax
cmp    (%rcx),%eax
jg     11f5 <zkscl_+0x85>
mov    $0x2,%eax
mov    %eax,-0x114(%rbp)
jmp    1201 <zkscl_+0x91>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x114(%rbp)
mov    -0x114(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1493 <zkscl_+0x323>
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x40(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  %xmm0,-0xe0(%rbp,%rax,8)
ff ff
movsd  -0x70(%rbp),%xmm0
mov    -0x40(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  %xmm0,-0xc0(%rbp,%rax,8)
ff ff
lea    -0x80(%rbp),%rdi
lea    -0x70(%rbp),%rsi
call   1060 <zabs_@plt>
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
call   1080 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
movsd  0x2d80(%rip),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x2d73(%rip),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm1
ff
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd %xmm1,%xmm0
jbe    1338 <zkscl_+0x1c8>
jmp    1480 <zkscl_+0x310>
lea    -0x80(%rbp),%rdi
lea    -0x70(%rbp),%rsi
lea    -0xd0(%rbp),%rdx
lea    -0xa8(%rbp),%rcx
lea    -0xfc(%rbp),%r8
call   1030 <zlog_@plt>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
call   1050 <exp@plt>
mov    0x30(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1070 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x28(%rbp),%rcx
mov    0x30(%rbp),%r8
lea    -0xd0(%rbp),%rdi
lea    -0xa8(%rbp),%rsi
lea    -0x64(%rbp),%rdx
call   1090 <zuchk_@plt>
cmpl   $0x0,-0x64(%rbp)
je     1445 <zkscl_+0x2d5>
jmp    1480 <zkscl_+0x310>
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
jmp    1485 <zkscl_+0x315>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1217 <zkscl_+0xa7>
mov    -0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    14ac <zkscl_+0x33c>
movl   $0x0,-0x4(%rbp)
jmp    1a63 <zkscl_+0x8f3>
cmpl   $0x1,-0x44(%rbp)
jle    14bb <zkscl_+0x34b>
jmp    14e7 <zkscl_+0x377>
movsd  0x2b9d(%rip),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  0x2b94(%rip),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    0x10(%rbp),%rax
movl   $0x2,(%rax)
mov    -0x28(%rbp),%rax
cmpl   $0x2,(%rax)
jne    1500 <zkscl_+0x390>
movl   $0x0,-0x4(%rbp)
jmp    1a63 <zkscl_+0x8f3>
mov    0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1519 <zkscl_+0x3a9>
movl   $0x0,-0x4(%rbp)
jmp    1a63 <zkscl_+0x8f3>
mov    -0x20(%rbp),%rax
movsd  0xae3(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    0x18(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mov    0x20(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x78(%rbp)
mov    0x38(%rbp),%rax
movsd  0xa65(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1050 <exp@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x3,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     19cd <zkscl_+0x85d>
mov    -0x40(%rbp),%eax
mov    %eax,-0x5c(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
lea    -0x88(%rbp),%rdi
lea    -0x78(%rbp),%rsi
call   1060 <zabs_@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1080 <log@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
movsd  0x28ed(%rip),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x28e0(%rip),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm1
ff
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd %xmm1,%xmm0
jbe    17cb <zkscl_+0x65b>
jmp    1931 <zkscl_+0x7c1>
lea    -0x88(%rbp),%rdi
lea    -0x78(%rbp),%rsi
lea    -0xd0(%rbp),%rdx
lea    -0xa8(%rbp),%rcx
lea    -0xfc(%rbp),%r8
call   1030 <zlog_@plt>
movsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xa8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
call   1050 <exp@plt>
mov    0x30(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1070 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x140(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x138(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x28(%rbp),%rcx
mov    0x30(%rbp),%r8
lea    -0xd0(%rbp),%rdi
lea    -0xa8(%rbp),%rsi
lea    -0x64(%rbp),%rdx
call   1090 <zuchk_@plt>
cmpl   $0x0,-0x64(%rbp)
je     18db <zkscl_+0x76b>
jmp    1931 <zkscl_+0x7c1>
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
mov    -0x44(%rbp),%eax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1926 <zkscl_+0x7b6>
jmp    19fc <zkscl_+0x88c>
mov    -0x5c(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    19ba <zkscl_+0x84a>
movsd  -0xf8(%rbp),%xmm1
ff
movsd  -0x108(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1950 <zkscl_+0x7e0>
jmp    19ba <zkscl_+0x84a>
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x110(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x110(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    19bf <zkscl_+0x84f>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1613 <zkscl_+0x4a3>
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%eax
mov    -0x28(%rbp),%rcx
cmp    (%rcx),%eax
jne    19f7 <zkscl_+0x887>
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
sub    $0x1,%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    1a08 <zkscl_+0x898>
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1a5c <zkscl_+0x8ec>
movsd  0x2634(%rip),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x2627(%rip),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1a18 <zkscl_+0x8a8>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<zkscl_>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
mov    %r9,%r14
mov    %r8,%rbx
mov    %rsi,0x68(%rsp)
mov    %rdi,0x58(%rsp)
mov    0x100(%rsp),%rax
movl   $0x0,(%rax)
mov    %rcx,0x70(%rsp)
mov    (%rcx),%eax
cmp    $0x2,%eax
mov    $0x2,%ebp
cmovl  %eax,%ebp
test   %ebp,%ebp
mov    %rdx,0x38(%rsp)
jle    13a7 <zkscl_+0x237>
mov    %rbx,0x30(%rsp)
mov    %r14,0x18(%rsp)
add    $0x1,%ebp
movl   $0x0,0xc(%rsp)
mov    $0x1,%r14d
lea    0x48(%rsp),%r13
lea    0x28(%rsp),%rcx
mov    0x58(%rsp),%r15
jmp    1202 <zkscl_+0x92>
nopw   0x0(%rax,%rax,1)
lea    0x28(%rsp),%rcx
add    $0x1,%r14
cmp    %r14,%rbp
je     1379 <zkscl_+0x209>
mov    0x30(%rsp),%r12
movsd  -0x8(%r12,%r14,8),%xmm0
movsd  %xmm0,0x48(%rsp)
mov    0x18(%rsp),%rbx
movsd  -0x8(%rbx,%r14,8),%xmm1
movsd  %xmm1,0x28(%rsp)
movsd  %xmm0,0x98(%rsp,%r14,8)
movsd  %xmm1,0xa8(%rsp,%r14,8)
mov    %r13,%rdi
mov    %rcx,%rsi
call   1060 <zabs_@plt>
movsd  (%r15),%xmm1
movsd  %xmm1,0x10(%rsp)
call   1080 <log@plt>
mov    0x100(%rsp),%rax
addl   $0x1,(%rax)
subsd  0x10(%rsp),%xmm0
movq   $0x0,-0x8(%r12,%r14,8)
movq   $0x0,-0x8(%rbx,%r14,8)
mov    0x128(%rsp),%rax
movsd  (%rax),%xmm1
xorpd  0xd74(%rip),%xmm1
ucomisd %xmm0,%xmm1
ja     11f0 <zkscl_+0x80>
mov    %r13,%rdi
lea    0x28(%rsp),%rsi
lea    0x20(%rsp),%r12
mov    %r12,%rdx
mov    %rsp,%rcx
lea    0x7c(%rsp),%r8
call   1030 <zlog_@plt>
movsd  0x20(%rsp),%xmm0
subsd  (%r15),%xmm0
movsd  (%rsp),%xmm1
mov    0x68(%rsp),%rax
subsd  (%rax),%xmm1
movsd  %xmm1,(%rsp)
call   1050 <exp@plt>
mov    0x120(%rsp),%rbx
divsd  (%rbx),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1070 <cos@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  (%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%rsp)
mov    %r12,%rdi
mov    %rsp,%rsi
lea    0x44(%rsp),%rdx
mov    0x118(%rsp),%rcx
mov    %rbx,%r8
call   1090 <zuchk_@plt>
cmpl   $0x0,0x44(%rsp)
lea    0x28(%rsp),%rcx
jne    11f5 <zkscl_+0x85>
movsd  0x20(%rsp),%xmm0
mov    0x30(%rsp),%rax
movsd  %xmm0,-0x8(%rax,%r14,8)
movsd  (%rsp),%xmm0
mov    0x18(%rsp),%rax
movsd  %xmm0,-0x8(%rax,%r14,8)
mov    0x100(%rsp),%rax
addl   $0xffffffff,(%rax)
mov    %r14d,%eax
mov    %r14d,0xc(%rsp)
jmp    11f5 <zkscl_+0x85>
mov    0x70(%rsp),%r15
mov    (%r15),%eax
cmp    $0x1,%eax
mov    0x18(%rsp),%r14
mov    0x30(%rsp),%rbx
mov    0xc(%rsp),%ebp
je     199f <zkscl_+0x82f>
cmp    $0x1,%ebp
jle    13b7 <zkscl_+0x247>
cmp    $0x2,%eax
jne    13df <zkscl_+0x26f>
jmp    199f <zkscl_+0x82f>
xor    %ebp,%ebp
cmp    $0x1,%eax
mov    0x70(%rsp),%r15
je     199f <zkscl_+0x82f>
movq   $0x0,(%rbx)
movq   $0x0,(%r14)
mov    0x100(%rsp),%rax
movl   $0x2,(%rax)
mov    (%r15),%eax
cmp    $0x2,%eax
je     199f <zkscl_+0x82f>
mov    0x100(%rsp),%rax
cmpl   $0x0,(%rax)
je     199f <zkscl_+0x82f>
mov    0x110(%rsp),%rax
mov    0x108(%rsp),%rcx
mov    0x38(%rsp),%rdx
movsd  (%rdx),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  (%rcx),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rax),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0xa0(%rsp),%xmm0
movsd  0xa8(%rsp),%xmm1
movsd  %xmm0,0x48(%rsp)
movsd  0xb0(%rsp),%xmm0
movsd  0xb8(%rsp),%xmm2
movsd  %xmm0,0x28(%rsp)
movsd  %xmm1,0x60(%rsp)
movsd  %xmm2,0x50(%rsp)
mov    0x128(%rsp),%rax
movsd  (%rax),%xmm1
movapd 0xb8d(%rip),%xmm0
movapd %xmm1,0x80(%rsp)
xorpd  %xmm1,%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x90(%rsp)
mov    (%r15),%r12d
cmp    $0x3,%r12d
jl     17b5 <zkscl_+0x645>
mov    %ebp,0xc(%rsp)
mov    %rbx,0x30(%rsp)
movsd  0x18(%rsp),%xmm4
addsd  0xb5e(%rip),%xmm4
movapd 0x80(%rsp),%xmm1
mulsd  0xb55(%rip),%xmm1
mov    0x68(%rsp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x98(%rsp)
mov    0x58(%rsp),%rax
movsd  (%rax),%xmm2
movsd  0x38(%rsp),%xmm5
mulsd  %xmm4,%xmm5
mulsd  0x10(%rsp),%xmm4
mov    %r12,%r13
add    $0x1,%r13
mov    $0x3,%r15d
mov    $0x1,%r12d
lea    0x60(%rsp),%rbp
lea    0x50(%rsp),%rbx
movapd %xmm1,0x80(%rsp)
jmp    157d <zkscl_+0x40d>
movsd  0x20(%rsp),%xmm0
mov    0x30(%rsp),%rax
movsd  %xmm0,-0x8(%rax,%r15,8)
movsd  (%rsp),%xmm0
movsd  %xmm0,-0x8(%r14,%r15,8)
mov    0x100(%rsp),%rax
addl   $0xffffffff,(%rax)
lea    -0x1(%r15),%rax
mov    0xc(%rsp),%ecx
cmp    %rcx,%rax
je     1839 <zkscl_+0x6c9>
mov    %r15d,%eax
mov    %r15d,0xc(%rsp)
nopl   0x0(%rax,%rax,1)
movsd  0x18(%rsp),%xmm4
movsd  0x38(%rsp),%xmm5
add    $0x1,%r15
add    $0x1,%r12d
cmp    %r15,%r13
je     17a4 <zkscl_+0x634>
movsd  %xmm2,0x10(%rsp)
movsd  0x60(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
movsd  %xmm1,(%rsp)
movapd %xmm4,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm5,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm2,%xmm3
addsd  0x28(%rsp),%xmm3
movsd  %xmm1,0x28(%rsp)
mulsd  %xmm5,%xmm1
movapd %xmm4,%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm1,%xmm2
addsd  0x48(%rsp),%xmm2
movsd  %xmm0,0x20(%rsp)
movsd  %xmm2,0x60(%rsp)
movsd  %xmm3,0x50(%rsp)
movsd  %xmm0,0x48(%rsp)
mov    0x108(%rsp),%rax
addsd  (%rax),%xmm4
movsd  %xmm4,0x18(%rsp)
mov    0x110(%rsp),%rax
addsd  (%rax),%xmm5
movsd  %xmm5,0x38(%rsp)
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1060 <zabs_@plt>
call   1080 <log@plt>
movsd  0x10(%rsp),%xmm2
mov    0x100(%rsp),%rax
addl   $0x1,(%rax)
movapd %xmm0,%xmm3
subsd  %xmm2,%xmm3
mov    0x30(%rsp),%rax
movq   $0x0,-0x8(%rax,%r15,8)
movq   $0x0,-0x8(%r14,%r15,8)
mov    0x128(%rsp),%rax
movsd  (%rax),%xmm1
xorpd  0x9a6(%rip),%xmm1
ucomisd %xmm3,%xmm1
ja     172f <zkscl_+0x5bf>
mov    %rbp,%rdi
mov    %rbx,%rsi
lea    0x20(%rsp),%rdx
mov    %rsp,%rcx
lea    0x7c(%rsp),%r8
movsd  %xmm0,0x68(%rsp)
call   1030 <zlog_@plt>
movsd  0x20(%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
subsd  0x98(%rsp),%xmm1
movsd  %xmm1,(%rsp)
call   1050 <exp@plt>
mov    %r14,%rbx
mov    %r13,%r14
mov    %rbp,%r13
mov    0x120(%rsp),%rbp
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  (%rsp),%xmm0
call   1070 <cos@plt>
mulsd  0x58(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  (%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0x58(%rsp),%xmm0
movsd  %xmm0,(%rsp)
lea    0x20(%rsp),%rdi
mov    %rsp,%rsi
lea    0x44(%rsp),%rdx
mov    0x118(%rsp),%rcx
mov    %rbp,%r8
mov    %r13,%rbp
mov    %r14,%r13
mov    %rbx,%r14
lea    0x50(%rsp),%rbx
call   1090 <zuchk_@plt>
movsd  0x68(%rsp),%xmm0
movsd  0x10(%rsp),%xmm2
cmpl   $0x0,0x44(%rsp)
je     1516 <zkscl_+0x3a6>
movapd 0x80(%rsp),%xmm1
ucomisd %xmm0,%xmm1
ja     1560 <zkscl_+0x3f0>
mov    0x128(%rsp),%rax
subsd  (%rax),%xmm2
movsd  0x48(%rsp),%xmm0
movapd %xmm2,%xmm3
movsd  0x90(%rsp),%xmm2
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x28(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x60(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x50(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm3,%xmm2
movsd  %xmm0,0x50(%rsp)
jmp    1560 <zkscl_+0x3f0>
mov    0x70(%rsp),%r15
mov    (%r15),%r12d
mov    0x30(%rsp),%rbx
mov    0xc(%rsp),%ebp
mov    0x100(%rsp),%rax
mov    %r12d,(%rax)
cmp    (%r15),%ebp
jne    17d6 <zkscl_+0x666>
add    $0xffffffff,%ebp
mov    %ebp,%r12d
mov    0x100(%rsp),%rax
mov    %r12d,(%rax)
test   %r12d,%r12d
jle    199f <zkscl_+0x82f>
mov    %r12d,%edx
lea    0x1(%rdx),%rax
mov    $0x1,%ecx
cmp    $0x4,%r12d
jb     190d <zkscl_+0x79d>
lea    (%r14,%rax,8),%rsi
add    $0xfffffffffffffff8,%rsi
cmp    %rbx,%rsi
jbe    1813 <zkscl_+0x6a3>
lea    (%rbx,%rax,8),%rsi
add    $0xfffffffffffffff8,%rsi
cmp    %r14,%rsi
ja     190d <zkscl_+0x79d>
mov    %edx,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%ebp
and    $0x3,%ebp
cmp    $0xc,%rdi
jae    1840 <zkscl_+0x6d0>
xor    %edi,%edi
jmp    18c0 <zkscl_+0x750>
mov    0x30(%rsp),%rbx
jmp    17cb <zkscl_+0x65b>
and    $0xfffffffffffffffc,%rsi
xor    %edi,%edi
xorpd  %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
movupd %xmm0,(%rbx,%rdi,8)
movupd %xmm0,0x10(%rbx,%rdi,8)
movupd %xmm0,(%r14,%rdi,8)
movupd %xmm0,0x10(%r14,%rdi,8)
movupd %xmm0,0x20(%rbx,%rdi,8)
movupd %xmm0,0x30(%rbx,%rdi,8)
movupd %xmm0,0x20(%r14,%rdi,8)
movupd %xmm0,0x30(%r14,%rdi,8)
movupd %xmm0,0x40(%rbx,%rdi,8)
movupd %xmm0,0x50(%rbx,%rdi,8)
movupd %xmm0,0x40(%r14,%rdi,8)
movupd %xmm0,0x50(%r14,%rdi,8)
movupd %xmm0,0x60(%rbx,%rdi,8)
movupd %xmm0,0x70(%rbx,%rdi,8)
movupd %xmm0,0x60(%r14,%rdi,8)
movupd %xmm0,0x70(%r14,%rdi,8)
add    $0x10,%rdi
add    $0xfffffffffffffffc,%rsi
jne    1850 <zkscl_+0x6e0>
test   %rbp,%rbp
je     1900 <zkscl_+0x790>
xorpd  %xmm0,%xmm0
nopl   0x0(%rax)
lea    0x0(,%rdi,8),%rsi
or     $0x8,%rsi
movupd %xmm0,-0x8(%rbx,%rsi,1)
movupd %xmm0,0x8(%rbx,%rsi,1)
movupd %xmm0,-0x8(%r14,%rsi,1)
movupd %xmm0,0x8(%r14,%rsi,1)
add    $0x4,%rdi
add    $0xffffffffffffffff,%rbp
jne    18d0 <zkscl_+0x760>
cmp    %rcx,%rdx
je     199f <zkscl_+0x82f>
or     $0x1,%rcx
mov    %eax,%esi
sub    %ecx,%esi
mov    %rcx,%rdx
not    %rdx
add    %rax,%rdx
and    $0x3,%rsi
je     193c <zkscl_+0x7cc>
movq   $0x0,-0x8(%rbx,%rcx,8)
movq   $0x0,-0x8(%r14,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    1920 <zkscl_+0x7b0>
cmp    $0x3,%rdx
jb     199f <zkscl_+0x82f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movq   $0x0,-0x8(%rbx,%rcx,8)
movq   $0x0,-0x8(%r14,%rcx,8)
movq   $0x0,(%rbx,%rcx,8)
movq   $0x0,(%r14,%rcx,8)
movq   $0x0,0x8(%rbx,%rcx,8)
movq   $0x0,0x8(%r14,%rcx,8)
movq   $0x0,0x10(%rbx,%rcx,8)
movq   $0x0,0x10(%r14,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1950 <zkscl_+0x7e0>
xor    %eax,%eax
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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