#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 */
int pow(double, int);
double csc_fwarp(double x, double y) {
  double g, M, G, O;
  double C[3][3];
  double D[2];
  double csum, dsum;
  int i, j;
  double fout;
  g = 1.37484847732;
  M = 0.004869491981;
  G = -0.13161671474;
  O = -0.159596235474;
  C[0][0] = 0.141189631152;
  C[0][1] = -0.2815285335557;
  C[0][2] = 0.106959469314;
  C[1][0] = 0.0809701286525;
  C[1][1] = 0.15384112876;
  C[1][2] = 0.0;
  C[2][0] = -0.178251207466;
  C[2][1] = 0.0;
  C[2][2] = 0.0;
  D[0] = 0.0759196200467;
  D[1] = -0.0217762490699;
  csum = 0;
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      csum = csum + (C[i][j] * pow(x, 2 * i) * pow(y, 2 * j));
    }
  }
  csum = csum * (1 - pow(y, 2));
  dsum = 0;
  for (i = 0; i < 2; i++) {
    dsum = dsum + (D[i] * pow(x, 2 * i));
  }
  dsum = dsum * (1 - pow(x, 2));
  fout = x * g + pow(x, 3) * (1 - g) +
         x * pow(y, 2) * (1 - pow(x, 2)) * (G + (M - G) * pow(x, 2) + csum) +
         pow(x, 3) * (1 - pow(x, 2)) * (O - dsum);
  return (fout);
}


x86 assembly (clang, -O0):
<csc_fwarp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  0xf2b(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xf16(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xf01(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xeec(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xed7(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xec2(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xead(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe98(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe83(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe66(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe41(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xe29(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movl   $0x0,-0xa4(%rbp)
cmpl   $0x3,-0xa4(%rbp)
jge    12dd <csc_fwarp+0x1cd>
movl   $0x0,-0xa8(%rbp)
cmpl   $0x3,-0xa8(%rbp)
jge    12c4 <csc_fwarp+0x1b4>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movslq -0xa4(%rbp),%rcx
lea    -0x80(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0xa8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mov    -0xa4(%rbp),%edi
shl    $0x1,%edi
call   1030 <pow@plt>
movsd  -0xc8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mov    -0xa8(%rbp),%edi
shl    $0x1,%edi
call   1030 <pow@plt>
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0xa8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa8(%rbp)
jmp    120b <csc_fwarp+0xfb>
jmp    12c9 <csc_fwarp+0x1b9>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    11f4 <csc_fwarp+0xe4>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0xd0(%rbp),%xmm0
ff
mov    %eax,%ecx
mov    $0x1,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x0,-0xa4(%rbp)
cmpl   $0x2,-0xa4(%rbp)
jge    13b2 <csc_fwarp+0x2a2>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movslq -0xa4(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mov    -0xa4(%rbp),%edi
shl    $0x1,%edi
call   1030 <pow@plt>
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1332 <csc_fwarp+0x222>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x138(%rbp),%xmm0
ff
mov    %eax,%ecx
mov    $0x1,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  -0x130(%rbp),%xmm0
ff
movsd  -0x128(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm1
movsd  0xc29(%rip),%xmm3
subsd  -0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x120(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x118(%rbp),%xmm0
ff
mov    %eax,%ecx
mov    $0x1,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x110(%rbp),%xmm2
ff
movsd  -0x108(%rbp),%xmm3
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
addsd  -0x98(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
mov    %eax,-0xe4(%rbp)
movsd  -0x8(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0xf0(%rbp),%xmm1
ff
mov    %eax,%edx
mov    -0xe4(%rbp),%eax
mov    $0x1,%ecx
sub    %edx,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x30(%rbp),%xmm2
subsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<csc_fwarp>:
push   %rbp
push   %rbx
sub    $0x58,%rsp
movsd  %xmm1,0x8(%rsp)
movsd  %xmm0,0x10(%rsp)
xor    %edi,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xec8(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%rsp),%xmm0
xor    %edi,%edi
call   1030 <pow@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0x18(%rsp),%xmm1
xorpd  %xmm0,%xmm0
addsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
xor    %edi,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xe86(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
xor    %edi,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xe43(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x4,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xdfd(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
xor    %edi,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xdba(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xdb4(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x4,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x4,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
xor    %edi,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x4,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x4,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x4,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
mov    %eax,%ebx
movsd  0x10(%rsp),%xmm0
xor    %edi,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xc6c(%rip),%xmm0
addsd  0xca4(%rip),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xc47(%rip),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  0xc35(%rip),%xmm0
mulsd  0x30(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
movapd %xmm0,%xmm1
xorpd  %xmm0,%xmm0
movsd  0x50(%rsp),%xmm2
mulsd  %xmm0,%xmm2
mulsd  0x48(%rsp),%xmm2
addsd  %xmm1,%xmm2
movsd  0x40(%rsp),%xmm1
mulsd  %xmm0,%xmm1
mulsd  0x38(%rsp),%xmm1
addsd  %xmm2,%xmm1
mov    $0x1,%ebp
mov    $0x1,%eax
sub    %ebx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
mov    $0x1,%ecx
sub    %eax,%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xb9b(%rip),%xmm0
movsd  0xb9b(%rip),%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x10(%rsp),%xmm0
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
mov    $0x2,%edi
call   1030 <pow@plt>
mov    $0x1,%ecx
sub    %eax,%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xb29(%rip),%xmm0
addsd  0xb29(%rip),%xmm0
addsd  0x20(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
mov    %eax,%ebx
movsd  0x10(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
sub    %eax,%ebp
imul   %ebx,%ebp
xorps  %xmm1,%xmm1
cvtsi2sd %ebp,%xmm1
movsd  0xae3(%rip),%xmm0
subsd  0x18(%rsp),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x8(%rsp),%xmm0
add    $0x58,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define double @csc_fwarp(double %0, double %1) {
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca [3 x [3 x double]]
%10 = alloca [2 x double]
%11 = alloca double
%12 = alloca double
%13 = alloca i32
%14 = alloca i32
%15 = alloca double
store double %0, double* %3
store double %1, double* %4
store double 0x3FF5FF611DF0B77E, double* %5
store double 0x3F73F2084CE78B38, double* %6
store double 0xBFC0D8D106B52747, double* %7
store double 0xBFC46DA641F67843, double* %8
%16 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 0
%17 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
store double 0x3FC21280782A83A8, double* %17
%18 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 0
%19 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 1
store double 0xBFD204904120CDF3, double* %19
%20 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 0
%21 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
store double 0x3FBB61B21EB37E46, double* %21
%22 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 1
%23 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
store double 0x3FB4BA755683F142, double* %23
%24 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 1
%25 = getelementptr inbounds [3 x double], [3 x double]* %24, i64 0, i64 1
store double 0x3FC3B110EC66E704, double* %25
%26 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 1
%27 = getelementptr inbounds [3 x double], [3 x double]* %26, i64 0, i64 2
store double 0.000000e+00, double* %27
%28 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 2
%29 = getelementptr inbounds [3 x double], [3 x double]* %28, i64 0, i64 0
store double 0xBFC6D0EF8144FD55, double* %29
%30 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 2
%31 = getelementptr inbounds [3 x double], [3 x double]* %30, i64 0, i64 1
store double 0.000000e+00, double* %31
%32 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 2
%33 = getelementptr inbounds [3 x double], [3 x double]* %32, i64 0, i64 2
store double 0.000000e+00, double* %33
%34 = getelementptr inbounds [2 x double], [2 x double]* %10, i64 0, i64 0
store double 0x3FB36F77DD39AEBC, double* %34
%35 = getelementptr inbounds [2 x double], [2 x double]* %10, i64 0, i64 1
store double 0xBF964C835656CE30, double* %35
store double 0.000000e+00, double* %11
store i32 0, i32* %13
br label %36
36: ; preds = %68, %2
%37 = load i32, i32* %13
%38 = icmp slt i32 %37, 3
br i1 %38, label %39, label %71
39: ; preds = %36
store i32 0, i32* %14
br label %40
40: ; preds = %64, %39
%41 = load i32, i32* %14
%42 = icmp slt i32 %41, 3
br i1 %42, label %43, label %67
43: ; preds = %40
%44 = load double, double* %11
%45 = load i32, i32* %13
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %9, i64 0, i64 %46
%48 = load i32, i32* %14
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds [3 x double], [3 x double]* %47, i64 0, i64 %49
%51 = load double, double* %50
%52 = load double, double* %3
%53 = load i32, i32* %13
%54 = mul nsw i32 2, %53
%55 = call i32 @pow(double %52, i32 %54)
%56 = sitofp i32 %55 to double
%57 = fmul double %51, %56
%58 = load double, double* %4
%59 = load i32, i32* %14
%60 = mul nsw i32 2, %59
%61 = call i32 @pow(double %58, i32 %60)
%62 = sitofp i32 %61 to double
%63 = call double @llvm.fmuladd.f64(double %57, double %62, double %44)
store double %63, double* %11
br label %64
64: ; preds = %43
%65 = load i32, i32* %14
%66 = add nsw i32 %65, 1
store i32 %66, i32* %14
br label %40
67: ; preds = %40
br label %68
68: ; preds = %67
%69 = load i32, i32* %13
%70 = add nsw i32 %69, 1
store i32 %70, i32* %13
br label %36
71: ; preds = %36
%72 = load double, double* %11
%73 = load double, double* %4
%74 = call i32 @pow(double %73, i32 2)
%75 = sub nsw i32 1, %74
%76 = sitofp i32 %75 to double
%77 = fmul double %72, %76
store double %77, double* %11
store double 0.000000e+00, double* %12
store i32 0, i32* %13
br label %78
78: ; preds = %93, %71
%79 = load i32, i32* %13
%80 = icmp slt i32 %79, 2
br i1 %80, label %81, label %96
81: ; preds = %78
%82 = load double, double* %12
%83 = load i32, i32* %13
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [2 x double], [2 x double]* %10, i64 0, i64 %84
%86 = load double, double* %85
%87 = load double, double* %3
%88 = load i32, i32* %13
%89 = mul nsw i32 2, %88
%90 = call i32 @pow(double %87, i32 %89)
%91 = sitofp i32 %90 to double
%92 = call double @llvm.fmuladd.f64(double %86, double %91, double %82)
store double %92, double* %12
br label %93
93: ; preds = %81
%94 = load i32, i32* %13
%95 = add nsw i32 %94, 1
store i32 %95, i32* %13
br label %78
96: ; preds = %78
%97 = load double, double* %12
%98 = load double, double* %3
%99 = call i32 @pow(double %98, i32 2)
%100 = sub nsw i32 1, %99
%101 = sitofp i32 %100 to double
%102 = fmul double %97, %101
store double %102, double* %12
%103 = load double, double* %3
%104 = load double, double* %5
%105 = load double, double* %3
%106 = call i32 @pow(double %105, i32 3)
%107 = sitofp i32 %106 to double
%108 = load double, double* %5
%109 = fsub double 1.000000e+00, %108
%110 = fmul double %107, %109
%111 = call double @llvm.fmuladd.f64(double %103, double %104, double %110)
%112 = load double, double* %3
%113 = load double, double* %4
%114 = call i32 @pow(double %113, i32 2)
%115 = sitofp i32 %114 to double
%116 = fmul double %112, %115
%117 = load double, double* %3
%118 = call i32 @pow(double %117, i32 2)
%119 = sub nsw i32 1, %118
%120 = sitofp i32 %119 to double
%121 = fmul double %116, %120
%122 = load double, double* %7
%123 = load double, double* %6
%124 = load double, double* %7
%125 = fsub double %123, %124
%126 = load double, double* %3
%127 = call i32 @pow(double %126, i32 2)
%128 = sitofp i32 %127 to double
%129 = call double @llvm.fmuladd.f64(double %125, double %128, double %122)
%130 = load double, double* %11
%131 = fadd double %129, %130
%132 = call double @llvm.fmuladd.f64(double %121, double %131, double %111)
%133 = load double, double* %3
%134 = call i32 @pow(double %133, i32 3)
%135 = load double, double* %3
%136 = call i32 @pow(double %135, i32 2)
%137 = sub nsw i32 1, %136
%138 = mul nsw i32 %134, %137
%139 = sitofp i32 %138 to double
%140 = load double, double* %8
%141 = load double, double* %12
%142 = fsub double %140, %141
%143 = call double @llvm.fmuladd.f64(double %139, double %142, double %132)
store double %143, double* %15
%144 = load double, double* %15
ret double %144
}

LLVM IR (-O2):
define double @csc_fwarp(double %0, double %1) {
%3 = tail call i32 @pow(double %0, i32 0)
%4 = sitofp i32 %3 to double
%5 = fmul double %4, 0x3FC21280782A83A8
%6 = tail call i32 @pow(double %1, i32 0)
%7 = sitofp i32 %6 to double
%8 = tail call double @llvm.fmuladd.f64(double %5, double %7, double 0.000000e+00)
%9 = tail call i32 @pow(double %0, i32 0)
%10 = sitofp i32 %9 to double
%11 = fmul double %10, 0xBFD204904120CDF3
%12 = tail call i32 @pow(double %1, i32 2)
%13 = sitofp i32 %12 to double
%14 = tail call double @llvm.fmuladd.f64(double %11, double %13, double %8)
%15 = tail call i32 @pow(double %0, i32 0)
%16 = sitofp i32 %15 to double
%17 = fmul double %16, 0x3FBB61B21EB37E46
%18 = tail call i32 @pow(double %1, i32 4)
%19 = sitofp i32 %18 to double
%20 = tail call double @llvm.fmuladd.f64(double %17, double %19, double %14)
%21 = tail call i32 @pow(double %0, i32 2)
%22 = sitofp i32 %21 to double
%23 = fmul double %22, 0x3FB4BA755683F142
%24 = tail call i32 @pow(double %1, i32 0)
%25 = sitofp i32 %24 to double
%26 = tail call double @llvm.fmuladd.f64(double %23, double %25, double %20)
%27 = tail call i32 @pow(double %0, i32 2)
%28 = sitofp i32 %27 to double
%29 = fmul double %28, 0x3FC3B110EC66E704
%30 = tail call i32 @pow(double %1, i32 2)
%31 = sitofp i32 %30 to double
%32 = tail call double @llvm.fmuladd.f64(double %29, double %31, double %26)
%33 = tail call i32 @pow(double %0, i32 2)
%34 = sitofp i32 %33 to double
%35 = fmul double %34, 0.000000e+00
%36 = tail call i32 @pow(double %1, i32 4)
%37 = sitofp i32 %36 to double
%38 = tail call double @llvm.fmuladd.f64(double %35, double %37, double %32)
%39 = tail call i32 @pow(double %0, i32 4)
%40 = sitofp i32 %39 to double
%41 = tail call i32 @pow(double %1, i32 0)
%42 = sitofp i32 %41 to double
%43 = tail call i32 @pow(double %0, i32 4)
%44 = sitofp i32 %43 to double
%45 = tail call i32 @pow(double %1, i32 2)
%46 = sitofp i32 %45 to double
%47 = tail call i32 @pow(double %0, i32 4)
%48 = sitofp i32 %47 to double
%49 = tail call i32 @pow(double %1, i32 4)
%50 = sitofp i32 %49 to double
%51 = tail call i32 @pow(double %1, i32 2)
%52 = tail call i32 @pow(double %0, i32 0)
%53 = sitofp i32 %52 to double
%54 = tail call double @llvm.fmuladd.f64(double %53, double 0x3FB36F77DD39AEBC, double 0.000000e+00)
%55 = tail call i32 @pow(double %0, i32 2)
%56 = sitofp i32 %55 to double
%57 = tail call double @llvm.fmuladd.f64(double %56, double 0xBF964C835656CE30, double %54)
%58 = fmul double %40, 0xBFC6D0EF8144FD55
%59 = tail call double @llvm.fmuladd.f64(double %58, double %42, double %38)
%60 = fmul double %44, 0.000000e+00
%61 = tail call double @llvm.fmuladd.f64(double %60, double %46, double %59)
%62 = fmul double %48, 0.000000e+00
%63 = tail call double @llvm.fmuladd.f64(double %62, double %50, double %61)
%64 = sub nsw i32 1, %51
%65 = sitofp i32 %64 to double
%66 = fmul double %63, %65
%67 = tail call i32 @pow(double %0, i32 2)
%68 = sub nsw i32 1, %67
%69 = sitofp i32 %68 to double
%70 = fmul double %57, %69
%71 = tail call i32 @pow(double %0, i32 3)
%72 = sitofp i32 %71 to double
%73 = fmul double %72, 0xBFD7FD8477C2DDF8
%74 = tail call double @llvm.fmuladd.f64(double %0, double 0x3FF5FF611DF0B77E, double %73)
%75 = tail call i32 @pow(double %1, i32 2)
%76 = sitofp i32 %75 to double
%77 = fmul double %76, %0
%78 = tail call i32 @pow(double %0, i32 2)
%79 = sub nsw i32 1, %78
%80 = sitofp i32 %79 to double
%81 = fmul double %77, %80
%82 = tail call i32 @pow(double %0, i32 2)
%83 = sitofp i32 %82 to double
%84 = tail call double @llvm.fmuladd.f64(double %83, double 0x3FC17861491C63A1, double 0xBFC0D8D106B52747)
%85 = fadd double %66, %84
%86 = tail call double @llvm.fmuladd.f64(double %81, double %85, double %74)
%87 = tail call i32 @pow(double %0, i32 3)
%88 = tail call i32 @pow(double %0, i32 2)
%89 = sub nsw i32 1, %88
%90 = mul nsw i32 %89, %87
%91 = sitofp i32 %90 to double
%92 = fsub double 0xBFC46DA641F67843, %70
%93 = tail call double @llvm.fmuladd.f64(double %91, double %92, double %86)
ret double %93
}