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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int M_PI;
int M_PI_2;
double acos(double const);
double asin(double const);
double const cos(double);
double const sin(double);
int lash_getContainedAngle(const double x, const double y, const double m,
                           const double w_container, const double h_container,
                           const int buf_top, const int buf_right,
                           const int buf_bottom, const int buf_left,
                           double *angle_min, double *angle_max,
                           const int include_dcoords, double *x_min,
                           double *y_min, double *x_max, double *y_max) {
  if (x - m < buf_left) {
    if (y - m < buf_top) {
      double min_mod = M_PI;
      double max_mod = 2 * M_PI;
      *angle_min = min_mod + acos((x - buf_left) / m);
      *angle_max = max_mod + asin((y - buf_top) / m);
      if (include_dcoords) {
        *x_min = buf_left;
        *y_min = y + (sin(*angle_min - min_mod) * m);
        *x_max = x + (cos(*angle_max - max_mod) * m);
        *y_max = buf_top;
      }
      return 0;
    } else if (y + m > h_container - buf_bottom) {
      double min_mod = 3 * M_PI_2;
      double max_mod = 5 * M_PI_2;
      *angle_min = min_mod + acos((x - buf_left) / m);
      *angle_max = max_mod + asin((h_container - buf_bottom - y) / m);
      if (include_dcoords) {
        *x_min = x + (sin(*angle_min - min_mod) * m);
        *y_min = h_container - buf_bottom;
        *x_max = buf_left;
        *y_max = y - (cos(*angle_max - max_mod) * m);
      }
      return 0;
    } else {
      double tmp_angle = acos((x - buf_left) / m);
      *angle_min = M_PI + tmp_angle;
      *angle_max = (3 * M_PI) - tmp_angle;
      if (include_dcoords) {
        int tmp_side = (sin(tmp_angle) * m);
        *x_min = buf_left;
        *y_min = y + tmp_side;
        *x_max = buf_left;
        *y_max = y - tmp_side;
      }
      return 0;
    }
  } else if (x + m > w_container - buf_right) {
    if (y - m < buf_top) {
      double min_mod = M_PI_2;
      double max_mod = 3 * M_PI_2;
      *angle_min = min_mod + acos((y - buf_top) / m);
      *angle_max = max_mod + asin((w_container - buf_right - x) / m);
      if (include_dcoords) {
        *x_min = x - (sin(*angle_min - min_mod) * m);
        *y_min = buf_top;
        *x_max = w_container - buf_left;
        *y_max = y + (cos(*angle_max - max_mod) * m);
      }
      return 0;
    } else if (y + m > h_container - buf_bottom) {
      double max_mod = M_PI;
      *angle_min = acos((w_container - buf_right - x) / m);
      *angle_max = max_mod + asin((h_container - buf_bottom - y) / m);
      if (include_dcoords) {
        *x_min = w_container - buf_left;
        *y_min = y - (sin(*angle_min) * m);
        *x_max = x - (cos(*angle_max - max_mod) * m);
        *y_max = h_container - buf_bottom;
      }
      return 0;
    } else {
      *angle_min = acos((w_container - buf_right - x) / m);
      *angle_max = (2 * M_PI) - *angle_min;
      if (include_dcoords) {
        int tmp_side = (sin(*angle_min) * m);
        *x_min = w_container - buf_right;
        *y_min = y - tmp_side;
        *x_max = w_container - buf_right;
        *y_max = y + tmp_side;
      }
      return 0;
    }
  } else if (y - m < buf_top) {
    double tmp_angle = acos((y - buf_top) / m);
    *angle_min = M_PI_2 + tmp_angle;
    *angle_max = (5 * M_PI_2) - tmp_angle;
    if (include_dcoords) {
      int tmp_side = (sin(tmp_angle) * m);
      *x_min = x - tmp_side;
      *y_min = buf_top;
      *x_max = x + tmp_side;
      *y_max = buf_top;
    }
    return 0;
  } else if (y + m > h_container - buf_bottom) {
    double tmp_angle = acos((h_container - buf_bottom - y) / m);
    *angle_min = (3 * M_PI_2) + tmp_angle;
    *angle_max = (7 * M_PI_2) - tmp_angle;
    if (include_dcoords) {
      int tmp_side = (sin(tmp_angle) * m);
      *x_min = x + tmp_side;
      *y_min = h_container - buf_bottom;
      *x_max = x - tmp_side;
      *y_max = h_container - buf_bottom;
    }
    return 0;
  }
  *angle_min = 0.f;
  *angle_max = 2 * M_PI;
  if (include_dcoords) {
    *x_min = h_container - buf_right;
    *y_min = y;
    *x_max = h_container - buf_right;
    *y_max = y;
  }
  return 0;
}


x86 assembly (clang, -O0):
<lash_getContainedAngle>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
mov    %edi,-0x34(%rbp)
mov    %esi,-0x38(%rbp)
mov    %edx,-0x3c(%rbp)
mov    %ecx,-0x40(%rbp)
mov    %r8,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
cvtsi2sdl -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1551 <lash_getContainedAngle+0x411>
movsd  -0x18(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
cvtsi2sdl -0x34(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1302 <lash_getContainedAngle+0x1c2>
mov    0x2e24(%rip),%rax
cvtsi2sdl (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x2e14(%rip),%rax
mov    (%rax),%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x34(%rbp),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x20(%rbp),%xmm0
call   1050 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     12f6 <lash_getContainedAngle+0x1b6>
cvtsi2sdl -0x40(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x58(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0xe0(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
call   1060 <cos@plt>
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
cvtsi2sdl -0x34(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
movsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
cvtsi2sdl -0x3c(%rbp),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    148f <lash_getContainedAngle+0x34f>
mov    0x2cb5(%rip),%rax
imul   $0x3,(%rax),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x2ca2(%rip),%rax
imul   $0x5,(%rax),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
subsd  -0x18(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1050 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     1483 <lash_getContainedAngle+0x343>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x68(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0x100(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
cvtsi2sdl -0x40(%rbp),%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x70(%rbp),%xmm0
call   1060 <cos@plt>
movsd  -0xf8(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
movsd  %xmm0,-0x78(%rbp)
mov    0x2b35(%rip),%rax
cvtsi2sdl (%rax),%xmm0
addsd  -0x78(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x2b1d(%rip),%rax
imul   $0x3,(%rax),%eax
cvtsi2sd %eax,%xmm0
subsd  -0x78(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     1545 <lash_getContainedAngle+0x405>
movsd  -0x78(%rbp),%xmm0
call   1040 <sin@plt>
mulsd  -0x20(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x7c(%rbp)
cvtsi2sdl -0x40(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x7c(%rbp),%xmm1
addsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
cvtsi2sdl -0x40(%rbp),%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x7c(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
movsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0x38(%rbp),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    195f <lash_getContainedAngle+0x81f>
movsd  -0x18(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
cvtsi2sdl -0x34(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1706 <lash_getContainedAngle+0x5c6>
mov    0x2a4d(%rip),%rax
cvtsi2sdl (%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x2a3a(%rip),%rax
imul   $0x3,(%rax),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x34(%rbp),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
movaps %xmm0,%xmm1
movsd  -0x110(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
subsd  -0x10(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1050 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     16fa <lash_getContainedAngle+0x5ba>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  -0x120(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
cvtsi2sdl -0x34(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
call   1060 <cos@plt>
movsd  -0x118(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
movsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
cvtsi2sdl -0x3c(%rbp),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    188a <lash_getContainedAngle+0x74a>
mov    0x28b9(%rip),%rax
cvtsi2sdl (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
subsd  -0x10(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
subsd  -0x18(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1050 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     187e <lash_getContainedAngle+0x73e>
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
call   1040 <sin@plt>
movsd  -0x138(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
call   1060 <cos@plt>
movsd  -0x130(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
subsd  -0x10(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x2732(%rip),%rax
mov    (%rax),%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x48(%rbp),%rax
subsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     1953 <lash_getContainedAngle+0x813>
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
call   1040 <sin@plt>
mulsd  -0x20(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x9c(%rbp)
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x9c(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x9c(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
movsd  -0x18(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
cvtsi2sdl -0x34(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1a4f <lash_getContainedAngle+0x90f>
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x34(%rbp),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x2641(%rip),%rax
cvtsi2sdl (%rax),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x2626(%rip),%rax
imul   $0x5,(%rax),%eax
cvtsi2sd %eax,%xmm0
subsd  -0xa8(%rbp),%xmm0
ff
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     1a43 <lash_getContainedAngle+0x903>
movsd  -0xa8(%rbp),%xmm0
ff
call   1040 <sin@plt>
mulsd  -0x20(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xac(%rbp)
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0xac(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
cvtsi2sdl -0x34(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0xac(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
cvtsi2sdl -0x34(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
movsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
cvtsi2sdl -0x3c(%rbp),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1b62 <lash_getContainedAngle+0xa22>
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
subsd  -0x18(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1030 <acos@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
mov    0x2543(%rip),%rax
imul   $0x3,(%rax),%eax
cvtsi2sd %eax,%xmm0
addsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x2525(%rip),%rax
imul   $0x7,(%rax),%eax
cvtsi2sd %eax,%xmm0
subsd  -0xb8(%rbp),%xmm0
ff
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     1b56 <lash_getContainedAngle+0xa16>
movsd  -0xb8(%rbp),%xmm0
ff
call   1040 <sin@plt>
mulsd  -0x20(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xbc(%rbp)
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0xbc(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0xbc(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1beb <lash_getContainedAngle+0xaab>
jmp    1b67 <lash_getContainedAngle+0xa27>
jmp    1b6c <lash_getContainedAngle+0xa2c>
jmp    1b71 <lash_getContainedAngle+0xa31>
mov    -0x48(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x2465(%rip),%rax
mov    (%rax),%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x10(%rbp)
je     1be4 <lash_getContainedAngle+0xaa4>
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<lash_getContainedAngle>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r9,%r14
mov    %r8,%rbx
movapd %xmm0,%xmm5
mov    0xa8(%rsp),%r15
mov    0xa0(%rsp),%r12
mov    0x98(%rsp),%r13
mov    0x90(%rsp),%ebp
subsd  %xmm2,%xmm0
cvtsi2sd %ecx,%xmm9
ucomisd %xmm0,%xmm9
movsd  %xmm2,(%rsp)
jbe    1283 <lash_getContainedAngle+0x143>
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
xorps  %xmm3,%xmm3
cvtsi2sd %edi,%xmm3
ucomisd %xmm0,%xmm3
movsd  %xmm1,0x18(%rsp)
movsd  %xmm9,0x28(%rsp)
jbe    13ac <lash_getContainedAngle+0x26c>
mov    0x2e2b(%rip),%rax
mov    (%rax),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x20(%rsp)
add    %eax,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd %xmm5,%xmm0
subsd  %xmm9,%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm5,0x10(%rsp)
movapd %xmm3,0x30(%rsp)
call   1030 <acos@plt>
addsd  0x20(%rsp),%xmm0
movsd  %xmm0,(%rbx)
movsd  0x18(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
divsd  (%rsp),%xmm0
call   1050 <asin@plt>
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
movsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x0(%r13)
movsd  (%rbx),%xmm0
subsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,(%r12)
movsd  (%r14),%xmm0
subsd  0x8(%rsp),%xmm0
call   1060 <cos@plt>
mulsd  (%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%r15)
movapd 0x30(%rsp),%xmm1
jmp    1816 <lash_getContainedAngle+0x6d6>
movapd %xmm5,%xmm0
cvtsi2sd %esi,%xmm8
addsd  %xmm2,%xmm0
movapd %xmm3,%xmm6
subsd  %xmm8,%xmm6
ucomisd %xmm6,%xmm0
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
cvtsi2sd %edi,%xmm7
jbe    149e <lash_getContainedAngle+0x35e>
ucomisd %xmm0,%xmm7
movsd  %xmm1,0x18(%rsp)
jbe    1538 <lash_getContainedAngle+0x3f8>
movsd  %xmm3,0x48(%rsp)
mov    0x2d14(%rip),%rax
mov    (%rax),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x50(%rsp)
lea    (%rax,%rax,2),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm1,%xmm0
subsd  %xmm7,%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm5,0x10(%rsp)
movapd %xmm7,0x30(%rsp)
movsd  %xmm9,0x28(%rsp)
movsd  %xmm6,0x8(%rsp)
call   1030 <acos@plt>
addsd  0x50(%rsp),%xmm0
movsd  %xmm0,(%rbx)
movsd  0x8(%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
divsd  (%rsp),%xmm0
call   1050 <asin@plt>
addsd  0x20(%rsp),%xmm0
movsd  %xmm0,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
movsd  (%rbx),%xmm0
subsd  0x50(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x0(%r13)
movaps 0x30(%rsp),%xmm0
movsd  %xmm0,(%r12)
movsd  0x48(%rsp),%xmm0
subsd  0x28(%rsp),%xmm0
movsd  %xmm0,(%r15)
movsd  (%r14),%xmm0
subsd  0x20(%rsp),%xmm0
call   1060 <cos@plt>
movapd %xmm0,%xmm1
mulsd  (%rsp),%xmm1
addsd  0x18(%rsp),%xmm1
jmp    1816 <lash_getContainedAngle+0x6d6>
movapd %xmm1,%xmm0
xorps  %xmm3,%xmm3
cvtsi2sd %edx,%xmm3
addsd  %xmm2,%xmm0
subsd  %xmm3,%xmm4
ucomisd %xmm4,%xmm0
jbe    161f <lash_getContainedAngle+0x4df>
mov    0x2c10(%rip),%rax
mov    (%rax),%eax
lea    (%rax,%rax,2),%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
movsd  %xmm0,0x20(%rsp)
lea    (%rax,%rax,4),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd %xmm5,%xmm0
subsd  %xmm9,%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm5,0x10(%rsp)
movsd  %xmm4,0x30(%rsp)
call   1030 <acos@plt>
addsd  0x20(%rsp),%xmm0
movsd  %xmm0,(%rbx)
movsd  0x30(%rsp),%xmm0
subsd  0x18(%rsp),%xmm0
divsd  (%rsp),%xmm0
call   1050 <asin@plt>
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
movsd  (%rbx),%xmm0
subsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x0(%r13)
movsd  0x30(%rsp),%xmm0
movsd  %xmm0,(%r12)
movsd  0x28(%rsp),%xmm0
movsd  %xmm0,(%r15)
movsd  (%r14),%xmm0
subsd  0x8(%rsp),%xmm0
call   1060 <cos@plt>
mulsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
subsd  %xmm0,%xmm1
jmp    1816 <lash_getContainedAngle+0x6d6>
ucomisd %xmm0,%xmm7
jbe    16a8 <lash_getContainedAngle+0x568>
subsd  %xmm7,%xmm1
divsd  %xmm2,%xmm1
movapd %xmm1,%xmm0
movsd  %xmm5,0x10(%rsp)
movapd %xmm7,0x30(%rsp)
call   1030 <acos@plt>
mov    0x2b14(%rip),%rax
mov    (%rax),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
addsd  %xmm0,%xmm1
lea    (%rax,%rax,4),%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  %xmm1,(%rbx)
subsd  %xmm0,%xmm2
movsd  %xmm2,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm0
movsd  0x10(%rsp),%xmm2
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x0(%r13)
movapd 0x30(%rsp),%xmm1
movsd  %xmm1,(%r12)
addsd  %xmm2,%xmm0
movsd  %xmm0,(%r15)
jmp    1816 <lash_getContainedAngle+0x6d6>
movapd %xmm1,%xmm0
xorps  %xmm7,%xmm7
cvtsi2sd %edx,%xmm7
addsd  %xmm2,%xmm0
subsd  %xmm7,%xmm4
ucomisd %xmm4,%xmm0
jbe    175f <lash_getContainedAngle+0x61f>
movsd  %xmm3,0x48(%rsp)
mov    0x2a86(%rip),%rax
xorps  %xmm0,%xmm0
cvtsi2sdl (%rax),%xmm0
movsd  %xmm0,0x8(%rsp)
subsd  %xmm5,%xmm6
divsd  %xmm2,%xmm6
movapd %xmm6,%xmm0
movsd  %xmm5,0x10(%rsp)
movsd  %xmm9,0x28(%rsp)
movsd  %xmm4,0x30(%rsp)
call   1030 <acos@plt>
movsd  %xmm0,(%rbx)
movsd  0x30(%rsp),%xmm0
subsd  0x18(%rsp),%xmm0
divsd  (%rsp),%xmm0
call   1050 <asin@plt>
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
movsd  0x48(%rsp),%xmm0
subsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x0(%r13)
movsd  (%rbx),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r12)
movsd  (%r14),%xmm0
subsd  0x8(%rsp),%xmm0
call   1060 <cos@plt>
mulsd  (%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r15)
movsd  0x30(%rsp),%xmm1
jmp    1816 <lash_getContainedAngle+0x6d6>
subsd  %xmm9,%xmm5
divsd  %xmm2,%xmm5
movapd %xmm5,%xmm0
call   1030 <acos@plt>
mov    0x29b0(%rip),%rax
mov    (%rax),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
addsd  %xmm0,%xmm1
lea    (%rax,%rax,2),%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  %xmm1,(%rbx)
subsd  %xmm0,%xmm2
movsd  %xmm2,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0x28(%rsp),%xmm3
movsd  %xmm3,0x0(%r13)
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm0,%xmm1
movsd  0x18(%rsp),%xmm2
addsd  %xmm2,%xmm1
movsd  %xmm1,(%r12)
movsd  %xmm3,(%r15)
subsd  %xmm0,%xmm2
movapd %xmm2,%xmm1
jmp    1816 <lash_getContainedAngle+0x6d6>
movapd %xmm1,%xmm7
xorps  %xmm3,%xmm3
cvtsi2sd %edx,%xmm3
addsd  %xmm2,%xmm7
movapd %xmm4,%xmm6
subsd  %xmm3,%xmm6
ucomisd %xmm6,%xmm7
jbe    17de <lash_getContainedAngle+0x69e>
movapd %xmm6,%xmm0
subsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm5,0x10(%rsp)
movapd %xmm6,0x30(%rsp)
call   1030 <acos@plt>
mov    0x28f3(%rip),%rax
mov    (%rax),%eax
lea    (%rax,%rax,2),%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
addsd  %xmm0,%xmm1
lea    0x0(,%rax,8),%ecx
sub    %eax,%ecx
cvtsi2sd %ecx,%xmm2
movsd  %xmm1,(%rbx)
subsd  %xmm0,%xmm2
movsd  %xmm2,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm0,%xmm1
movsd  0x10(%rsp),%xmm2
addsd  %xmm2,%xmm1
movsd  %xmm1,0x0(%r13)
movapd 0x30(%rsp),%xmm1
movsd  %xmm1,(%r12)
subsd  %xmm0,%xmm2
movsd  %xmm2,(%r15)
jmp    1816 <lash_getContainedAngle+0x6d6>
movapd %xmm6,%xmm0
subsd  %xmm5,%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm6,0x8(%rsp)
call   1030 <acos@plt>
movsd  %xmm0,(%rbx)
mov    0x2867(%rip),%rax
mov    (%rax),%eax
add    %eax,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
movsd  (%rbx),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0x8(%rsp),%xmm3
movsd  %xmm3,0x0(%r13)
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm1
movsd  0x18(%rsp),%xmm2
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r12)
movsd  %xmm3,(%r15)
addsd  %xmm2,%xmm1
jmp    1816 <lash_getContainedAngle+0x6d6>
movq   $0x0,(%rbx)
mov    0x27fc(%rip),%rax
mov    (%rax),%eax
add    %eax,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  %xmm2,(%r14)
test   %ebp,%ebp
je     1822 <lash_getContainedAngle+0x6e2>
subsd  %xmm8,%xmm4
movsd  %xmm4,0x0(%r13)
movsd  %xmm1,(%r12)
movsd  %xmm4,(%r15)
mov    0xb0(%rsp),%rax
movsd  %xmm1,(%rax)
xor    %eax,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@M_PI = global i32 0
@M_PI_2 = global i32 0
define i32 @lash_getContainedAngle(double %0, double %1, double %2, double %3, double %4, i32 %5, i32 %6, i32 %7, i32 %8, double* %9, double* %10, i32 %11, double* %12, double* %13, double* %14, double* %15) {
%17 = alloca i32
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca double*
%28 = alloca double*
%29 = alloca i32
%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 i32
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca i32
%44 = alloca double
%45 = alloca i32
%46 = alloca double
%47 = alloca i32
store double %0, double* %18
store double %1, double* %19
store double %2, double* %20
store double %3, double* %21
store double %4, double* %22
store i32 %5, i32* %23
store i32 %6, i32* %24
store i32 %7, i32* %25
store i32 %8, i32* %26
store double* %9, double** %27
store double* %10, double** %28
store i32 %11, i32* %29
store double* %12, double** %30
store double* %13, double** %31
store double* %14, double** %32
store double* %15, double** %33
%48 = load double, double* %18
%49 = load double, double* %20
%50 = fsub double %48, %49
%51 = load i32, i32* %26
%52 = sitofp i32 %51 to double
%53 = fcmp olt double %50, %52
br i1 %53, label %54, label %228
54: ; preds = %16
%55 = load double, double* %19
%56 = load double, double* %20
%57 = fsub double %55, %56
%58 = load i32, i32* %23
%59 = sitofp i32 %58 to double
%60 = fcmp olt double %57, %59
br i1 %60, label %61, label %115
61: ; preds = %54
%62 = load i32, i32* @M_PI
%63 = sitofp i32 %62 to double
store double %63, double* %34
%64 = load i32, i32* @M_PI
%65 = mul nsw i32 2, %64
%66 = sitofp i32 %65 to double
store double %66, double* %35
%67 = load double, double* %34
%68 = load double, double* %18
%69 = load i32, i32* %26
%70 = sitofp i32 %69 to double
%71 = fsub double %68, %70
%72 = load double, double* %20
%73 = fdiv double %71, %72
%74 = call double @acos(double %73)
%75 = fadd double %67, %74
%76 = load double*, double** %27
store double %75, double* %76
%77 = load double, double* %35
%78 = load double, double* %19
%79 = load i32, i32* %23
%80 = sitofp i32 %79 to double
%81 = fsub double %78, %80
%82 = load double, double* %20
%83 = fdiv double %81, %82
%84 = call double @asin(double %83)
%85 = fadd double %77, %84
%86 = load double*, double** %28
store double %85, double* %86
%87 = load i32, i32* %29
%88 = icmp ne i32 %87, 0
br i1 %88, label %89, label %114
89: ; preds = %61
%90 = load i32, i32* %26
%91 = sitofp i32 %90 to double
%92 = load double*, double** %30
store double %91, double* %92
%93 = load double, double* %19
%94 = load double*, double** %27
%95 = load double, double* %94
%96 = load double, double* %34
%97 = fsub double %95, %96
%98 = call double @sin(double %97)
%99 = load double, double* %20
%100 = call double @llvm.fmuladd.f64(double %98, double %99, double %93)
%101 = load double*, double** %31
store double %100, double* %101
%102 = load double, double* %18
%103 = load double*, double** %28
%104 = load double, double* %103
%105 = load double, double* %35
%106 = fsub double %104, %105
%107 = call double @cos(double %106)
%108 = load double, double* %20
%109 = call double @llvm.fmuladd.f64(double %107, double %108, double %102)
%110 = load double*, double** %32
store double %109, double* %110
%111 = load i32, i32* %23
%112 = sitofp i32 %111 to double
%113 = load double*, double** %33
store double %112, double* %113
br label %114
114: ; preds = %89, %61
store i32 0, i32* %17
br label %555
115: ; preds = %54
%116 = load double, double* %19
%117 = load double, double* %20
%118 = fadd double %116, %117
%119 = load double, double* %22
%120 = load i32, i32* %25
%121 = sitofp i32 %120 to double
%122 = fsub double %119, %121
%123 = fcmp ogt double %118, %122
br i1 %123, label %124, label %184
124: ; preds = %115
%125 = load i32, i32* @M_PI_2
%126 = mul nsw i32 3, %125
%127 = sitofp i32 %126 to double
store double %127, double* %36
%128 = load i32, i32* @M_PI_2
%129 = mul nsw i32 5, %128
%130 = sitofp i32 %129 to double
store double %130, double* %37
%131 = load double, double* %36
%132 = load double, double* %18
%133 = load i32, i32* %26
%134 = sitofp i32 %133 to double
%135 = fsub double %132, %134
%136 = load double, double* %20
%137 = fdiv double %135, %136
%138 = call double @acos(double %137)
%139 = fadd double %131, %138
%140 = load double*, double** %27
store double %139, double* %140
%141 = load double, double* %37
%142 = load double, double* %22
%143 = load i32, i32* %25
%144 = sitofp i32 %143 to double
%145 = fsub double %142, %144
%146 = load double, double* %19
%147 = fsub double %145, %146
%148 = load double, double* %20
%149 = fdiv double %147, %148
%150 = call double @asin(double %149)
%151 = fadd double %141, %150
%152 = load double*, double** %28
store double %151, double* %152
%153 = load i32, i32* %29
%154 = icmp ne i32 %153, 0
br i1 %154, label %155, label %183
155: ; preds = %124
%156 = load double, double* %18
%157 = load double*, double** %27
%158 = load double, double* %157
%159 = load double, double* %36
%160 = fsub double %158, %159
%161 = call double @sin(double %160)
%162 = load double, double* %20
%163 = call double @llvm.fmuladd.f64(double %161, double %162, double %156)
%164 = load double*, double** %30
store double %163, double* %164
%165 = load double, double* %22
%166 = load i32, i32* %25
%167 = sitofp i32 %166 to double
%168 = fsub double %165, %167
%169 = load double*, double** %31
store double %168, double* %169
%170 = load i32, i32* %26
%171 = sitofp i32 %170 to double
%172 = load double*, double** %32
store double %171, double* %172
%173 = load double, double* %19
%174 = load double*, double** %28
%175 = load double, double* %174
%176 = load double, double* %37
%177 = fsub double %175, %176
%178 = call double @cos(double %177)
%179 = load double, double* %20
%180 = fneg double %178
%181 = call double @llvm.fmuladd.f64(double %180, double %179, double %173)
%182 = load double*, double** %33
store double %181, double* %182
br label %183
183: ; preds = %155, %124
store i32 0, i32* %17
br label %555
184: ; preds = %115
%185 = load double, double* %18
%186 = load i32, i32* %26
%187 = sitofp i32 %186 to double
%188 = fsub double %185, %187
%189 = load double, double* %20
%190 = fdiv double %188, %189
%191 = call double @acos(double %190)
store double %191, double* %38
%192 = load i32, i32* @M_PI
%193 = sitofp i32 %192 to double
%194 = load double, double* %38
%195 = fadd double %193, %194
%196 = load double*, double** %27
store double %195, double* %196
%197 = load i32, i32* @M_PI
%198 = mul nsw i32 3, %197
%199 = sitofp i32 %198 to double
%200 = load double, double* %38
%201 = fsub double %199, %200
%202 = load double*, double** %28
store double %201, double* %202
%203 = load i32, i32* %29
%204 = icmp ne i32 %203, 0
br i1 %204, label %205, label %227
205: ; preds = %184
%206 = load double, double* %38
%207 = call double @sin(double %206)
%208 = load double, double* %20
%209 = fmul double %207, %208
%210 = fptosi double %209 to i32
store i32 %210, i32* %39
%211 = load i32, i32* %26
%212 = sitofp i32 %211 to double
%213 = load double*, double** %30
store double %212, double* %213
%214 = load double, double* %19
%215 = load i32, i32* %39
%216 = sitofp i32 %215 to double
%217 = fadd double %214, %216
%218 = load double*, double** %31
store double %217, double* %218
%219 = load i32, i32* %26
%220 = sitofp i32 %219 to double
%221 = load double*, double** %32
store double %220, double* %221
%222 = load double, double* %19
%223 = load i32, i32* %39
%224 = sitofp i32 %223 to double
%225 = fsub double %222, %224
%226 = load double*, double** %33
store double %225, double* %226
br label %227
227: ; preds = %205, %184
store i32 0, i32* %17
br label %555
228: ; preds = %16
%229 = load double, double* %18
%230 = load double, double* %20
%231 = fadd double %229, %230
%232 = load double, double* %21
%233 = load i32, i32* %24
%234 = sitofp i32 %233 to double
%235 = fsub double %232, %234
%236 = fcmp ogt double %231, %235
br i1 %236, label %237, label %417
237: ; preds = %228
%238 = load double, double* %19
%239 = load double, double* %20
%240 = fsub double %238, %239
%241 = load i32, i32* %23
%242 = sitofp i32 %241 to double
%243 = fcmp olt double %240, %242
br i1 %243, label %244, label %303
244: ; preds = %237
%245 = load i32, i32* @M_PI_2
%246 = sitofp i32 %245 to double
store double %246, double* %40
%247 = load i32, i32* @M_PI_2
%248 = mul nsw i32 3, %247
%249 = sitofp i32 %248 to double
store double %249, double* %41
%250 = load double, double* %40
%251 = load double, double* %19
%252 = load i32, i32* %23
%253 = sitofp i32 %252 to double
%254 = fsub double %251, %253
%255 = load double, double* %20
%256 = fdiv double %254, %255
%257 = call double @acos(double %256)
%258 = fadd double %250, %257
%259 = load double*, double** %27
store double %258, double* %259
%260 = load double, double* %41
%261 = load double, double* %21
%262 = load i32, i32* %24
%263 = sitofp i32 %262 to double
%264 = fsub double %261, %263
%265 = load double, double* %18
%266 = fsub double %264, %265
%267 = load double, double* %20
%268 = fdiv double %266, %267
%269 = call double @asin(double %268)
%270 = fadd double %260, %269
%271 = load double*, double** %28
store double %270, double* %271
%272 = load i32, i32* %29
%273 = icmp ne i32 %272, 0
br i1 %273, label %274, label %302
274: ; preds = %244
%275 = load double, double* %18
%276 = load double*, double** %27
%277 = load double, double* %276
%278 = load double, double* %40
%279 = fsub double %277, %278
%280 = call double @sin(double %279)
%281 = load double, double* %20
%282 = fneg double %280
%283 = call double @llvm.fmuladd.f64(double %282, double %281, double %275)
%284 = load double*, double** %30
store double %283, double* %284
%285 = load i32, i32* %23
%286 = sitofp i32 %285 to double
%287 = load double*, double** %31
store double %286, double* %287
%288 = load double, double* %21
%289 = load i32, i32* %26
%290 = sitofp i32 %289 to double
%291 = fsub double %288, %290
%292 = load double*, double** %32
store double %291, double* %292
%293 = load double, double* %19
%294 = load double*, double** %28
%295 = load double, double* %294
%296 = load double, double* %41
%297 = fsub double %295, %296
%298 = call double @cos(double %297)
%299 = load double, double* %20
%300 = call double @llvm.fmuladd.f64(double %298, double %299, double %293)
%301 = load double*, double** %33
store double %300, double* %301
br label %302
302: ; preds = %274, %244
store i32 0, i32* %17
br label %555
303: ; preds = %237
%304 = load double, double* %19
%305 = load double, double* %20
%306 = fadd double %304, %305
%307 = load double, double* %22
%308 = load i32, i32* %25
%309 = sitofp i32 %308 to double
%310 = fsub double %307, %309
%311 = fcmp ogt double %306, %310
br i1 %311, label %312, label %369
312: ; preds = %303
%313 = load i32, i32* @M_PI
%314 = sitofp i32 %313 to double
store double %314, double* %42
%315 = load double, double* %21
%316 = load i32, i32* %24
%317 = sitofp i32 %316 to double
%318 = fsub double %315, %317
%319 = load double, double* %18
%320 = fsub double %318, %319
%321 = load double, double* %20
%322 = fdiv double %320, %321
%323 = call double @acos(double %322)
%324 = load double*, double** %27
store double %323, double* %324
%325 = load double, double* %42
%326 = load double, double* %22
%327 = load i32, i32* %25
%328 = sitofp i32 %327 to double
%329 = fsub double %326, %328
%330 = load double, double* %19
%331 = fsub double %329, %330
%332 = load double, double* %20
%333 = fdiv double %331, %332
%334 = call double @asin(double %333)
%335 = fadd double %325, %334
%336 = load double*, double** %28
store double %335, double* %336
%337 = load i32, i32* %29
%338 = icmp ne i32 %337, 0
br i1 %338, label %339, label %368
339: ; preds = %312
%340 = load double, double* %21
%341 = load i32, i32* %26
%342 = sitofp i32 %341 to double
%343 = fsub double %340, %342
%344 = load double*, double** %30
store double %343, double* %344
%345 = load double, double* %19
%346 = load double*, double** %27
%347 = load double, double* %346
%348 = call double @sin(double %347)
%349 = load double, double* %20
%350 = fneg double %348
%351 = call double @llvm.fmuladd.f64(double %350, double %349, double %345)
%352 = load double*, double** %31
store double %351, double* %352
%353 = load double, double* %18
%354 = load double*, double** %28
%355 = load double, double* %354
%356 = load double, double* %42
%357 = fsub double %355, %356
%358 = call double @cos(double %357)
%359 = load double, double* %20
%360 = fneg double %358
%361 = call double @llvm.fmuladd.f64(double %360, double %359, double %353)
%362 = load double*, double** %32
store double %361, double* %362
%363 = load double, double* %22
%364 = load i32, i32* %25
%365 = sitofp i32 %364 to double
%366 = fsub double %363, %365
%367 = load double*, double** %33
store double %366, double* %367
br label %368
368: ; preds = %339, %312
store i32 0, i32* %17
br label %555
369: ; preds = %303
%370 = load double, double* %21
%371 = load i32, i32* %24
%372 = sitofp i32 %371 to double
%373 = fsub double %370, %372
%374 = load double, double* %18
%375 = fsub double %373, %374
%376 = load double, double* %20
%377 = fdiv double %375, %376
%378 = call double @acos(double %377)
%379 = load double*, double** %27
store double %378, double* %379
%380 = load i32, i32* @M_PI
%381 = mul nsw i32 2, %380
%382 = sitofp i32 %381 to double
%383 = load double*, double** %27
%384 = load double, double* %383
%385 = fsub double %382, %384
%386 = load double*, double** %28
store double %385, double* %386
%387 = load i32, i32* %29
%388 = icmp ne i32 %387, 0
br i1 %388, label %389, label %416
389: ; preds = %369
%390 = load double*, double** %27
%391 = load double, double* %390
%392 = call double @sin(double %391)
%393 = load double, double* %20
%394 = fmul double %392, %393
%395 = fptosi double %394 to i32
store i32 %395, i32* %43
%396 = load double, double* %21
%397 = load i32, i32* %24
%398 = sitofp i32 %397 to double
%399 = fsub double %396, %398
%400 = load double*, double** %30
store double %399, double* %400
%401 = load double, double* %19
%402 = load i32, i32* %43
%403 = sitofp i32 %402 to double
%404 = fsub double %401, %403
%405 = load double*, double** %31
store double %404, double* %405
%406 = load double, double* %21
%407 = load i32, i32* %24
%408 = sitofp i32 %407 to double
%409 = fsub double %406, %408
%410 = load double*, double** %32
store double %409, double* %410
%411 = load double, double* %19
%412 = load i32, i32* %43
%413 = sitofp i32 %412 to double
%414 = fadd double %411, %413
%415 = load double*, double** %33
store double %414, double* %415
br label %416
416: ; preds = %389, %369
store i32 0, i32* %17
br label %555
417: ; preds = %228
%418 = load double, double* %19
%419 = load double, double* %20
%420 = fsub double %418, %419
%421 = load i32, i32* %23
%422 = sitofp i32 %421 to double
%423 = fcmp olt double %420, %422
br i1 %423, label %424, label %468
424: ; preds = %417
%425 = load double, double* %19
%426 = load i32, i32* %23
%427 = sitofp i32 %426 to double
%428 = fsub double %425, %427
%429 = load double, double* %20
%430 = fdiv double %428, %429
%431 = call double @acos(double %430)
store double %431, double* %44
%432 = load i32, i32* @M_PI_2
%433 = sitofp i32 %432 to double
%434 = load double, double* %44
%435 = fadd double %433, %434
%436 = load double*, double** %27
store double %435, double* %436
%437 = load i32, i32* @M_PI_2
%438 = mul nsw i32 5, %437
%439 = sitofp i32 %438 to double
%440 = load double, double* %44
%441 = fsub double %439, %440
%442 = load double*, double** %28
store double %441, double* %442
%443 = load i32, i32* %29
%444 = icmp ne i32 %443, 0
br i1 %444, label %445, label %467
445: ; preds = %424
%446 = load double, double* %44
%447 = call double @sin(double %446)
%448 = load double, double* %20
%449 = fmul double %447, %448
%450 = fptosi double %449 to i32
store i32 %450, i32* %45
%451 = load double, double* %18
%452 = load i32, i32* %45
%453 = sitofp i32 %452 to double
%454 = fsub double %451, %453
%455 = load double*, double** %30
store double %454, double* %455
%456 = load i32, i32* %23
%457 = sitofp i32 %456 to double
%458 = load double*, double** %31
store double %457, double* %458
%459 = load double, double* %18
%460 = load i32, i32* %45
%461 = sitofp i32 %460 to double
%462 = fadd double %459, %461
%463 = load double*, double** %32
store double %462, double* %463
%464 = load i32, i32* %23
%465 = sitofp i32 %464 to double
%466 = load double*, double** %33
store double %465, double* %466
br label %467
467: ; preds = %445, %424
store i32 0, i32* %17
br label %555
468: ; preds = %417
%469 = load double, double* %19
%470 = load double, double* %20
%471 = fadd double %469, %470
%472 = load double, double* %22
%473 = load i32, i32* %25
%474 = sitofp i32 %473 to double
%475 = fsub double %472, %474
%476 = fcmp ogt double %471, %475
br i1 %476, label %477, label %528
477: ; preds = %468
%478 = load double, double* %22
%479 = load i32, i32* %25
%480 = sitofp i32 %479 to double
%481 = fsub double %478, %480
%482 = load double, double* %19
%483 = fsub double %481, %482
%484 = load double, double* %20
%485 = fdiv double %483, %484
%486 = call double @acos(double %485)
store double %486, double* %46
%487 = load i32, i32* @M_PI_2
%488 = mul nsw i32 3, %487
%489 = sitofp i32 %488 to double
%490 = load double, double* %46
%491 = fadd double %489, %490
%492 = load double*, double** %27
store double %491, double* %492
%493 = load i32, i32* @M_PI_2
%494 = mul nsw i32 7, %493
%495 = sitofp i32 %494 to double
%496 = load double, double* %46
%497 = fsub double %495, %496
%498 = load double*, double** %28
store double %497, double* %498
%499 = load i32, i32* %29
%500 = icmp ne i32 %499, 0
br i1 %500, label %501, label %527
501: ; preds = %477
%502 = load double, double* %46
%503 = call double @sin(double %502)
%504 = load double, double* %20
%505 = fmul double %503, %504
%506 = fptosi double %505 to i32
store i32 %506, i32* %47
%507 = load double, double* %18
%508 = load i32, i32* %47
%509 = sitofp i32 %508 to double
%510 = fadd double %507, %509
%511 = load double*, double** %30
store double %510, double* %511
%512 = load double, double* %22
%513 = load i32, i32* %25
%514 = sitofp i32 %513 to double
%515 = fsub double %512, %514
%516 = load double*, double** %31
store double %515, double* %516
%517 = load double, double* %18
%518 = load i32, i32* %47
%519 = sitofp i32 %518 to double
%520 = fsub double %517, %519
%521 = load double*, double** %32
store double %520, double* %521
%522 = load double, double* %22
%523 = load i32, i32* %25
%524 = sitofp i32 %523 to double
%525 = fsub double %522, %524
%526 = load double*, double** %33
store double %525, double* %526
br label %527
527: ; preds = %501, %477
store i32 0, i32* %17
br label %555
528: ; preds = %468
br label %529
529: ; preds = %528
br label %530
530: ; preds = %529
br label %531
531: ; preds = %530
%532 = load double*, double** %27
store double 0.000000e+00, double* %532
%533 = load i32, i32* @M_PI
%534 = mul nsw i32 2, %533
%535 = sitofp i32 %534 to double
%536 = load double*, double** %28
store double %535, double* %536
%537 = load i32, i32* %29
%538 = icmp ne i32 %537, 0
br i1 %538, label %539, label %554
539: ; preds = %531
%540 = load double, double* %22
%541 = load i32, i32* %24
%542 = sitofp i32 %541 to double
%543 = fsub double %540, %542
%544 = load double*, double** %30
store double %543, double* %544
%545 = load double, double* %19
%546 = load double*, double** %31
store double %545, double* %546
%547 = load double, double* %22
%548 = load i32, i32* %24
%549 = sitofp i32 %548 to double
%550 = fsub double %547, %549
%551 = load double*, double** %32
store double %550, double* %551
%552 = load double, double* %19
%553 = load double*, double** %33
store double %552, double* %553
br label %554
554: ; preds = %539, %531
store i32 0, i32* %17
br label %555
555: ; preds = %554, %527, %467, %416, %368, %302, %227, %183, %114
%556 = load i32, i32* %17
ret i32 %556
}

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