#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 */
typedef int /*<<< orphan*/ jpm3;
typedef int /*<<< orphan*/ jpm2;
typedef int /*<<< orphan*/ jpm1;
typedef int /*<<< orphan*/ jmm3;
typedef int /*<<< orphan*/ jmm2;
typedef int /*<<< orphan*/ jmm1;

/* Variables and functions */
int fabs(int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, int, int);
double *realloc(double *, size_t);
double sqrt(double);
double s3j(double j1, double j2, double j3, double m1, double m2, double m3) {
  static double *f = NULL;
  static size_t f_size = 0;
  size_t f_size_old = f_size;
  int k, kmin, kmax;
  int jpm1, jmm1, jpm2, jmm2, jpm3, jmm3;
  int j1pj2mj3, j3mj2pm1, j3mj1mm2;
  double ris, mult;
  jpm1 = (int)(j1 + m1);
  if (!(fabs((jpm1) - (j1 + m1)) < 1e-10))
    return 0.0;
  jpm2 = (int)(j2 + m2);
  if (!(fabs((jpm2) - (j2 + m2)) < 1e-10))
    return 0.0;
  jpm3 = (int)(j3 + m3);
  if (!(fabs((jpm3) - (j3 + m3)) < 1e-10))
    return 0.0;
  jmm1 = (int)(j1 - m1);
  if (!(fabs((jmm1) - (j1 - m1)) < 1e-10))
    return 0.0;
  jmm2 = (int)(j2 - m2);
  if (!(fabs((jmm2) - (j2 - m2)) < 1e-10))
    return 0.0;
  jmm3 = (int)(j3 - m3);
  if (!(fabs((jmm3) - (j3 - m3)) < 1e-10))
    return 0.0;
  if ((jpm1 - jmm1 + jpm2 - jmm2 + jpm3 - jmm3) != 0)
    return 0.0;
  j1pj2mj3 = jpm1 + jpm2 - jmm3;
  j3mj2pm1 = jmm3 - jpm2;
  j3mj1mm2 = jpm3 - jmm1;
  (((-j3mj2pm1) > (-j3mj1mm2) ? (kmin = (-j3mj2pm1)) : (kmin = (-j3mj1mm2))) >
           (0)
       ? kmin
       : (kmin = (0)));
  (((j1pj2mj3) < (jmm1) ? (kmax = (j1pj2mj3)) : (kmax = (jmm1))) < (jpm2)
       ? kmax
       : (kmax = (jpm2)));
  if (kmin > kmax)
    return 0.0;
  k = (int)(j1 + j2 + j3 + m1 + m2 + m3 + 1.0) + 1;
  f_size = f_size >= k ? f_size : k;
  if (f_size > f_size_old) {
    f = realloc(f, f_size * sizeof(double));
    printf("realloc()'d f[] to length = %i from %i\n", (int)f_size,
           (int)f_size_old);
    if (f_size_old == 0) {
      f[0] = 1.0;
      f_size_old = 1;
    }
    for (k = f_size_old; k < f_size; k++) {
      f[k] = f[k - 1] * k;
    }
  }
  ris = 0.0;
  if (kmin % 2 == 0)
    mult = 1.0;
  else
    mult = -1.0;
  for (k = kmin; k <= kmax; ++k) {
    ris += mult / (f[k] * f[j1pj2mj3 - k] * f[jmm1 - k] * f[jpm2 - k] *
                   f[j3mj2pm1 + k] * f[j3mj1mm2 + k]);
    mult = -mult;
  }
  if ((jpm1 - jmm2) % 2 != 0)
    ris = -ris;
  ris *= sqrt(f[j1pj2mj3] * f[jpm1 - jmm2 + jpm3] * f[-jmm1 + jpm2 + jpm3] *
              f[jpm1] * f[jpm2] * f[jpm3] * f[jmm1] * f[jmm2] * f[jmm3] /
              f[jpm1 + jpm2 + jpm3 + 1]);
  return ris;
}


x86 assembly (clang, -O0):
<s3j>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
mov    0x2ee0(%rip),%rax
mov    %rax,-0x40(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
cvtsi2sdl -0x50(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
addsd  -0x28(%rbp),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xe53(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     11c4 <s3j+0x84>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
movsd  -0x18(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x58(%rbp)
cvtsi2sdl -0x58(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
addsd  -0x30(%rbp),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xe03(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     1214 <s3j+0xd4>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
movsd  -0x20(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x60(%rbp)
cvtsi2sdl -0x60(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
addsd  -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xdb3(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     1264 <s3j+0x124>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x54(%rbp)
cvtsi2sdl -0x54(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xd63(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     12b4 <s3j+0x174>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
movsd  -0x18(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x5c(%rbp)
cvtsi2sdl -0x5c(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xd13(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     1304 <s3j+0x1c4>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
movsd  -0x20(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x64(%rbp)
cvtsi2sdl -0x64(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
subsd  -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xcc3(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     1354 <s3j+0x214>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
mov    -0x50(%rbp),%eax
sub    -0x54(%rbp),%eax
add    -0x58(%rbp),%eax
sub    -0x5c(%rbp),%eax
add    -0x60(%rbp),%eax
sub    -0x64(%rbp),%eax
cmp    $0x0,%eax
je     137c <s3j+0x23c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
mov    -0x50(%rbp),%eax
add    -0x58(%rbp),%eax
sub    -0x64(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x64(%rbp),%eax
sub    -0x58(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x60(%rbp),%eax
sub    -0x54(%rbp),%eax
mov    %eax,-0x70(%rbp)
xor    %eax,%eax
sub    -0x6c(%rbp),%eax
xor    %ecx,%ecx
sub    -0x70(%rbp),%ecx
cmp    %ecx,%eax
jle    13bf <s3j+0x27f>
xor    %eax,%eax
sub    -0x6c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    %eax,-0x84(%rbp)
jmp    13cd <s3j+0x28d>
xor    %eax,%eax
sub    -0x70(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
cmp    $0x0,%eax
jle    13e4 <s3j+0x2a4>
mov    -0x48(%rbp),%eax
jmp    13eb <s3j+0x2ab>
movl   $0x0,-0x48(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x54(%rbp),%eax
jge    1408 <s3j+0x2c8>
mov    -0x68(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    %eax,-0x88(%rbp)
jmp    1414 <s3j+0x2d4>
mov    -0x54(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    %eax,-0x88(%rbp)
mov    -0x88(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    142b <s3j+0x2eb>
mov    -0x4c(%rbp),%eax
jmp    1431 <s3j+0x2f1>
mov    -0x58(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jle    144a <s3j+0x30a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179d <s3j+0x65d>
movsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  0xb98(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    0x2bcb(%rip),%rax
movslq -0x44(%rbp),%rcx
cmp    %rcx,%rax
jb     14a5 <s3j+0x365>
mov    0x2bb7(%rip),%rax
mov    %rax,-0x90(%rbp)
jmp    14b0 <s3j+0x370>
movslq -0x44(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x90(%rbp),%rax
mov    %rax,0x2b92(%rip)
mov    0x2b8b(%rip),%rax
cmp    -0x40(%rbp),%rax
jbe    1587 <s3j+0x447>
mov    0x2b72(%rip),%rdi
mov    0x2b73(%rip),%rsi
shl    $0x3,%rsi
call   1050 <realloc@plt>
mov    %rax,0x2b5b(%rip)
mov    0x2b5c(%rip),%rax
mov    %eax,%esi
mov    -0x40(%rbp),%rax
mov    %eax,%edx
lea    0xb15(%rip),%rdi
call   1030 <printf@plt>
cmpq   $0x0,-0x40(%rbp)
jne    152e <s3j+0x3ee>
mov    0x2b2e(%rip),%rax
movsd  0xae6(%rip),%xmm0
movsd  %xmm0,(%rax)
movq   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%rax
mov    %eax,-0x44(%rbp)
movslq -0x44(%rbp),%rax
cmp    0x2b10(%rip),%rax
jae    1582 <s3j+0x442>
mov    0x2afb(%rip),%rax
mov    -0x44(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
cvtsi2sdl -0x44(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    0x2add(%rip),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1535 <s3j+0x3f5>
jmp    1587 <s3j+0x447>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x48(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    15b5 <s3j+0x475>
movsd  0xa5d(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    15c2 <s3j+0x482>
movsd  0xa53(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     168f <s3j+0x54f>
movsd  -0x80(%rbp),%xmm0
mov    0x2a68(%rip),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x2a58(%rip),%rax
mov    -0x68(%rbp),%ecx
sub    -0x44(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    0x2a43(%rip),%rax
mov    -0x54(%rbp),%ecx
sub    -0x44(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    0x2a2e(%rip),%rax
mov    -0x58(%rbp),%ecx
sub    -0x44(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    0x2a19(%rip),%rax
mov    -0x6c(%rbp),%ecx
add    -0x44(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    0x2a04(%rip),%rax
mov    -0x70(%rbp),%ecx
add    -0x44(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    15c8 <s3j+0x488>
mov    -0x50(%rbp),%eax
sub    -0x5c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     16c7 <s3j+0x587>
movsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x297a(%rip),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x296a(%rip),%rax
mov    -0x50(%rbp),%ecx
sub    -0x5c(%rbp),%ecx
add    -0x60(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x2952(%rip),%rax
xor    %ecx,%ecx
sub    -0x54(%rbp),%ecx
add    -0x58(%rbp),%ecx
add    -0x60(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x2938(%rip),%rax
movslq -0x50(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x2928(%rip),%rax
movslq -0x58(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x2918(%rip),%rax
movslq -0x60(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x2908(%rip),%rax
movslq -0x54(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x28f8(%rip),%rax
movslq -0x5c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x28e8(%rip),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x28d8(%rip),%rax
mov    -0x50(%rbp),%ecx
add    -0x58(%rbp),%ecx
add    -0x60(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm0
call   1060 <sqrt@plt>
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<s3j>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
movsd  %xmm5,0x30(%rsp)
movsd  %xmm4,0x10(%rsp)
movsd  %xmm2,0x28(%rsp)
movsd  %xmm1,0x38(%rsp)
movsd  %xmm0,0x58(%rsp)
movapd %xmm0,%xmm1
movsd  %xmm3,0x50(%rsp)
addsd  %xmm3,%xmm1
cvttpd2dq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
mov    0x2ec4(%rip),%rbx
movapd %xmm1,0x70(%rsp)
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
xorpd  %xmm4,%xmm4
test   %eax,%eax
jg     1297 <s3j+0x157>
movsd  0x38(%rsp),%xmm1
addsd  0x10(%rsp),%xmm1
cvttpd2dq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm1,0x60(%rsp)
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
test   %eax,%eax
jg     1293 <s3j+0x153>
movsd  0x28(%rsp),%xmm1
addsd  0x30(%rsp),%xmm1
cvttpd2dq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm1,0x40(%rsp)
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
test   %eax,%eax
jg     1293 <s3j+0x153>
movsd  0x58(%rsp),%xmm1
subsd  0x50(%rsp),%xmm1
cvttpd2dq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm1,0xa0(%rsp)
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
test   %eax,%eax
jg     1293 <s3j+0x153>
movsd  0x38(%rsp),%xmm1
subsd  0x10(%rsp),%xmm1
cvttpd2dq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm1,0x90(%rsp)
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
test   %eax,%eax
jg     1293 <s3j+0x153>
movsd  0x28(%rsp),%xmm1
subsd  0x30(%rsp),%xmm1
cvttpd2dq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm1,0x80(%rsp)
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
test   %eax,%eax
jle    12ad <s3j+0x16d>
xorpd  %xmm4,%xmm4
movapd %xmm4,%xmm0
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cvttsd2si 0x70(%rsp),%r8d
cvttsd2si 0x60(%rsp),%r10d
cvttsd2si 0x40(%rsp),%edx
cvttsd2si 0xa0(%rsp),%r11d
cvttsd2si 0x90(%rsp),%edi
cvttsd2si 0x80(%rsp),%ebp
lea    (%r10,%r8,1),%r12d
lea    (%rdi,%r11,1),%eax
lea    (%r12,%rdx,1),%ecx
add    %ebp,%eax
cmp    %eax,%ecx
xorpd  %xmm4,%xmm4
jne    1297 <s3j+0x157>
mov    %r12d,%esi
sub    %ebp,%esi
mov    %ebp,%eax
sub    %r10d,%eax
mov    %edx,%r15d
sub    %r11d,%r15d
cmp    %eax,%r15d
cmovg  %eax,%r15d
mov    %r15d,%eax
neg    %eax
mov    %r15d,%r9d
sar    $0x1f,%r9d
and    %eax,%r9d
cmp    %r11d,%esi
mov    %r11d,%r13d
cmovl  %esi,%r13d
cmp    %r10d,%r13d
cmovge %r10d,%r13d
cmp    %r13d,%r9d
jg     1297 <s3j+0x157>
mov    %esi,0x80(%rsp)
mov    %rbp,0x60(%rsp)
mov    %rdi,0x90(%rsp)
mov    %r8,0xa0(%rsp)
mov    %rdx,0x70(%rsp)
mov    %ecx,0xc(%rsp)
movsd  0x58(%rsp),%xmm0
addsd  0x38(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
addsd  0x50(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
addsd  0xc7c(%rip),%xmm0
cvttsd2si %xmm0,%eax
add    $0x1,%eax
mov    0x2cbe(%rip),%r14
cltq
cmp    %rax,%r14
cmovb  %rax,%r14
mov    %r14,0x2cae(%rip)
cmp    %rbx,%r14
mov    %r11,0x40(%rsp)
jbe    14b7 <s3j+0x377>
mov    %r9d,0x10(%rsp)
mov    %r10,%rbp
mov    0x2c89(%rip),%rdi
lea    0x0(,%r14,8),%rsi
call   1050 <realloc@plt>
mov    %rax,0x2c75(%rip)
lea    0xc56(%rip),%rdi
mov    %r14d,%esi
mov    %ebx,%edx
call   1030 <printf@plt>
test   %rbx,%rbx
jne    1402 <s3j+0x2c2>
mov    0x2c58(%rip),%rax
movabs $0x3ff0000000000000,%rcx
mov    %rcx,(%rax)
mov    $0x1,%ebx
mov    0x2c47(%rip),%rax
movslq %ebx,%rcx
cmp    %rcx,%rax
mov    %rbp,%r10
mov    0x40(%rsp),%r11
mov    0x10(%rsp),%r9d
jbe    14b7 <s3j+0x377>
mov    0x2c1f(%rip),%rdx
movsd  -0x8(%rdx,%rcx,8),%xmm0
mov    %eax,%edi
sub    %ebx,%edi
mov    %rcx,%rsi
not    %rsi
add    %rax,%rsi
and    $0x3,%rdi
je     145c <s3j+0x31c>
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,(%rdx,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdi
jne    1442 <s3j+0x302>
cmp    $0x3,%rsi
jb     14b7 <s3j+0x377>
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rdx,%rcx,8)
lea    0x1(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rdx,%rcx,8)
lea    0x2(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rdx,%rcx,8)
lea    0x3(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rdx,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
ja     1462 <s3j+0x322>
xor    %eax,%eax
test   $0x1,%r9b
sete   %al
lea    0xb49(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
mov    0x2b75(%rip),%rax
movslq %r9d,%rcx
movslq %r11d,%r8
movslq %r10d,%r9
mov    %r10,%rdx
movslq %r13d,%r10
add    %r15d,%r12d
mov    0x60(%rsp),%rbx
sub    %ebx,%r12d
xor    %edi,%edi
test   %r15d,%r15d
mov    $0x0,%ebp
cmovg  %r15d,%ebp
sub    %ebp,%r12d
mov    %r11,%rsi
lea    (%rbx,%rbp,1),%r11d
mov    %rdx,%r13
sub    %edx,%r11d
sub    %r15d,%r11d
add    0x70(%rsp),%ebp
sub    %esi,%ebp
sub    %r15d,%ebp
lea    -0x1(%rcx),%r14
mov    %r9,%rdx
sub    %rcx,%rdx
lea    (%rax,%rdx,8),%r15
mov    %r8,%rsi
sub    %rcx,%rsi
lea    (%rax,%rsi,8),%rsi
lea    (%rax,%rcx,8),%rbx
xorpd  %xmm4,%xmm4
movapd 0xae1(%rip),%xmm1
xor    %ecx,%ecx
movsd  (%rbx,%rdi,8),%xmm2
lea    (%r12,%rcx,1),%edx
movslq %edx,%rdx
mulsd  (%rax,%rdx,8),%xmm2
mulsd  (%rsi,%rcx,8),%xmm2
mulsd  (%r15,%rcx,8),%xmm2
lea    (%r11,%rdi,1),%edx
movslq %edx,%rdx
mulsd  (%rax,%rdx,8),%xmm2
lea    0x0(%rbp,%rdi,1),%edx
movslq %edx,%rdx
mulsd  (%rax,%rdx,8),%xmm2
movapd %xmm0,%xmm3
divsd  %xmm2,%xmm3
addsd  %xmm3,%xmm4
xorpd  %xmm1,%xmm0
add    $0xffffffffffffffff,%rcx
lea    (%r14,%rdi,1),%rdx
add    $0x1,%rdx
add    $0x1,%rdi
cmp    %r10,%rdx
jl     1541 <s3j+0x401>
movslq 0x80(%rsp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq 0xa0(%rsp),%rdi
mov    0x70(%rsp),%rcx
movslq %ecx,%r11
movslq 0x90(%rsp),%rdx
movslq 0x60(%rsp),%r10
mov    %edi,%ebp
sub    %edx,%ebp
test   $0x1,%bpl
je     15d6 <s3j+0x496>
xorpd  0xa4a(%rip),%xmm4
mov    0xc(%rsp),%ebx
mov    0x40(%rsp),%rsi
add    %ecx,%ebp
movslq %ebp,%rbp
mulsd  (%rax,%rbp,8),%xmm0
sub    %esi,%r13d
add    %ecx,%r13d
movslq %r13d,%rbp
mulsd  (%rax,%rbp,8),%xmm0
mulsd  (%rax,%rdi,8),%xmm0
mulsd  (%rax,%r9,8),%xmm0
mulsd  (%rax,%r11,8),%xmm0
mulsd  (%rax,%r8,8),%xmm0
mulsd  (%rax,%rdx,8),%xmm0
mulsd  (%rax,%r10,8),%xmm0
movslq %ebx,%rcx
divsd  0x8(%rax,%rcx,8),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1632 <s3j+0x4f2>
sqrtsd %xmm0,%xmm0
jmp    1643 <s3j+0x503>
movapd %xmm4,0x10(%rsp)
call   1060 <sqrt@plt>
movapd 0x10(%rsp),%xmm4
mulsd  %xmm0,%xmm4
jmp    1297 <s3j+0x157>

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

LLVM IR (-O2):
@s3j.f = internal unnamed_addr global double* null
@s3j.f_size = internal unnamed_addr global i64 0
@.str = [40 x i8] c"realloc()'d f[] to length = %i from %i\0A\00"
define double @s3j(double %0, double %1, double %2, double %3, double %4, double %5) {
%7 = load i64, i64* @s3j.f_size
%8 = fadd double %0, %3
%9 = fptosi double %8 to i32
%10 = sitofp i32 %9 to double
%11 = fsub double %10, %8
%12 = fptosi double %11 to i32
%13 = tail call i32 @fabs(i32 %12)
%14 = icmp slt i32 %13, 1
br i1 %14, label %15, label %247
15: ; preds = %6
%16 = fadd double %1, %4
%17 = fptosi double %16 to i32
%18 = sitofp i32 %17 to double
%19 = fsub double %18, %16
%20 = fptosi double %19 to i32
%21 = tail call i32 @fabs(i32 %20)
%22 = icmp slt i32 %21, 1
br i1 %22, label %23, label %247
23: ; preds = %15
%24 = fadd double %2, %5
%25 = fptosi double %24 to i32
%26 = sitofp i32 %25 to double
%27 = fsub double %26, %24
%28 = fptosi double %27 to i32
%29 = tail call i32 @fabs(i32 %28)
%30 = icmp slt i32 %29, 1
br i1 %30, label %31, label %247
31: ; preds = %23
%32 = fsub double %0, %3
%33 = fptosi double %32 to i32
%34 = sitofp i32 %33 to double
%35 = fsub double %34, %32
%36 = fptosi double %35 to i32
%37 = tail call i32 @fabs(i32 %36)
%38 = icmp slt i32 %37, 1
br i1 %38, label %39, label %247
39: ; preds = %31
%40 = fsub double %1, %4
%41 = fptosi double %40 to i32
%42 = sitofp i32 %41 to double
%43 = fsub double %42, %40
%44 = fptosi double %43 to i32
%45 = tail call i32 @fabs(i32 %44)
%46 = icmp slt i32 %45, 1
br i1 %46, label %47, label %247
47: ; preds = %39
%48 = fsub double %2, %5
%49 = fptosi double %48 to i32
%50 = sitofp i32 %49 to double
%51 = fsub double %50, %48
%52 = fptosi double %51 to i32
%53 = tail call i32 @fabs(i32 %52)
%54 = icmp slt i32 %53, 1
br i1 %54, label %55, label %247
55: ; preds = %47
%56 = add i32 %17, %9
%57 = add i32 %41, %33
%58 = add i32 %56, %25
%59 = add i32 %57, %49
%60 = icmp eq i32 %58, %59
br i1 %60, label %61, label %247
61: ; preds = %55
%62 = sub nsw i32 %56, %49
%63 = sub nsw i32 %49, %17
%64 = sub nsw i32 %25, %33
%65 = icmp sgt i32 %64, %63
%66 = select i1 %65, i32 %63, i32 %64
%67 = icmp slt i32 %66, 0
%68 = sub nsw i32 0, %66
%69 = select i1 %67, i32 %68, i32 0
%70 = icmp slt i32 %62, %33
%71 = select i1 %70, i32 %62, i32 %33
%72 = icmp slt i32 %71, %17
%73 = select i1 %72, i32 %71, i32 %17
%74 = icmp sgt i32 %69, %73
br i1 %74, label %247, label %75
75: ; preds = %61
%76 = fadd double %0, %1
%77 = fadd double %76, %2
%78 = fadd double %77, %3
%79 = fadd double %78, %4
%80 = fadd double %79, %5
%81 = fadd double %80, 1.000000e+00
%82 = fptosi double %81 to i32
%83 = add nsw i32 %82, 1
%84 = load i64, i64* @s3j.f_size
%85 = sext i32 %83 to i64
%86 = icmp ult i64 %84, %85
%87 = select i1 %86, i64 %85, i64 %84
store i64 %87, i64* @s3j.f_size
%88 = icmp ugt i64 %87, %7
br i1 %88, label %89, label %154
89: ; preds = %75
%90 = load double*, double** @s3j.f
%91 = shl i64 %87, 3
%92 = tail call double* @realloc(double* %90, i64 %91)
store double* %92, double** @s3j.f
%93 = trunc i64 %87 to i32
%94 = trunc i64 %7 to i32
%95 = tail call i32 @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0), i32 %93, i32 %94)
%96 = icmp eq i64 %7, 0
br i1 %96, label %97, label %99
97: ; preds = %89
%98 = load double*, double** @s3j.f
store double 1.000000e+00, double* %98
br label %99
99: ; preds = %97, %89
%100 = phi i64 [ 1, %97 ], [ %7, %89 ]
%101 = load i64, i64* @s3j.f_size
%102 = shl i64 %100, 32
%103 = ashr exact i64 %102, 32
%104 = icmp ugt i64 %101, %103
br i1 %104, label %105, label %154
105: ; preds = %99
%106 = load double*, double** @s3j.f
%107 = add nsw i64 %103, -1
%108 = getelementptr double, double* %106, i64 %107
%109 = load double, double* %108
%110 = sub i64 %101, %100
%111 = xor i64 %103, -1
%112 = add i64 %101, %111
%113 = and i64 %110, 3
%114 = icmp eq i64 %113, 0
br i1 %114, label %126, label %115
115: ; preds = %105, %115
%116 = phi double [ %121, %115 ], [ %109, %105 ]
%117 = phi i64 [ %123, %115 ], [ %103, %105 ]
%118 = phi i64 [ %124, %115 ], [ 0, %105 ]
%119 = trunc i64 %117 to i32
%120 = sitofp i32 %119 to double
%121 = fmul double %116, %120
%122 = getelementptr inbounds double, double* %106, i64 %117
store double %121, double* %122
%123 = add i64 %117, 1
%124 = add i64 %118, 1
%125 = icmp eq i64 %124, %113
br i1 %125, label %126, label %115
126: ; preds = %115, %105
%127 = phi double [ %109, %105 ], [ %121, %115 ]
%128 = phi i64 [ %103, %105 ], [ %123, %115 ]
%129 = icmp ult i64 %112, 3
br i1 %129, label %154, label %130
130: ; preds = %126, %130
%131 = phi double [ %150, %130 ], [ %127, %126 ]
%132 = phi i64 [ %152, %130 ], [ %128, %126 ]
%133 = trunc i64 %132 to i32
%134 = sitofp i32 %133 to double
%135 = fmul double %131, %134
%136 = getelementptr inbounds double, double* %106, i64 %132
store double %135, double* %136
%137 = add i64 %132, 1
%138 = trunc i64 %137 to i32
%139 = sitofp i32 %138 to double
%140 = fmul double %135, %139
%141 = getelementptr inbounds double, double* %106, i64 %137
store double %140, double* %141
%142 = add i64 %132, 2
%143 = trunc i64 %142 to i32
%144 = sitofp i32 %143 to double
%145 = fmul double %140, %144
%146 = getelementptr inbounds double, double* %106, i64 %142
store double %145, double* %146
%147 = add i64 %132, 3
%148 = trunc i64 %147 to i32
%149 = sitofp i32 %148 to double
%150 = fmul double %145, %149
%151 = getelementptr inbounds double, double* %106, i64 %147
store double %150, double* %151
%152 = add i64 %132, 4
%153 = icmp ugt i64 %101, %152
br i1 %153, label %130, label %154
154: ; preds = %126, %130, %75, %99
%155 = and i32 %69, 1
%156 = icmp eq i32 %155, 0
%157 = select i1 %156, double 1.000000e+00, double -1.000000e+00
%158 = load double*, double** @s3j.f
%159 = sext i32 %69 to i64
%160 = sext i32 %33 to i64
%161 = sext i32 %17 to i64
%162 = sext i32 %73 to i64
br label %163
163: ; preds = %154, %163
%164 = phi i64 [ %159, %154 ], [ %196, %163 ]
%165 = phi double [ %157, %154 ], [ %195, %163 ]
%166 = phi double [ 0.000000e+00, %154 ], [ %194, %163 ]
%167 = trunc i64 %164 to i32
%168 = getelementptr inbounds double, double* %158, i64 %164
%169 = load double, double* %168
%170 = sub nsw i32 %62, %167
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds double, double* %158, i64 %171
%173 = load double, double* %172
%174 = fmul double %169, %173
%175 = sub nsw i64 %160, %164
%176 = getelementptr inbounds double, double* %158, i64 %175
%177 = load double, double* %176
%178 = fmul double %174, %177
%179 = sub nsw i64 %161, %164
%180 = getelementptr inbounds double, double* %158, i64 %179
%181 = load double, double* %180
%182 = fmul double %178, %181
%183 = add nsw i32 %63, %167
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds double, double* %158, i64 %184
%186 = load double, double* %185
%187 = fmul double %182, %186
%188 = add nsw i32 %64, %167
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds double, double* %158, i64 %189
%191 = load double, double* %190
%192 = fmul double %187, %191
%193 = fdiv double %165, %192
%194 = fadd double %166, %193
%195 = fneg double %165
%196 = add nsw i64 %164, 1
%197 = icmp slt i64 %164, %162
br i1 %197, label %163, label %198
198: ; preds = %163
%199 = sext i32 %62 to i64
%200 = getelementptr inbounds double, double* %158, i64 %199
%201 = load double, double* %200
%202 = sext i32 %9 to i64
%203 = getelementptr inbounds double, double* %158, i64 %202
%204 = load double, double* %203
%205 = getelementptr inbounds double, double* %158, i64 %161
%206 = load double, double* %205
%207 = sext i32 %25 to i64
%208 = getelementptr inbounds double, double* %158, i64 %207
%209 = load double, double* %208
%210 = getelementptr inbounds double, double* %158, i64 %160
%211 = load double, double* %210
%212 = sext i32 %41 to i64
%213 = getelementptr inbounds double, double* %158, i64 %212
%214 = load double, double* %213
%215 = sext i32 %49 to i64
%216 = getelementptr inbounds double, double* %158, i64 %215
%217 = load double, double* %216
%218 = sub nsw i32 %9, %41
%219 = and i32 %218, 1
%220 = icmp eq i32 %219, 0
%221 = fneg double %194
%222 = select i1 %220, double %194, double %221
%223 = add nsw i32 %218, %25
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds double, double* %158, i64 %224
%226 = load double, double* %225
%227 = fmul double %201, %226
%228 = sub i32 %17, %33
%229 = add nsw i32 %228, %25
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds double, double* %158, i64 %230
%232 = load double, double* %231
%233 = fmul double %227, %232
%234 = fmul double %233, %204
%235 = fmul double %234, %206
%236 = fmul double %235, %209
%237 = fmul double %236, %211
%238 = fmul double %237, %214
%239 = fmul double %238, %217
%240 = add nsw i32 %58, 1
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds double, double* %158, i64 %241
%243 = load double, double* %242
%244 = fdiv double %239, %243
%245 = tail call double @sqrt(double %244)
%246 = fmul double %222, %245
br label %247
247: ; preds = %61, %55, %47, %39, %31, %23, %15, %6, %198
%248 = phi double [ %246, %198 ], [ 0.000000e+00, %6 ], [ 0.000000e+00, %15 ], [ 0.000000e+00, %23 ], [ 0.000000e+00, %31 ], [ 0.000000e+00, %39 ], [ 0.000000e+00, %47 ], [ 0.000000e+00, %55 ], [ 0.000000e+00, %61 ]
ret double %248
}