#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 const atan(double);
double const fabs(double);
double sqrt(double);
void calc_arc(double Ax, double Ay, double Bx, double By, double Cx, double Cy,
              double *Rad, double *Ox, double *Oy, double *alpha_start,
              double *alpha_end) {
  const double d_seps = 0.00001;
  const double d_eps = 2.0;
  const double d_r2d = 57.29577951308232;
  double D, Bx_m_Ax = Bx - Ax, By_m_Ay = By - Ay, Cx_m_Ax = Cx - Ax,
            Cy_m_Ay = Cy - Ay, Bx_p_Ax = Bx + Ax, By_p_Ay = By + Ay,
            Cx_p_Ax = Cx + Ax, Cy_p_Ay = Cy + Ay;
  D = 4.0 * (Bx_m_Ax * Cy_m_Ay - By_m_Ay * Cx_m_Ax);
  if (fabs(D) > d_eps) {
    double tmp1 = Bx_m_Ax * Bx_p_Ax + By_m_Ay * By_p_Ay;
    double tmp2 = Cx_m_Ax * Cx_p_Ax + Cy_m_Ay * Cy_p_Ay;
    *Ox = 2.0 * (tmp1 * Cy_m_Ay - tmp2 * By_m_Ay) / D;
    *Oy = 2.0 * (tmp2 * Bx_m_Ax - tmp1 * Cx_m_Ax) / D;
    tmp1 = sqrt(Cy_m_Ay * Cy_m_Ay + Cx_m_Ax * Cx_m_Ax) +
           sqrt(By_m_Ay * By_m_Ay + Bx_m_Ax * Bx_m_Ax);
    Bx -= *Ox;
    By -= *Oy;
    *Rad = sqrt(Bx * Bx + By * By);
    if ((tmp1 > d_seps) && (*Rad / tmp1 < 10.0)) {
      double alpha_m;
      Ax -= *Ox;
      Cx -= *Ox;
      Ay -= *Oy;
      Cy -= *Oy;
      if (fabs(Ax) < d_eps) {
        *alpha_start = (Ay > 0.0) ? (90.0) : (-90.0);
      } else {
        *alpha_start = atan(Ay / Ax) * d_r2d;
        if (Ax < 0.0)
          *alpha_start += (180.0);
      }
      if (fabs(Bx) < d_eps) {
        alpha_m = (By > 0.0) ? (90.0) : (-90.0);
      } else {
        alpha_m = atan(By / Bx) * d_r2d;
        if (Bx < 0.0)
          alpha_m += (180.0);
      }
      if (fabs(Cx) < d_eps) {
        *alpha_end = (Cy > 0.0) ? (90.0) : (-90.0);
      } else {
        *alpha_end = atan(Cy / Cx) * d_r2d;
        if (Cx < 0.0)
          *alpha_end += (180.0);
      }
      if (*alpha_start > *alpha_end) {
        if ((alpha_m < *alpha_start) && (alpha_m > *alpha_end)) {
          *Rad = -*Rad;
        }
      } else {
        if ((alpha_m > *alpha_end) || (alpha_m < *alpha_start)) {
          *Rad = -*Rad;
        }
      }
      return;
    }
  } else {
    if ((fabs(Cx_m_Ax) < d_eps) && (fabs(Cy_m_Ay) < d_eps)) {
      *Rad = sqrt(Bx_m_Ax * Bx_m_Ax + By_m_Ay * By_m_Ay) / 2.0;
      if (*Rad < d_eps) {
        *Rad = -1E+5 - 10.0;
        *Ox = Ax - d_eps;
        *Oy = Ay - d_eps;
        *alpha_start = Cx + d_eps;
        *alpha_end = Cy + d_eps;
        return;
      }
      *Ox = Bx_p_Ax / 2.0;
      *Oy = By_p_Ay / 2.0;
      Bx_m_Ax = Ax - *Ox;
      By_m_Ay = Ay - *Oy;
      if (fabs(Bx_m_Ax) < d_eps) {
        *alpha_start = (By_m_Ay > 0.0) ? (90.0) : (-90.0);
      } else {
        *alpha_start = atan(By_m_Ay / Bx_m_Ax) * d_r2d;
        if (Bx_m_Ax < 0.0)
          *alpha_start += (180.0);
      }
      *alpha_end = *alpha_start + 360.0;
      return;
    }
  }
  *Rad = -1E+5 - 10.0;
  *Ox = Ax;
  *Oy = Ay;
  *alpha_start = Cx;
  *alpha_end = Cy;
}


x86 assembly (clang, -O0):
<calc_arc>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
mov    %rdi,-0x38(%rbp)
mov    %rsi,-0x40(%rbp)
mov    %rdx,-0x48(%rbp)
mov    %rcx,-0x50(%rbp)
mov    %r8,-0x58(%rbp)
movsd  0xea3(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xe7e(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe81(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xda3(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
call   1030 <fabs@plt>
movsd  0xd80(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    17b2 <calc_arc+0x682>
movsd  -0x80(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xcd2(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x78(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc7d(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x78(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x40(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x18(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x20(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
movsd  0xbac(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    17ad <calc_arc+0x67d>
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm1
divsd  -0xc0(%rbp),%xmm1
ff
movsd  0xbba(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    17ad <calc_arc+0x67d>
mov    -0x40(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x8(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
mov    -0x40(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x28(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x10(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x30(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0xafb(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1548 <calc_arc+0x418>
movsd  -0x10(%rbp),%xmm1
movsd  0xb0c(%rip),%xmm3
movsd  0xb0c(%rip),%xmm2
xorps  %xmm0,%xmm0
cmpltsd %xmm1,%xmm0
movaps %xmm0,%xmm1
andpd  %xmm3,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1592 <calc_arc+0x462>
movsd  -0x10(%rbp),%xmm0
divsd  -0x8(%rbp),%xmm0
call   1040 <atan@plt>
movsd  0xab1(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    158d <calc_arc+0x45d>
mov    -0x50(%rbp),%rax
movsd  0xa9b(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    1592 <calc_arc+0x462>
movsd  -0x18(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0xa59(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    15ea <calc_arc+0x4ba>
movsd  -0x20(%rbp),%xmm1
movsd  0xa6a(%rip),%xmm3
movsd  0xa6a(%rip),%xmm2
xorps  %xmm0,%xmm0
cmpltsd %xmm1,%xmm0
movaps %xmm0,%xmm1
andpd  %xmm3,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    1638 <calc_arc+0x508>
movsd  -0x20(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
call   1040 <atan@plt>
movsd  0xa0f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1633 <calc_arc+0x503>
movsd  0x9fd(%rip),%xmm0
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    1638 <calc_arc+0x508>
movsd  -0x28(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0x9b3(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1690 <calc_arc+0x560>
movsd  -0x30(%rbp),%xmm1
movsd  0x9c4(%rip),%xmm3
movsd  0x9c4(%rip),%xmm2
xorps  %xmm0,%xmm0
cmpltsd %xmm1,%xmm0
movaps %xmm0,%xmm1
andpd  %xmm3,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    16da <calc_arc+0x5aa>
movsd  -0x30(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
call   1040 <atan@plt>
movsd  0x969(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    16d5 <calc_arc+0x5a5>
mov    -0x58(%rbp),%rax
movsd  0x953(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    16da <calc_arc+0x5aa>
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x58(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    174c <calc_arc+0x61c>
movsd  -0xd0(%rbp),%xmm1
ff
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    1747 <calc_arc+0x617>
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1747 <calc_arc+0x617>
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    17a8 <calc_arc+0x678>
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
ucomisd (%rax),%xmm0
ja     177c <calc_arc+0x64c>
movsd  -0xd0(%rbp),%xmm1
ff
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    17a3 <calc_arc+0x673>
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    17a8 <calc_arc+0x678>
jmp    1a25 <calc_arc+0x8f5>
jmp    19e1 <calc_arc+0x8b1>
movsd  -0x90(%rbp),%xmm0
ff
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0x836(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    19dc <calc_arc+0x8ac>
movsd  -0x98(%rbp),%xmm0
ff
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0x814(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    19dc <calc_arc+0x8ac>
movsd  -0x80(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movsd  0x7db(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  0x7c3(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    18b8 <calc_arc+0x788>
mov    -0x38(%rbp),%rax
movsd  0x7ed(%rip),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
movsd  0x79c(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
movsd  0x783(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0x76f(%rip),%xmm0
addsd  -0x28(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0x75a(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1a25 <calc_arc+0x8f5>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  0x738(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  0x71c(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
mov    -0x40(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x10(%rbp),%xmm0
mov    -0x48(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0x6d4(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1972 <calc_arc+0x842>
movsd  -0x88(%rbp),%xmm1
ff
movsd  0x6e2(%rip),%xmm3
movsd  0x6e2(%rip),%xmm2
xorps  %xmm0,%xmm0
cmpltsd %xmm1,%xmm0
movaps %xmm0,%xmm1
andpd  %xmm3,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19bf <calc_arc+0x88f>
movsd  -0x88(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
call   1040 <atan@plt>
movsd  0x684(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jbe    19ba <calc_arc+0x88a>
mov    -0x50(%rbp),%rax
movsd  0x66e(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    19bf <calc_arc+0x88f>
mov    -0x50(%rbp),%rax
movsd  0x66d(%rip),%xmm0
addsd  (%rax),%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1a25 <calc_arc+0x8f5>
jmp    19e1 <calc_arc+0x8b1>
mov    -0x38(%rbp),%rax
movsd  0x653(%rip),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x28(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<calc_arc>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x60,%rsp
mov    %r8,%r14
mov    %rcx,%r15
mov    %rdx,%r13
mov    %rsi,%rbx
mov    %rdi,%r12
movapd %xmm0,%xmm8
movapd %xmm2,%xmm10
subsd  %xmm0,%xmm10
movapd %xmm3,%xmm11
subsd  %xmm1,%xmm11
movapd %xmm4,%xmm9
subsd  %xmm0,%xmm9
movapd %xmm5,%xmm0
subsd  %xmm1,%xmm0
movapd %xmm8,%xmm12
addsd  %xmm2,%xmm12
movapd %xmm1,%xmm13
addsd  %xmm3,%xmm13
movapd %xmm9,%xmm6
mulsd  %xmm11,%xmm6
movapd %xmm10,%xmm7
mulsd  %xmm0,%xmm7
subsd  %xmm6,%xmm7
mulsd  0xe66(%rip),%xmm7
movapd 0xeae(%rip),%xmm6
andpd  %xmm7,%xmm6
ucomisd 0xe5a(%rip),%xmm6
jbe    126d <calc_arc+0x14d>
movsd  %xmm3,0x10(%rsp)
movapd %xmm2,0x20(%rsp)
movsd  %xmm1,0x18(%rsp)
movapd %xmm1,%xmm6
movsd  %xmm5,0x8(%rsp)
addsd  %xmm5,%xmm6
movapd %xmm8,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm11,%xmm13
mulsd  %xmm10,%xmm12
addsd  %xmm13,%xmm12
mulsd  %xmm0,%xmm6
mulsd  %xmm9,%xmm3
addsd  %xmm6,%xmm3
movapd %xmm11,%xmm6
mulsd  %xmm3,%xmm6
movapd %xmm9,%xmm5
mulsd  %xmm12,%xmm5
mulsd  %xmm0,%xmm12
subsd  %xmm6,%xmm12
addsd  %xmm12,%xmm12
divsd  %xmm7,%xmm12
movsd  %xmm12,(%rbx)
mulsd  %xmm10,%xmm3
subsd  %xmm5,%xmm3
addsd  %xmm3,%xmm3
divsd  %xmm7,%xmm3
movsd  %xmm3,0x0(%r13)
mulsd  %xmm9,%xmm9
mulsd  %xmm0,%xmm0
addsd  %xmm9,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movapd %xmm4,0x30(%rsp)
movapd %xmm8,0x40(%rsp)
jb     12c6 <calc_arc+0x1a6>
xorps  %xmm6,%xmm6
sqrtsd %xmm0,%xmm6
jmp    12ed <calc_arc+0x1cd>
movapd 0xddb(%rip),%xmm2
andpd  %xmm2,%xmm9
movsd  0xd86(%rip),%xmm3
ucomisd %xmm9,%xmm3
jbe    1417 <calc_arc+0x2f7>
andpd  %xmm2,%xmm0
ucomisd %xmm0,%xmm3
jbe    1417 <calc_arc+0x2f7>
mulsd  %xmm11,%xmm11
mulsd  %xmm10,%xmm10
addsd  %xmm11,%xmm10
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm10
jb     143a <calc_arc+0x31a>
xorps  %xmm0,%xmm0
sqrtsd %xmm10,%xmm0
jmp    149a <calc_arc+0x37a>
movsd  %xmm10,(%rsp)
movsd  %xmm11,0x58(%rsp)
call   1040 <sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  0x58(%rsp),%xmm11
movsd  (%rsp),%xmm10
movapd %xmm0,%xmm6
mulsd  %xmm10,%xmm10
mulsd  %xmm11,%xmm11
addsd  %xmm10,%xmm11
ucomisd %xmm1,%xmm11
jb     130d <calc_arc+0x1ed>
xorps  %xmm0,%xmm0
sqrtsd %xmm11,%xmm0
jmp    1321 <calc_arc+0x201>
movapd %xmm11,%xmm0
movsd  %xmm6,(%rsp)
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm6
movapd 0x20(%rsp),%xmm2
movsd  0x10(%rsp),%xmm3
addsd  %xmm0,%xmm6
subsd  (%rbx),%xmm2
subsd  0x0(%r13),%xmm3
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movapd %xmm2,0x20(%rsp)
movsd  %xmm3,0x10(%rsp)
jb     136b <calc_arc+0x24b>
sqrtsd %xmm0,%xmm0
jmp    137a <calc_arc+0x25a>
movsd  %xmm6,(%rsp)
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm6
movsd  0x8(%rsp),%xmm5
movapd 0x30(%rsp),%xmm4
movapd 0x40(%rsp),%xmm8
movsd  0x18(%rsp),%xmm1
movsd  %xmm0,(%r12)
ucomisd 0xc97(%rip),%xmm6
jbe    1417 <calc_arc+0x2f7>
divsd  %xmm6,%xmm0
movsd  0xc91(%rip),%xmm2
ucomisd %xmm0,%xmm2
jbe    1417 <calc_arc+0x2f7>
movsd  (%rbx),%xmm6
subsd  %xmm6,%xmm8
movsd  0x0(%r13),%xmm0
movsd  %xmm0,0x18(%rsp)
subsd  %xmm0,%xmm1
movapd 0xc7a(%rip),%xmm0
andpd  %xmm8,%xmm0
movsd  0xc25(%rip),%xmm3
ucomisd %xmm0,%xmm3
jbe    14fc <calc_arc+0x3dc>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm1
seta   %al
lea    0xc5f(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
movapd 0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
jmp    155c <calc_arc+0x43c>
movabs $0xc0f86aa000000000,%rax
6a f8 c0
mov    %rax,(%r12)
movsd  %xmm8,(%rbx)
movsd  %xmm1,0x0(%r13)
movsd  %xmm4,(%r15)
jmp    14e9 <calc_arc+0x3c9>
movapd %xmm10,%xmm0
movsd  %xmm5,0x8(%rsp)
movapd %xmm4,0x30(%rsp)
movapd %xmm8,0x40(%rsp)
movsd  %xmm1,0x18(%rsp)
movsd  %xmm12,0x20(%rsp)
movsd  %xmm13,0x10(%rsp)
call   1040 <sqrt@plt>
movsd  0xb95(%rip),%xmm3
movsd  0x10(%rsp),%xmm13
movsd  0x20(%rsp),%xmm12
movsd  0x18(%rsp),%xmm1
movapd 0x40(%rsp),%xmm8
movapd 0x30(%rsp),%xmm4
movsd  0x8(%rsp),%xmm5
mulsd  0xb6e(%rip),%xmm0
movsd  %xmm0,(%r12)
ucomisd %xmm0,%xmm3
jbe    159b <calc_arc+0x47b>
movabs $0xc0f86aa000000000,%rax
6a f8 c0
mov    %rax,(%r12)
movsd  0xb68(%rip),%xmm0
addsd  %xmm0,%xmm8
movsd  %xmm8,(%rbx)
addsd  %xmm0,%xmm1
movsd  %xmm1,0x0(%r13)
addsd  %xmm3,%xmm4
movsd  %xmm4,(%r15)
addsd  %xmm3,%xmm5
movsd  %xmm5,(%r14)
add    $0x60,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret
divsd  %xmm8,%xmm1
movapd %xmm1,%xmm0
movapd %xmm8,0x40(%rsp)
movsd  %xmm6,(%rsp)
call   1030 <atan@plt>
movsd  (%rsp),%xmm6
movsd  0xae5(%rip),%xmm3
movapd 0x30(%rsp),%xmm4
movsd  0x8(%rsp),%xmm5
mulsd  0xae1(%rip),%xmm0
movsd  %xmm0,(%r15)
xorpd  %xmm1,%xmm1
ucomisd 0x40(%rsp),%xmm1
movapd 0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
jbe    1561 <calc_arc+0x441>
addsd  0xac4(%rip),%xmm0
movsd  %xmm0,(%r15)
subsd  %xmm6,%xmm4
movapd 0xae3(%rip),%xmm0
andpd  %xmm1,%xmm0
ucomisd %xmm0,%xmm3
movapd %xmm4,0x30(%rsp)
jbe    15f7 <calc_arc+0x4d7>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm2
seta   %al
lea    0xacf(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm2
jmp    1638 <calc_arc+0x518>
movsd  0xa6d(%rip),%xmm0
mulsd  %xmm0,%xmm12
movsd  %xmm12,(%rbx)
mulsd  %xmm0,%xmm13
movsd  %xmm13,0x0(%r13)
subsd  (%rbx),%xmm8
subsd  %xmm13,%xmm1
movapd 0xa86(%rip),%xmm0
andpd  %xmm8,%xmm0
ucomisd %xmm0,%xmm3
jbe    16ac <calc_arc+0x58c>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm1
seta   %al
lea    0xa73(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
jmp    16e2 <calc_arc+0x5c2>
divsd  %xmm1,%xmm2
movapd %xmm2,%xmm0
call   1030 <atan@plt>
movapd %xmm0,%xmm2
mulsd  0xa08(%rip),%xmm2
xorpd  %xmm0,%xmm0
ucomisd 0x20(%rsp),%xmm0
jbe    1624 <calc_arc+0x504>
addsd  0x9fc(%rip),%xmm2
movsd  0x8(%rsp),%xmm5
movapd 0x30(%rsp),%xmm4
movsd  0x9d0(%rip),%xmm3
subsd  0x18(%rsp),%xmm5
movapd 0xa0a(%rip),%xmm0
andpd  %xmm4,%xmm0
ucomisd %xmm0,%xmm3
jbe    166b <calc_arc+0x54b>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm5
seta   %al
lea    0x9fc(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
jmp    16a5 <calc_arc+0x585>
movsd  %xmm2,0x20(%rsp)
divsd  %xmm4,%xmm5
movapd %xmm5,%xmm0
call   1030 <atan@plt>
mulsd  0x992(%rip),%xmm0
movsd  %xmm0,(%r14)
xorpd  %xmm1,%xmm1
ucomisd 0x30(%rsp),%xmm1
jbe    16f9 <calc_arc+0x5d9>
addsd  0x981(%rip),%xmm0
movsd  0x20(%rsp),%xmm2
movsd  %xmm0,(%r14)
jmp    16ff <calc_arc+0x5df>
divsd  %xmm8,%xmm1
movapd %xmm1,%xmm0
movapd %xmm8,0x40(%rsp)
call   1030 <atan@plt>
mulsd  0x94f(%rip),%xmm0
movsd  %xmm0,(%r15)
xorpd  %xmm1,%xmm1
ucomisd 0x40(%rsp),%xmm1
jbe    16e7 <calc_arc+0x5c7>
addsd  0x93e(%rip),%xmm0
movsd  %xmm0,(%r15)
addsd  0x939(%rip),%xmm0
movsd  %xmm0,(%r14)
jmp    14ee <calc_arc+0x3ce>
movsd  0x20(%rsp),%xmm2
movsd  (%r15),%xmm1
ucomisd %xmm0,%xmm1
jbe    171f <calc_arc+0x5ff>
ucomisd %xmm2,%xmm1
jbe    14ee <calc_arc+0x3ce>
ucomisd %xmm0,%xmm2
ja     172f <calc_arc+0x60f>
jmp    14ee <calc_arc+0x3ce>
ucomisd %xmm0,%xmm2
ja     172f <calc_arc+0x60f>
ucomisd %xmm2,%xmm1
jbe    14ee <calc_arc+0x3ce>
movsd  (%r12),%xmm0
xorpd  0x933(%rip),%xmm0
movlpd %xmm0,(%r12)
jmp    14ee <calc_arc+0x3ce>

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

LLVM IR (-O2):
define void @calc_arc(double %0, double %1, double %2, double %3, double %4, double %5, double* nocapture %6, double* nocapture %7, double* nocapture %8, double* nocapture %9, double* nocapture %10) {
%12 = fsub double %2, %0
%13 = fsub double %3, %1
%14 = fsub double %4, %0
%15 = fsub double %5, %1
%16 = fadd double %0, %2
%17 = fadd double %1, %3
%18 = fneg double %13
%19 = fmul double %14, %18
%20 = tail call double @llvm.fmuladd.f64(double %12, double %15, double %19)
%21 = fmul double %20, 4.000000e+00
%22 = tail call double @llvm.fabs.f64(double %21)
%23 = fcmp ogt double %22, 2.000000e+00
br i1 %23, label %24, label %127
24: ; preds = %11
%25 = fadd double %1, %5
%26 = fadd double %0, %4
%27 = fmul double %13, %17
%28 = tail call double @llvm.fmuladd.f64(double %12, double %16, double %27)
%29 = fmul double %15, %25
%30 = tail call double @llvm.fmuladd.f64(double %14, double %26, double %29)
%31 = fneg double %30
%32 = fmul double %13, %31
%33 = tail call double @llvm.fmuladd.f64(double %28, double %15, double %32)
%34 = fmul double %33, 2.000000e+00
%35 = fdiv double %34, %21
store double %35, double* %7
%36 = fneg double %28
%37 = fmul double %14, %36
%38 = tail call double @llvm.fmuladd.f64(double %30, double %12, double %37)
%39 = fmul double %38, 2.000000e+00
%40 = fdiv double %39, %21
store double %40, double* %8
%41 = fmul double %14, %14
%42 = tail call double @llvm.fmuladd.f64(double %15, double %15, double %41)
%43 = tail call double @sqrt(double %42)
%44 = fmul double %12, %12
%45 = tail call double @llvm.fmuladd.f64(double %13, double %13, double %44)
%46 = tail call double @sqrt(double %45)
%47 = fadd double %43, %46
%48 = load double, double* %7
%49 = fsub double %2, %48
%50 = load double, double* %8
%51 = fsub double %3, %50
%52 = fmul double %51, %51
%53 = tail call double @llvm.fmuladd.f64(double %49, double %49, double %52)
%54 = tail call double @sqrt(double %53)
store double %54, double* %6
%55 = fcmp ogt double %47, 1.000000e-05
%56 = fdiv double %54, %47
%57 = fcmp olt double %56, 1.000000e+01
%58 = select i1 %55, i1 %57, i1 false
br i1 %58, label %59, label %167
59: ; preds = %24
%60 = load double, double* %7
%61 = fsub double %0, %60
%62 = fsub double %4, %60
%63 = load double, double* %8
%64 = fsub double %1, %63
%65 = fsub double %5, %63
%66 = tail call double @llvm.fabs.f64(double %61)
%67 = fcmp olt double %66, 2.000000e+00
br i1 %67, label %68, label %71
68: ; preds = %59
%69 = fcmp ogt double %64, 0.000000e+00
%70 = select i1 %69, double 9.000000e+01, double -9.000000e+01
br label %78
71: ; preds = %59
%72 = fdiv double %64, %61
%73 = tail call double @atan(double %72)
%74 = fmul double %73, 0x404CA5DC1A63C1F8
store double %74, double* %9
%75 = fcmp olt double %61, 0.000000e+00
br i1 %75, label %76, label %80
76: ; preds = %71
%77 = fadd double %74, 1.800000e+02
br label %78
78: ; preds = %68, %76
%79 = phi double [ %77, %76 ], [ %70, %68 ]
store double %79, double* %9
br label %80
80: ; preds = %78, %71
%81 = tail call double @llvm.fabs.f64(double %49)
%82 = fcmp olt double %81, 2.000000e+00
br i1 %82, label %83, label %86
83: ; preds = %80
%84 = fcmp ogt double %51, 0.000000e+00
%85 = select i1 %84, double 9.000000e+01, double -9.000000e+01
br label %93
86: ; preds = %80
%87 = fdiv double %51, %49
%88 = tail call double @atan(double %87)
%89 = fmul double %88, 0x404CA5DC1A63C1F8
%90 = fcmp olt double %49, 0.000000e+00
br i1 %90, label %91, label %93
91: ; preds = %86
%92 = fadd double %89, 1.800000e+02
br label %93
93: ; preds = %86, %91, %83
%94 = phi double [ %85, %83 ], [ %92, %91 ], [ %89, %86 ]
%95 = tail call double @llvm.fabs.f64(double %62)
%96 = fcmp olt double %95, 2.000000e+00
br i1 %96, label %97, label %100
97: ; preds = %93
%98 = fcmp ogt double %65, 0.000000e+00
%99 = select i1 %98, double 9.000000e+01, double -9.000000e+01
br label %107
100: ; preds = %93
%101 = fdiv double %65, %62
%102 = tail call double @atan(double %101)
%103 = fmul double %102, 0x404CA5DC1A63C1F8
store double %103, double* %10
%104 = fcmp olt double %62, 0.000000e+00
br i1 %104, label %105, label %109
105: ; preds = %100
%106 = fadd double %103, 1.800000e+02
br label %107
107: ; preds = %97, %105
%108 = phi double [ %106, %105 ], [ %99, %97 ]
store double %108, double* %10
br label %109
109: ; preds = %107, %100
%110 = phi double [ %103, %100 ], [ %108, %107 ]
%111 = load double, double* %9
%112 = fcmp ogt double %111, %110
br i1 %112, label %113, label %120
113: ; preds = %109
%114 = fcmp olt double %94, %111
%115 = fcmp ogt double %94, %110
%116 = select i1 %114, i1 %115, i1 false
br i1 %116, label %117, label %168
117: ; preds = %113
%118 = load double, double* %6
%119 = fneg double %118
store double %119, double* %6
br label %168
120: ; preds = %109
%121 = fcmp ogt double %94, %110
%122 = fcmp olt double %94, %111
%123 = select i1 %121, i1 true, i1 %122
br i1 %123, label %124, label %168
124: ; preds = %120
%125 = load double, double* %6
%126 = fneg double %125
store double %126, double* %6
br label %168
127: ; preds = %11
%128 = tail call double @llvm.fabs.f64(double %14)
%129 = fcmp olt double %128, 2.000000e+00
%130 = tail call double @llvm.fabs.f64(double %15)
%131 = fcmp olt double %130, 2.000000e+00
%132 = select i1 %129, i1 %131, i1 false
br i1 %132, label %133, label %167
133: ; preds = %127
%134 = fmul double %13, %13
%135 = tail call double @llvm.fmuladd.f64(double %12, double %12, double %134)
%136 = tail call double @sqrt(double %135)
%137 = fmul double %136, 5.000000e-01
store double %137, double* %6
%138 = fcmp olt double %137, 2.000000e+00
br i1 %138, label %139, label %144
139: ; preds = %133
store double -1.000100e+05, double* %6
%140 = fadd double %0, -2.000000e+00
store double %140, double* %7
%141 = fadd double %1, -2.000000e+00
store double %141, double* %8
%142 = fadd double %4, 2.000000e+00
store double %142, double* %9
%143 = fadd double %5, 2.000000e+00
store double %143, double* %10
br label %168
144: ; preds = %133
%145 = fmul double %16, 5.000000e-01
store double %145, double* %7
%146 = fmul double %17, 5.000000e-01
store double %146, double* %8
%147 = load double, double* %7
%148 = fsub double %0, %147
%149 = fsub double %1, %146
%150 = tail call double @llvm.fabs.f64(double %148)
%151 = fcmp olt double %150, 2.000000e+00
br i1 %151, label %152, label %155
152: ; preds = %144
%153 = fcmp ogt double %149, 0.000000e+00
%154 = select i1 %153, double 9.000000e+01, double -9.000000e+01
br label %162
155: ; preds = %144
%156 = fdiv double %149, %148
%157 = tail call double @atan(double %156)
%158 = fmul double %157, 0x404CA5DC1A63C1F8
store double %158, double* %9
%159 = fcmp olt double %148, 0.000000e+00
br i1 %159, label %160, label %164
160: ; preds = %155
%161 = fadd double %158, 1.800000e+02
br label %162
162: ; preds = %152, %160
%163 = phi double [ %161, %160 ], [ %154, %152 ]
store double %163, double* %9
br label %164
164: ; preds = %162, %155
%165 = phi double [ %158, %155 ], [ %163, %162 ]
%166 = fadd double %165, 3.600000e+02
store double %166, double* %10
br label %168
167: ; preds = %24, %127
store double -1.000100e+05, double* %6
store double %0, double* %7
store double %1, double* %8
store double %4, double* %9
store double %5, double* %10
br label %168
168: ; preds = %117, %113, %124, %120, %167, %164, %139
ret void
}