#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 acos(double);
double atan2(double, double);
double cos(double);
double sin(double);
double sqrt(double);
int su_vza_and_vaa(double lat, double lon, double height, double X, double Y,
                   double Z, float *vza, float *vaa) {
  const double a = 6378.1690;
  const double b = 6356.5838;
  double e2;
  double N;
  double x;
  double y;
  double z;
  double cos_lat;
  double sin_lat;
  double cos_lon;
  double sin_lon;
  double qv[3];
  double u[3];
  cos_lat = cos(lat * (3.14159265358979323846264338327 / 180.0));
  sin_lat = sin(lat * (3.14159265358979323846264338327 / 180.0));
  cos_lon = cos(lon * (3.14159265358979323846264338327 / 180.0));
  sin_lon = sin(lon * (3.14159265358979323846264338327 / 180.0));
  e2 = 1. - (b * b) / (a * a);
  N = a / sqrt(1. - e2 * sin_lat * sin_lat);
  x = (N + height) * cos_lat * cos_lon;
  y = (N + height) * cos_lat * sin_lon;
  z = ((b * b) / (a * a) * N + height) * sin_lat;
  qv[0] = X - x;
  qv[1] = Y - y;
  qv[2] = Z - z;
  u[0] =
      -sin_lat * cos_lon * qv[0] + -sin_lat * sin_lon * qv[1] + cos_lat * qv[2];
  u[1] = -sin_lon * qv[0] + cos_lon * qv[1];
  u[2] =
      cos_lat * cos_lon * qv[0] + -cos_lat * sin_lon * qv[1] + sin_lat * qv[2];
  *vza = acos(u[2] / sqrt(u[0] * u[0] + u[1] * u[1] + u[2] * u[2])) *
         (180.0 / 3.14159265358979323846264338327);
  *vaa = atan2(u[1], -u[0]) * (180.0 / 3.14159265358979323846264338327);
  if (*vaa < 0.)
    *vaa += 360.;
  return 0;
}


x86 assembly (clang, -O0):
<su_vza_and_vaa>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
mov    %rdi,-0x38(%rbp)
mov    %rsi,-0x40(%rbp)
movsd  0xe87(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe9a(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe85(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  0xe6e(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xe54(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
call   1060 <cos@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xe3a(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xe18(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xdd3(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1070 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xdb7(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0xd5c(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x78(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1070 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
call   1040 <acos@plt>
movsd  0xb65(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x38(%rbp),%rax
movss  %xmm0,(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
call   1030 <atan2@plt>
movsd  0xb21(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x40(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x40(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1528 <su_vza_and_vaa+0x3d8>
mov    -0x40(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb1c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax)
xor    %eax,%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<su_vza_and_vaa>:
push   %r14
push   %rbx
sub    $0x68,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  %xmm5,0x28(%rsp)
movsd  %xmm4,0x40(%rsp)
movsd  %xmm3,0x48(%rsp)
movsd  %xmm2,0x30(%rsp)
movsd  %xmm1,0x10(%rsp)
mulsd  0xe7d(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1060 <cos@plt>
movsd  %xmm0,0x38(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
movaps %xmm0,0x50(%rsp)
movsd  0x10(%rsp),%xmm0
mulsd  0xe4e(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
call   1060 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1050 <sin@plt>
movsd  0xe32(%rip),%xmm1
movapd 0x50(%rsp),%xmm2
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
addsd  0xe24(%rip),%xmm1
movapd %xmm0,%xmm7
xorpd  %xmm8,%xmm8
ucomisd %xmm8,%xmm1
jb     1205 <su_vza_and_vaa+0xb5>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    121f <su_vza_and_vaa+0xcf>
movapd %xmm1,%xmm0
movsd  %xmm7,0x10(%rsp)
call   1070 <sqrt@plt>
movsd  0x10(%rsp),%xmm7
xorpd  %xmm8,%xmm8
movsd  0xdf1(%rip),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
movsd  0x30(%rsp),%xmm4
addsd  %xmm4,%xmm0
movsd  0x38(%rsp),%xmm9
mulsd  %xmm9,%xmm0
movsd  0x8(%rsp),%xmm3
movapd %xmm3,%xmm2
mulsd  %xmm0,%xmm2
mulsd  0xdc5(%rip),%xmm1
mulsd  %xmm7,%xmm0
addsd  %xmm4,%xmm1
movapd 0x50(%rsp),%xmm10
mulsd  %xmm10,%xmm1
movsd  0x48(%rsp),%xmm4
subsd  %xmm2,%xmm4
movsd  0x40(%rsp),%xmm5
subsd  %xmm0,%xmm5
movsd  0x28(%rsp),%xmm2
subsd  %xmm1,%xmm2
movapd 0xd9b(%rip),%xmm0
xorpd  %xmm10,%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm7,%xmm1
mulsd  %xmm10,%xmm1
mulsd  %xmm5,%xmm1
mulsd  %xmm4,%xmm0
subsd  %xmm1,%xmm0
movapd %xmm9,%xmm6
mulsd  %xmm2,%xmm6
addsd  %xmm0,%xmm6
movapd %xmm9,%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm5,%xmm3
movapd %xmm7,%xmm1
mulsd  %xmm4,%xmm1
subsd  %xmm1,%xmm3
mulsd  %xmm9,%xmm7
mulsd  %xmm5,%xmm7
mulsd  %xmm4,%xmm0
subsd  %xmm7,%xmm0
mulsd  %xmm10,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm3,0x8(%rsp)
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm6,0x10(%rsp)
movapd %xmm6,%xmm1
mulsd  %xmm6,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
ucomisd %xmm8,%xmm0
jb     132c <su_vza_and_vaa+0x1dc>
sqrtsd %xmm0,%xmm0
jmp    133d <su_vza_and_vaa+0x1ed>
movsd  %xmm2,0x28(%rsp)
call   1070 <sqrt@plt>
movsd  0x28(%rsp),%xmm2
divsd  %xmm0,%xmm2
movapd %xmm2,%xmm0
call   1040 <acos@plt>
mulsd  0xcd6(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rbx)
movaps 0x10(%rsp),%xmm1
xorps  0xcca(%rip),%xmm1
movsd  0x8(%rsp),%xmm0
call   1030 <atan2@plt>
mulsd  0xcaf(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  0xcbb(%rip),%xmm1
addss  %xmm0,%xmm1
xorpd  %xmm2,%xmm2
movaps %xmm0,%xmm3
cmpltss %xmm2,%xmm3
andps  %xmm3,%xmm1
andnps %xmm0,%xmm3
orps   %xmm1,%xmm3
movss  %xmm3,(%r14)
xor    %eax,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define i32 @su_vza_and_vaa(double %0, double %1, double %2, double %3, double %4, double %5, float* nocapture writeonly %6, float* nocapture writeonly %7) {
%9 = fmul double %0, 0x3F91DF46A2529D39
%10 = tail call double @cos(double %9)
%11 = tail call double @sin(double %9)
%12 = fmul double %1, 0x3F91DF46A2529D39
%13 = tail call double @cos(double %12)
%14 = tail call double @sin(double %12)
%15 = fmul double %11, 0xBF7BAD3D046F6780
%16 = tail call double @llvm.fmuladd.f64(double %15, double %11, double 1.000000e+00)
%17 = tail call double @sqrt(double %16)
%18 = fdiv double 0x40B8EA2B43958106, %17
%19 = fadd double %18, %2
%20 = fmul double %10, %19
%21 = fmul double %13, %20
%22 = fmul double %14, %20
%23 = tail call double @llvm.fmuladd.f64(double %18, double 0x3FEFC8A585F72131, double %2)
%24 = fmul double %11, %23
%25 = fsub double %3, %21
%26 = fsub double %4, %22
%27 = fsub double %5, %24
%28 = fneg double %11
%29 = fmul double %13, %28
%30 = fmul double %14, %28
%31 = fmul double %30, %26
%32 = tail call double @llvm.fmuladd.f64(double %29, double %25, double %31)
%33 = tail call double @llvm.fmuladd.f64(double %10, double %27, double %32)
%34 = fneg double %14
%35 = fmul double %13, %26
%36 = tail call double @llvm.fmuladd.f64(double %34, double %25, double %35)
%37 = fmul double %10, %13
%38 = fneg double %10
%39 = fmul double %14, %38
%40 = fmul double %39, %26
%41 = tail call double @llvm.fmuladd.f64(double %37, double %25, double %40)
%42 = tail call double @llvm.fmuladd.f64(double %11, double %27, double %41)
%43 = fmul double %36, %36
%44 = tail call double @llvm.fmuladd.f64(double %33, double %33, double %43)
%45 = tail call double @llvm.fmuladd.f64(double %42, double %42, double %44)
%46 = tail call double @sqrt(double %45)
%47 = fdiv double %42, %46
%48 = tail call double @acos(double %47)
%49 = fmul double %48, 0x404CA5DC1A63C1F8
%50 = fptrunc double %49 to float
store float %50, float* %6
%51 = fneg double %33
%52 = tail call double @atan2(double %36, double %51)
%53 = fmul double %52, 0x404CA5DC1A63C1F8
%54 = fptrunc double %53 to float
%55 = fcmp olt float %54, 0.000000e+00
%56 = fadd float %54, 3.600000e+02
%57 = select i1 %55, float %56, float %54
store float %57, float* %7
ret i32 0
}