#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 fabs(double);
int /*<<< orphan*/ printf(char *, ...);
double sqrt(int);
int plmbar_(double *p, double *dp, double *z, int *lmax, int *inorm) {
  char fmt_99[] = "("
                  "\002plmbar.f: inorm incorrect: "
                  "use inorm=1 for schmidt norm\002,/,\002 "
                  " inorm=2 for full norm.\002"
                  ")";
  int i1, i2;
  double fden, fnum;
  int k, l, m;
  double f1, f2;
  int kstart;
  double pm1, pm2, sintsq, fac, plm, pmm, fac1, fac2;
  --dp;
  --p;
  if ((*lmax < 0) || (fabs(*z) > 1.)) {
    printf("plmbar: bad arguments. lmax = %d, z = %14.4f\n", *lmax, *z);
    return (-1);
  }
  if ((*inorm != 1) && (*inorm != 2)) {
    printf("plmbar: %s\n", fmt_99);
    return (-2);
  }
  pm2 = 1.;
  p[1] = 1.;
  dp[1] = 0.;
  if (*lmax == 0) {
    return 0;
  }
  pm1 = *z;
  p[2] = sqrt(3.) * pm1;
  k = 2;
  i1 = *lmax;
  for (l = 2; l <= i1; ++l) {
    k += l;
    plm =
        ((double)((l << 1) - 1) * *z * pm1 - (double)(l - 1) * pm2) / (double)l;
    p[k] = sqrt((double)((l << 1) + 1)) * plm;
    pm2 = pm1;
    pm1 = plm;
  }
  pmm = 1.;
  sintsq = (1. - *z) * (*z + 1.);
  fnum = -1.;
  fden = 0.;
  kstart = 1;
  i1 = *lmax;
  for (m = 1; m <= i1; ++m) {
    kstart = kstart + m + 1;
    fnum += 2.;
    fden += 2.;
    pmm = pmm * sintsq * fnum / fden;
    pm2 = sqrt((double)((m << 2) + 2) * pmm);
    p[kstart] = pm2;
    if (m == *lmax) {
      goto L100;
    }
    pm1 = *z * sqrt((double)((m << 1) + 3)) * pm2;
    k = kstart + m + 1;
    p[k] = pm1;
    if (m < *lmax - 1) {
      i2 = *lmax;
      for (l = m + 2; l <= i2; ++l) {
        k += l;
        f1 = sqrt((double)(((l << 1) + 1) * ((l << 1) - 1)) /
                  (double)((l + m) * (l - m)));
        f2 = sqrt((double)(((l << 1) + 1) * (l - m - 1) * (l + m - 1)) /
                  (double)(((l << 1) - 3) * (l + m) * (l - m)));
        plm = *z * f1 * pm1 - f2 * pm2;
        p[k] = plm;
        pm2 = pm1;
        pm1 = plm;
      }
    }
  }
L100:
  if (*inorm == 1) {
    k = 1;
    i1 = *lmax;
    for (l = 1; l <= i1; ++l) {
      fac = 1. / sqrt((double)((l << 1) + 1));
      i2 = l;
      for (m = 0; m <= i2; ++m) {
        ++k;
        p[k] *= fac;
      }
    }
  }
  dp[2] = -p[3];
  dp[3] = p[2];
  k = 3;
  i2 = *lmax;
  for (l = 2; l <= i2; ++l) {
    ++k;
    dp[k] = -sqrt((double)(l * (l + 1)) / 2.) * p[k + 1];
    dp[k + l] = sqrt((double)l / 2.) * p[k + l - 1];
    i1 = l - 1;
    for (m = 1; m <= i1; ++m) {
      ++k;
      fac1 = sqrt((double)((l - m) * (l + m + 1)));
      fac2 = sqrt((double)((l + m) * (l - m + 1)));
      if (m == 1) {
        fac2 *= sqrt(2.);
      }
      dp[k] = (fac2 * p[k - 1] - fac1 * p[k + 1]) * .5;
    }
    ++k;
  }
  return 0;
}


x86 assembly (clang, -O0):
<plmbar_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x120,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
lea    -0x90(%rbp),%rdi
lea    0xeb3(%rip),%rsi
mov    $0x59,%edx
call   1050 <memcpy@plt>
mov    -0x18(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jl     11bf <plmbar_+0x7f>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xe4b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11e7 <plmbar_+0xa7>
mov    -0x28(%rbp),%rax
mov    (%rax),%esi
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
lea    0xea5(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    1ae7 <plmbar_+0x9a7>
mov    -0x30(%rbp),%rax
cmpl   $0x1,(%rax)
je     1222 <plmbar_+0xe2>
mov    -0x30(%rbp),%rax
cmpl   $0x2,(%rax)
je     1222 <plmbar_+0xe2>
lea    -0x90(%rbp),%rsi
lea    0xe98(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0xfffffffe,-0x4(%rbp)
jmp    1ae7 <plmbar_+0x9a7>
movsd  0xdd6(%rip),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xdc2(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1268 <plmbar_+0x128>
movl   $0x0,-0x4(%rbp)
jmp    1ae7 <plmbar_+0x9a7>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    $0x3,%edi
call   1060 <sqrt@plt>
mulsd  -0xd8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movl   $0x2,-0xac(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x94(%rbp)
movl   $0x2,-0xb0(%rbp)
mov    -0xb0(%rbp),%eax
cmp    -0x94(%rbp),%eax
jg     13a4 <plmbar_+0x264>
mov    -0xb0(%rbp),%eax
add    -0xac(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    -0xb0(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
mov    -0xb0(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  -0xe0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0xb0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0xb0(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
mulsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0xac(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0xb0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb0(%rbp)
jmp    12b3 <plmbar_+0x173>
movsd  0xc54(%rip),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0xc40(%rip),%xmm0
subsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  0xc30(%rip),%xmm1
addsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0xc20(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x1,-0xcc(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x94(%rbp)
movl   $0x1,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
cmp    -0x94(%rbp),%eax
jg     1740 <plmbar_+0x600>
mov    -0xcc(%rbp),%eax
add    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
movsd  0xbc6(%rip),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xbae(%rip),%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
divsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0xb4(%rbp),%eax
shl    $0x2,%eax
add    $0x2,%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x100(%rbp),%xmm0
ff
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0xcc(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xb4(%rbp),%eax
mov    -0x28(%rbp),%rcx
cmp    (%rcx),%eax
jne    14f2 <plmbar_+0x3b2>
jmp    1745 <plmbar_+0x605>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0xb4(%rbp),%eax
shl    $0x1,%eax
add    $0x3,%eax
cvtsi2sd %eax,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x118(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0xcc(%rbp),%eax
add    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0xac(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xb4(%rbp),%eax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1727 <plmbar_+0x5e7>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x98(%rbp)
mov    -0xb4(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xb0(%rbp)
mov    -0xb0(%rbp),%eax
cmp    -0x98(%rbp),%eax
jg     1722 <plmbar_+0x5e2>
mov    -0xb0(%rbp),%eax
add    -0xac(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    -0xb0(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    -0xb0(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0xb0(%rbp),%eax
add    -0xb4(%rbp),%eax
mov    -0xb0(%rbp),%ecx
sub    -0xb4(%rbp),%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0xb0(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    -0xb0(%rbp),%ecx
sub    -0xb4(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    -0xb0(%rbp),%ecx
add    -0xb4(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0xb0(%rbp),%eax
shl    $0x1,%eax
sub    $0x3,%eax
mov    -0xb0(%rbp),%ecx
add    -0xb4(%rbp),%ecx
imul   %ecx,%eax
mov    -0xb0(%rbp),%ecx
sub    -0xb4(%rbp),%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0xac(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0xb0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb0(%rbp)
jmp    1599 <plmbar_+0x459>
jmp    1727 <plmbar_+0x5e7>
jmp    172c <plmbar_+0x5ec>
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    141b <plmbar_+0x2db>
jmp    1745 <plmbar_+0x605>
mov    -0x30(%rbp),%rax
cmpl   $0x1,(%rax)
jne    183a <plmbar_+0x6fa>
movl   $0x1,-0xac(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x94(%rbp)
movl   $0x1,-0xb0(%rbp)
mov    -0xb0(%rbp),%eax
cmp    -0x94(%rbp),%eax
jg     1835 <plmbar_+0x6f5>
mov    -0xb0(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0x858(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0xb0(%rbp),%eax
mov    %eax,-0x98(%rbp)
movl   $0x0,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
cmp    -0x98(%rbp),%eax
jg     181c <plmbar_+0x6dc>
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0xac(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    17ca <plmbar_+0x68a>
jmp    1821 <plmbar_+0x6e1>
mov    -0xb0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb0(%rbp)
jmp    1772 <plmbar_+0x632>
jmp    183a <plmbar_+0x6fa>
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movl   $0x3,-0xac(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x98(%rbp)
movl   $0x2,-0xb0(%rbp)
mov    -0xb0(%rbp),%eax
cmp    -0x98(%rbp),%eax
jg     1ae0 <plmbar_+0x9a0>
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
mov    -0xb0(%rbp),%eax
mov    -0xb0(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0x73c(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0xac(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0xac(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
cvtsi2sdl -0xb0(%rbp),%xmm0
ff
movsd  0x6e3(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
mov    -0x10(%rbp),%rax
mov    -0xac(%rbp),%ecx
add    -0xb0(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0xac(%rbp),%ecx
add    -0xb0(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xb0(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x94(%rbp)
movl   $0x1,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
cmp    -0x94(%rbp),%eax
jg     1abd <plmbar_+0x97d>
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
mov    -0xb0(%rbp),%eax
sub    -0xb4(%rbp),%eax
mov    -0xb0(%rbp),%ecx
add    -0xb4(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0xb0(%rbp),%eax
add    -0xb4(%rbp),%eax
mov    -0xb0(%rbp),%ecx
sub    -0xb4(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <sqrt@plt>
movsd  %xmm0,-0x110(%rbp)
ff
cmpl   $0x1,-0xb4(%rbp)
jne    1a34 <plmbar_+0x8f4>
mov    $0x2,%edi
call   1060 <sqrt@plt>
mulsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0xac(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x108(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
mov    -0xac(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x583(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0xac(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    1986 <plmbar_+0x846>
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
mov    -0xb0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb0(%rbp)
jmp    1895 <plmbar_+0x755>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x120,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plmbar_>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x108,%rsp
mov    %rdx,%r13
mov    %rsi,%r14
movups 0xf3b(%rip),%xmm0
movups %xmm0,0xe9(%rsp)
movaps 0xf23(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xf04(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xee5(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movaps 0xec6(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
movapd 0xea6(%rip),%xmm0
movapd %xmm0,0xa0(%rsp)
mov    (%rcx),%esi
test   %esi,%esi
js     11c6 <plmbar_+0x96>
mov    %r8,%rbx
mov    %rcx,%r12
mov    %rdi,%rbp
movsd  0x0(%r13),%xmm0
call   1040 <fabs@plt>
cmp    $0x2,%eax
jl     11f1 <plmbar_+0xc1>
mov    (%r12),%esi
movsd  0x0(%r13),%xmm0
lea    0xec6(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    $0xffffffff,%eax
add    $0x108,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    (%rbx),%eax
add    $0xffffffff,%eax
cmp    $0x2,%eax
jae    15a9 <plmbar_+0x479>
movabs $0x3ff0000000000000,%rax
mov    %rax,0x0(%rbp)
movq   $0x0,(%r14)
xor    %eax,%eax
cmpl   $0x0,(%r12)
je     11df <plmbar_+0xaf>
movsd  0x0(%r13),%xmm0
movsd  %xmm0,(%rsp)
mov    $0x3,%edi
call   1050 <sqrt@plt>
movsd  (%rsp),%xmm2
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x8(%rbp)
mov    (%r12),%r15d
cmp    $0x2,%r15d
mov    %rbp,0x28(%rsp)
mov    %r12,0x40(%rsp)
mov    %r14,0x58(%rsp)
mov    %rbx,0x68(%rsp)
jl     1305 <plmbar_+0x1d5>
lea    (%r15,%r15,1),%r14
add    $0x2,%r14
mov    %rbp,%r12
mov    $0x2,%ebp
movsd  0xd86(%rip),%xmm0
mov    $0x1,%eax
mov    $0x4,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  %xmm2,(%rsp)
lea    0x1(%rax),%r15d
lea    -0x1(%rbx),%ecx
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
mulsd  0x0(%r13),%xmm3
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
lea    0x1(%rbp,%rax,1),%ebp
mulsd  %xmm0,%xmm1
mulsd  %xmm2,%xmm3
subsd  %xmm1,%xmm3
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
divsd  %xmm0,%xmm3
movsd  %xmm3,0x8(%rsp)
lea    0x1(%rbx),%edi
call   1050 <sqrt@plt>
movsd  0x8(%rsp),%xmm2
mulsd  %xmm2,%xmm0
movsd  %xmm0,-0x8(%r12,%rbp,8)
add    $0x2,%rbx
mov    %r15d,%eax
movsd  (%rsp),%xmm0
cmp    %rbx,%r14
jne    1290 <plmbar_+0x160>
mov    0x40(%rsp),%r12
mov    (%r12),%r15d
test   %r15d,%r15d
mov    0x28(%rsp),%r14
jle    15c9 <plmbar_+0x499>
movsd  0x0(%r13),%xmm1
movsd  0xcdf(%rip),%xmm2
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm2,0x48(%rsp)
addsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x78(%rsp)
add    $0x1,%r15d
movsd  0xcbf(%rip),%xmm0
movapd %xmm0,0x90(%rsp)
mov    $0x1,%ebx
mov    $0x1,%ebp
movl   $0x3,0x3c(%rsp)
xor    %eax,%eax
mov    %rax,0x60(%rsp)
xor    %eax,%eax
mov    %rax,0x20(%rsp)
mov    %r15,0x70(%rsp)
mov    %r13,0x50(%rsp)
jmp    13b7 <plmbar_+0x287>
xchg   %ax,%ax
addl   $0x2,0x3c(%rsp)
add    $0x1,%edx
mov    %rdx,0x20(%rsp)
add    $0x2,%r15d
mov    %r15,0x60(%rsp)
mov    0x70(%rsp),%r15
mov    0x80(%rsp),%rbp
cmp    %r15,%rbp
mov    %rsi,%r13
mov    0x88(%rsp),%rbx
je     15c9 <plmbar_+0x499>
movsd  0x48(%rsp),%xmm1
mulsd  0x78(%rsp),%xmm1
mov    %r13,%r12
lea    0x1(%rbp),%r13
movapd 0x90(%rsp),%xmm0
addpd  0xc45(%rip),%xmm0
mulsd  %xmm0,%xmm1
movapd %xmm0,0x90(%rsp)
unpckhpd %xmm0,%xmm0
divsd  %xmm0,%xmm1
lea    0x2(,%rbp,4),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
add    %r13d,%ebx
movsd  %xmm1,0x48(%rsp)
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1050 <sqrt@plt>
mov    %r13,%rcx
mov    %r12,%r13
mov    0x40(%rsp),%r12
movslq %ebx,%rax
movsd  %xmm0,-0x8(%r14,%rax,8)
mov    (%r12),%eax
cmp    %rax,%rbp
je     15c9 <plmbar_+0x499>
movsd  0x0(%r13),%xmm1
movsd  %xmm1,0x8(%rsp)
lea    0x3(%rbp,%rbp,1),%edi
mov    %rcx,%r15
movsd  %xmm0,(%rsp)
call   1050 <sqrt@plt>
movsd  (%rsp),%xmm1
mulsd  0x8(%rsp),%xmm0
mulsd  %xmm1,%xmm0
mov    %r13,%rsi
mov    %rbx,0x88(%rsp)
mov    %r15,0x80(%rsp)
lea    (%rbx,%r15,1),%r13d
movslq %r13d,%rax
movsd  %xmm0,-0x8(%r14,%rax,8)
mov    (%r12),%eax
movslq %eax,%rcx
lea    -0x1(%rcx),%rdx
cmp    %rdx,%rbp
mov    0x60(%rsp),%r15
mov    0x20(%rsp),%rdx
jge    1380 <plmbar_+0x250>
add    $0x2,%rbp
cmp    %rcx,%rbp
jg     1380 <plmbar_+0x250>
mov    %edx,%ecx
sub    %eax,%ecx
mov    %ecx,0x14(%rsp)
mov    $0x2,%ebp
mov    0x3c(%rsp),%eax
mov    %eax,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  %xmm0,0x18(%rsp)
movsd  %xmm1,(%rsp)
lea    (%rdx,%rbp,1),%eax
lea    0x4(%rbx),%r12d
lea    0x2(%rbx),%edx
mov    %edx,0x8(%rsp)
mov    %r12d,%ecx
imul   %edx,%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
lea    (%r15,%rbp,1),%r14d
add    $0x2,%r14d
imul   %ebp,%r14d
xorps  %xmm1,%xmm1
cvtsi2sd %r14d,%xmm1
add    %eax,%r13d
add    $0x1,%r13d
divsd  %xmm1,%xmm2
cvttsd2si %xmm2,%edi
call   1050 <sqrt@plt>
lea    -0x1(%rbp),%eax
imul   %r12d,%eax
lea    (%r15,%rbp,1),%ecx
add    $0x1,%ecx
imul   %eax,%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
imul   %ebx,%r14d
xorps  %xmm2,%xmm2
cvtsi2sd %r14d,%xmm2
mov    0x28(%rsp),%r14
movsd  %xmm0,0x30(%rsp)
divsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1050 <sqrt@plt>
mov    0x50(%rsp),%rsi
mov    0x20(%rsp),%rdx
movsd  0x30(%rsp),%xmm2
mulsd  (%rsi),%xmm2
mulsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  %xmm1,%xmm2
subsd  %xmm0,%xmm2
movslq %r13d,%rax
movsd  %xmm2,-0x8(%r14,%rax,8)
movapd %xmm2,%xmm0
add    $0x1,%ebp
mov    0x14(%rsp),%eax
mov    0x8(%rsp),%ecx
mov    %ecx,%ebx
add    %ebp,%eax
jne    14d0 <plmbar_+0x3a0>
jmp    1380 <plmbar_+0x250>
lea    0xb17(%rip),%rdi
lea    0xa0(%rsp),%rsi
xor    %eax,%eax
call   1030 <printf@plt>
mov    $0xfffffffe,%eax
jmp    11df <plmbar_+0xaf>
mov    0x68(%rsp),%rax
cmpl   $0x1,(%rax)
mov    %r14,%rcx
jne    1792 <plmbar_+0x662>
mov    0x40(%rsp),%rax
mov    (%rax),%eax
mov    %eax,0x18(%rsp)
test   %eax,%eax
jle    1792 <plmbar_+0x662>
addl   $0x1,0x18(%rsp)
lea    0x30(%rcx),%rax
mov    %rax,0x30(%rsp)
mov    $0x2,%eax
mov    $0x1,%edi
mov    $0x3,%ebx
mov    $0x3,%r14d
mov    $0x1,%r15d
jmp    163d <plmbar_+0x50d>
nopl   0x0(%rax,%rax,1)
add    %r8d,%edi
add    $0x1,%r15d
lea    0x1(%r8),%eax
add    %r14d,%ebx
add    $0x1,%r14d
cmp    0x18(%rsp),%r8d
je     1792 <plmbar_+0x662>
mov    %rax,0x8(%rsp)
mov    %ebx,(%rsp)
movslq %ebx,%r13
mov    %edi,%ebx
movslq %edi,%r12
mov    %r13,%rbp
sub    %r12,%rbp
lea    (%r15,%r15,1),%edi
add    $0x1,%edi
call   1050 <sqrt@plt>
movsd  0x999(%rip),%xmm1
divsd  %xmm0,%xmm1
cmp    $0x4,%rbp
jae    1690 <plmbar_+0x560>
mov    0x28(%rsp),%rcx
mov    %ebx,%edi
mov    (%rsp),%ebx
mov    0x8(%rsp),%r8
jmp    1770 <plmbar_+0x640>
cs nopw 0x0(%rax,%rax,1)
nop
lea    -0x4(%rbp),%rcx
mov    %rcx,%rax
shr    $0x2,%rax
add    $0x1,%rax
movapd %xmm1,%xmm0
unpcklpd %xmm1,%xmm0
cmp    $0x4,%rcx
jae    16c0 <plmbar_+0x590>
xor    %ecx,%ecx
mov    %ebx,%edi
mov    (%rsp),%ebx
mov    0x8(%rsp),%r8
jmp    1728 <plmbar_+0x5f8>
nopl   0x0(%rax,%rax,1)
mov    0x30(%rsp),%rcx
lea    (%rcx,%r12,8),%rdx
mov    %rax,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
mov    %ebx,%edi
mov    (%rsp),%ebx
mov    0x8(%rsp),%r8
nopl   0x0(%rax)
movupd -0x30(%rdx,%rcx,8),%xmm2
movupd -0x20(%rdx,%rcx,8),%xmm3
movupd -0x10(%rdx,%rcx,8),%xmm4
movupd (%rdx,%rcx,8),%xmm5
mulpd  %xmm0,%xmm2
mulpd  %xmm0,%xmm3
movupd %xmm2,-0x30(%rdx,%rcx,8)
movupd %xmm3,-0x20(%rdx,%rcx,8)
mulpd  %xmm0,%xmm4
mulpd  %xmm0,%xmm5
movupd %xmm4,-0x10(%rdx,%rcx,8)
movupd %xmm5,(%rdx,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rsi
jne    16e0 <plmbar_+0x5b0>
mov    %rbp,%rdx
and    $0xfffffffffffffffc,%rdx
test   $0x1,%al
je     1759 <plmbar_+0x629>
add    %r12,%rcx
mov    0x28(%rsp),%rax
movupd (%rax,%rcx,8),%xmm2
movupd 0x10(%rax,%rcx,8),%xmm3
mulpd  %xmm0,%xmm2
mulpd  %xmm0,%xmm3
movupd %xmm2,(%rax,%rcx,8)
movupd %xmm3,0x10(%rax,%rcx,8)
cmp    %rdx,%rbp
mov    0x28(%rsp),%rcx
je     1620 <plmbar_+0x4f0>
add    %rdx,%r12
nopw   0x0(%rax,%rax,1)
movsd  (%rcx,%r12,8),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,(%rcx,%r12,8)
lea    0x1(%r12),%rax
mov    %rax,%r12
cmp    %rax,%r13
jne    1770 <plmbar_+0x640>
jmp    1620 <plmbar_+0x4f0>
movsd  0x10(%rcx),%xmm0
xorps  0x892(%rip),%xmm0
mov    0x58(%rsp),%r15
movlps %xmm0,0x8(%r15)
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x10(%r15)
mov    0x40(%rsp),%rax
mov    (%rax),%edx
cmp    $0x2,%edx
mov    $0x0,%eax
jl     11df <plmbar_+0xaf>
lea    0x10(%rcx),%rax
mov    %rax,0x50(%rsp)
lea    0x8(%r15),%rax
mov    %rax,0x48(%rsp)
mov    $0x3,%r14d
mov    $0x2,%eax
movsd  0x823(%rip),%xmm1
xor    %ebp,%ebp
movsd  0x821(%rip),%xmm2
mov    %edx,0x14(%rsp)
jmp    1820 <plmbar_+0x6f0>
nopl   (%rax)
mov    0x14(%rsp),%edx
movsd  0x30(%rsp),%xmm1
mov    0x20(%rsp),%ecx
add    $0x2,%r14d
add    $0x1,%rbp
cmp    %edx,%eax
mov    %ecx,%eax
je     19da <plmbar_+0x8aa>
mov    %rax,0x8(%rsp)
movsd  %xmm1,(%rsp)
mov    %r14,%rbx
add    $0x1,%r14d
lea    0x1(%rax),%r13d
mov    %r13d,0x20(%rsp)
imul   %eax,%r13d
xorps  %xmm0,%xmm0
cvtsi2sd %r13d,%xmm0
addsd  0x7b2(%rip),%xmm1
movsd  %xmm1,0x30(%rsp)
mulsd  %xmm2,%xmm0
cvttsd2si %xmm0,%edi
call   1050 <sqrt@plt>
xorpd  0x7c7(%rip),%xmm0
movslq %ebx,%rbx
mov    0x28(%rsp),%r12
mulsd  0x8(%r12,%rbx,8),%xmm0
movslq %r14d,%r14
movsd  %xmm0,-0x8(%r15,%r14,8)
movsd  (%rsp),%xmm0
mulsd  0x789(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1050 <sqrt@plt>
mov    0x8(%rsp),%rax
add    %ebx,%eax
add    $0x1,%eax
add    0x8(%rsp),%ebx
movslq %ebx,%rcx
mulsd  -0x8(%r12,%rcx,8),%xmm0
cltq
movsd  %xmm0,-0x8(%r15,%rax,8)
mov    0x8(%rsp),%rax
add    $0xffffffff,%eax
mov    0x8(%rsp),%rcx
lea    0x2(%rcx),%edi
imul   %eax,%edi
call   1050 <sqrt@plt>
movsd  %xmm0,(%rsp)
mov    %r13d,%edi
call   1050 <sqrt@plt>
movsd  %xmm0,0x18(%rsp)
mov    $0x2,%edi
call   1050 <sqrt@plt>
movsd  0x722(%rip),%xmm2
mov    0x8(%rsp),%rax
mulsd  0x18(%rsp),%xmm0
movsd  (%rsp),%xmm1
mulsd  0x8(%r12,%r14,8),%xmm1
mulsd  -0x8(%r12,%r14,8),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,(%r15,%r14,8)
cmp    $0x2,%eax
je     1800 <plmbar_+0x6d0>
mov    0x50(%rsp),%rax
lea    (%rax,%r14,8),%rbx
mov    0x48(%rsp),%rax
mov    %r14,0x18(%rsp)
lea    (%rax,%r14,8),%r13
xor    %r12d,%r12d
xor    %r14d,%r14d
nopl   0x0(%rax,%rax,1)
lea    (%r12,%rbp,1),%eax
lea    (%r14,%rbp,1),%r15d
add    $0x4,%r15d
lea    (%r14,%rbp,1),%edi
add    $0x5,%edi
imul   %eax,%edi
call   1050 <sqrt@plt>
movsd  %xmm0,(%rsp)
lea    (%r12,%rbp,1),%edi
add    $0x1,%edi
imul   %r15d,%edi
call   1050 <sqrt@plt>
movsd  0x690(%rip),%xmm2
movsd  (%rsp),%xmm1
mulsd  (%rbx,%r14,8),%xmm1
mulsd  -0x10(%rbx,%r14,8),%xmm0
subsd  %xmm1,%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x0(%r13,%r14,8)
add    $0x1,%r14
add    $0xffffffffffffffff,%r12
cmp    %r14d,%ebp
jne    1950 <plmbar_+0x820>
mov    0x18(%rsp),%rax
add    %r14,%rax
mov    %rax,%r14
mov    0x58(%rsp),%r15
mov    0x14(%rsp),%edx
movsd  0x30(%rsp),%xmm1
mov    0x8(%rsp),%rax
jmp    180a <plmbar_+0x6da>
xor    %eax,%eax
jmp    11df <plmbar_+0xaf>

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

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