#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 asin(double);
double atan(double);
double cos(double);
double sin(double);
double sqrt(double);
void astr_iarc(double xi, double eta, double rac, double decc, double *ra,
               double *dec) {
  double dist = sqrt(xi * xi + eta * eta);
  if (dist < 0.000001) {
    *ra = rac;
    *dec = decc;
  } else {
    double uu = cos(dist);
    double vv = xi * sin(dist) / dist;
    double ww = eta * sin(dist) / dist;
    double cdecc = cos(decc);
    double sdecc = sin(decc);
    double crac = cos(rac);
    double srac = sin(rac);
    double uun = uu * cdecc * crac - vv * srac - ww * sdecc * crac;
    double vvn = uu * cdecc * srac + vv * crac - ww * sdecc * srac;
    double wwn = uu * sdecc + ww * cdecc;
    *dec = asin(wwn);
    if (((uun) >= 0 ? (uun) : (-(uun))) < 0.000001)
      *ra = ((xi) >= 0 ? (1) : (-1)) * 1.57079632679490;
    else {
      *ra = atan(vvn / uun);
      if (((decc + eta) >= 0 ? (decc + eta) : (-(decc + eta))) >
          1.57079632679490)
        *ra += 2.0 * (3.1415926535897932384626433832795 -
                      ((*ra - rac) >= 0 ? (*ra - rac) : (-(*ra - rac))));
      if (((cos(*dec)) >= 0 ? (cos(*dec)) : (-(cos(*dec)))) > 0.000001 &&
          rac + xi / cos(*dec) > 1.57079632679490 &&
          rac + xi / cos(*dec) < 4.71238898038469)
        *ra += 3.1415926535897932384626433832795;
      if (*ra < 0.0)
        *ra += 6.28318530717958;
      else if (*ra > 6.28318530717958)
        *ra -= 6.28318530717958;
    }
  }
  return;
}


x86 assembly (clang, -O0):
<astr_iarc>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %rdi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  0xe5b(%rip),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    11cf <astr_iarc+0x7f>
movsd  -0x18(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    16bb <astr_iarc+0x56b>
movsd  -0x38(%rbp),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1030 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1030 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1050 <asin@plt>
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1396 <astr_iarc+0x246>
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    13ba <astr_iarc+0x26a>
movsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  0xc36(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    140a <astr_iarc+0x2ba>
movsd  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
mov    $0xffffffff,%eax
mov    $0x1,%ecx
ucomisd %xmm1,%xmm0
cmovae %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0xc0f(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    16b6 <astr_iarc+0x566>
movsd  -0x80(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
call   1040 <atan@plt>
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     144f <astr_iarc+0x2ff>
movsd  -0x20(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    1478 <astr_iarc+0x328>
movsd  -0x20(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  0xb80(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    151a <astr_iarc+0x3ca>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     14c6 <astr_iarc+0x376>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    14f2 <astr_iarc+0x3a2>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  0xb0e(%rip),%xmm0
subsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <cos@plt>
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     154e <astr_iarc+0x3fe>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    157a <astr_iarc+0x42a>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <cos@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  0xa76(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1650 <astr_iarc+0x500>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <cos@plt>
movsd  -0xc8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xc0(%rbp),%xmm0
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xa2a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1650 <astr_iarc+0x500>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <cos@plt>
movsd  -0xd8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xd0(%rbp),%xmm0
ff
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0x9e6(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1650 <astr_iarc+0x500>
mov    -0x28(%rbp),%rax
movsd  0x9c8(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    167a <astr_iarc+0x52a>
mov    -0x28(%rbp),%rax
movsd  0x9b3(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    16b1 <astr_iarc+0x561>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x996(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16ac <astr_iarc+0x55c>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x97c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
jmp    16b1 <astr_iarc+0x561>
jmp    16b6 <astr_iarc+0x566>
jmp    16bb <astr_iarc+0x56b>
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<astr_iarc>:
push   %r14
push   %rbx
sub    $0x88,%rsp
mov    %rsi,%rbx
mov    %rdi,%r14
movapd %xmm0,%xmm5
movapd %xmm1,%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm0,%xmm0
addsd  %xmm4,%xmm0
xorpd  %xmm4,%xmm4
ucomisd %xmm4,%xmm0
movsd  %xmm5,0x18(%rsp)
movsd  %xmm2,0x10(%rsp)
movapd %xmm1,0x70(%rsp)
movsd  %xmm3,0x8(%rsp)
jb     119c <astr_iarc+0x4c>
sqrtsd %xmm0,%xmm0
jmp    11a1 <astr_iarc+0x51>
call   1070 <sqrt@plt>
movsd  0xe57(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    11c9 <astr_iarc+0x79>
movsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%r14)
movsd  0x8(%rsp),%xmm0
movsd  %xmm0,(%rbx)
jmp    14b7 <astr_iarc+0x367>
movsd  %xmm0,0x20(%rsp)
call   1060 <cos@plt>
movsd  %xmm0,0x68(%rsp)
movsd  0x20(%rsp),%xmm0
call   1030 <sin@plt>
mulsd  0x18(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x38(%rsp)
movapd %xmm1,%xmm0
call   1030 <sin@plt>
mulsd  0x70(%rsp),%xmm0
divsd  0x20(%rsp),%xmm0
movapd %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,0x40(%rsp)
movsd  0x8(%rsp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,0x60(%rsp)
movsd  0x10(%rsp),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x10(%rsp),%xmm0
call   1030 <sin@plt>
movsd  0x68(%rsp),%xmm2
movapd %xmm2,%xmm1
movsd  0x40(%rsp),%xmm3
mulsd  %xmm3,%xmm1
movsd  %xmm0,0x50(%rsp)
mulsd  0x38(%rsp),%xmm0
movsd  %xmm1,0x58(%rsp)
movsd  0x30(%rsp),%xmm5
mulsd  %xmm5,%xmm1
subsd  %xmm0,%xmm1
movapd 0x20(%rsp),%xmm0
mulsd  %xmm0,%xmm3
xorpd  0xd96(%rip),%xmm0
movsd  0x60(%rsp),%xmm4
mulsd  %xmm4,%xmm0
movapd %xmm0,0x20(%rsp)
movapd %xmm0,%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm1,%xmm6
movapd %xmm6,0x40(%rsp)
movapd %xmm2,%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
call   1050 <asin@plt>
movapd 0x40(%rsp),%xmm3
movsd  %xmm0,(%rbx)
movapd 0xd51(%rip),%xmm4
xorpd  %xmm3,%xmm4
xorpd  %xmm2,%xmm2
xorpd  %xmm0,%xmm0
cmplesd %xmm3,%xmm0
movapd %xmm0,%xmm1
andpd  %xmm3,%xmm1
andnpd %xmm4,%xmm0
orpd   %xmm1,%xmm0
movsd  0xcf8(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    132e <astr_iarc+0x1de>
xor    %eax,%eax
movsd  0x18(%rsp),%xmm0
ucomisd %xmm2,%xmm0
setae  %al
lea    0xd1c(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
jmp    14b2 <astr_iarc+0x362>
movsd  0x38(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
movsd  0x58(%rsp),%xmm1
movsd  0x50(%rsp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movapd 0x20(%rsp),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  %xmm3,%xmm0
call   1040 <atan@plt>
movapd 0x70(%rsp),%xmm2
addsd  0x8(%rsp),%xmm2
movapd 0xcb7(%rip),%xmm1
xorpd  %xmm2,%xmm1
xorpd  %xmm3,%xmm3
cmpnlesd %xmm2,%xmm3
andpd  %xmm3,%xmm1
andnpd %xmm2,%xmm3
orpd   %xmm1,%xmm3
ucomisd 0xc6e(%rip),%xmm3
jbe    13db <astr_iarc+0x28b>
movapd %xmm0,%xmm1
subsd  0x10(%rsp),%xmm1
movapd 0xc82(%rip),%xmm2
xorpd  %xmm1,%xmm2
xorpd  %xmm3,%xmm3
cmpnlesd %xmm1,%xmm3
andpd  %xmm3,%xmm2
andnpd %xmm1,%xmm3
orpd   %xmm2,%xmm3
movsd  0xc41(%rip),%xmm1
subsd  %xmm3,%xmm1
addsd  %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r14)
movsd  (%rbx),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rbx),%xmm0
call   1060 <cos@plt>
movapd 0xc30(%rip),%xmm1
xorpd  %xmm0,%xmm1
xorpd  %xmm2,%xmm2
cmpnlesd 0x8(%rsp),%xmm2
movapd %xmm2,%xmm3
andnpd %xmm0,%xmm3
andpd  %xmm1,%xmm2
orpd   %xmm3,%xmm2
ucomisd 0xbd9(%rip),%xmm2
jbe    1487 <astr_iarc+0x337>
movsd  (%rbx),%xmm0
call   1060 <cos@plt>
movsd  0x18(%rsp),%xmm1
divsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
ucomisd 0xbbe(%rip),%xmm1
jbe    1487 <astr_iarc+0x337>
movsd  (%rbx),%xmm0
call   1060 <cos@plt>
movsd  0x18(%rsp),%xmm1
divsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  0xbab(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1487 <astr_iarc+0x337>
movsd  (%r14),%xmm0
addsd  0xb90(%rip),%xmm0
movsd  %xmm0,(%r14)
jmp    148c <astr_iarc+0x33c>
movsd  (%r14),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    14a0 <astr_iarc+0x350>
addsd  0xb82(%rip),%xmm0
jmp    14b2 <astr_iarc+0x362>
ucomisd 0xb78(%rip),%xmm0
jbe    14b7 <astr_iarc+0x367>
addsd  0xb76(%rip),%xmm0
movsd  %xmm0,(%r14)
add    $0x88,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define void @astr_iarc(double %0, double %1, double %2, double %3, double* nocapture %4, double* nocapture %5) {
%7 = fmul double %1, %1
%8 = tail call double @llvm.fmuladd.f64(double %0, double %0, double %7)
%9 = tail call double @sqrt(double %8)
%10 = fcmp olt double %9, 0x3EB0C6F7A0B5ED8D
br i1 %10, label %11, label %12
11: ; preds = %6
store double %2, double* %4
store double %3, double* %5
br label %95
12: ; preds = %6
%13 = tail call double @cos(double %9)
%14 = tail call double @sin(double %9)
%15 = fmul double %14, %0
%16 = fdiv double %15, %9
%17 = tail call double @sin(double %9)
%18 = fmul double %17, %1
%19 = fdiv double %18, %9
%20 = tail call double @cos(double %3)
%21 = tail call double @sin(double %3)
%22 = tail call double @cos(double %2)
%23 = tail call double @sin(double %2)
%24 = fmul double %13, %20
%25 = fneg double %16
%26 = fmul double %23, %25
%27 = tail call double @llvm.fmuladd.f64(double %24, double %22, double %26)
%28 = fneg double %19
%29 = fmul double %21, %28
%30 = tail call double @llvm.fmuladd.f64(double %29, double %22, double %27)
%31 = fmul double %20, %19
%32 = tail call double @llvm.fmuladd.f64(double %13, double %21, double %31)
%33 = tail call double @asin(double %32)
store double %33, double* %5
%34 = fcmp oge double %30, 0.000000e+00
%35 = fneg double %30
%36 = select i1 %34, double %30, double %35
%37 = fcmp olt double %36, 0x3EB0C6F7A0B5ED8D
br i1 %37, label %38, label %41
38: ; preds = %12
%39 = fcmp oge double %0, 0.000000e+00
%40 = select i1 %39, double 0x3FF921FB54442D28, double 0xBFF921FB54442D28
store double %40, double* %4
br label %95
41: ; preds = %12
%42 = fmul double %16, %22
%43 = tail call double @llvm.fmuladd.f64(double %24, double %23, double %42)
%44 = tail call double @llvm.fmuladd.f64(double %29, double %23, double %43)
%45 = fdiv double %44, %30
%46 = tail call double @atan(double %45)
%47 = fadd double %1, %3
%48 = fcmp ult double %47, 0.000000e+00
%49 = fneg double %47
%50 = select i1 %48, double %49, double %47
%51 = fcmp ogt double %50, 0x3FF921FB54442D28
br i1 %51, label %52, label %59
52: ; preds = %41
%53 = fsub double %46, %2
%54 = fcmp ult double %53, 0.000000e+00
%55 = fneg double %53
%56 = select i1 %54, double %55, double %53
%57 = fsub double 0x400921FB54442D18, %56
%58 = tail call double @llvm.fmuladd.f64(double %57, double 2.000000e+00, double %46)
br label %59
59: ; preds = %52, %41
%60 = phi double [ %58, %52 ], [ %46, %41 ]
store double %60, double* %4
%61 = load double, double* %5
%62 = tail call double @cos(double %61)
%63 = fcmp ult double %62, 0.000000e+00
%64 = load double, double* %5
%65 = tail call double @cos(double %64)
%66 = fneg double %65
%67 = select i1 %63, double %66, double %65
%68 = fcmp ogt double %67, 0x3EB0C6F7A0B5ED8D
br i1 %68, label %69, label %84
69: ; preds = %59
%70 = load double, double* %5
%71 = tail call double @cos(double %70)
%72 = fdiv double %0, %71
%73 = fadd double %72, %2
%74 = fcmp ogt double %73, 0x3FF921FB54442D28
br i1 %74, label %75, label %84
75: ; preds = %69
%76 = load double, double* %5
%77 = tail call double @cos(double %76)
%78 = fdiv double %0, %77
%79 = fadd double %78, %2
%80 = fcmp olt double %79, 0x4012D97C7F3321D2
br i1 %80, label %81, label %84
81: ; preds = %75
%82 = load double, double* %4
%83 = fadd double %82, 0x400921FB54442D18
store double %83, double* %4
br label %86
84: ; preds = %59, %69, %75
%85 = load double, double* %4
br label %86
86: ; preds = %84, %81
%87 = phi double [ %85, %84 ], [ %83, %81 ]
%88 = fcmp olt double %87, 0.000000e+00
br i1 %88, label %89, label %91
89: ; preds = %86
%90 = fadd double %87, 0x401921FB54442D11
store double %90, double* %4
br label %95
91: ; preds = %86
%92 = fcmp ogt double %87, 0x401921FB54442D11
br i1 %92, label %93, label %95
93: ; preds = %91
%94 = fadd double %87, 0xC01921FB54442D11
store double %94, double* %4
br label %95
95: ; preds = %38, %91, %93, %89, %11
ret void
}