#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 atan2(double, double);
double cos(double);
int fabs(double);
int /*<<< orphan*/ palDcc2s(double *, double *, double *);
int /*<<< orphan*/ palDcs2c(double, double, double *);
double palDranrm(double);
int /*<<< orphan*/ palRefro(double, double const, double const, double const,
                            double const, double const, double const,
                            double const, int, double *);
int /*<<< orphan*/ palRefz(double, double, double, double *);
double sin(double);
double sqrt(double);
void palAopqk(double rap, double dap, const double aoprms[14], double *aob,
              double *zob, double *hob, double *dob, double *rob) {
  const double zbreak = 0.242535625;
  int i;
  double sphi, cphi, st, v[3], xhd, yhd, zhd, diurab, f, xhdt, yhdt, zhdt, xaet,
      yaet, zaet, azobs, zdt, refa, refb, zdobs, dzd, dref, ce, xaeo, yaeo,
      zaeo, hmobs, dcobs, raobs;
  sphi = aoprms[1];
  cphi = aoprms[2];
  st = aoprms[13];
  palDcs2c(rap - st, dap, v);
  xhd = v[0];
  yhd = v[1];
  zhd = v[2];
  diurab = aoprms[3];
  f = (1.0 - diurab * yhd);
  xhdt = f * xhd;
  yhdt = f * (yhd + diurab);
  zhdt = f * zhd;
  xaet = sphi * xhdt - cphi * zhdt;
  yaet = yhdt;
  zaet = cphi * xhdt + sphi * zhdt;
  if (xaet == 0.0 && yaet == 0.0) {
    azobs = 0.0;
  } else {
    azobs = atan2(yaet, -xaet);
  }
  zdt = atan2(sqrt(xaet * xaet + yaet * yaet), zaet);
  refa = aoprms[10];
  refb = aoprms[11];
  palRefz(zdt, refa, refb, &zdobs);
  if (cos(zdobs) < zbreak) {
    i = 1;
    dzd = 1.0e1;
    while (fabs(dzd) > 1e-10 && i <= 10) {
      palRefro(zdobs, aoprms[4], aoprms[5], aoprms[6], aoprms[7], aoprms[8],
               aoprms[0], aoprms[9], 1e-8, &dref);
      dzd = zdobs + dref - zdt;
      zdobs = zdobs - dzd;
      i++;
    }
  }
  ce = sin(zdobs);
  xaeo = -cos(azobs) * ce;
  yaeo = sin(azobs) * ce;
  zaeo = cos(zdobs);
  v[0] = sphi * xaeo + cphi * zaeo;
  v[1] = yaeo;
  v[2] = -cphi * xaeo + sphi * zaeo;
  palDcc2s(v, &hmobs, &dcobs);
  raobs = palDranrm(st + hmobs);
  *aob = azobs;
  *zob = zdobs;
  *hob = -hmobs;
  *dob = dcobs;
  *rob = raobs;
}


x86 assembly (clang, -O0):
<palAopqk>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
mov    %r9,-0x40(%rbp)
movsd  0xe33(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x8(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
lea    -0x80(%rbp),%rdi
call   1050 <palDcs2c@plt>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xd79(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm1
ff
addsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x60(%rbp),%xmm1
mulsd  -0xc0(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13a8 <palAopqk+0x208>
jp     13a8 <palAopqk+0x208>
movsd  -0xd0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13a8 <palAopqk+0x208>
jp     13a8 <palAopqk+0x208>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
jmp    13dc <palAopqk+0x23c>
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
call   1040 <atan2@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   10b0 <sqrt@plt>
movsd  -0xd8(%rbp),%xmm1
ff
call   1040 <atan2@plt>
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm1
ff
movsd  -0xf8(%rbp),%xmm2
ff
lea    -0x100(%rbp),%rdi
call   10c0 <palRefz@plt>
movsd  -0x100(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movaps %xmm0,%xmm1
movsd  0xb8c(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1587 <palAopqk+0x3e7>
movl   $0x1,-0x4c(%rbp)
movsd  0xb7b(%rip),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
call   1080 <fabs@plt>
cvtsi2sd %eax,%xmm0
xor    %eax,%eax
movsd  0xb60(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x149(%rbp)
jbe    14d5 <palAopqk+0x335>
cmpl   $0xa,-0x4c(%rbp)
setle  %al
mov    %al,-0x149(%rbp)
mov    -0x149(%rbp),%al
test   $0x1,%al
jne    14e8 <palAopqk+0x348>
jmp    1582 <palAopqk+0x3e2>
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm2
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm3
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm4
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm5
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm6
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm7
xor    %edi,%edi
lea    -0x110(%rbp),%rsi
call   1070 <palRefro@plt>
movsd  -0x100(%rbp),%xmm0
ff
addsd  -0x110(%rbp),%xmm0
ff
subsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
subsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    149d <palAopqk+0x2fd>
jmp    1587 <palAopqk+0x3e7>
movsd  -0x100(%rbp),%xmm0
ff
call   1090 <sin@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
call   1090 <sin@plt>
mulsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x120(%rbp),%xmm2
ff
movsd  -0x60(%rbp),%xmm1
mulsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x120(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
mulsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
lea    -0x80(%rbp),%rdi
lea    -0x138(%rbp),%rsi
lea    -0x140(%rbp),%rdx
call   1030 <palDcc2s@plt>
movsd  -0x68(%rbp),%xmm0
addsd  -0x138(%rbp),%xmm0
ff
call   1060 <palDranrm@plt>
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x138(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x140(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x148(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<palAopqk>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xa8,%rsp
mov    %r9,%r14
mov    %r8,%r15
mov    %rcx,%r12
mov    %rdx,%r13
mov    %rsi,%rbx
mov    %rdi,%rbp
movsd  0x8(%rdi),%xmm2
movsd  %xmm2,0x20(%rsp)
movsd  0x10(%rdi),%xmm2
movaps %xmm2,0x70(%rsp)
movsd  0x68(%rdi),%xmm2
movsd  %xmm2,0x80(%rsp)
subsd  %xmm2,%xmm0
lea    0x30(%rsp),%rdi
call   1050 <palDcs2c@plt>
movsd  0x38(%rsp),%xmm4
movsd  0x18(%rbp),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm4,%xmm1
movsd  0xdf1(%rip),%xmm5
subsd  %xmm1,%xmm5
movsd  0x30(%rsp),%xmm3
mulsd  %xmm5,%xmm3
addsd  %xmm0,%xmm4
mulsd  %xmm5,%xmm4
mulsd  0x40(%rsp),%xmm5
movapd %xmm5,%xmm0
movapd 0x70(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x20(%rsp),%xmm2
movapd %xmm2,%xmm6
mulsd  %xmm3,%xmm6
subsd  %xmm0,%xmm6
mulsd  %xmm2,%xmm5
mulsd  %xmm1,%xmm3
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm6
jne    126b <palAopqk+0xcb>
jp     126b <palAopqk+0xcb>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm4
jne    126b <palAopqk+0xcb>
jnp    12b0 <palAopqk+0x110>
movapd 0xdad(%rip),%xmm1
xorpd  %xmm6,%xmm1
movapd %xmm4,%xmm0
movsd  %xmm3,0x8(%rsp)
movsd  %xmm4,0x18(%rsp)
movsd  %xmm5,0x60(%rsp)
movapd %xmm6,0x50(%rsp)
call   1040 <atan2@plt>
movapd 0x50(%rsp),%xmm6
movsd  0x60(%rsp),%xmm5
movsd  0x18(%rsp),%xmm4
movsd  0x8(%rsp),%xmm3
movaps 0xd69(%rip),%xmm2
xorps  0x70(%rsp),%xmm2
addsd  %xmm5,%xmm3
mulsd  %xmm4,%xmm4
mulsd  %xmm6,%xmm6
addsd  %xmm4,%xmm6
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm6
mov    %r14,0x90(%rsp)
mov    %r15,0x88(%rsp)
movsd  %xmm0,0x18(%rsp)
movaps %xmm2,0x60(%rsp)
jb     12fa <palAopqk+0x15a>
xorps  %xmm0,%xmm0
sqrtsd %xmm6,%xmm0
jmp    130f <palAopqk+0x16f>
movapd %xmm6,%xmm0
movsd  %xmm3,0x8(%rsp)
call   10b0 <sqrt@plt>
movsd  0x8(%rsp),%xmm3
movapd %xmm3,%xmm1
call   1040 <atan2@plt>
movsd  0x50(%rbp),%xmm1
movsd  0x58(%rbp),%xmm2
lea    0x10(%rsp),%rdi
movsd  %xmm0,0x8(%rsp)
call   10c0 <palRefz@plt>
movsd  0x10(%rsp),%xmm0
call   10a0 <cos@plt>
movsd  0xcc3(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    13ec <palAopqk+0x24c>
movsd  0xcb9(%rip),%xmm0
call   1080 <fabs@plt>
test   %eax,%eax
jle    13ec <palAopqk+0x24c>
mov    $0x1,%r15d
lea    0xa0(%rsp),%r14
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x10(%rsp),%xmm0
movsd  0x0(%rbp),%xmm6
movsd  0x20(%rbp),%xmm1
movsd  0x28(%rbp),%xmm2
movsd  0x30(%rbp),%xmm3
movsd  0x38(%rbp),%xmm4
movsd  0x40(%rbp),%xmm5
movsd  0x48(%rbp),%xmm7
xor    %edi,%edi
mov    %r14,%rsi
call   1070 <palRefro@plt>
movsd  0x10(%rsp),%xmm1
movsd  0xa0(%rsp),%xmm0
addsd  %xmm1,%xmm0
subsd  0x8(%rsp),%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
call   1080 <fabs@plt>
test   %eax,%eax
jle    13ec <palAopqk+0x24c>
lea    0x1(%r15),%eax
cmp    $0xa,%r15d
mov    %eax,%r15d
jb     1380 <palAopqk+0x1e0>
movsd  0x10(%rsp),%xmm0
call   1090 <sin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x18(%rsp),%xmm0
call   10a0 <cos@plt>
xorpd  0xc10(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
movapd %xmm0,0x50(%rsp)
movsd  0x18(%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   10a0 <cos@plt>
movapd 0x70(%rsp),%xmm3
mulsd  %xmm0,%xmm3
movsd  0x20(%rsp),%xmm2
movapd %xmm2,%xmm1
movapd 0x50(%rsp),%xmm4
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x8(%rsp),%xmm1
movsd  %xmm1,0x38(%rsp)
mulsd  %xmm0,%xmm2
movapd 0x60(%rsp),%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x40(%rsp)
lea    0x30(%rsp),%rdi
lea    0x28(%rsp),%rsi
lea    0x98(%rsp),%rdx
call   1030 <palDcc2s@plt>
movsd  0x80(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
call   1060 <palDranrm@plt>
movsd  0x18(%rsp),%xmm1
movsd  %xmm1,(%rbx)
movsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x0(%r13)
movsd  0x28(%rsp),%xmm1
xorps  0xb48(%rip),%xmm1
movlps %xmm1,(%r12)
movsd  0x98(%rsp),%xmm1
mov    0x88(%rsp),%rax
movsd  %xmm1,(%rax)
mov    0x90(%rsp),%rax
movsd  %xmm0,(%rax)
add    $0xa8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @palAopqk(double %0, double %1, double* %2, double* %3, double* %4, double* %5, double* %6, double* %7) {
%9 = alloca double
%10 = alloca double
%11 = alloca double*
%12 = alloca double*
%13 = alloca double*
%14 = alloca double*
%15 = alloca double*
%16 = alloca double*
%17 = alloca double
%18 = alloca i32
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca [3 x double]
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
store double %0, double* %9
store double %1, double* %10
store double* %2, double** %11
store double* %3, double** %12
store double* %4, double** %13
store double* %5, double** %14
store double* %6, double** %15
store double* %7, double** %16
store double 0x3FCF0B6848BEB5B3, double* %17
%48 = load double*, double** %11
%49 = getelementptr inbounds double, double* %48, i64 1
%50 = load double, double* %49
store double %50, double* %19
%51 = load double*, double** %11
%52 = getelementptr inbounds double, double* %51, i64 2
%53 = load double, double* %52
store double %53, double* %20
%54 = load double*, double** %11
%55 = getelementptr inbounds double, double* %54, i64 13
%56 = load double, double* %55
store double %56, double* %21
%57 = load double, double* %9
%58 = load double, double* %21
%59 = fsub double %57, %58
%60 = load double, double* %10
%61 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
%62 = call i32 @palDcs2c(double %59, double %60, double* %61)
%63 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
%64 = load double, double* %63
store double %64, double* %23
%65 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 1
%66 = load double, double* %65
store double %66, double* %24
%67 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 2
%68 = load double, double* %67
store double %68, double* %25
%69 = load double*, double** %11
%70 = getelementptr inbounds double, double* %69, i64 3
%71 = load double, double* %70
store double %71, double* %26
%72 = load double, double* %26
%73 = load double, double* %24
%74 = fneg double %72
%75 = call double @llvm.fmuladd.f64(double %74, double %73, double 1.000000e+00)
store double %75, double* %27
%76 = load double, double* %27
%77 = load double, double* %23
%78 = fmul double %76, %77
store double %78, double* %28
%79 = load double, double* %27
%80 = load double, double* %24
%81 = load double, double* %26
%82 = fadd double %80, %81
%83 = fmul double %79, %82
store double %83, double* %29
%84 = load double, double* %27
%85 = load double, double* %25
%86 = fmul double %84, %85
store double %86, double* %30
%87 = load double, double* %19
%88 = load double, double* %28
%89 = load double, double* %20
%90 = load double, double* %30
%91 = fmul double %89, %90
%92 = fneg double %91
%93 = call double @llvm.fmuladd.f64(double %87, double %88, double %92)
store double %93, double* %31
%94 = load double, double* %29
store double %94, double* %32
%95 = load double, double* %20
%96 = load double, double* %28
%97 = load double, double* %19
%98 = load double, double* %30
%99 = fmul double %97, %98
%100 = call double @llvm.fmuladd.f64(double %95, double %96, double %99)
store double %100, double* %33
%101 = load double, double* %31
%102 = fcmp oeq double %101, 0.000000e+00
br i1 %102, label %103, label %107
103: ; preds = %8
%104 = load double, double* %32
%105 = fcmp oeq double %104, 0.000000e+00
br i1 %105, label %106, label %107
106: ; preds = %103
store double 0.000000e+00, double* %34
br label %112
107: ; preds = %103, %8
%108 = load double, double* %32
%109 = load double, double* %31
%110 = fneg double %109
%111 = call double @atan2(double %108, double %110)
store double %111, double* %34
br label %112
112: ; preds = %107, %106
%113 = load double, double* %31
%114 = load double, double* %31
%115 = load double, double* %32
%116 = load double, double* %32
%117 = fmul double %115, %116
%118 = call double @llvm.fmuladd.f64(double %113, double %114, double %117)
%119 = call double @sqrt(double %118)
%120 = load double, double* %33
%121 = call double @atan2(double %119, double %120)
store double %121, double* %35
%122 = load double*, double** %11
%123 = getelementptr inbounds double, double* %122, i64 10
%124 = load double, double* %123
store double %124, double* %36
%125 = load double*, double** %11
%126 = getelementptr inbounds double, double* %125, i64 11
%127 = load double, double* %126
store double %127, double* %37
%128 = load double, double* %35
%129 = load double, double* %36
%130 = load double, double* %37
%131 = call i32 @palRefz(double %128, double %129, double %130, double* %38)
%132 = load double, double* %38
%133 = call double @cos(double %132)
%134 = fcmp olt double %133, 0x3FCF0B6848BEB5B3
br i1 %134, label %135, label %181
135: ; preds = %112
store i32 1, i32* %18
store double 1.000000e+01, double* %39
br label %136
136: ; preds = %146, %135
%137 = load double, double* %39
%138 = call i32 @fabs(double %137)
%139 = sitofp i32 %138 to double
%140 = fcmp ogt double %139, 1.000000e-10
br i1 %140, label %141, label %144
141: ; preds = %136
%142 = load i32, i32* %18
%143 = icmp sle i32 %142, 10
br label %144
144: ; preds = %141, %136
%145 = phi i1 [ false, %136 ], [ %143, %141 ]
br i1 %145, label %146, label %180
146: ; preds = %144
%147 = load double, double* %38
%148 = load double*, double** %11
%149 = getelementptr inbounds double, double* %148, i64 4
%150 = load double, double* %149
%151 = load double*, double** %11
%152 = getelementptr inbounds double, double* %151, i64 5
%153 = load double, double* %152
%154 = load double*, double** %11
%155 = getelementptr inbounds double, double* %154, i64 6
%156 = load double, double* %155
%157 = load double*, double** %11
%158 = getelementptr inbounds double, double* %157, i64 7
%159 = load double, double* %158
%160 = load double*, double** %11
%161 = getelementptr inbounds double, double* %160, i64 8
%162 = load double, double* %161
%163 = load double*, double** %11
%164 = getelementptr inbounds double, double* %163, i64 0
%165 = load double, double* %164
%166 = load double*, double** %11
%167 = getelementptr inbounds double, double* %166, i64 9
%168 = load double, double* %167
%169 = call i32 @palRefro(double %147, double %150, double %153, double %156, double %159, double %162, double %165, double %168, i32 0, double* %40)
%170 = load double, double* %38
%171 = load double, double* %40
%172 = fadd double %170, %171
%173 = load double, double* %35
%174 = fsub double %172, %173
store double %174, double* %39
%175 = load double, double* %38
%176 = load double, double* %39
%177 = fsub double %175, %176
store double %177, double* %38
%178 = load i32, i32* %18
%179 = add nsw i32 %178, 1
store i32 %179, i32* %18
br label %136
180: ; preds = %144
br label %181
181: ; preds = %180, %112
%182 = load double, double* %38
%183 = call double @sin(double %182)
store double %183, double* %41
%184 = load double, double* %34
%185 = call double @cos(double %184)
%186 = fneg double %185
%187 = load double, double* %41
%188 = fmul double %186, %187
store double %188, double* %42
%189 = load double, double* %34
%190 = call double @sin(double %189)
%191 = load double, double* %41
%192 = fmul double %190, %191
store double %192, double* %43
%193 = load double, double* %38
%194 = call double @cos(double %193)
store double %194, double* %44
%195 = load double, double* %19
%196 = load double, double* %42
%197 = load double, double* %20
%198 = load double, double* %44
%199 = fmul double %197, %198
%200 = call double @llvm.fmuladd.f64(double %195, double %196, double %199)
%201 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
store double %200, double* %201
%202 = load double, double* %43
%203 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 1
store double %202, double* %203
%204 = load double, double* %20
%205 = fneg double %204
%206 = load double, double* %42
%207 = load double, double* %19
%208 = load double, double* %44
%209 = fmul double %207, %208
%210 = call double @llvm.fmuladd.f64(double %205, double %206, double %209)
%211 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 2
store double %210, double* %211
%212 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
%213 = call i32 @palDcc2s(double* %212, double* %45, double* %46)
%214 = load double, double* %21
%215 = load double, double* %45
%216 = fadd double %214, %215
%217 = call double @palDranrm(double %216)
store double %217, double* %47
%218 = load double, double* %34
%219 = load double*, double** %12
store double %218, double* %219
%220 = load double, double* %38
%221 = load double*, double** %13
store double %220, double* %221
%222 = load double, double* %45
%223 = fneg double %222
%224 = load double*, double** %14
store double %223, double* %224
%225 = load double, double* %46
%226 = load double*, double** %15
store double %225, double* %226
%227 = load double, double* %47
%228 = load double*, double** %16
store double %227, double* %228
ret void
}

LLVM IR (-O2):
define void @palAopqk(double %0, double %1, double* nocapture %2, double* nocapture writeonly %3, double* nocapture writeonly %4, double* nocapture writeonly %5, double* nocapture writeonly %6, double* nocapture writeonly %7) {
%9 = alloca [3 x double]
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = bitcast [3 x double]* %9 to i8*
%15 = bitcast double* %10 to i8*
%16 = bitcast double* %11 to i8*
%17 = bitcast double* %12 to i8*
%18 = bitcast double* %13 to i8*
%19 = getelementptr inbounds double, double* %2, i64 1
%20 = load double, double* %19
%21 = getelementptr inbounds double, double* %2, i64 2
%22 = load double, double* %21
%23 = getelementptr inbounds double, double* %2, i64 13
%24 = load double, double* %23
%25 = fsub double %0, %24
%26 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 0
%27 = call i32 @palDcs2c(double %25, double %1, double* %26)
%28 = load double, double* %26
%29 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 1
%30 = load double, double* %29
%31 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 2
%32 = load double, double* %31
%33 = getelementptr inbounds double, double* %2, i64 3
%34 = load double, double* %33
%35 = fneg double %34
%36 = call double @llvm.fmuladd.f64(double %35, double %30, double 1.000000e+00)
%37 = fmul double %28, %36
%38 = fadd double %30, %34
%39 = fmul double %36, %38
%40 = fmul double %32, %36
%41 = fneg double %22
%42 = fmul double %40, %41
%43 = call double @llvm.fmuladd.f64(double %20, double %37, double %42)
%44 = fmul double %20, %40
%45 = call double @llvm.fmuladd.f64(double %22, double %37, double %44)
%46 = fcmp oeq double %43, 0.000000e+00
%47 = fcmp oeq double %39, 0.000000e+00
%48 = select i1 %46, i1 %47, i1 false
br i1 %48, label %52, label %49
49: ; preds = %8
%50 = fneg double %43
%51 = call double @atan2(double %39, double %50)
br label %52
52: ; preds = %8, %49
%53 = phi double [ %51, %49 ], [ 0.000000e+00, %8 ]
%54 = fmul double %39, %39
%55 = call double @llvm.fmuladd.f64(double %43, double %43, double %54)
%56 = call double @sqrt(double %55)
%57 = call double @atan2(double %56, double %45)
%58 = getelementptr inbounds double, double* %2, i64 10
%59 = load double, double* %58
%60 = getelementptr inbounds double, double* %2, i64 11
%61 = load double, double* %60
%62 = call i32 @palRefz(double %57, double %59, double %61, double* %10)
%63 = load double, double* %10
%64 = call double @cos(double %63)
%65 = fcmp olt double %64, 0x3FCF0B6848BEB5B3
br i1 %65, label %66, label %97
66: ; preds = %52
%67 = call i32 @fabs(double 1.000000e+01)
%68 = icmp sgt i32 %67, 0
br i1 %68, label %69, label %97
69: ; preds = %66
%70 = getelementptr inbounds double, double* %2, i64 4
%71 = getelementptr inbounds double, double* %2, i64 5
%72 = getelementptr inbounds double, double* %2, i64 6
%73 = getelementptr inbounds double, double* %2, i64 7
%74 = getelementptr inbounds double, double* %2, i64 8
%75 = getelementptr inbounds double, double* %2, i64 9
br label %76
76: ; preds = %69, %76
%77 = phi i32 [ 1, %69 ], [ %92, %76 ]
%78 = load double, double* %10
%79 = load double, double* %70
%80 = load double, double* %71
%81 = load double, double* %72
%82 = load double, double* %73
%83 = load double, double* %74
%84 = load double, double* %2
%85 = load double, double* %75
%86 = call i32 @palRefro(double %78, double %79, double %80, double %81, double %82, double %83, double %84, double %85, i32 0, double* %11)
%87 = load double, double* %10
%88 = load double, double* %11
%89 = fadd double %87, %88
%90 = fsub double %89, %57
%91 = fsub double %87, %90
store double %91, double* %10
%92 = add nuw nsw i32 %77, 1
%93 = call i32 @fabs(double %90)
%94 = icmp sgt i32 %93, 0
%95 = icmp ult i32 %77, 10
%96 = select i1 %94, i1 %95, i1 false
br i1 %96, label %76, label %97
97: ; preds = %76, %66, %52
%98 = load double, double* %10
%99 = call double @sin(double %98)
%100 = call double @cos(double %53)
%101 = fneg double %100
%102 = fmul double %99, %101
%103 = call double @sin(double %53)
%104 = fmul double %99, %103
%105 = load double, double* %10
%106 = call double @cos(double %105)
%107 = fmul double %22, %106
%108 = call double @llvm.fmuladd.f64(double %20, double %102, double %107)
store double %108, double* %26
store double %104, double* %29
%109 = fmul double %20, %106
%110 = call double @llvm.fmuladd.f64(double %41, double %102, double %109)
store double %110, double* %31
%111 = call i32 @palDcc2s(double* %26, double* %12, double* %13)
%112 = load double, double* %12
%113 = fadd double %24, %112
%114 = call double @palDranrm(double %113)
store double %53, double* %3
%115 = load double, double* %10
store double %115, double* %4
%116 = load double, double* %12
%117 = fneg double %116
store double %117, double* %5
%118 = load double, double* %13
store double %118, double* %6
store double %114, double* %7
ret void
}