#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 asin(double);
double exp(double);
int fabs(double);
int log(int);
double pow(double, double);
double sin(double);
int sqrt(double);
void leigen(double *m, double *l) {
  double b, c, d, n, o, s, sc, t;
  long neg = 0;
  b = m[0] + m[4] + m[8];
  c = m[1] * m[3] + m[2] * m[6] + m[5] * m[7] - m[0] * m[4] - m[4] * m[8] -
      m[0] * m[8];
  d = m[0] * (m[4] * m[8] - m[5] * m[7]) + m[1] * (m[5] * m[6] - m[3] * m[8]) +
      m[2] * (m[3] * m[7] - m[4] * m[6]);
  n = b * b + 3 * c;
  o = -(2 * b * b * b + 9 * b * c + 27 * d);
  if (n < 0) {
    n = fabs(n);
    sc = 0.5 * o * pow(n, -1.5);
    t = 2 * sqrt(n) / 3;
    s = log(fabs(sc) + sqrt(sc * sc + 1)) * ((sc > 0) - (sc < 0)) / 3;
    l[0] = b / 3 - t * 0.5 * (exp(s) - exp(-s));
    l[1] = l[2] = 0;
  } else if (!n) {
    l[0] = l[1] = l[2] = 0;
    return;
  } else {
    sc = 0.5 * o * pow(n, -1.5);
    t = 2 * sqrt(n) / 3;
    if (sc >= -1 && sc <= 1) {
      s = asin(sc) / 3;
      l[0] = t * sin(s - 2 * 3.14159265358979323846264338327950 / 3) + b / 3;
      if (l[0] < 0)
        l[0] = 0;
      l[1] = t * sin(s) + b / 3;
      if (l[1] < 0)
        l[1] = 0;
      l[2] = t * sin(s + 2 * 3.14159265358979323846264338327950 / 3) + b / 3;
      if (l[2] < 0)
        l[2] = 0;
    } else {
      s = log(fabs(sc) + sqrt(sc * sc - 1)) / 3;
      l[0] = t * 0.5 * (exp(s) + exp(-s)) + b / 3;
      l[1] = l[2] = 0;
    }
  }
  if (l[0] < l[1]) {
    d = l[1];
    l[1] = l[0];
    l[0] = d;
  }
  if (l[1] < l[2]) {
    d = l[1];
    l[1] = l[2];
    l[2] = d;
  }
  if (l[0] < l[1]) {
    d = l[1];
    l[1] = l[0];
    l[0] = d;
  }
}


x86 assembly (clang, -O0):
<leigen>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movq   $0x0,-0x58(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x20(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm3
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x38(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm3
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm5
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm4
mov    -0x8(%rbp),%rax
mulsd  0x40(%rax),%xmm4
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm4
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm3
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xc84(%rip),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xc62(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
movsd  0xc43(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
movsd  0xc1c(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    15a0 <leigen+0x430>
movsd  -0x30(%rbp),%xmm0
call   1030 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xbff(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xbe0(%rip),%xmm1
call   1080 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1090 <sqrt@plt>
shl    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
call   1030 <fabs@plt>
mov    %eax,-0x74(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb99(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1090 <sqrt@plt>
mov    -0x74(%rbp),%edi
add    %eax,%edi
call   1070 <log@plt>
movsd  -0x48(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
seta   %cl
and    $0x1,%cl
movzbl %cl,%ecx
xorps  %xmm0,%xmm0
ucomisd -0x48(%rbp),%xmm0
seta   %dl
and    $0x1,%dl
movzbl %dl,%edx
sub    %edx,%ecx
imul   %ecx,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xb1d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xb24(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1060 <exp@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1060 <exp@plt>
movsd  -0x70(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movaps %xmm0,%xmm3
movsd  -0x60(%rbp),%xmm0
subsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
jmp    18a9 <leigen+0x739>
movsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15e0 <leigen+0x470>
jp     15e0 <leigen+0x470>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
jmp    1981 <leigen+0x811>
movsd  0xa48(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  0xa26(%rip),%xmm1
call   1080 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1090 <sqrt@plt>
shl    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0x9da(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     17ba <leigen+0x64a>
movsd  0x9e0(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
jb     17ba <leigen+0x64a>
movsd  -0x48(%rbp),%xmm0
call   1050 <asin@plt>
mov    $0x3,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  0x9a8(%rip),%xmm1
subsd  %xmm1,%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm2
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0x95f(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    16e9 <leigen+0x579>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0x900(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd 0x8(%rax),%xmm0
jbe    174b <leigen+0x5db>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0x8e0(%rip),%xmm0
addsd  -0x40(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm2
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0x896(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd 0x10(%rax),%xmm0
jbe    17b5 <leigen+0x645>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
jmp    189f <leigen+0x72f>
movsd  -0x48(%rbp),%xmm0
call   1030 <fabs@plt>
mov    %eax,-0xb4(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x840(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1090 <sqrt@plt>
mov    -0xb4(%rbp),%edi
add    %eax,%edi
call   1070 <log@plt>
mov    $0x3,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0x821(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1060 <exp@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1060 <exp@plt>
movsd  -0xb0(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
addsd  %xmm1,%xmm2
movsd  -0x18(%rbp),%xmm1
movsd  0x7a5(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
jmp    18a4 <leigen+0x734>
jmp    18a9 <leigen+0x739>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    18f0 <leigen+0x780>
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    193a <leigen+0x7ca>
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    1981 <leigen+0x811>
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<leigen>:
push   %rbp
push   %rbx
sub    $0x48,%rsp
mov    %rsi,%rbx
movsd  0x20(%rdi),%xmm11
movsd  (%rdi),%xmm12
movsd  0x8(%rdi),%xmm8
movsd  0x40(%rdi),%xmm5
movsd  0x18(%rdi),%xmm6
movsd  0x10(%rdi),%xmm9
movsd  0x30(%rdi),%xmm1
movapd %xmm9,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm8,%xmm7
mulsd  %xmm6,%xmm7
addsd  %xmm2,%xmm7
movsd  0x28(%rdi),%xmm2
movsd  0x38(%rdi),%xmm10
movapd %xmm2,%xmm3
mulsd  %xmm10,%xmm3
addsd  %xmm3,%xmm7
movapd %xmm12,%xmm4
mulsd  %xmm11,%xmm4
subsd  %xmm4,%xmm7
movapd %xmm11,%xmm4
mulsd  %xmm5,%xmm4
subsd  %xmm4,%xmm7
movapd %xmm12,%xmm0
subsd  %xmm3,%xmm4
mulsd  %xmm12,%xmm4
movapd %xmm12,%xmm3
addsd  %xmm11,%xmm3
addsd  %xmm5,%xmm3
mulsd  %xmm5,%xmm0
subsd  %xmm0,%xmm7
mulsd  %xmm6,%xmm5
mulsd  %xmm1,%xmm2
subsd  %xmm5,%xmm2
mulsd  %xmm8,%xmm2
addsd  %xmm2,%xmm4
mulsd  %xmm11,%xmm1
mulsd  %xmm10,%xmm6
subsd  %xmm1,%xmm6
mulsd  %xmm9,%xmm6
addsd  %xmm4,%xmm6
movsd  0xdc0(%rip),%xmm1
mulsd  %xmm7,%xmm1
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm3,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movsd  0xda4(%rip),%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm7,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  0xd94(%rip),%xmm6
addsd  %xmm1,%xmm6
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    13f3 <leigen+0x283>
movsd  %xmm3,0x18(%rsp)
movsd  %xmm6,0x8(%rsp)
call   1030 <fabs@plt>
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  %xmm2,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xd5e(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xd58(%rip),%xmm1
movapd %xmm2,%xmm0
call   1080 <pow@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1090 <sqrt@plt>
add    %eax,%eax
cltq
imul   $0x55555556,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x20,%rax
add    %ecx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   1030 <fabs@plt>
mov    %eax,%ebp
movsd  0x8(%rsp),%xmm0
mulsd  %xmm0,%xmm0
addsd  0xd04(%rip),%xmm0
call   1090 <sqrt@plt>
add    %eax,%ebp
mov    %ebp,%edi
call   1070 <log@plt>
xor    %ecx,%ecx
xorpd  %xmm1,%xmm1
movsd  0x8(%rsp),%xmm2
ucomisd %xmm1,%xmm2
seta   %cl
xor    %edx,%edx
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
ucomisd %xmm2,%xmm1
seta   %dl
sub    %edx,%ecx
imul   %eax,%ecx
movslq %ecx,%rax
imul   $0x55555556,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x20,%rax
add    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm1,0x30(%rsp)
movsd  0x18(%rsp),%xmm0
divsd  0xc69(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movapd %xmm1,%xmm0
call   1060 <exp@plt>
movsd  %xmm0,0x8(%rsp)
movapd 0x30(%rsp),%xmm0
xorpd  0xca6(%rip),%xmm0
call   1060 <exp@plt>
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
mulsd  0xc41(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,(%rbx)
xorpd  %xmm0,%xmm0
movupd %xmm0,0x8(%rbx)
jmp    161e <leigen+0x4ae>
ucomisd %xmm1,%xmm0
jne    13ff <leigen+0x28f>
jnp    1554 <leigen+0x3e4>
movsd  %xmm3,0x18(%rsp)
mulsd  0xc0b(%rip),%xmm6
movsd  %xmm6,0x8(%rsp)
movsd  0xc05(%rip),%xmm1
movsd  %xmm0,0x20(%rsp)
call   1080 <pow@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x20(%rsp),%xmm0
call   1090 <sqrt@plt>
movsd  0x10(%rsp),%xmm0
add    %eax,%eax
cltq
imul   $0x55555556,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x20,%rax
add    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
ucomisd 0xbbe(%rip),%xmm0
movsd  %xmm1,0x8(%rsp)
jb     1569 <leigen+0x3f9>
movsd  0xbb2(%rip),%xmm2
ucomisd %xmm0,%xmm2
jb     1569 <leigen+0x3f9>
call   1050 <asin@plt>
cltq
imul   $0x55555556,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x20,%rax
add    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0xb88(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sin@plt>
movsd  0x18(%rsp),%xmm1
divsd  0xb31(%rip),%xmm1
movsd  %xmm1,0x18(%rsp)
mulsd  0x8(%rsp),%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
maxsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0x8(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
xorpd  %xmm1,%xmm1
maxsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rbx)
movsd  0x10(%rsp),%xmm0
addsd  0xb2b(%rip),%xmm0
call   1040 <sin@plt>
mulsd  0x8(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x10(%rbx)
movsd  %xmm0,0x10(%rsp)
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    161e <leigen+0x4ae>
movq   $0x0,0x10(%rbx)
jmp    1614 <leigen+0x4a4>
xorpd  %xmm0,%xmm0
movupd %xmm0,(%rbx)
movq   $0x0,0x10(%rbx)
jmp    1675 <leigen+0x505>
call   1030 <fabs@plt>
mov    %eax,%ebp
movsd  0x10(%rsp),%xmm0
mulsd  %xmm0,%xmm0
addsd  0xaa6(%rip),%xmm0
call   1090 <sqrt@plt>
add    %eax,%ebp
mov    %ebp,%edi
call   1070 <log@plt>
cltq
imul   $0x55555556,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x20,%rax
add    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm1,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xa77(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movapd %xmm1,%xmm0
call   1060 <exp@plt>
movsd  %xmm0,0x10(%rsp)
movapd 0x20(%rsp),%xmm0
xorpd  0xa7c(%rip),%xmm0
call   1060 <exp@plt>
addsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
divsd  0x9fd(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx)
xorpd  %xmm0,%xmm0
movupd %xmm0,0x8(%rbx)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rbx),%xmm1
movsd  0x8(%rbx),%xmm2
ucomisd %xmm1,%xmm2
jbe    163c <leigen+0x4cc>
movsd  %xmm1,0x8(%rbx)
movsd  %xmm2,(%rbx)
movapd %xmm2,%xmm0
jmp    1644 <leigen+0x4d4>
movapd %xmm1,%xmm0
movapd %xmm2,%xmm1
movsd  0x10(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    1662 <leigen+0x4f2>
movsd  %xmm2,0x8(%rbx)
movsd  %xmm1,0x10(%rbx)
ucomisd %xmm0,%xmm2
ja     166c <leigen+0x4fc>
jmp    1675 <leigen+0x505>
movapd %xmm1,%xmm2
ucomisd %xmm0,%xmm2
jbe    1675 <leigen+0x505>
movsd  %xmm0,0x8(%rbx)
movsd  %xmm2,(%rbx)
add    $0x48,%rsp
pop    %rbx
pop    %rbp
ret

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

LLVM IR (-O2):
define void @leigen(double* nocapture %0, double* nocapture %1) {
%3 = load double, double* %0
%4 = getelementptr inbounds double, double* %0, i64 4
%5 = load double, double* %4
%6 = fadd double %3, %5
%7 = getelementptr inbounds double, double* %0, i64 8
%8 = load double, double* %7
%9 = fadd double %6, %8
%10 = getelementptr inbounds double, double* %0, i64 1
%11 = load double, double* %10
%12 = getelementptr inbounds double, double* %0, i64 3
%13 = load double, double* %12
%14 = getelementptr inbounds double, double* %0, i64 2
%15 = load double, double* %14
%16 = getelementptr inbounds double, double* %0, i64 6
%17 = load double, double* %16
%18 = fmul double %15, %17
%19 = tail call double @llvm.fmuladd.f64(double %11, double %13, double %18)
%20 = getelementptr inbounds double, double* %0, i64 5
%21 = load double, double* %20
%22 = getelementptr inbounds double, double* %0, i64 7
%23 = load double, double* %22
%24 = tail call double @llvm.fmuladd.f64(double %21, double %23, double %19)
%25 = fneg double %3
%26 = tail call double @llvm.fmuladd.f64(double %25, double %5, double %24)
%27 = fneg double %5
%28 = tail call double @llvm.fmuladd.f64(double %27, double %8, double %26)
%29 = tail call double @llvm.fmuladd.f64(double %25, double %8, double %28)
%30 = fneg double %21
%31 = fmul double %23, %30
%32 = tail call double @llvm.fmuladd.f64(double %5, double %8, double %31)
%33 = fneg double %13
%34 = fmul double %8, %33
%35 = tail call double @llvm.fmuladd.f64(double %21, double %17, double %34)
%36 = fmul double %11, %35
%37 = tail call double @llvm.fmuladd.f64(double %3, double %32, double %36)
%38 = fmul double %17, %27
%39 = tail call double @llvm.fmuladd.f64(double %13, double %23, double %38)
%40 = tail call double @llvm.fmuladd.f64(double %15, double %39, double %37)
%41 = fmul double %29, 3.000000e+00
%42 = tail call double @llvm.fmuladd.f64(double %9, double %9, double %41)
%43 = fmul double %9, 2.000000e+00
%44 = fmul double %9, %43
%45 = fmul double %9, 9.000000e+00
%46 = fmul double %45, %29
%47 = tail call double @llvm.fmuladd.f64(double %44, double %9, double %46)
%48 = tail call double @llvm.fmuladd.f64(double %40, double 2.700000e+01, double %47)
%49 = fcmp olt double %42, 0.000000e+00
br i1 %49, label %50, label %82
50: ; preds = %2
%51 = tail call i32 @fabs(double %42)
%52 = sitofp i32 %51 to double
%53 = fmul double %48, -5.000000e-01
%54 = tail call double @pow(double %52, double -1.500000e+00)
%55 = fmul double %53, %54
%56 = tail call i32 @sqrt(double %52)
%57 = shl nsw i32 %56, 1
%58 = sdiv i32 %57, 3
%59 = sitofp i32 %58 to double
%60 = tail call i32 @fabs(double %55)
%61 = tail call double @llvm.fmuladd.f64(double %55, double %55, double 1.000000e+00)
%62 = tail call i32 @sqrt(double %61)
%63 = add nsw i32 %62, %60
%64 = tail call i32 @log(i32 %63)
%65 = fcmp ogt double %55, 0.000000e+00
%66 = zext i1 %65 to i32
%67 = fcmp olt double %55, 0.000000e+00
%68 = sext i1 %67 to i32
%69 = add nsw i32 %68, %66
%70 = mul nsw i32 %64, %69
%71 = sdiv i32 %70, 3
%72 = sitofp i32 %71 to double
%73 = fdiv double %9, 3.000000e+00
%74 = tail call double @exp(double %72)
%75 = fneg double %72
%76 = tail call double @exp(double %75)
%77 = fsub double %74, %76
%78 = fmul double %59, -5.000000e-01
%79 = tail call double @llvm.fmuladd.f64(double %78, double %77, double %73)
store double %79, double* %1
%80 = getelementptr inbounds double, double* %1, i64 1
%81 = bitcast double* %80 to i8*
br label %135
82: ; preds = %2
%83 = fcmp une double %42, 0.000000e+00
br i1 %83, label %86, label %84
84: ; preds = %82
%85 = bitcast double* %1 to i8*
br label %152
86: ; preds = %82
%87 = fmul double %48, -5.000000e-01
%88 = tail call double @pow(double %42, double -1.500000e+00)
%89 = fmul double %87, %88
%90 = tail call i32 @sqrt(double %42)
%91 = shl nsw i32 %90, 1
%92 = sdiv i32 %91, 3
%93 = sitofp i32 %92 to double
%94 = fcmp oge double %89, -1.000000e+00
%95 = fcmp ole double %89, 1.000000e+00
%96 = and i1 %94, %95
br i1 %96, label %97, label %118
97: ; preds = %86
%98 = tail call i32 @asin(double %89)
%99 = sdiv i32 %98, 3
%100 = sitofp i32 %99 to double
%101 = fadd double %100, 0xC000C152382D7365
%102 = tail call double @sin(double %101)
%103 = fdiv double %9, 3.000000e+00
%104 = tail call double @llvm.fmuladd.f64(double %93, double %102, double %103)
%105 = fcmp olt double %104, 0.000000e+00
%106 = select i1 %105, double 0.000000e+00, double %104
store double %106, double* %1
%107 = tail call double @sin(double %100)
%108 = tail call double @llvm.fmuladd.f64(double %93, double %107, double %103)
%109 = getelementptr inbounds double, double* %1, i64 1
%110 = fcmp olt double %108, 0.000000e+00
%111 = select i1 %110, double 0.000000e+00, double %108
store double %111, double* %109
%112 = fadd double %100, 0x4000C152382D7365
%113 = tail call double @sin(double %112)
%114 = tail call double @llvm.fmuladd.f64(double %93, double %113, double %103)
%115 = getelementptr inbounds double, double* %1, i64 2
store double %114, double* %115
%116 = fcmp olt double %114, 0.000000e+00
br i1 %116, label %117, label %135
117: ; preds = %97
store double 0.000000e+00, double* %115
br label %135
118: ; preds = %86
%119 = tail call i32 @fabs(double %89)
%120 = tail call double @llvm.fmuladd.f64(double %89, double %89, double -1.000000e+00)
%121 = tail call i32 @sqrt(double %120)
%122 = add nsw i32 %121, %119
%123 = tail call i32 @log(i32 %122)
%124 = sdiv i32 %123, 3
%125 = sitofp i32 %124 to double
%126 = fmul double %93, 5.000000e-01
%127 = tail call double @exp(double %125)
%128 = fneg double %125
%129 = tail call double @exp(double %128)
%130 = fadd double %127, %129
%131 = fdiv double %9, 3.000000e+00
%132 = tail call double @llvm.fmuladd.f64(double %126, double %130, double %131)
store double %132, double* %1
%133 = getelementptr inbounds double, double* %1, i64 1
%134 = bitcast double* %133 to i8*
br label %135
135: ; preds = %97, %117, %118, %50
%136 = phi double [ %114, %97 ], [ 0.000000e+00, %117 ], [ 0.000000e+00, %118 ], [ 0.000000e+00, %50 ]
%137 = load double, double* %1
%138 = getelementptr inbounds double, double* %1, i64 1
%139 = load double, double* %138
%140 = fcmp olt double %137, %139
br i1 %140, label %141, label %142
141: ; preds = %135
store double %137, double* %138
store double %139, double* %1
br label %142
142: ; preds = %141, %135
%143 = phi double [ %139, %141 ], [ %137, %135 ]
%144 = phi double [ %137, %141 ], [ %139, %135 ]
%145 = fcmp olt double %144, %136
br i1 %145, label %146, label %148
146: ; preds = %142
%147 = getelementptr inbounds double, double* %1, i64 2
store double %136, double* %138
store double %144, double* %147
br label %148
148: ; preds = %146, %142
%149 = phi double [ %136, %146 ], [ %144, %142 ]
%150 = fcmp olt double %143, %149
br i1 %150, label %151, label %152
151: ; preds = %148
store double %143, double* %138
store double %149, double* %1
br label %152
152: ; preds = %148, %151, %84
ret void
}