#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 eoe(double);
double ma_sun(double);
double sin(double);
double eqc(double t) {
  double a1, a2, a3, a4, a5;
  double ma, e, s1, s2, s3, s4, s5;
  ma = ma_sun(t);
  e = eoe(t);
  s1 = sin(1.0 * ma);
  s2 = sin(2.0 * ma);
  s3 = sin(3.0 * ma);
  s4 = sin(4.0 * ma);
  s5 = sin(5.0 * ma);
  a1 = s1 * 2;
  a2 = s2 * 5.0 / 4.0;
  a3 = s3 * 13.0 / 12.0 - s1 * 1.0 / 4.0;
  a4 = s4 * 103.0 / 96.0 - s2 * 11.0 / 24.0;
  a5 = s5 * 1097.0 / 960.0 + s1 * 5.0 / 96.0 - s3 * 43.0 / 64.0;
  return e * (a1 + e * (a2 + e * (a3 + e * (a4 + e * a5))));
}


x86 assembly (clang, -O0):
<eqc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1030 <ma_sun@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <eoe@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  0xeed(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  0xeee(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  0xedf(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  0xea0(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  0xe59(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  0xe92(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xe30(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  0xe53(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe5a(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  0xe45(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xe31(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  0xe1c(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xdff(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xdc2(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdde(%rip),%xmm1
mulsd  -0x50(%rbp),%xmm1
movsd  0xdc9(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xdac(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  0xd97(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd83(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  0xd6e(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xd56(%rip),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  0xd41(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm4
movsd  -0x40(%rbp),%xmm3
movsd  -0x20(%rbp),%xmm6
movsd  -0x40(%rbp),%xmm5
movsd  -0x28(%rbp),%xmm8
movsd  -0x40(%rbp),%xmm7
movsd  -0x30(%rbp),%xmm9
mulsd  %xmm9,%xmm7
addsd  %xmm8,%xmm7
mulsd  %xmm7,%xmm5
addsd  %xmm6,%xmm5
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<eqc>:
sub    $0x58,%rsp
movsd  %xmm0,0x10(%rsp)
call   1030 <ma_sun@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <eoe@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
movaps %xmm0,0x40(%rsp)
movsd  0x8(%rsp),%xmm0
addsd  %xmm0,%xmm0
call   1050 <sin@plt>
movapd %xmm0,0x30(%rsp)
movsd  0xe7d(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0xe6c(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
movapd %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xe55(%rip),%xmm0
call   1050 <sin@plt>
movapd 0x40(%rsp),%xmm5
movapd %xmm5,%xmm8
addsd  %xmm5,%xmm8
movsd  0xe38(%rip),%xmm4
movapd 0x30(%rsp),%xmm1
mulsd  %xmm1,%xmm4
movsd  0xe2e(%rip),%xmm3
mulsd  %xmm3,%xmm4
movsd  0xe2a(%rip),%xmm2
movsd  0x18(%rsp),%xmm7
mulsd  %xmm7,%xmm2
divsd  0xe20(%rip),%xmm2
mulsd  %xmm5,%xmm3
movapd 0x20(%rsp),%xmm6
unpcklpd %xmm1,%xmm6
mulpd  0xe22(%rip),%xmm6
divpd  0xe2a(%rip),%xmm6
subsd  %xmm3,%xmm2
movapd %xmm6,%xmm3
unpckhpd %xmm6,%xmm3
subsd  %xmm3,%xmm6
movapd %xmm5,%xmm3
unpcklpd %xmm0,%xmm3
mulpd  0xe1a(%rip),%xmm3
divpd  0xe22(%rip),%xmm3
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
addsd  %xmm3,%xmm0
movapd %xmm7,%xmm3
mulsd  0xdca(%rip),%xmm3
mulsd  0xdca(%rip),%xmm3
addsd  %xmm0,%xmm3
movsd  0x10(%rsp),%xmm0
mulsd  %xmm0,%xmm3
addsd  %xmm6,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm8,%xmm3
mulsd  %xmm0,%xmm3
movapd %xmm3,%xmm0
add    $0x58,%rsp
ret

LLVM IR (-O0):
define double @eqc(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
store double %0, double* %2
%15 = load double, double* %2
%16 = call double @ma_sun(double %15)
store double %16, double* %8
%17 = load double, double* %2
%18 = call double @eoe(double %17)
store double %18, double* %9
%19 = load double, double* %8
%20 = fmul double 1.000000e+00, %19
%21 = call double @sin(double %20)
store double %21, double* %10
%22 = load double, double* %8
%23 = fmul double 2.000000e+00, %22
%24 = call double @sin(double %23)
store double %24, double* %11
%25 = load double, double* %8
%26 = fmul double 3.000000e+00, %25
%27 = call double @sin(double %26)
store double %27, double* %12
%28 = load double, double* %8
%29 = fmul double 4.000000e+00, %28
%30 = call double @sin(double %29)
store double %30, double* %13
%31 = load double, double* %8
%32 = fmul double 5.000000e+00, %31
%33 = call double @sin(double %32)
store double %33, double* %14
%34 = load double, double* %10
%35 = fmul double %34, 2.000000e+00
store double %35, double* %3
%36 = load double, double* %11
%37 = fmul double %36, 5.000000e+00
%38 = fdiv double %37, 4.000000e+00
store double %38, double* %4
%39 = load double, double* %12
%40 = fmul double %39, 1.300000e+01
%41 = fdiv double %40, 1.200000e+01
%42 = load double, double* %10
%43 = fmul double %42, 1.000000e+00
%44 = fdiv double %43, 4.000000e+00
%45 = fsub double %41, %44
store double %45, double* %5
%46 = load double, double* %13
%47 = fmul double %46, 1.030000e+02
%48 = fdiv double %47, 9.600000e+01
%49 = load double, double* %11
%50 = fmul double %49, 1.100000e+01
%51 = fdiv double %50, 2.400000e+01
%52 = fsub double %48, %51
store double %52, double* %6
%53 = load double, double* %14
%54 = fmul double %53, 1.097000e+03
%55 = fdiv double %54, 9.600000e+02
%56 = load double, double* %10
%57 = fmul double %56, 5.000000e+00
%58 = fdiv double %57, 9.600000e+01
%59 = fadd double %55, %58
%60 = load double, double* %12
%61 = fmul double %60, 4.300000e+01
%62 = fdiv double %61, 6.400000e+01
%63 = fsub double %59, %62
store double %63, double* %7
%64 = load double, double* %9
%65 = load double, double* %3
%66 = load double, double* %9
%67 = load double, double* %4
%68 = load double, double* %9
%69 = load double, double* %5
%70 = load double, double* %9
%71 = load double, double* %6
%72 = load double, double* %9
%73 = load double, double* %7
%74 = call double @llvm.fmuladd.f64(double %72, double %73, double %71)
%75 = call double @llvm.fmuladd.f64(double %70, double %74, double %69)
%76 = call double @llvm.fmuladd.f64(double %68, double %75, double %67)
%77 = call double @llvm.fmuladd.f64(double %66, double %76, double %65)
%78 = fmul double %64, %77
ret double %78
}

LLVM IR (-O2):
define double @eqc(double %0) {
%2 = tail call double @ma_sun(double %0)
%3 = tail call double @eoe(double %0)
%4 = tail call double @sin(double %2)
%5 = fmul double %2, 2.000000e+00
%6 = tail call double @sin(double %5)
%7 = fmul double %2, 3.000000e+00
%8 = tail call double @sin(double %7)
%9 = fmul double %2, 4.000000e+00
%10 = tail call double @sin(double %9)
%11 = fmul double %2, 5.000000e+00
%12 = tail call double @sin(double %11)
%13 = fmul double %4, 2.000000e+00
%14 = fmul double %6, 5.000000e+00
%15 = fmul double %14, 2.500000e-01
%16 = fmul double %8, 1.300000e+01
%17 = fdiv double %16, 1.200000e+01
%18 = fmul double %4, 2.500000e-01
%19 = fsub double %17, %18
%20 = insertelement <2 x double> poison, double %10, i64 0
%21 = insertelement <2 x double> %20, double %6, i64 1
%22 = fmul <2 x double> %21, <double 1.030000e+02, double 1.100000e+01>
%23 = fdiv <2 x double> %22, <double 9.600000e+01, double 2.400000e+01>
%24 = shufflevector <2 x double> %23, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%25 = fsub <2 x double> %23, %24
%26 = extractelement <2 x double> %25, i64 0
%27 = insertelement <2 x double> poison, double %4, i64 0
%28 = insertelement <2 x double> %27, double %12, i64 1
%29 = fmul <2 x double> %28, <double 5.000000e+00, double 1.097000e+03>
%30 = fdiv <2 x double> %29, <double 9.600000e+01, double 9.600000e+02>
%31 = shufflevector <2 x double> %30, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%32 = fadd <2 x double> %30, %31
%33 = extractelement <2 x double> %32, i64 0
%34 = fmul double %8, 4.300000e+01
%35 = fmul double %34, 1.562500e-02
%36 = fsub double %33, %35
%37 = tail call double @llvm.fmuladd.f64(double %3, double %36, double %26)
%38 = tail call double @llvm.fmuladd.f64(double %3, double %37, double %19)
%39 = tail call double @llvm.fmuladd.f64(double %3, double %38, double %15)
%40 = tail call double @llvm.fmuladd.f64(double %3, double %39, double %13)
%41 = fmul double %3, %40
ret double %41
}