#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 pow(double, int);
double spline(double x, double *X, double *a, double *b, double *c, double *d) {
  int opcion = -1;
  if ((0 < x) && (x < 2))
    opcion = 1;
  else if ((2 < x) && (x < 3))
    opcion = 2;
  else if ((3 < x) && (x < 5))
    opcion = 3;
  else if ((5 < x) && (x < 6.1))
    opcion = 4;
  switch (opcion) {
  case (1):
    return (a[0] * pow(x - X[0], 3) + b[0] * pow(x - X[0], 2) +
            c[0] * (x - X[0]) + d[0]);
    break;
  case (2):
    return (a[1] * pow(x - X[1], 3) + b[1] * pow(x - X[1], 2) +
            c[1] * (x - X[1]) + d[1]);
    break;
  case (3):
    return (a[2] * pow(x - X[2], 3) + b[2] * pow(x - X[2], 2) +
            c[2] * (x - X[2]) + d[2]);
    break;
  case (4):
    return (a[3] * pow(x - X[3], 3) + b[3] * pow(x - X[3], 2) +
            c[3] * (x - X[3]) + d[3]);
    break;
  default:
    break;
  }
}


x86 assembly (clang, -O0):
<spline>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
movsd  %xmm0,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
movl   $0xffffffff,-0x3c(%rbp)
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    116c <spline+0x5c>
movsd  0xeab(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    116c <spline+0x5c>
movl   $0x1,-0x3c(%rbp)
jmp    1218 <spline+0x108>
movsd  -0x10(%rbp),%xmm0
movsd  0xe87(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11a2 <spline+0x92>
movsd  0xe7d(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    11a2 <spline+0x92>
movl   $0x2,-0x3c(%rbp)
jmp    1213 <spline+0x103>
movsd  -0x10(%rbp),%xmm0
movsd  0xe59(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11d8 <spline+0xc8>
movsd  0xe4f(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    11d8 <spline+0xc8>
movl   $0x3,-0x3c(%rbp)
jmp    120e <spline+0xfe>
movsd  -0x10(%rbp),%xmm0
movsd  0xe2b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1209 <spline+0xf9>
movsd  0xe21(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1209 <spline+0xf9>
movl   $0x4,-0x3c(%rbp)
jmp    120e <spline+0xfe>
jmp    1213 <spline+0x103>
jmp    1218 <spline+0x108>
mov    -0x3c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x3,%eax
ja     14dc <spline+0x3cc>
mov    -0x48(%rbp),%rax
lea    0xde8(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x60(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm2
movaps %xmm0,%xmm3
movsd  -0x50(%rbp),%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x10(%rbp),%xmm2
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14e1 <spline+0x3d1>
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x8(%rax),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x70(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x8(%rax),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x78(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm2
movaps %xmm0,%xmm3
movsd  -0x68(%rbp),%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x10(%rbp),%xmm2
mov    -0x18(%rbp),%rax
subsd  0x8(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
addsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14e1 <spline+0x3d1>
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x10(%rax),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x10(%rax),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x88(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x80(%rbp),%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x10(%rbp),%xmm2
mov    -0x18(%rbp),%rax
subsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
addsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14e1 <spline+0x3d1>
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x18(%rax),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x18(%rax),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xa0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x98(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x10(%rbp),%xmm2
mov    -0x18(%rbp),%rax
subsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
addsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14e1 <spline+0x3d1>
jmp    14e1 <spline+0x3d1>
movsd  -0x8(%rbp),%xmm0
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<spline>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r8,%r15
mov    %rcx,%r14
mov    %rdx,%r12
mov    %rdi,%rbx
movapd %xmm0,%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
jbe    11b9 <spline+0xa9>
movsd  0xebd(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11b9 <spline+0xa9>
movsd  (%rsi),%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm1,%xmm0
subsd  (%rbx),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,0x18(%rsp)
movsd  (%r12),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
subsd  (%rbx),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  0x8(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm0
movsd  0x18(%rsp),%xmm2
mulsd  0x20(%rsp),%xmm2
subsd  (%rbx),%xmm1
addsd  %xmm0,%xmm2
mulsd  (%r14),%xmm1
addsd  %xmm2,%xmm1
jmp    1376 <spline+0x266>
ucomisd 0xe3f(%rip),%xmm1
jbe    124f <spline+0x13f>
movsd  0xe39(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    124f <spline+0x13f>
movsd  0x8(%rsi),%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm1,%xmm0
subsd  0x8(%rbx),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%r12),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
subsd  0x8(%rbx),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  0x8(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm0
movsd  0x18(%rsp),%xmm2
mulsd  0x20(%rsp),%xmm2
addsd  %xmm0,%xmm2
subsd  0x8(%rbx),%xmm1
mulsd  0x8(%r14),%xmm1
addsd  %xmm2,%xmm1
add    $0x8,%r15
jmp    1376 <spline+0x266>
ucomisd 0xdb1(%rip),%xmm1
jbe    12e5 <spline+0x1d5>
movsd  0xdab(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12e5 <spline+0x1d5>
movsd  0x10(%rsi),%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm1,%xmm0
subsd  0x10(%rbx),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%r12),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
subsd  0x10(%rbx),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  0x8(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm0
movsd  0x18(%rsp),%xmm2
mulsd  0x20(%rsp),%xmm2
addsd  %xmm0,%xmm2
subsd  0x10(%rbx),%xmm1
mulsd  0x10(%r14),%xmm1
addsd  %xmm2,%xmm1
add    $0x10,%r15
jmp    1376 <spline+0x266>
ucomisd 0xd23(%rip),%xmm1
jbe    137b <spline+0x26b>
movsd  0xd1d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    137b <spline+0x26b>
movsd  0x18(%rsi),%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm1,%xmm0
subsd  0x18(%rbx),%xmm0
mov    $0x3,%edi
call   1030 <pow@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x18(%r12),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
subsd  0x18(%rbx),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  0x8(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm0
movsd  0x18(%rsp),%xmm2
mulsd  0x20(%rsp),%xmm2
addsd  %xmm0,%xmm2
subsd  0x18(%rbx),%xmm1
mulsd  0x18(%r14),%xmm1
addsd  %xmm2,%xmm1
add    $0x18,%r15
addsd  (%r15),%xmm1
movapd %xmm1,%xmm0
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

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

LLVM IR (-O2):
define double @spline(double %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture %5) {
%7 = fcmp ogt double %0, 0.000000e+00
%8 = fcmp olt double %0, 2.000000e+00
%9 = and i1 %7, %8
br i1 %9, label %22, label %10
10: ; preds = %6
%11 = fcmp ogt double %0, 2.000000e+00
%12 = fcmp olt double %0, 3.000000e+00
%13 = and i1 %11, %12
br i1 %13, label %37, label %14
14: ; preds = %10
%15 = fcmp ogt double %0, 3.000000e+00
%16 = fcmp olt double %0, 5.000000e+00
%17 = and i1 %15, %16
br i1 %17, label %57, label %18
18: ; preds = %14
%19 = fcmp ogt double %0, 5.000000e+00
%20 = fcmp olt double %0, 6.100000e+00
%21 = and i1 %19, %20
br i1 %21, label %77, label %102
22: ; preds = %6
%23 = load double, double* %2
%24 = load double, double* %1
%25 = fsub double %0, %24
%26 = tail call double @pow(double %25, i32 3)
%27 = load double, double* %3
%28 = load double, double* %1
%29 = fsub double %0, %28
%30 = tail call double @pow(double %29, i32 2)
%31 = fmul double %27, %30
%32 = tail call double @llvm.fmuladd.f64(double %23, double %26, double %31)
%33 = load double, double* %4
%34 = load double, double* %1
%35 = fsub double %0, %34
%36 = tail call double @llvm.fmuladd.f64(double %33, double %35, double %32)
br label %97
37: ; preds = %10
%38 = getelementptr inbounds double, double* %2, i64 1
%39 = load double, double* %38
%40 = getelementptr inbounds double, double* %1, i64 1
%41 = load double, double* %40
%42 = fsub double %0, %41
%43 = tail call double @pow(double %42, i32 3)
%44 = getelementptr inbounds double, double* %3, i64 1
%45 = load double, double* %44
%46 = load double, double* %40
%47 = fsub double %0, %46
%48 = tail call double @pow(double %47, i32 2)
%49 = fmul double %45, %48
%50 = tail call double @llvm.fmuladd.f64(double %39, double %43, double %49)
%51 = getelementptr inbounds double, double* %4, i64 1
%52 = load double, double* %51
%53 = load double, double* %40
%54 = fsub double %0, %53
%55 = tail call double @llvm.fmuladd.f64(double %52, double %54, double %50)
%56 = getelementptr inbounds double, double* %5, i64 1
br label %97
57: ; preds = %14
%58 = getelementptr inbounds double, double* %2, i64 2
%59 = load double, double* %58
%60 = getelementptr inbounds double, double* %1, i64 2
%61 = load double, double* %60
%62 = fsub double %0, %61
%63 = tail call double @pow(double %62, i32 3)
%64 = getelementptr inbounds double, double* %3, i64 2
%65 = load double, double* %64
%66 = load double, double* %60
%67 = fsub double %0, %66
%68 = tail call double @pow(double %67, i32 2)
%69 = fmul double %65, %68
%70 = tail call double @llvm.fmuladd.f64(double %59, double %63, double %69)
%71 = getelementptr inbounds double, double* %4, i64 2
%72 = load double, double* %71
%73 = load double, double* %60
%74 = fsub double %0, %73
%75 = tail call double @llvm.fmuladd.f64(double %72, double %74, double %70)
%76 = getelementptr inbounds double, double* %5, i64 2
br label %97
77: ; preds = %18
%78 = getelementptr inbounds double, double* %2, i64 3
%79 = load double, double* %78
%80 = getelementptr inbounds double, double* %1, i64 3
%81 = load double, double* %80
%82 = fsub double %0, %81
%83 = tail call double @pow(double %82, i32 3)
%84 = getelementptr inbounds double, double* %3, i64 3
%85 = load double, double* %84
%86 = load double, double* %80
%87 = fsub double %0, %86
%88 = tail call double @pow(double %87, i32 2)
%89 = fmul double %85, %88
%90 = tail call double @llvm.fmuladd.f64(double %79, double %83, double %89)
%91 = getelementptr inbounds double, double* %4, i64 3
%92 = load double, double* %91
%93 = load double, double* %80
%94 = fsub double %0, %93
%95 = tail call double @llvm.fmuladd.f64(double %92, double %94, double %90)
%96 = getelementptr inbounds double, double* %5, i64 3
br label %97
97: ; preds = %22, %37, %57, %77
%98 = phi double* [ %96, %77 ], [ %76, %57 ], [ %56, %37 ], [ %5, %22 ]
%99 = phi double [ %95, %77 ], [ %75, %57 ], [ %55, %37 ], [ %36, %22 ]
%100 = load double, double* %98
%101 = fadd double %100, %99
br label %102
102: ; preds = %97, %18
%103 = phi double [ undef, %18 ], [ %101, %97 ]
ret double %103
}