float _atan2f(float y, float x) {
  float f, g;
  float num, den;
  float result;
  int n;
  static const float a[4] = {0, (float)(0.52359877559829887307710723054658L),
                             (float)(1.5707963267948966192313216916398L),
                             (float)(1.0471975511965977461542144610932L)};
  if (x == (float)0.0) {
    if (y == (float)0.0) {
      result = 0.0;
      return result;
    }
    result = (float)(1.5707963267948966192313216916398L);
    if (y > (float)0.0) {
      return result;
    }
    if (y < (float)0.0) {
      result = -result;
      return result;
    }
  }
  n = 0;
  num = y;
  den = x;
  if (num < (float)0.0) {
    num = -num;
  }
  if (den < (float)0.0) {
    den = -den;
  }
  if (num > den) {
    f = den;
    den = num;
    num = f;
    n = 2;
  }
  f = ((float)(num) / (float)(den));
  if (f > (float)(0.26794919243112270647255365849413L)) {
    num = ((float)((float)(0.73205080756887729352744634150587L)) * (float)(f));
    num = ((float)(num) - (float)(0.5));
    num = ((float)(num) - (float)(0.5));
    num = ((float)(num) + (float)(f));
    den = ((float)((float)(1.7320508075688772935274463415059L)) + (float)(f));
    f = ((float)(num) / (float)(den));
    n = n + 1;
  }
  g = f;
  if (g < (float)0.0) {
    g = -g;
  }
  if (g < (float)(+3.452669830012e-4F)) {
    result = f;
  } else {
    g = ((float)(f) * (float)(f));
    num = ((float)((-7.20026848898e-1F)) * (float)(g));
    num = ((float)(num) + (float)((-1.44008344874F)));
    num = ((float)(num) * (float)(g));
    den = ((float)(g) + (float)((+4.75222584599F)));
    den = ((float)(den) * (float)(g));
    den = ((float)(den) + (float)((+4.32025038919F)));
    result = ((float)(num) / (float)(den));
    result = ((float)(result) * (float)(f));
    result = ((float)(result) + (float)(f));
  }
  if (n > 1) {
    result = -result;
  }
  result = ((float)(a[n]) + (float)(result));
  if (x < (float)0.0) {
    result = ((float)((float)(3.1415926535897932384626433832795L)) -
              (float)(result));
  }
  if (y < (float)0.0) {
    result = -result;
  }
  return result;
}


x86 assembly (clang, -O0):
<_atan2f>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x8(%rbp)
movss  %xmm1,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    11b8 <_atan2f+0xb8>
jp     11b8 <_atan2f+0xb8>
movss  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1153 <_atan2f+0x53>
jp     1153 <_atan2f+0x53>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1464 <_atan2f+0x364>
movss  0xea5(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1180 <_atan2f+0x80>
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1464 <_atan2f+0x364>
xorps  %xmm0,%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    11b3 <_atan2f+0xb3>
movss  -0x20(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1464 <_atan2f+0x364>
jmp    11b8 <_atan2f+0xb8>
movl   $0x0,-0x24(%rbp)
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x18(%rbp),%xmm0
jbe    11f7 <_atan2f+0xf7>
movss  -0x18(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x18(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x1c(%rbp),%xmm0
jbe    121b <_atan2f+0x11b>
movss  -0x1c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x18(%rbp),%xmm0
ucomiss -0x1c(%rbp),%xmm0
jbe    124f <_atan2f+0x14f>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movl   $0x2,-0x24(%rbp)
movss  -0x18(%rbp),%xmm0
divss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x10(%rbp),%xmm0
movss  0xd99(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    12eb <_atan2f+0x1eb>
movss  0xd94(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
movss  0xd79(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
movss  0xd63(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xd3f(%rip),%xmm0
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x18(%rbp),%xmm0
divss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x14(%rbp),%xmm0
jbe    1319 <_atan2f+0x219>
movss  -0x14(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xcf3(%rip),%xmm0
ucomiss -0x14(%rbp),%xmm0
jbe    133a <_atan2f+0x23a>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    13dc <_atan2f+0x2dc>
movss  -0x10(%rbp),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xcd3(%rip),%xmm0
mulss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xcbd(%rip),%xmm0
addss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
mulss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xc98(%rip),%xmm0
addss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x1c(%rbp),%xmm0
mulss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xc73(%rip),%xmm0
addss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x18(%rbp),%xmm0
divss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
cmpl   $0x1,-0x24(%rbp)
jle    13fd <_atan2f+0x2fd>
movss  -0x20(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x20(%rbp)
movslq -0x24(%rbp),%rcx
lea    0xc28(%rip),%rax
movss  (%rax,%rcx,4),%xmm0
addss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0xc(%rbp),%xmm0
jbe    1436 <_atan2f+0x336>
movss  0xbfc(%rip),%xmm0
subss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x8(%rbp),%xmm0
jbe    145a <_atan2f+0x35a>
movss  -0x20(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<_atan2f>:
xorps  %xmm2,%xmm2
ucomiss %xmm2,%xmm1
jne    1134 <_atan2f+0x34>
jp     1134 <_atan2f+0x34>
ucomiss %xmm2,%xmm0
jne    1115 <_atan2f+0x15>
jp     1115 <_atan2f+0x15>
movaps %xmm2,%xmm0
ret
xorps  %xmm3,%xmm3
ucomiss %xmm3,%xmm0
jbe    1126 <_atan2f+0x26>
movss  0xedb(%rip),%xmm0
ret
ucomiss %xmm0,%xmm3
jbe    1134 <_atan2f+0x34>
movss  0xed1(%rip),%xmm0
ret
movaps 0xef5(%rip),%xmm3
movaps %xmm0,%xmm4
xorps  %xmm3,%xmm4
movaps %xmm0,%xmm5
cmpltss %xmm2,%xmm5
andps  %xmm5,%xmm4
andnps %xmm0,%xmm5
orps   %xmm4,%xmm5
xorps  %xmm1,%xmm3
movaps %xmm1,%xmm4
cmpltss %xmm2,%xmm4
andps  %xmm4,%xmm3
andnps %xmm1,%xmm4
orps   %xmm3,%xmm4
xor    %eax,%eax
ucomiss %xmm4,%xmm5
seta   %al
movaps %xmm4,%xmm2
minss  %xmm5,%xmm2
maxss  %xmm4,%xmm5
divss  %xmm5,%xmm2
add    %eax,%eax
ucomiss 0xe82(%rip),%xmm2
jbe    11ba <_atan2f+0xba>
movss  0xe7c(%rip),%xmm3
mulss  %xmm2,%xmm3
movss  0xe74(%rip),%xmm4
addss  %xmm4,%xmm3
addss  %xmm4,%xmm3
addss  %xmm2,%xmm3
addss  0xe64(%rip),%xmm2
divss  %xmm2,%xmm3
or     $0x1,%eax
movaps %xmm3,%xmm2
movaps 0xe6f(%rip),%xmm3
xorps  %xmm2,%xmm3
xorps  %xmm4,%xmm4
movaps %xmm2,%xmm5
cmpltss %xmm4,%xmm5
movaps %xmm5,%xmm4
andps  %xmm3,%xmm4
andnps %xmm2,%xmm5
orps   %xmm4,%xmm5
movss  0xe35(%rip),%xmm4
ucomiss %xmm5,%xmm4
ja     1235 <_atan2f+0x135>
movaps %xmm2,%xmm3
mulss  %xmm2,%xmm3
movss  0xe25(%rip),%xmm4
mulss  %xmm3,%xmm4
addss  0xe1d(%rip),%xmm4
mulss  %xmm3,%xmm4
movss  0xe15(%rip),%xmm5
addss  %xmm3,%xmm5
mulss  %xmm3,%xmm5
addss  0xe09(%rip),%xmm5
divss  %xmm5,%xmm4
mulss  %xmm2,%xmm4
addss  %xmm4,%xmm2
movaps 0xdfe(%rip),%xmm3
xorps  %xmm2,%xmm3
cmp    $0x2,%eax
jge    123d <_atan2f+0x13d>
movaps %xmm2,%xmm3
mov    %eax,%eax
lea    0xdfa(%rip),%rcx
addss  (%rcx,%rax,4),%xmm3
movss  0xdd9(%rip),%xmm2
subss  %xmm3,%xmm2
xorps  %xmm4,%xmm4
cmpltss %xmm4,%xmm1
movaps %xmm1,%xmm5
andnps %xmm3,%xmm5
andps  %xmm2,%xmm1
orps   %xmm5,%xmm1
movaps 0xdbe(%rip),%xmm2
xorps  %xmm1,%xmm2
cmpltss %xmm4,%xmm0
movaps %xmm0,%xmm3
andnps %xmm1,%xmm3
andps  %xmm2,%xmm0
orps   %xmm3,%xmm0
movaps %xmm0,%xmm2
movaps %xmm2,%xmm0
ret

LLVM IR (-O0):
@_atan2f.a = internal constant [4 x float] [float 0.000000e+00, float 0x3FE0C15240000000, float 0x3FF921FB60000000, float 0x3FF0C15240000000]
define float @_atan2f(float %0, float %1) {
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca i32
store float %0, float* %4
store float %1, float* %5
%12 = load float, float* %5
%13 = fcmp oeq float %12, 0.000000e+00
br i1 %13, label %14, label %32
14: ; preds = %2
%15 = load float, float* %4
%16 = fcmp oeq float %15, 0.000000e+00
br i1 %16, label %17, label %19
17: ; preds = %14
store float 0.000000e+00, float* %10
%18 = load float, float* %10
store float %18, float* %3
br label %142
19: ; preds = %14
store float 0x3FF921FB60000000, float* %10
%20 = load float, float* %4
%21 = fcmp ogt float %20, 0.000000e+00
br i1 %21, label %22, label %24
22: ; preds = %19
%23 = load float, float* %10
store float %23, float* %3
br label %142
24: ; preds = %19
%25 = load float, float* %4
%26 = fcmp olt float %25, 0.000000e+00
br i1 %26, label %27, label %31
27: ; preds = %24
%28 = load float, float* %10
%29 = fneg float %28
store float %29, float* %10
%30 = load float, float* %10
store float %30, float* %3
br label %142
31: ; preds = %24
br label %32
32: ; preds = %31, %2
store i32 0, i32* %11
%33 = load float, float* %4
store float %33, float* %8
%34 = load float, float* %5
store float %34, float* %9
%35 = load float, float* %8
%36 = fcmp olt float %35, 0.000000e+00
br i1 %36, label %37, label %40
37: ; preds = %32
%38 = load float, float* %8
%39 = fneg float %38
store float %39, float* %8
br label %40
40: ; preds = %37, %32
%41 = load float, float* %9
%42 = fcmp olt float %41, 0.000000e+00
br i1 %42, label %43, label %46
43: ; preds = %40
%44 = load float, float* %9
%45 = fneg float %44
store float %45, float* %9
br label %46
46: ; preds = %43, %40
%47 = load float, float* %8
%48 = load float, float* %9
%49 = fcmp ogt float %47, %48
br i1 %49, label %50, label %54
50: ; preds = %46
%51 = load float, float* %9
store float %51, float* %6
%52 = load float, float* %8
store float %52, float* %9
%53 = load float, float* %6
store float %53, float* %8
store i32 2, i32* %11
br label %54
54: ; preds = %50, %46
%55 = load float, float* %8
%56 = load float, float* %9
%57 = fdiv float %55, %56
store float %57, float* %6
%58 = load float, float* %6
%59 = fcmp ogt float %58, 0x3FD1261460000000
br i1 %59, label %60, label %77
60: ; preds = %54
%61 = load float, float* %6
%62 = fmul float 0x3FE76CF5E0000000, %61
store float %62, float* %8
%63 = load float, float* %8
%64 = fsub float %63, 5.000000e-01
store float %64, float* %8
%65 = load float, float* %8
%66 = fsub float %65, 5.000000e-01
store float %66, float* %8
%67 = load float, float* %8
%68 = load float, float* %6
%69 = fadd float %67, %68
store float %69, float* %8
%70 = load float, float* %6
%71 = fadd float 0x3FFBB67AE0000000, %70
store float %71, float* %9
%72 = load float, float* %8
%73 = load float, float* %9
%74 = fdiv float %72, %73
store float %74, float* %6
%75 = load i32, i32* %11
%76 = add nsw i32 %75, 1
store i32 %76, i32* %11
br label %77
77: ; preds = %60, %54
%78 = load float, float* %6
store float %78, float* %7
%79 = load float, float* %7
%80 = fcmp olt float %79, 0.000000e+00
br i1 %80, label %81, label %84
81: ; preds = %77
%82 = load float, float* %7
%83 = fneg float %82
store float %83, float* %7
br label %84
84: ; preds = %81, %77
%85 = load float, float* %7
%86 = fcmp olt float %85, 0x3F36A09E60000000
br i1 %86, label %87, label %89
87: ; preds = %84
%88 = load float, float* %6
store float %88, float* %10
br label %116
89: ; preds = %84
%90 = load float, float* %6
%91 = load float, float* %6
%92 = fmul float %90, %91
store float %92, float* %7
%93 = load float, float* %7
%94 = fmul float 0xBFE70A75C0000000, %93
store float %94, float* %8
%95 = load float, float* %8
%96 = fadd float %95, 0xBFF70A9500000000
store float %96, float* %8
%97 = load float, float* %8
%98 = load float, float* %7
%99 = fmul float %97, %98
store float %99, float* %8
%100 = load float, float* %7
%101 = fadd float %100, 0x4013024780000000
store float %101, float* %9
%102 = load float, float* %9
%103 = load float, float* %7
%104 = fmul float %102, %103
store float %104, float* %9
%105 = load float, float* %9
%106 = fadd float %105, 0x401147EFC0000000
store float %106, float* %9
%107 = load float, float* %8
%108 = load float, float* %9
%109 = fdiv float %107, %108
store float %109, float* %10
%110 = load float, float* %10
%111 = load float, float* %6
%112 = fmul float %110, %111
store float %112, float* %10
%113 = load float, float* %10
%114 = load float, float* %6
%115 = fadd float %113, %114
store float %115, float* %10
br label %116
116: ; preds = %89, %87
%117 = load i32, i32* %11
%118 = icmp sgt i32 %117, 1
br i1 %118, label %119, label %122
119: ; preds = %116
%120 = load float, float* %10
%121 = fneg float %120
store float %121, float* %10
br label %122
122: ; preds = %119, %116
%123 = load i32, i32* %11
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds [4 x float], [4 x float]* @_atan2f.a, i64 0, i64 %124
%126 = load float, float* %125
%127 = load float, float* %10
%128 = fadd float %126, %127
store float %128, float* %10
%129 = load float, float* %5
%130 = fcmp olt float %129, 0.000000e+00
br i1 %130, label %131, label %134
131: ; preds = %122
%132 = load float, float* %10
%133 = fsub float 0x400921FB60000000, %132
store float %133, float* %10
br label %134
134: ; preds = %131, %122
%135 = load float, float* %4
%136 = fcmp olt float %135, 0.000000e+00
br i1 %136, label %137, label %140
137: ; preds = %134
%138 = load float, float* %10
%139 = fneg float %138
store float %139, float* %10
br label %140
140: ; preds = %137, %134
%141 = load float, float* %10
store float %141, float* %3
br label %142
142: ; preds = %140, %27, %22, %17
%143 = load float, float* %3
ret float %143
}

LLVM IR (-O2):
@_atan2f.a = internal unnamed_addr constant [4 x float] [float 0.000000e+00, float 0x3FE0C15240000000, float 0x3FF921FB60000000, float 0x3FF0C15240000000]
define float @_atan2f(float %0, float %1) {
%3 = fcmp oeq float %1, 0.000000e+00
br i1 %3, label %4, label %10
4: ; preds = %2
%5 = fcmp oeq float %0, 0.000000e+00
br i1 %5, label %63, label %6
6: ; preds = %4
%7 = fcmp ogt float %0, 0.000000e+00
br i1 %7, label %63, label %8
8: ; preds = %6
%9 = fcmp olt float %0, 0.000000e+00
br i1 %9, label %63, label %10
10: ; preds = %8, %2
%11 = fcmp olt float %0, 0.000000e+00
%12 = fneg float %0
%13 = select i1 %11, float %12, float %0
%14 = fcmp olt float %1, 0.000000e+00
%15 = fneg float %1
%16 = select i1 %14, float %15, float %1
%17 = fcmp ogt float %13, %16
%18 = select i1 %17, float %16, float %13
%19 = select i1 %17, float %13, float %16
%20 = select i1 %17, i32 2, i32 0
%21 = fdiv float %18, %19
%22 = fcmp ogt float %21, 0x3FD1261460000000
br i1 %22, label %23, label %31
23: ; preds = %10
%24 = fmul float %21, 0x3FE76CF5E0000000
%25 = fadd float %24, -5.000000e-01
%26 = fadd float %25, -5.000000e-01
%27 = fadd float %21, %26
%28 = fadd float %21, 0x3FFBB67AE0000000
%29 = fdiv float %27, %28
%30 = or i32 %20, 1
br label %31
31: ; preds = %23, %10
%32 = phi float [ %29, %23 ], [ %21, %10 ]
%33 = phi i32 [ %30, %23 ], [ %20, %10 ]
%34 = fcmp olt float %32, 0.000000e+00
%35 = fneg float %32
%36 = select i1 %34, float %35, float %32
%37 = fcmp olt float %36, 0x3F36A09E60000000
br i1 %37, label %50, label %38
38: ; preds = %31
%39 = fmul float %32, %32
%40 = fmul float %39, 0x3FE70A75C0000000
%41 = fsub float 0xBFF70A9500000000, %40
%42 = fmul float %39, %41
%43 = fadd float %39, 0x4013024780000000
%44 = fmul float %39, %43
%45 = fadd float %44, 0x401147EFC0000000
%46 = fdiv float %42, %45
%47 = fmul float %32, %46
%48 = fadd float %32, %47
%49 = fneg float %48
br label %50
50: ; preds = %31, %38
%51 = phi float [ %35, %31 ], [ %49, %38 ]
%52 = phi float [ %32, %31 ], [ %48, %38 ]
%53 = icmp sgt i32 %33, 1
%54 = select i1 %53, float %51, float %52
%55 = sext i32 %33 to i64
%56 = getelementptr inbounds [4 x float], [4 x float]* @_atan2f.a, i64 0, i64 %55
%57 = load float, float* %56
%58 = fadd float %57, %54
%59 = fsub float 0x400921FB60000000, %58
%60 = select i1 %14, float %59, float %58
%61 = fneg float %60
%62 = select i1 %11, float %61, float %60
br label %63
63: ; preds = %8, %6, %4, %50
%64 = phi float [ %62, %50 ], [ 0.000000e+00, %4 ], [ 0x3FF921FB60000000, %6 ], [ 0xBFF921FB60000000, %8 ]
ret float %64
}