#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 cos(double);
double W(double a_w0, double a_wx, double a_wxy, double a_wxz, double a_wy,
         double a_wyz, double a_wz, double b_wx, double b_wxy, double b_wxz,
         double b_wy, double b_wyz, double b_wz, double c_wx, double c_wxy,
         double c_wxz, double c_wy, double c_wyz, double c_wz, double d_wxy,
         double d_wxz, double d_wyz, double e_wxy, double e_wxz, double e_wyz,
         double f_w0, double f_wx, double f_wxy, double f_wxz, double f_wy,
         double f_wyz, double f_wz, double g_w0, double g_wx, double g_wxy,
         double g_wxz, double g_wy, double g_wyz, double g_wz, double t,
         double twopi_invLx, double twopi_invLy, double twopi_invLz, double x,
         double y, double z) {
  return a_w0 * cos(g_w0 + f_w0 * t) +
         a_wx * cos(g_wx + f_wx * t) * cos(c_wx + b_wx * twopi_invLx * x) +
         a_wy * cos(c_wy + b_wy * twopi_invLy * y) * cos(g_wy + f_wy * t) +
         a_wz * cos(g_wz + f_wz * t) * cos(c_wz + b_wz * twopi_invLz * z) +
         a_wxy * cos(g_wxy + f_wxy * t) * cos(c_wxy + b_wxy * twopi_invLx * x) *
             cos(e_wxy + d_wxy * twopi_invLy * y) +
         a_wxz * cos(g_wxz + f_wxz * t) * cos(c_wxz + b_wxz * twopi_invLx * x) *
             cos(e_wxz + d_wxz * twopi_invLz * z) +
         a_wyz * cos(g_wyz + f_wyz * t) * cos(c_wyz + b_wyz * twopi_invLy * y) *
             cos(e_wyz + d_wyz * twopi_invLz * z);
}


x86 assembly (clang, -O0):
<W>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movsd  0x138(%rbp),%xmm8
movsd  0x130(%rbp),%xmm8
movsd  0x128(%rbp),%xmm8
movsd  0x120(%rbp),%xmm8
movsd  0x118(%rbp),%xmm8
movsd  0x110(%rbp),%xmm8
movsd  0x108(%rbp),%xmm8
movsd  0x100(%rbp),%xmm8
movsd  0xf8(%rbp),%xmm8
movsd  0xf0(%rbp),%xmm8
movsd  0xe8(%rbp),%xmm8
movsd  0xe0(%rbp),%xmm8
movsd  0xd8(%rbp),%xmm8
movsd  0xd0(%rbp),%xmm8
movsd  0xc8(%rbp),%xmm8
movsd  0xc0(%rbp),%xmm8
movsd  0xb8(%rbp),%xmm8
movsd  0xb0(%rbp),%xmm8
movsd  0xa8(%rbp),%xmm8
movsd  0xa0(%rbp),%xmm8
movsd  0x98(%rbp),%xmm8
movsd  0x90(%rbp),%xmm8
movsd  0x88(%rbp),%xmm8
movsd  0x80(%rbp),%xmm8
movsd  0x78(%rbp),%xmm8
movsd  0x70(%rbp),%xmm8
movsd  0x68(%rbp),%xmm8
movsd  0x60(%rbp),%xmm8
movsd  0x58(%rbp),%xmm8
movsd  0x50(%rbp),%xmm8
movsd  0x48(%rbp),%xmm8
movsd  0x40(%rbp),%xmm8
movsd  0x38(%rbp),%xmm8
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
movsd  %xmm6,-0x38(%rbp)
movsd  %xmm7,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xd0(%rbp),%xmm1
movsd  0x98(%rbp),%xmm0
movsd  0x108(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0xd8(%rbp),%xmm1
movsd  0xa0(%rbp),%xmm0
movsd  0x108(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0x38(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
mulsd  0x110(%rbp),%xmm0
movsd  0x128(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x50(%rbp),%xmm1
movsd  0x20(%rbp),%xmm0
mulsd  0x118(%rbp),%xmm0
movsd  0x130(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xf0(%rbp),%xmm1
movsd  0xb8(%rbp),%xmm0
movsd  0x108(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movsd  -0xc8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0x100(%rbp),%xmm1
movsd  0xc8(%rbp),%xmm0
movsd  0x108(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0x60(%rbp),%xmm1
movsd  0x30(%rbp),%xmm0
mulsd  0x120(%rbp),%xmm0
movsd  0x138(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movsd  -0xb0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xe0(%rbp),%xmm1
movsd  0xa8(%rbp),%xmm0
movsd  0x108(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x40(%rbp),%xmm1
movsd  0x10(%rbp),%xmm0
mulsd  0x110(%rbp),%xmm0
movsd  0x128(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x80(%rbp),%xmm1
movsd  0x68(%rbp),%xmm0
mulsd  0x118(%rbp),%xmm0
movsd  0x130(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movsd  -0x90(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xe8(%rbp),%xmm1
movsd  0xb0(%rbp),%xmm0
movsd  0x108(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0x48(%rbp),%xmm1
movsd  0x18(%rbp),%xmm0
mulsd  0x110(%rbp),%xmm0
movsd  0x128(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0x88(%rbp),%xmm1
movsd  0x70(%rbp),%xmm0
mulsd  0x120(%rbp),%xmm0
movsd  0x138(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movsd  -0x70(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x68(%rbp),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xf8(%rbp),%xmm1
movsd  0xc0(%rbp),%xmm0
movsd  0x108(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0x58(%rbp),%xmm1
movsd  0x28(%rbp),%xmm0
mulsd  0x118(%rbp),%xmm0
movsd  0x130(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0x90(%rbp),%xmm1
movsd  0x78(%rbp),%xmm0
mulsd  0x120(%rbp),%xmm0
movsd  0x138(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <cos@plt>
movsd  -0x50(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x48(%rbp),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<W>:
sub    $0x48,%rsp
movsd  %xmm7,0x40(%rsp)
movsd  %xmm6,0x18(%rsp)
movsd  %xmm5,0x20(%rsp)
movsd  %xmm4,0x10(%rsp)
movsd  %xmm3,0x8(%rsp)
movsd  %xmm2,(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  %xmm0,0x30(%rsp)
movsd  0xd8(%rsp),%xmm0
mulsd  0x148(%rsp),%xmm0
addsd  0x110(%rsp),%xmm0
call   1030 <cos@plt>
movsd  %xmm0,0x38(%rsp)
movsd  0xe0(%rsp),%xmm0
mulsd  0x148(%rsp),%xmm0
addsd  0x118(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x40(%rsp),%xmm0
mulsd  0x150(%rsp),%xmm0
mulsd  0x168(%rsp),%xmm0
addsd  0x78(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x28(%rsp),%xmm0
movsd  0x38(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x60(%rsp),%xmm0
mulsd  0x158(%rsp),%xmm0
mulsd  0x170(%rsp),%xmm0
addsd  0x90(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xf8(%rsp),%xmm0
mulsd  0x148(%rsp),%xmm0
addsd  0x130(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x108(%rsp),%xmm0
mulsd  0x148(%rsp),%xmm0
addsd  0x140(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x70(%rsp),%xmm0
mulsd  0x160(%rsp),%xmm0
mulsd  0x178(%rsp),%xmm0
addsd  0xa0(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x18(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0xe8(%rsp),%xmm0
mulsd  0x148(%rsp),%xmm0
addsd  0x120(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x50(%rsp),%xmm0
mulsd  0x150(%rsp),%xmm0
mulsd  0x168(%rsp),%xmm0
addsd  0x80(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xa8(%rsp),%xmm0
mulsd  0x158(%rsp),%xmm0
mulsd  0x170(%rsp),%xmm0
addsd  0xc0(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  (%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xf0(%rsp),%xmm0
mulsd  0x148(%rsp),%xmm0
addsd  0x128(%rsp),%xmm0
call   1030 <cos@plt>
movapd %xmm0,%xmm1
movsd  0x150(%rsp),%xmm0
mulsd  0x58(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
mulsd  0x168(%rsp),%xmm0
addsd  0x88(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xb0(%rsp),%xmm0
mulsd  0x160(%rsp),%xmm0
mulsd  0x178(%rsp),%xmm0
addsd  0xc8(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x8(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x148(%rsp),%xmm0
mulsd  0x100(%rsp),%xmm0
addsd  0x138(%rsp),%xmm0
call   1030 <cos@plt>
movapd %xmm0,%xmm1
movsd  0x158(%rsp),%xmm0
mulsd  0x68(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
mulsd  0x170(%rsp),%xmm0
addsd  0x98(%rsp),%xmm0
call   1030 <cos@plt>
movapd %xmm0,%xmm1
movsd  0x160(%rsp),%xmm0
mulsd  0xb8(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
mulsd  0x178(%rsp),%xmm0
addsd  0xd0(%rsp),%xmm0
call   1030 <cos@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
add    $0x48,%rsp
ret

LLVM IR (-O0):
define double @W(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, double %14, double %15, double %16, double %17, double %18, double %19, double %20, double %21, double %22, double %23, double %24, double %25, double %26, double %27, double %28, double %29, double %30, double %31, double %32, double %33, double %34, double %35, double %36, double %37, double %38, double %39, double %40, double %41, double %42, double %43, double %44, double %45) {
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca double
%55 = alloca double
%56 = alloca double
%57 = alloca double
%58 = alloca double
%59 = alloca double
%60 = alloca double
%61 = alloca double
%62 = alloca double
%63 = alloca double
%64 = alloca double
%65 = alloca double
%66 = alloca double
%67 = alloca double
%68 = alloca double
%69 = alloca double
%70 = alloca double
%71 = alloca double
%72 = alloca double
%73 = alloca double
%74 = alloca double
%75 = alloca double
%76 = alloca double
%77 = alloca double
%78 = alloca double
%79 = alloca double
%80 = alloca double
%81 = alloca double
%82 = alloca double
%83 = alloca double
%84 = alloca double
%85 = alloca double
%86 = alloca double
%87 = alloca double
%88 = alloca double
%89 = alloca double
%90 = alloca double
%91 = alloca double
%92 = alloca double
store double %0, double* %47
store double %1, double* %48
store double %2, double* %49
store double %3, double* %50
store double %4, double* %51
store double %5, double* %52
store double %6, double* %53
store double %7, double* %54
store double %8, double* %55
store double %9, double* %56
store double %10, double* %57
store double %11, double* %58
store double %12, double* %59
store double %13, double* %60
store double %14, double* %61
store double %15, double* %62
store double %16, double* %63
store double %17, double* %64
store double %18, double* %65
store double %19, double* %66
store double %20, double* %67
store double %21, double* %68
store double %22, double* %69
store double %23, double* %70
store double %24, double* %71
store double %25, double* %72
store double %26, double* %73
store double %27, double* %74
store double %28, double* %75
store double %29, double* %76
store double %30, double* %77
store double %31, double* %78
store double %32, double* %79
store double %33, double* %80
store double %34, double* %81
store double %35, double* %82
store double %36, double* %83
store double %37, double* %84
store double %38, double* %85
store double %39, double* %86
store double %40, double* %87
store double %41, double* %88
store double %42, double* %89
store double %43, double* %90
store double %44, double* %91
store double %45, double* %92
%93 = load double, double* %47
%94 = load double, double* %79
%95 = load double, double* %72
%96 = load double, double* %86
%97 = call double @llvm.fmuladd.f64(double %95, double %96, double %94)
%98 = call double @cos(double %97)
%99 = load double, double* %48
%100 = load double, double* %80
%101 = load double, double* %73
%102 = load double, double* %86
%103 = call double @llvm.fmuladd.f64(double %101, double %102, double %100)
%104 = call double @cos(double %103)
%105 = fmul double %99, %104
%106 = load double, double* %60
%107 = load double, double* %54
%108 = load double, double* %87
%109 = fmul double %107, %108
%110 = load double, double* %90
%111 = call double @llvm.fmuladd.f64(double %109, double %110, double %106)
%112 = call double @cos(double %111)
%113 = fmul double %105, %112
%114 = call double @llvm.fmuladd.f64(double %93, double %98, double %113)
%115 = load double, double* %51
%116 = load double, double* %63
%117 = load double, double* %57
%118 = load double, double* %88
%119 = fmul double %117, %118
%120 = load double, double* %91
%121 = call double @llvm.fmuladd.f64(double %119, double %120, double %116)
%122 = call double @cos(double %121)
%123 = fmul double %115, %122
%124 = load double, double* %83
%125 = load double, double* %76
%126 = load double, double* %86
%127 = call double @llvm.fmuladd.f64(double %125, double %126, double %124)
%128 = call double @cos(double %127)
%129 = call double @llvm.fmuladd.f64(double %123, double %128, double %114)
%130 = load double, double* %53
%131 = load double, double* %85
%132 = load double, double* %78
%133 = load double, double* %86
%134 = call double @llvm.fmuladd.f64(double %132, double %133, double %131)
%135 = call double @cos(double %134)
%136 = fmul double %130, %135
%137 = load double, double* %65
%138 = load double, double* %59
%139 = load double, double* %89
%140 = fmul double %138, %139
%141 = load double, double* %92
%142 = call double @llvm.fmuladd.f64(double %140, double %141, double %137)
%143 = call double @cos(double %142)
%144 = call double @llvm.fmuladd.f64(double %136, double %143, double %129)
%145 = load double, double* %49
%146 = load double, double* %81
%147 = load double, double* %74
%148 = load double, double* %86
%149 = call double @llvm.fmuladd.f64(double %147, double %148, double %146)
%150 = call double @cos(double %149)
%151 = fmul double %145, %150
%152 = load double, double* %61
%153 = load double, double* %55
%154 = load double, double* %87
%155 = fmul double %153, %154
%156 = load double, double* %90
%157 = call double @llvm.fmuladd.f64(double %155, double %156, double %152)
%158 = call double @cos(double %157)
%159 = fmul double %151, %158
%160 = load double, double* %69
%161 = load double, double* %66
%162 = load double, double* %88
%163 = fmul double %161, %162
%164 = load double, double* %91
%165 = call double @llvm.fmuladd.f64(double %163, double %164, double %160)
%166 = call double @cos(double %165)
%167 = call double @llvm.fmuladd.f64(double %159, double %166, double %144)
%168 = load double, double* %50
%169 = load double, double* %82
%170 = load double, double* %75
%171 = load double, double* %86
%172 = call double @llvm.fmuladd.f64(double %170, double %171, double %169)
%173 = call double @cos(double %172)
%174 = fmul double %168, %173
%175 = load double, double* %62
%176 = load double, double* %56
%177 = load double, double* %87
%178 = fmul double %176, %177
%179 = load double, double* %90
%180 = call double @llvm.fmuladd.f64(double %178, double %179, double %175)
%181 = call double @cos(double %180)
%182 = fmul double %174, %181
%183 = load double, double* %70
%184 = load double, double* %67
%185 = load double, double* %89
%186 = fmul double %184, %185
%187 = load double, double* %92
%188 = call double @llvm.fmuladd.f64(double %186, double %187, double %183)
%189 = call double @cos(double %188)
%190 = call double @llvm.fmuladd.f64(double %182, double %189, double %167)
%191 = load double, double* %52
%192 = load double, double* %84
%193 = load double, double* %77
%194 = load double, double* %86
%195 = call double @llvm.fmuladd.f64(double %193, double %194, double %192)
%196 = call double @cos(double %195)
%197 = fmul double %191, %196
%198 = load double, double* %64
%199 = load double, double* %58
%200 = load double, double* %88
%201 = fmul double %199, %200
%202 = load double, double* %91
%203 = call double @llvm.fmuladd.f64(double %201, double %202, double %198)
%204 = call double @cos(double %203)
%205 = fmul double %197, %204
%206 = load double, double* %71
%207 = load double, double* %68
%208 = load double, double* %89
%209 = fmul double %207, %208
%210 = load double, double* %92
%211 = call double @llvm.fmuladd.f64(double %209, double %210, double %206)
%212 = call double @cos(double %211)
%213 = call double @llvm.fmuladd.f64(double %205, double %212, double %190)
ret double %213
}

LLVM IR (-O2):
define double @W(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, double %14, double %15, double %16, double %17, double %18, double %19, double %20, double %21, double %22, double %23, double %24, double %25, double %26, double %27, double %28, double %29, double %30, double %31, double %32, double %33, double %34, double %35, double %36, double %37, double %38, double %39, double %40, double %41, double %42, double %43, double %44, double %45) {
%47 = tail call double @llvm.fmuladd.f64(double %25, double %39, double %32)
%48 = tail call double @cos(double %47)
%49 = tail call double @llvm.fmuladd.f64(double %26, double %39, double %33)
%50 = tail call double @cos(double %49)
%51 = fmul double %50, %1
%52 = fmul double %7, %40
%53 = tail call double @llvm.fmuladd.f64(double %52, double %43, double %13)
%54 = tail call double @cos(double %53)
%55 = fmul double %51, %54
%56 = tail call double @llvm.fmuladd.f64(double %0, double %48, double %55)
%57 = fmul double %10, %41
%58 = tail call double @llvm.fmuladd.f64(double %57, double %44, double %16)
%59 = tail call double @cos(double %58)
%60 = fmul double %59, %4
%61 = tail call double @llvm.fmuladd.f64(double %29, double %39, double %36)
%62 = tail call double @cos(double %61)
%63 = tail call double @llvm.fmuladd.f64(double %60, double %62, double %56)
%64 = tail call double @llvm.fmuladd.f64(double %31, double %39, double %38)
%65 = tail call double @cos(double %64)
%66 = fmul double %65, %6
%67 = fmul double %12, %42
%68 = tail call double @llvm.fmuladd.f64(double %67, double %45, double %18)
%69 = tail call double @cos(double %68)
%70 = tail call double @llvm.fmuladd.f64(double %66, double %69, double %63)
%71 = tail call double @llvm.fmuladd.f64(double %27, double %39, double %34)
%72 = tail call double @cos(double %71)
%73 = fmul double %72, %2
%74 = fmul double %8, %40
%75 = tail call double @llvm.fmuladd.f64(double %74, double %43, double %14)
%76 = tail call double @cos(double %75)
%77 = fmul double %73, %76
%78 = fmul double %19, %41
%79 = tail call double @llvm.fmuladd.f64(double %78, double %44, double %22)
%80 = tail call double @cos(double %79)
%81 = tail call double @llvm.fmuladd.f64(double %77, double %80, double %70)
%82 = tail call double @llvm.fmuladd.f64(double %28, double %39, double %35)
%83 = tail call double @cos(double %82)
%84 = fmul double %83, %3
%85 = fmul double %9, %40
%86 = tail call double @llvm.fmuladd.f64(double %85, double %43, double %15)
%87 = tail call double @cos(double %86)
%88 = fmul double %84, %87
%89 = fmul double %20, %42
%90 = tail call double @llvm.fmuladd.f64(double %89, double %45, double %23)
%91 = tail call double @cos(double %90)
%92 = tail call double @llvm.fmuladd.f64(double %88, double %91, double %81)
%93 = tail call double @llvm.fmuladd.f64(double %30, double %39, double %37)
%94 = tail call double @cos(double %93)
%95 = fmul double %94, %5
%96 = fmul double %11, %41
%97 = tail call double @llvm.fmuladd.f64(double %96, double %44, double %17)
%98 = tail call double @cos(double %97)
%99 = fmul double %95, %98
%100 = fmul double %21, %42
%101 = tail call double @llvm.fmuladd.f64(double %100, double %45, double %24)
%102 = tail call double @cos(double %101)
%103 = tail call double @llvm.fmuladd.f64(double %99, double %102, double %92)
ret double %103
}