double atan2(double x, double y) {
  float res = 0, pow = x, fact = y + 3;
  for (int i = 0; i < 5; i++) {
    res += pow / fact;
    pow *= 2 * x;
    fact *= (2 * (i + 1)) * (2 * (i + 1) + 1);
  }
  return res;
}


x86 assembly (clang, -O0):
<atan2>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movsd  -0x8(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
movsd  0xed4(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
cmpl   $0x5,-0x20(%rbp)
jge    11b6 <atan2+0xb6>
movss  -0x18(%rbp),%xmm0
divss  -0x1c(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movsd  0xea1(%rip),%xmm1
mulsd  -0x8(%rbp),%xmm1
movss  -0x18(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
shl    $0x1,%eax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
imul   %ecx,%eax
cvtsi2ss %eax,%xmm0
mulss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1141 <atan2+0x41>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<atan2>:
addsd  0xef8(%rip),%xmm1
cvtsd2ss %xmm1,%xmm3
cvtsd2ss %xmm0,%xmm2
addsd  %xmm0,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm2,%xmm1
divss  %xmm3,%xmm2
xorps  %xmm4,%xmm4
mulsd  %xmm0,%xmm1
mulss  0xeda(%rip),%xmm3
cvtsd2ss %xmm1,%xmm1
addss  %xmm2,%xmm4
cvtss2sd %xmm1,%xmm5
mulsd  %xmm0,%xmm5
movss  0xec6(%rip),%xmm2
mulss  %xmm3,%xmm2
cvtsd2ss %xmm5,%xmm5
unpcklps %xmm5,%xmm1
unpcklps %xmm2,%xmm3
divps  %xmm3,%xmm1
addss  %xmm1,%xmm4
shufps $0x55,%xmm1,%xmm1
addss  %xmm4,%xmm1
xorps  %xmm3,%xmm3
cvtss2sd %xmm5,%xmm3
mulss  0xe9e(%rip),%xmm2
mulsd  %xmm0,%xmm3
cvtsd2ss %xmm3,%xmm3
xorps  %xmm4,%xmm4
cvtss2sd %xmm3,%xmm4
mulsd  %xmm0,%xmm4
movss  0xe87(%rip),%xmm0
cvtsd2ss %xmm4,%xmm4
mulss  %xmm2,%xmm0
unpcklps %xmm4,%xmm3
unpcklps %xmm0,%xmm2
divps  %xmm2,%xmm3
addss  %xmm3,%xmm1
shufps $0x55,%xmm3,%xmm3
addss  %xmm1,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
ret

LLVM IR (-O0):
define double @atan2(double %0, double %1) {
%3 = alloca double
%4 = alloca double
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca i32
store double %0, double* %3
store double %1, double* %4
store float 0.000000e+00, float* %5
%9 = load double, double* %3
%10 = fptrunc double %9 to float
store float %10, float* %6
%11 = load double, double* %4
%12 = fadd double %11, 3.000000e+00
%13 = fptrunc double %12 to float
store float %13, float* %7
store i32 0, i32* %8
br label %14
14: ; preds = %40, %2
%15 = load i32, i32* %8
%16 = icmp slt i32 %15, 5
br i1 %16, label %17, label %43
17: ; preds = %14
%18 = load float, float* %6
%19 = load float, float* %7
%20 = fdiv float %18, %19
%21 = load float, float* %5
%22 = fadd float %21, %20
store float %22, float* %5
%23 = load double, double* %3
%24 = fmul double 2.000000e+00, %23
%25 = load float, float* %6
%26 = fpext float %25 to double
%27 = fmul double %26, %24
%28 = fptrunc double %27 to float
store float %28, float* %6
%29 = load i32, i32* %8
%30 = add nsw i32 %29, 1
%31 = mul nsw i32 2, %30
%32 = load i32, i32* %8
%33 = add nsw i32 %32, 1
%34 = mul nsw i32 2, %33
%35 = add nsw i32 %34, 1
%36 = mul nsw i32 %31, %35
%37 = sitofp i32 %36 to float
%38 = load float, float* %7
%39 = fmul float %38, %37
store float %39, float* %7
br label %40
40: ; preds = %17
%41 = load i32, i32* %8
%42 = add nsw i32 %41, 1
store i32 %42, i32* %8
br label %14
43: ; preds = %14
%44 = load float, float* %5
%45 = fpext float %44 to double
ret double %45
}

LLVM IR (-O2):
define double @atan2(double %0, double %1) {
%3 = fadd double %1, 3.000000e+00
%4 = fptrunc double %3 to float
%5 = fmul double %0, 2.000000e+00
%6 = fptrunc double %0 to float
%7 = fdiv float %6, %4
%8 = fadd float %7, 0.000000e+00
%9 = fpext float %6 to double
%10 = fmul double %5, %9
%11 = fmul float %4, 6.000000e+00
%12 = fptrunc double %10 to float
%13 = fpext float %12 to double
%14 = fmul double %5, %13
%15 = fmul float %11, 2.000000e+01
%16 = fptrunc double %14 to float
%17 = insertelement <2 x float> poison, float %12, i64 0
%18 = insertelement <2 x float> %17, float %16, i64 1
%19 = insertelement <2 x float> poison, float %11, i64 0
%20 = insertelement <2 x float> %19, float %15, i64 1
%21 = fdiv <2 x float> %18, %20
%22 = extractelement <2 x float> %21, i64 0
%23 = fadd float %8, %22
%24 = extractelement <2 x float> %21, i64 1
%25 = fadd float %23, %24
%26 = fpext float %16 to double
%27 = fmul double %5, %26
%28 = fmul float %15, 4.200000e+01
%29 = fptrunc double %27 to float
%30 = fpext float %29 to double
%31 = fmul double %5, %30
%32 = fmul float %28, 7.200000e+01
%33 = fptrunc double %31 to float
%34 = insertelement <2 x float> poison, float %29, i64 0
%35 = insertelement <2 x float> %34, float %33, i64 1
%36 = insertelement <2 x float> poison, float %28, i64 0
%37 = insertelement <2 x float> %36, float %32, i64 1
%38 = fdiv <2 x float> %35, %37
%39 = extractelement <2 x float> %38, i64 0
%40 = fadd float %25, %39
%41 = extractelement <2 x float> %38, i64 1
%42 = fadd float %40, %41
%43 = fpext float %42 to double
ret double %43
}