#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 atan(float);
float sqrt(float);
void CalcAngle(float playerpos_x, float playerpos_y, float playerpos_z,
               float enemypos_x, float enemypos_y, float enemypos_z,
               float *angle_lr, float *angle_ud) {
  if (enemypos_x > playerpos_x && enemypos_y > playerpos_y) {
    *angle_lr = 360 + 57.2957795 * -atan(((enemypos_y - playerpos_y) /
                                          (enemypos_x - playerpos_x)));
  }
  if (enemypos_x < playerpos_x && enemypos_y > playerpos_y) {
    *angle_lr = 180 + 57.2957795 * atan(((enemypos_y - playerpos_y) /
                                         (playerpos_x - enemypos_x)));
  }
  if (enemypos_x < playerpos_x && enemypos_y < playerpos_y) {
    *angle_lr = 180 - 57.2957795 * atan(((playerpos_y - enemypos_y) /
                                         (playerpos_x - enemypos_x)));
  }
  if (enemypos_x > playerpos_x && enemypos_y < playerpos_y) {
    *angle_lr = 57.2957795 *
                atan(((playerpos_y - enemypos_y) / (enemypos_x - playerpos_x)));
  }
  if (enemypos_x > playerpos_x && enemypos_y > playerpos_y &&
      enemypos_z > playerpos_z) {
    *angle_ud =
        57.2957795 *
        atan(((enemypos_z - playerpos_z) /
              sqrt((enemypos_x - playerpos_x) * (enemypos_x - playerpos_x) +
                   (enemypos_y - playerpos_y) * (enemypos_y - playerpos_y))));
  }
  if (enemypos_x < playerpos_x && enemypos_y < playerpos_y &&
      enemypos_z > playerpos_z) {
    *angle_ud =
        57.2957795 *
        atan(((enemypos_z - playerpos_z) /
              sqrt((playerpos_x - enemypos_x) * (playerpos_x - enemypos_x) +
                   (playerpos_y - enemypos_y) * (playerpos_y - enemypos_y))));
  }
  if (enemypos_x < playerpos_x && enemypos_y < playerpos_y &&
      enemypos_z < playerpos_z) {
    *angle_ud =
        -57.2957795 *
        atan(((playerpos_z - enemypos_z) /
              sqrt((playerpos_x - enemypos_x) * (playerpos_x - enemypos_x) +
                   (playerpos_y - enemypos_y) * (playerpos_y - enemypos_y))));
  }
  if (enemypos_x > playerpos_x && enemypos_y > playerpos_y &&
      enemypos_z < playerpos_z) {
    *angle_ud =
        -57.2957795 *
        atan(((playerpos_z - enemypos_z) /
              sqrt((enemypos_x - playerpos_x) * (enemypos_x - playerpos_x) +
                   (enemypos_y - playerpos_y) * (enemypos_y - playerpos_y))));
  }
  if (enemypos_x > playerpos_x && enemypos_y < playerpos_y &&
      enemypos_z > playerpos_z) {
    *angle_ud =
        57.2957795 *
        atan(((enemypos_z - playerpos_z) /
              sqrt((enemypos_x - playerpos_x) * (enemypos_x - playerpos_x) +
                   (playerpos_y - enemypos_y) * (playerpos_y - enemypos_y))));
  }
  if (enemypos_x < playerpos_x && enemypos_y > playerpos_y &&
      enemypos_z > playerpos_z) {
    *angle_ud =
        57.2957795 *
        atan(((enemypos_z - playerpos_z) /
              sqrt((playerpos_x - enemypos_x) * (playerpos_x - enemypos_x) +
                   (enemypos_y - playerpos_y) * (enemypos_y - playerpos_y))));
  }
  if (enemypos_x > playerpos_x && enemypos_y < playerpos_y &&
      enemypos_z < playerpos_z) {
    *angle_ud =
        57.2957795 *
        atan(((enemypos_z - playerpos_z) /
              sqrt((enemypos_x - playerpos_x) * (enemypos_x - playerpos_x) +
                   (playerpos_y - enemypos_y) * (playerpos_y - enemypos_y))));
  }
  if (enemypos_x < playerpos_x && enemypos_y > playerpos_y &&
      enemypos_z < playerpos_z) {
    *angle_ud =
        57.2957795 *
        atan(((enemypos_z - playerpos_z) /
              sqrt((playerpos_x - enemypos_x) * (playerpos_x - enemypos_x) +
                   (enemypos_y - playerpos_y) * (enemypos_y - playerpos_y))));
  }
}


x86 assembly (clang, -O0):
<CalcAngle>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
movss  %xmm4,-0x14(%rbp)
movss  %xmm5,-0x18(%rbp)
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
movss  -0x10(%rbp),%xmm0
ucomiss -0x4(%rbp),%xmm0
jbe    11c4 <CalcAngle+0xa4>
movss  -0x14(%rbp),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    11c4 <CalcAngle+0xa4>
movss  -0x14(%rbp),%xmm0
subss  -0x8(%rbp),%xmm0
movss  -0x10(%rbp),%xmm1
subss  -0x4(%rbp),%xmm1
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xe58(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe54(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm1
movss  -0x4(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1227 <CalcAngle+0x107>
movss  -0x14(%rbp),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    1227 <CalcAngle+0x107>
movss  -0x14(%rbp),%xmm0
subss  -0x8(%rbp),%xmm0
movss  -0x4(%rbp),%xmm1
subss  -0x10(%rbp),%xmm1
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movsd  0xdf5(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf9(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm1
movss  -0x4(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    128e <CalcAngle+0x16e>
movss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    128e <CalcAngle+0x16e>
movss  -0x8(%rbp),%xmm0
subss  -0x14(%rbp),%xmm0
movss  -0x4(%rbp),%xmm1
subss  -0x10(%rbp),%xmm1
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movsd  0xda6(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd92(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm0
ucomiss -0x4(%rbp),%xmm0
jbe    12e8 <CalcAngle+0x1c8>
movss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    12e8 <CalcAngle+0x1c8>
movss  -0x8(%rbp),%xmm0
subss  -0x14(%rbp),%xmm0
movss  -0x10(%rbp),%xmm1
subss  -0x4(%rbp),%xmm1
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xd28(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm0
ucomiss -0x4(%rbp),%xmm0
jbe    1389 <CalcAngle+0x269>
movss  -0x14(%rbp),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    1389 <CalcAngle+0x269>
movss  -0x18(%rbp),%xmm0
ucomiss -0xc(%rbp),%xmm0
jbe    1389 <CalcAngle+0x269>
movss  -0x18(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0x4(%rbp),%xmm0
movss  -0x10(%rbp),%xmm2
subss  -0x4(%rbp),%xmm2
movss  -0x14(%rbp),%xmm1
subss  -0x8(%rbp),%xmm1
movss  -0x14(%rbp),%xmm3
subss  -0x8(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xc87(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm1
movss  -0x4(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1432 <CalcAngle+0x312>
movss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1432 <CalcAngle+0x312>
movss  -0x18(%rbp),%xmm0
ucomiss -0xc(%rbp),%xmm0
jbe    1432 <CalcAngle+0x312>
movss  -0x18(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0x10(%rbp),%xmm0
movss  -0x4(%rbp),%xmm2
subss  -0x10(%rbp),%xmm2
movss  -0x8(%rbp),%xmm1
subss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm3
subss  -0x14(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x30(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xbde(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm1
movss  -0x4(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    14df <CalcAngle+0x3bf>
movss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    14df <CalcAngle+0x3bf>
movss  -0x18(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    14df <CalcAngle+0x3bf>
movss  -0xc(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0x10(%rbp),%xmm0
movss  -0x4(%rbp),%xmm2
subss  -0x10(%rbp),%xmm2
movss  -0x8(%rbp),%xmm1
subss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm3
subss  -0x14(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xb49(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm0
ucomiss -0x4(%rbp),%xmm0
jbe    1584 <CalcAngle+0x464>
movss  -0x14(%rbp),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    1584 <CalcAngle+0x464>
movss  -0x18(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1584 <CalcAngle+0x464>
movss  -0xc(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0x4(%rbp),%xmm0
movss  -0x10(%rbp),%xmm2
subss  -0x4(%rbp),%xmm2
movss  -0x14(%rbp),%xmm1
subss  -0x8(%rbp),%xmm1
movss  -0x14(%rbp),%xmm3
subss  -0x8(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x38(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xaa4(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm0
ucomiss -0x4(%rbp),%xmm0
jbe    1629 <CalcAngle+0x509>
movss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1629 <CalcAngle+0x509>
movss  -0x18(%rbp),%xmm0
ucomiss -0xc(%rbp),%xmm0
jbe    1629 <CalcAngle+0x509>
movss  -0x18(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0x4(%rbp),%xmm0
movss  -0x10(%rbp),%xmm2
subss  -0x4(%rbp),%xmm2
movss  -0x8(%rbp),%xmm1
subss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm3
subss  -0x14(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x3c(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0x9e7(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm1
movss  -0x4(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    16ce <CalcAngle+0x5ae>
movss  -0x14(%rbp),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    16ce <CalcAngle+0x5ae>
movss  -0x18(%rbp),%xmm0
ucomiss -0xc(%rbp),%xmm0
jbe    16ce <CalcAngle+0x5ae>
movss  -0x18(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0x10(%rbp),%xmm0
movss  -0x4(%rbp),%xmm2
subss  -0x10(%rbp),%xmm2
movss  -0x14(%rbp),%xmm1
subss  -0x8(%rbp),%xmm1
movss  -0x14(%rbp),%xmm3
subss  -0x8(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x40(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0x942(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm0
ucomiss -0x4(%rbp),%xmm0
jbe    1777 <CalcAngle+0x657>
movss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1777 <CalcAngle+0x657>
movss  -0x18(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1777 <CalcAngle+0x657>
movss  -0x18(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0x4(%rbp),%xmm0
movss  -0x10(%rbp),%xmm2
subss  -0x4(%rbp),%xmm2
movss  -0x8(%rbp),%xmm1
subss  -0x14(%rbp),%xmm1
movss  -0x8(%rbp),%xmm3
subss  -0x14(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x44(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0x899(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm1
movss  -0x4(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1820 <CalcAngle+0x700>
movss  -0x14(%rbp),%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    1820 <CalcAngle+0x700>
movss  -0x18(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1820 <CalcAngle+0x700>
movss  -0x18(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0x10(%rbp),%xmm0
movss  -0x4(%rbp),%xmm2
subss  -0x10(%rbp),%xmm2
movss  -0x14(%rbp),%xmm1
subss  -0x8(%rbp),%xmm1
movss  -0x14(%rbp),%xmm3
subss  -0x8(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x48(%rbp),%xmm0
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0x7f0(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CalcAngle>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rsi,%r14
mov    %rdi,%rbp
movss  %xmm5,0x20(%rsp)
movss  %xmm2,0x24(%rsp)
movaps %xmm0,%xmm2
ucomiss %xmm0,%xmm3
seta   %al
ucomiss %xmm1,%xmm4
seta   %r13b
and    %al,%r13b
cmp    $0x1,%r13b
movss  %xmm0,0x1c(%rsp)
movss  %xmm4,0x18(%rsp)
movss  %xmm1,0x14(%rsp)
movss  %xmm3,0x10(%rsp)
jne    11b9 <CalcAngle+0x99>
movaps %xmm4,%xmm0
subss  %xmm1,%xmm0
movaps %xmm3,%xmm1
subss  %xmm2,%xmm1
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm1
movss  0x18(%rsp),%xmm4
movss  0x1c(%rsp),%xmm2
mulsd  0xe58(%rip),%xmm0
addsd  0xe58(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x0(%rbp)
ucomiss %xmm1,%xmm4
seta   %al
ucomiss %xmm3,%xmm2
seta   %r15b
and    %al,%r15b
cmp    $0x1,%r15b
jne    1214 <CalcAngle+0xf4>
movaps %xmm4,%xmm0
subss  %xmm1,%xmm0
subss  %xmm3,%xmm2
divss  %xmm2,%xmm0
call   1030 <atan@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm1
movss  0x18(%rsp),%xmm4
movss  0x1c(%rsp),%xmm2
mulsd  0xe0d(%rip),%xmm0
addsd  0xe0d(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x0(%rbp)
ucomiss %xmm3,%xmm2
seta   %al
ucomiss %xmm4,%xmm1
seta   %bl
and    %al,%bl
cmp    $0x1,%bl
jne    126c <CalcAngle+0x14c>
movaps %xmm1,%xmm0
subss  %xmm4,%xmm0
subss  %xmm3,%xmm2
divss  %xmm2,%xmm0
call   1030 <atan@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm1
movss  0x18(%rsp),%xmm4
movss  0x1c(%rsp),%xmm2
mulsd  0xda5(%rip),%xmm0
addsd  0xdb5(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x0(%rbp)
ucomiss %xmm4,%xmm1
seta   %al
ucomiss %xmm2,%xmm3
seta   %r12b
and    %al,%r12b
cmp    $0x1,%r12b
jne    12c2 <CalcAngle+0x1a2>
movaps %xmm1,%xmm0
subss  %xmm4,%xmm0
movaps %xmm3,%xmm1
subss  %xmm2,%xmm1
divss  %xmm1,%xmm0
call   1030 <atan@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm1
movss  0x18(%rsp),%xmm4
movss  0x1c(%rsp),%xmm2
mulsd  0xd57(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x0(%rbp)
movss  0x20(%rsp),%xmm5
movss  0x24(%rsp),%xmm6
ucomiss %xmm6,%xmm5
setbe  %al
xor    $0x1,%r13b
or     %r13b,%al
jne    135b <CalcAngle+0x23b>
subss  %xmm6,%xmm5
movaps %xmm3,%xmm0
subss  %xmm2,%xmm0
movaps %xmm4,%xmm2
subss  %xmm1,%xmm2
mulss  %xmm2,%xmm2
mulss  %xmm0,%xmm0
addss  %xmm2,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     1309 <CalcAngle+0x1e9>
sqrtss %xmm0,%xmm0
jmp    131a <CalcAngle+0x1fa>
movss  %xmm5,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm5
divss  %xmm0,%xmm5
movaps %xmm5,%xmm0
call   1030 <atan@plt>
mulsd  0xce2(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
movss  0x20(%rsp),%xmm5
movss  0x1c(%rsp),%xmm2
movss  0x18(%rsp),%xmm4
movss  0x14(%rsp),%xmm1
movss  0x10(%rsp),%xmm3
movss  0x24(%rsp),%xmm6
ucomiss %xmm6,%xmm5
setbe  %al
xor    $0x1,%bl
or     %bl,%al
jne    13e6 <CalcAngle+0x2c6>
subss  %xmm6,%xmm5
subss  %xmm3,%xmm2
subss  %xmm4,%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm2,%xmm2
addss  %xmm1,%xmm2
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm2
jb     1391 <CalcAngle+0x271>
xorps  %xmm0,%xmm0
sqrtss %xmm2,%xmm0
jmp    13a5 <CalcAngle+0x285>
movaps %xmm2,%xmm0
movss  %xmm5,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm5
divss  %xmm0,%xmm5
movaps %xmm5,%xmm0
call   1030 <atan@plt>
mulsd  0xc57(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
movss  0x20(%rsp),%xmm5
movss  0x1c(%rsp),%xmm2
movss  0x18(%rsp),%xmm4
movss  0x14(%rsp),%xmm1
movss  0x10(%rsp),%xmm3
movss  0x24(%rsp),%xmm6
ucomiss %xmm5,%xmm6
setbe  %al
or     %al,%bl
jne    146e <CalcAngle+0x34e>
subss  %xmm5,%xmm6
subss  %xmm3,%xmm2
subss  %xmm4,%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm2,%xmm2
addss  %xmm1,%xmm2
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm2
jb     1419 <CalcAngle+0x2f9>
xorps  %xmm0,%xmm0
sqrtss %xmm2,%xmm0
jmp    142d <CalcAngle+0x30d>
movaps %xmm2,%xmm0
movss  %xmm6,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm6
divss  %xmm0,%xmm6
movaps %xmm6,%xmm0
call   1030 <atan@plt>
mulsd  0xbbf(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
movss  0x20(%rsp),%xmm5
movss  0x1c(%rsp),%xmm2
movss  0x18(%rsp),%xmm4
movss  0x14(%rsp),%xmm1
movss  0x10(%rsp),%xmm3
movss  0x24(%rsp),%xmm6
ucomiss %xmm5,%xmm6
setbe  %al
or     %al,%r13b
jne    14f7 <CalcAngle+0x3d7>
subss  %xmm5,%xmm6
movaps %xmm3,%xmm0
subss  %xmm2,%xmm0
movaps %xmm4,%xmm2
subss  %xmm1,%xmm2
mulss  %xmm2,%xmm2
mulss  %xmm0,%xmm0
addss  %xmm2,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     14a5 <CalcAngle+0x385>
sqrtss %xmm0,%xmm0
jmp    14b6 <CalcAngle+0x396>
movss  %xmm6,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm6
divss  %xmm0,%xmm6
movaps %xmm6,%xmm0
call   1030 <atan@plt>
mulsd  0xb36(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
movss  0x20(%rsp),%xmm5
movss  0x1c(%rsp),%xmm2
movss  0x18(%rsp),%xmm4
movss  0x14(%rsp),%xmm1
movss  0x10(%rsp),%xmm3
movss  0x24(%rsp),%xmm6
ucomiss %xmm6,%xmm5
setbe  %al
xor    $0x1,%r12b
or     %r12b,%al
jne    1581 <CalcAngle+0x461>
subss  %xmm6,%xmm5
movaps %xmm3,%xmm0
subss  %xmm2,%xmm0
subss  %xmm4,%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm0,%xmm0
addss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     152f <CalcAngle+0x40f>
sqrtss %xmm0,%xmm0
jmp    1540 <CalcAngle+0x420>
movss  %xmm5,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm5
divss  %xmm0,%xmm5
movaps %xmm5,%xmm0
call   1030 <atan@plt>
mulsd  0xabc(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
movss  0x20(%rsp),%xmm5
movss  0x1c(%rsp),%xmm2
movss  0x18(%rsp),%xmm4
movss  0x14(%rsp),%xmm1
movss  0x10(%rsp),%xmm3
movss  0x24(%rsp),%xmm6
ucomiss %xmm6,%xmm5
setbe  %al
xor    $0x1,%r15b
or     %r15b,%al
jne    160e <CalcAngle+0x4ee>
subss  %xmm6,%xmm5
movaps %xmm2,%xmm0
subss  %xmm3,%xmm0
movaps %xmm4,%xmm2
subss  %xmm1,%xmm2
mulss  %xmm2,%xmm2
mulss  %xmm0,%xmm0
addss  %xmm2,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     15bc <CalcAngle+0x49c>
sqrtss %xmm0,%xmm0
jmp    15cd <CalcAngle+0x4ad>
movss  %xmm5,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm5
divss  %xmm0,%xmm5
movaps %xmm5,%xmm0
call   1030 <atan@plt>
mulsd  0xa2f(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
movss  0x20(%rsp),%xmm5
movss  0x1c(%rsp),%xmm2
movss  0x18(%rsp),%xmm4
movss  0x14(%rsp),%xmm1
movss  0x10(%rsp),%xmm3
movss  0x24(%rsp),%xmm6
ucomiss %xmm5,%xmm6
setbe  %al
or     %al,%r12b
jne    1694 <CalcAngle+0x574>
subss  %xmm6,%xmm5
movaps %xmm3,%xmm0
subss  %xmm2,%xmm0
subss  %xmm4,%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm0,%xmm0
addss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     1642 <CalcAngle+0x522>
sqrtss %xmm0,%xmm0
jmp    1653 <CalcAngle+0x533>
movss  %xmm5,0xc(%rsp)
call   1040 <sqrt@plt>
movss  0xc(%rsp),%xmm5
divss  %xmm0,%xmm5
movaps %xmm5,%xmm0
call   1030 <atan@plt>
mulsd  0x9a9(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
movss  0x20(%rsp),%xmm5
movss  0x1c(%rsp),%xmm2
movss  0x18(%rsp),%xmm4
movss  0x14(%rsp),%xmm1
movss  0x10(%rsp),%xmm3
movss  0x24(%rsp),%xmm6
ucomiss %xmm5,%xmm6
setbe  %al
or     %al,%r15b
jne    16f9 <CalcAngle+0x5d9>
subss  %xmm6,%xmm5
subss  %xmm3,%xmm2
subss  %xmm1,%xmm4
mulss  %xmm4,%xmm4
mulss  %xmm2,%xmm2
addss  %xmm4,%xmm2
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm2
jb     16c8 <CalcAngle+0x5a8>
xorps  %xmm0,%xmm0
sqrtss %xmm2,%xmm0
jmp    16dc <CalcAngle+0x5bc>
movaps %xmm2,%xmm0
movss  %xmm5,0x20(%rsp)
call   1040 <sqrt@plt>
movss  0x20(%rsp),%xmm5
divss  %xmm0,%xmm5
movaps %xmm5,%xmm0
call   1030 <atan@plt>
mulsd  0x920(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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