#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double acos(double);
double const fabs(double);
int /*<<< orphan*/ free(double *);
double gord(int, double);
scalar_t__ malloc(int);
double sin(double);
double sqrt(double);
double todegrees(double);
double *gauss2lats(int nlat, double *ylat) {
  const double xlim = 1.0E-7;
  double *cosc = (double *)malloc(sizeof(double) * (nlat + 1));
  double *sinc = (double *)malloc(sizeof(double) * (nlat + 1));
  double *colat = (double *)malloc(sizeof(double) * (nlat + 1));
  int nzero = (nlat / 2);
  int i;
  double fi = nlat;
  double fi1 = fi + 1.0;
  double a = fi * fi1 / sqrt(4.0 * fi1 * fi1 - 1.0);
  double b = fi1 * fi / sqrt(4.0 * fi * fi - 1.0);
  double g, gm, gp, gt, delta, d;
  for (i = 1; i <= nzero; i++) {
    cosc[i] = sin((i - 0.5) * 3.14159265358979323846 / nlat +
                  3.14159265358979323846 * 0.5);
  }
  for (i = 1; i <= nzero; i++) {
    g = gord(nlat, cosc[i]);
    gm = gord(nlat - 1, cosc[i]);
    gp = gord(nlat + 1, cosc[i]);
    gt = (cosc[i] * cosc[i] - 1.0) / (a * gp - b * gm);
    delta = g * gt;
    cosc[i] = cosc[i] - delta;
    while (fabs(delta) > xlim) {
      g = gord(nlat, cosc[i]);
      gm = gord(nlat - 1, cosc[i]);
      gp = gord(nlat + 1, cosc[i]);
      gt = (cosc[i] * cosc[i] - 1.0) / (a * gp - b * gm);
      delta = g * gt;
      cosc[i] = cosc[i] - delta;
    }
  }
  for (i = 1; i <= nzero; i++) {
    colat[i] = acos(cosc[i]);
    sinc[i] = sin(colat[i]);
  }
  if ((nlat % 2) != 0) {
    i = nzero + 1;
    cosc[i] = 0.0;
    d = gord(nlat - 1, cosc[i]);
    d = d * d * fi * fi;
    colat[i] = 3.14159265358979323846 * 0.5;
    sinc[i] = 1.0;
  }
  for (i = nlat - nzero + 1; i <= nlat; i++) {
    cosc[i] = -cosc[nlat + 1 - i];
    colat[i] = 3.14159265358979323846 - colat[nlat + 1 - i];
    sinc[i] = sinc[nlat + 1 - i];
  }
  for (i = 1; i <= nlat; i++) {
    ylat[i - 1] = todegrees(acos(sinc[i]));
    if (i > (nlat / 2))
      ylat[i - 1] = -ylat[i - 1];
    ylat[i - 1] = -ylat[i - 1];
  }
  free(cosc);
  free(sinc);
  free(colat);
  return ylat;
}


x86 assembly (clang, -O0):
<gauss2lats>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  0xe7e(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x20(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x28(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x30(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe0c(%rip),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xde0(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdc2(%rip),%xmm1
addsd  %xmm1,%xmm0
call   10a0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xd93(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd75(%rip),%xmm1
addsd  %xmm1,%xmm0
call   10a0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     130d <gauss2lats+0x18d>
cvtsi2sdl -0x38(%rbp),%xmm0
movsd  0xd68(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xd54(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd37(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1070 <sin@plt>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    12af <gauss2lats+0x12f>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1524 <gauss2lats+0x3a4>
mov    -0x4(%rbp),%edi
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <gord@plt>
movsd  %xmm0,-0x60(%rbp)
mov    -0x4(%rbp),%edi
sub    $0x1,%edi
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <gord@plt>
movsd  %xmm0,-0x68(%rbp)
mov    -0x4(%rbp),%edi
add    $0x1,%edi
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <gord@plt>
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc66(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x50(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm3
movsd  -0x58(%rbp),%xmm2
mulsd  -0x68(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x80(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
call   1060 <fabs@plt>
movsd  0xbfe(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1511 <gauss2lats+0x391>
mov    -0x4(%rbp),%edi
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <gord@plt>
movsd  %xmm0,-0x60(%rbp)
mov    -0x4(%rbp),%edi
sub    $0x1,%edi
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <gord@plt>
movsd  %xmm0,-0x68(%rbp)
mov    -0x4(%rbp),%edi
add    $0x1,%edi
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <gord@plt>
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb62(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x50(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm3
movsd  -0x58(%rbp),%xmm2
mulsd  -0x68(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x80(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1408 <gauss2lats+0x288>
jmp    1516 <gauss2lats+0x396>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1314 <gauss2lats+0x194>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1583 <gauss2lats+0x403>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1050 <acos@plt>
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1070 <sin@plt>
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    152b <gauss2lats+0x3ab>
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     161c <gauss2lats+0x49c>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4(%rbp),%edi
sub    $0x1,%edi
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <gord@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  0xa1e(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  0x9f9(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4(%rbp),%eax
sub    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     16c7 <gauss2lats+0x547>
mov    -0x20(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
sub    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
sub    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  0x9a3(%rip),%xmm0
subsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
sub    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1628 <gauss2lats+0x4a8>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     17ab <gauss2lats+0x62b>
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1050 <acos@plt>
call   1090 <todegrees@plt>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9c(%rbp),%eax
cmp    %ecx,%eax
jle    1762 <gauss2lats+0x5e2>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    16ce <gauss2lats+0x54e>
mov    -0x20(%rbp),%rdi
call   1030 <free@plt>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
mov    -0x30(%rbp),%rdi
call   1030 <free@plt>
mov    -0x10(%rbp),%rax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gauss2lats>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %rsi,%r15
mov    %edi,%r13d
lea    0x8(,%r13,8),%ebp
mov    %ebp,%edi
call   1070 <malloc@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   1070 <malloc@plt>
mov    %rax,0x18(%rsp)
mov    %ebp,%edi
call   1070 <malloc@plt>
cvtsi2sd %r13d,%xmm2
mov    %rax,%r14
mov    %r13d,%ebp
movsd  0xe44(%rip),%xmm1
addsd  %xmm2,%xmm1
movsd  0xe40(%rip),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm1,0x30(%rsp)
mulsd  %xmm1,%xmm0
addsd  0xe32(%rip),%xmm0
shr    $0x1f,%ebp
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm2,0x8(%rsp)
jb     11f7 <gauss2lats+0x87>
sqrtsd %xmm0,%xmm0
jmp    1206 <gauss2lats+0x96>
call   1090 <sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  0x8(%rsp),%xmm2
movsd  %xmm0,0x10(%rsp)
add    %r13d,%ebp
movsd  0xdf1(%rip),%xmm0
mulsd  %xmm2,%xmm0
mulsd  %xmm2,%xmm0
addsd  0xde9(%rip),%xmm0
ucomisd %xmm1,%xmm0
mov    %r14,0x28(%rsp)
mov    %r15,0x70(%rsp)
jb     123d <gauss2lats+0xcd>
sqrtsd %xmm0,%xmm3
jmp    124c <gauss2lats+0xdc>
call   1090 <sqrt@plt>
movsd  0x8(%rsp),%xmm2
movapd %xmm0,%xmm3
lea    0x1(%r13),%r15d
sar    %ebp
mov    %rbp,0x20(%rsp)
cmp    $0x2,%r13d
movapd 0x30(%rsp),%xmm0
jl     1568 <gauss2lats+0x3f8>
mov    0x20(%rsp),%rax
add    $0x1,%eax
lea    -0x1(%rax),%r12
mov    $0x1,%ebp
mov    %rax,0x68(%rsp)
cmp    $0x2,%eax
movsd  %xmm3,0x48(%rsp)
je     132e <gauss2lats+0x1be>
mov    %r12,0x50(%rsp)
and    $0xfffffffffffffffe,%r12
mov    $0x1,%ebp
nopw   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movsd  0xd69(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xd65(%rip),%xmm1
mulsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
movsd  0xd5d(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1060 <sin@plt>
movsd  %xmm0,(%rbx,%rbp,8)
lea    0x1(%rbp),%r14
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
addsd  0xd2b(%rip),%xmm0
mulsd  0xd2b(%rip),%xmm0
divsd  0x8(%rsp),%xmm0
addsd  0xd25(%rip),%xmm0
call   1060 <sin@plt>
movsd  0x8(%rsp),%xmm2
movsd  %xmm0,0x8(%rbx,%rbp,8)
add    $0x2,%rbp
cmp    %r12,%r14
jne    12a0 <gauss2lats+0x130>
movapd 0x30(%rsp),%xmm0
movsd  0x48(%rsp),%xmm3
mov    0x50(%rsp),%r12
test   $0x1,%r12b
je     1373 <gauss2lats+0x203>
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
addsd  0xcd5(%rip),%xmm0
mulsd  0xcd5(%rip),%xmm0
divsd  %xmm2,%xmm0
addsd  0xcd1(%rip),%xmm0
call   1060 <sin@plt>
movsd  0x48(%rsp),%xmm3
movsd  0x8(%rsp),%xmm2
movsd  %xmm0,(%rbx,%rbp,8)
movapd 0x30(%rsp),%xmm0
cmp    $0x2,%r13d
mov    0x68(%rsp),%rbp
jl     1568 <gauss2lats+0x3f8>
mulsd  %xmm2,%xmm0
movapd %xmm0,%xmm1
divsd  0x10(%rsp),%xmm1
movapd %xmm1,0x50(%rsp)
lea    -0x1(%r13),%r14d
xorpd  0xc9e(%rip),%xmm0
divsd  %xmm3,%xmm0
movapd %xmm0,0x30(%rsp)
mov    $0x1,%r12d
jmp    13cd <gauss2lats+0x25d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r12
cmp    %rbp,%r12
je     1523 <gauss2lats+0x3b3>
movsd  (%rbx,%r12,8),%xmm0
mov    %r13d,%edi
call   1040 <gord@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rbx,%r12,8),%xmm0
mov    %r14d,%edi
call   1040 <gord@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rbx,%r12,8),%xmm0
mov    %r15d,%edi
call   1040 <gord@plt>
movapd %xmm0,%xmm1
movsd  (%rbx,%r12,8),%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xbf3(%rip),%xmm3
addsd  %xmm3,%xmm2
movapd 0x30(%rsp),%xmm3
movsd  0x10(%rsp),%xmm5
mulsd  %xmm3,%xmm5
movapd 0x50(%rsp),%xmm4
mulsd  %xmm4,%xmm1
addsd  %xmm5,%xmm1
divsd  %xmm1,%xmm2
mulsd  0x8(%rsp),%xmm2
subsd  %xmm2,%xmm0
movsd  %xmm0,(%rbx,%r12,8)
movapd 0xbf5(%rip),%xmm1
andpd  %xmm1,%xmm2
movsd  0xbc9(%rip),%xmm1
ucomisd %xmm1,%xmm2
jbe    13c0 <gauss2lats+0x250>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r13d,%edi
call   1040 <gord@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rbx,%r12,8),%xmm0
mov    %r14d,%edi
call   1040 <gord@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rbx,%r12,8),%xmm0
mov    %r15d,%edi
call   1040 <gord@plt>
movapd 0xb98(%rip),%xmm5
movapd 0x50(%rsp),%xmm4
movsd  0xb4a(%rip),%xmm3
movapd %xmm0,%xmm1
movsd  (%rbx,%r12,8),%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm3,%xmm2
movapd 0x30(%rsp),%xmm3
movsd  0x10(%rsp),%xmm6
mulsd  %xmm3,%xmm6
mulsd  %xmm4,%xmm1
addsd  %xmm6,%xmm1
divsd  %xmm1,%xmm2
movsd  0xb30(%rip),%xmm1
mulsd  0x8(%rsp),%xmm2
subsd  %xmm2,%xmm0
movsd  %xmm0,(%rbx,%r12,8)
andpd  %xmm5,%xmm2
ucomisd %xmm1,%xmm2
ja     1480 <gauss2lats+0x310>
jmp    13c0 <gauss2lats+0x250>
cmp    $0x2,%r13d
mov    0x18(%rsp),%r14
jl     1568 <gauss2lats+0x3f8>
mov    %rbp,%r12
mov    $0x1,%ebp
cs nopw 0x0(%rax,%rax,1)
movsd  (%rbx,%rbp,8),%xmm0
call   1050 <acos@plt>
mov    0x28(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
call   1060 <sin@plt>
movsd  %xmm0,(%r14,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r12
jne    1540 <gauss2lats+0x3d0>
movslq 0x20(%rsp),%r14
test   $0x1,%r13b
mov    0x28(%rsp),%rbp
je     15b1 <gauss2lats+0x441>
movq   $0x0,0x8(%rbx,%r14,8)
lea    -0x1(%r13),%edi
xorpd  %xmm0,%xmm0
call   1040 <gord@plt>
movabs $0x3ff921fb54442d18,%rax
21 f9 3f
mov    %rax,0x8(%rbp,%r14,8)
movabs $0x3ff0000000000000,%rax
mov    0x18(%rsp),%rcx
mov    %rax,0x8(%rcx,%r14,8)
cmp    $0x2,%r13d
mov    0x18(%rsp),%rdi
mov    0x70(%rsp),%r12
jl     162a <gauss2lats+0x4ba>
mov    %r13d,%eax
sub    0x20(%rsp),%eax
movslq %eax,%rdx
mov    %r13d,%eax
movslq %r15d,%rsi
mov    %rdx,%rcx
not    %rcx
add    %rsi,%rcx
movapd 0xa5e(%rip),%xmm0
movsd  0xa36(%rip),%xmm1
nopw   0x0(%rax,%rax,1)
movsd  (%rbx,%rcx,8),%xmm2
xorpd  %xmm0,%xmm2
movlpd %xmm2,0x8(%rbx,%rdx,8)
movapd %xmm1,%xmm2
subsd  0x0(%rbp,%rcx,8),%xmm2
movsd  %xmm2,0x8(%rbp,%rdx,8)
movsd  (%rdi,%rcx,8),%xmm2
movsd  %xmm2,0x8(%rdi,%rdx,8)
lea    0x1(%rdx),%rsi
add    $0xffffffffffffffff,%rcx
mov    %rsi,%rdx
cmp    %rax,%rsi
jl     15f0 <gauss2lats+0x480>
test   %r13d,%r13d
mov    %rdi,%r13
jle    1670 <gauss2lats+0x500>
mov    %r15d,%r15d
mov    $0x1,%ebp
jmp    1650 <gauss2lats+0x4e0>
nopl   0x0(%rax)
movsd  %xmm0,-0x8(%r12,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r15
je     1670 <gauss2lats+0x500>
movsd  0x0(%r13,%rbp,8),%xmm0
call   1050 <acos@plt>
call   1080 <todegrees@plt>
cmp    %r14,%rbp
jg     1640 <gauss2lats+0x4d0>
xorpd  0x9d2(%rip),%xmm0
jmp    1640 <gauss2lats+0x4d0>
mov    %rbx,%rdi
call   1030 <free@plt>
mov    %r13,%rdi
call   1030 <free@plt>
mov    0x28(%rsp),%rdi
call   1030 <free@plt>
mov    %r12,%rax
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define double* @gauss2lats(i32 %0, double* returned writeonly %1) {
%3 = add nsw i32 %0, 1
%4 = shl i32 %3, 3
%5 = tail call i64 @malloc(i32 %4)
%6 = inttoptr i64 %5 to double*
%7 = tail call i64 @malloc(i32 %4)
%8 = inttoptr i64 %7 to double*
%9 = tail call i64 @malloc(i32 %4)
%10 = inttoptr i64 %9 to double*
%11 = sdiv i32 %0, 2
%12 = sitofp i32 %0 to double
%13 = fadd double %12, 1.000000e+00
%14 = fmul double %13, %12
%15 = fmul double %13, 4.000000e+00
%16 = tail call double @llvm.fmuladd.f64(double %15, double %13, double -1.000000e+00)
%17 = tail call double @sqrt(double %16)
%18 = fdiv double %14, %17
%19 = fmul double %12, 4.000000e+00
%20 = tail call double @llvm.fmuladd.f64(double %19, double %12, double -1.000000e+00)
%21 = tail call double @sqrt(double %20)
%22 = icmp slt i32 %0, 2
br i1 %22, label %124, label %23
23: ; preds = %2
%24 = add nsw i32 %11, 1
%25 = zext i32 %24 to i64
%26 = add nsw i64 %25, -1
%27 = and i64 %26, 1
%28 = icmp eq i32 %24, 2
br i1 %28, label %31, label %29
29: ; preds = %23
%30 = and i64 %26, -2
br label %50
31: ; preds = %50, %23
%32 = phi i64 [ 1, %23 ], [ %70, %50 ]
%33 = icmp eq i64 %27, 0
br i1 %33, label %43, label %34
34: ; preds = %31
%35 = trunc i64 %32 to i32
%36 = sitofp i32 %35 to double
%37 = fadd double %36, -5.000000e-01
%38 = fmul double %37, 0x400921FB54442D18
%39 = fdiv double %38, %12
%40 = fadd double %39, 0x3FF921FB54442D18
%41 = tail call double @sin(double %40)
%42 = getelementptr inbounds double, double* %6, i64 %32
store double %41, double* %42
br label %43
43: ; preds = %31, %34
br i1 %22, label %124, label %44
44: ; preds = %43
%45 = add nsw i32 %0, -1
%46 = fneg double %14
%47 = fdiv double %46, %21
%48 = add nsw i32 %11, 1
%49 = zext i32 %48 to i64
br label %77
50: ; preds = %50, %29
%51 = phi i64 [ 1, %29 ], [ %70, %50 ]
%52 = phi i64 [ 0, %29 ], [ %71, %50 ]
%53 = trunc i64 %51 to i32
%54 = sitofp i32 %53 to double
%55 = fadd double %54, -5.000000e-01
%56 = fmul double %55, 0x400921FB54442D18
%57 = fdiv double %56, %12
%58 = fadd double %57, 0x3FF921FB54442D18
%59 = tail call double @sin(double %58)
%60 = getelementptr inbounds double, double* %6, i64 %51
store double %59, double* %60
%61 = add nuw nsw i64 %51, 1
%62 = trunc i64 %61 to i32
%63 = sitofp i32 %62 to double
%64 = fadd double %63, -5.000000e-01
%65 = fmul double %64, 0x400921FB54442D18
%66 = fdiv double %65, %12
%67 = fadd double %66, 0x3FF921FB54442D18
%68 = tail call double @sin(double %67)
%69 = getelementptr inbounds double, double* %6, i64 %61
store double %68, double* %69
%70 = add nuw nsw i64 %51, 2
%71 = add i64 %52, 2
%72 = icmp eq i64 %71, %30
br i1 %72, label %31, label %50
73: ; preds = %111
br i1 %22, label %124, label %74
74: ; preds = %73
%75 = add nsw i32 %11, 1
%76 = zext i32 %75 to i64
br label %114
77: ; preds = %44, %111
%78 = phi i64 [ 1, %44 ], [ %112, %111 ]
%79 = getelementptr inbounds double, double* %6, i64 %78
%80 = load double, double* %79
%81 = tail call double @gord(i32 %0, double %80)
%82 = load double, double* %79
%83 = tail call double @gord(i32 %45, double %82)
%84 = load double, double* %79
%85 = tail call double @gord(i32 %3, double %84)
%86 = load double, double* %79
%87 = tail call double @llvm.fmuladd.f64(double %86, double %86, double -1.000000e+00)
%88 = fmul double %47, %83
%89 = tail call double @llvm.fmuladd.f64(double %18, double %85, double %88)
%90 = fdiv double %87, %89
%91 = fmul double %81, %90
%92 = fsub double %86, %91
store double %92, double* %79
%93 = tail call double @llvm.fabs.f64(double %91)
%94 = fcmp ogt double %93, 0x3E7AD7F29ABCAF48
br i1 %94, label %95, label %111
95: ; preds = %77, %95
%96 = phi double [ %108, %95 ], [ %92, %77 ]
%97 = tail call double @gord(i32 %0, double %96)
%98 = load double, double* %79
%99 = tail call double @gord(i32 %45, double %98)
%100 = load double, double* %79
%101 = tail call double @gord(i32 %3, double %100)
%102 = load double, double* %79
%103 = tail call double @llvm.fmuladd.f64(double %102, double %102, double -1.000000e+00)
%104 = fmul double %47, %99
%105 = tail call double @llvm.fmuladd.f64(double %18, double %101, double %104)
%106 = fdiv double %103, %105
%107 = fmul double %97, %106
%108 = fsub double %102, %107
store double %108, double* %79
%109 = tail call double @llvm.fabs.f64(double %107)
%110 = fcmp ogt double %109, 0x3E7AD7F29ABCAF48
br i1 %110, label %95, label %111
111: ; preds = %95, %77
%112 = add nuw nsw i64 %78, 1
%113 = icmp eq i64 %112, %49
br i1 %113, label %73, label %77
114: ; preds = %74, %114
%115 = phi i64 [ 1, %74 ], [ %122, %114 ]
%116 = getelementptr inbounds double, double* %6, i64 %115
%117 = load double, double* %116
%118 = tail call double @acos(double %117)
%119 = getelementptr inbounds double, double* %10, i64 %115
store double %118, double* %119
%120 = tail call double @sin(double %118)
%121 = getelementptr inbounds double, double* %8, i64 %115
store double %120, double* %121
%122 = add nuw nsw i64 %115, 1
%123 = icmp eq i64 %122, %76
br i1 %123, label %124, label %114
124: ; preds = %114, %2, %43, %73
%125 = and i32 %0, 1
%126 = icmp eq i32 %125, 0
br i1 %126, label %135, label %127
127: ; preds = %124
%128 = add nsw i32 %11, 1
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds double, double* %6, i64 %129
store double 0.000000e+00, double* %130
%131 = add nsw i32 %0, -1
%132 = tail call double @gord(i32 %131, double 0.000000e+00)
%133 = getelementptr inbounds double, double* %10, i64 %129
store double 0x3FF921FB54442D18, double* %133
%134 = getelementptr inbounds double, double* %8, i64 %129
store double 1.000000e+00, double* %134
br label %135
135: ; preds = %127, %124
%136 = icmp sgt i32 %0, 1
br i1 %136, label %137, label %142
137: ; preds = %135
%138 = sub i32 %0, %11
%139 = sext i32 %138 to i64
%140 = zext i32 %0 to i64
%141 = sext i32 %3 to i64
br label %147
142: ; preds = %147, %135
%143 = icmp slt i32 %0, 1
br i1 %143, label %176, label %144
144: ; preds = %142
%145 = sext i32 %11 to i64
%146 = zext i32 %3 to i64
br label %163
147: ; preds = %137, %147
%148 = phi i64 [ %139, %137 ], [ %149, %147 ]
%149 = add nsw i64 %148, 1
%150 = sub nsw i64 %141, %149
%151 = getelementptr inbounds double, double* %6, i64 %150
%152 = load double, double* %151
%153 = fneg double %152
%154 = getelementptr inbounds double, double* %6, i64 %149
store double %153, double* %154
%155 = getelementptr inbounds double, double* %10, i64 %150
%156 = load double, double* %155
%157 = fsub double 0x400921FB54442D18, %156
%158 = getelementptr inbounds double, double* %10, i64 %149
store double %157, double* %158
%159 = getelementptr inbounds double, double* %8, i64 %150
%160 = load double, double* %159
%161 = getelementptr inbounds double, double* %8, i64 %149
store double %160, double* %161
%162 = icmp slt i64 %149, %140
br i1 %162, label %147, label %142
163: ; preds = %144, %163
%164 = phi i64 [ 1, %144 ], [ %174, %163 ]
%165 = getelementptr inbounds double, double* %8, i64 %164
%166 = load double, double* %165
%167 = tail call double @acos(double %166)
%168 = tail call double @todegrees(double %167)
%169 = add nsw i64 %164, -1
%170 = getelementptr inbounds double, double* %1, i64 %169
%171 = icmp sgt i64 %164, %145
%172 = fneg double %168
%173 = select i1 %171, double %168, double %172
store double %173, double* %170
%174 = add nuw nsw i64 %164, 1
%175 = icmp eq i64 %174, %146
br i1 %175, label %176, label %163
176: ; preds = %163, %142
%177 = tail call i32 @free(double* %6)
%178 = tail call i32 @free(double* %8)
%179 = tail call i32 @free(double* %10)
ret double* %1
}