#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 fabs(double);
double SplineBlend(int k, int t, const int *u, double v, int n) {
  double value = 0.0;
  double d1, d2;
  if (t == 1) {
    if (((u[k] <= v) && (v < u[k + 1])) ||
        (fabs(v - u[k + 1]) < 1e-10 && (k + 1 == n)))
      value = 1;
    else
      value = 0;
  } else {
    d1 = u[k + t - 1] - u[k];
    d2 = u[k + t] - u[k + 1];
    if ((d1 == 0) && (d2 == 0))
      value = 0;
    else if (d1 == 0)
      value = (u[k + t] - v) / (double)d2 * SplineBlend(k + 1, t - 1, u, v, n);
    else if (d2 == 0)
      value = (v - u[k]) / (double)d1 * SplineBlend(k, t - 1, u, v, n);
    else
      value = (v - u[k]) / (double)d1 * SplineBlend(k, t - 1, u, v, n) +
              (u[k + t] - v) / (double)d2 * SplineBlend(k + 1, t - 1, u, v, n);
  }
  if (value < 0) {
    value = 0;
  }
  return (value);
}


x86 assembly (clang, -O0):
<SplineBlend>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
cmpl   $0x1,-0x8(%rbp)
jne    11ed <SplineBlend+0xcd>
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
movsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1189 <SplineBlend+0x69>
movsd  -0x18(%rbp),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
ucomisd %xmm1,%xmm0
ja     11ce <SplineBlend+0xae>
movsd  -0x18(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
subsd  %xmm1,%xmm0
call   1030 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xe4b(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11e0 <SplineBlend+0xc0>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
cmp    -0x1c(%rbp),%eax
jne    11e0 <SplineBlend+0xc0>
movsd  0xe32(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    11e8 <SplineBlend+0xc8>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    13fd <SplineBlend+0x2dd>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    -0x8(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x4(%rbp),%rdx
sub    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x4(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
sub    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    127a <SplineBlend+0x15a>
jp     127a <SplineBlend+0x15a>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    127a <SplineBlend+0x15a>
jp     127a <SplineBlend+0x15a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    13f8 <SplineBlend+0x2d8>
movsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12e6 <SplineBlend+0x1c6>
jp     12e6 <SplineBlend+0x1c6>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
subsd  -0x18(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x4(%rbp),%edi
add    $0x1,%edi
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
mov    -0x10(%rbp),%rdx
movsd  -0x18(%rbp),%xmm0
mov    -0x1c(%rbp),%ecx
call   1040 <SplineBlend@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    13f3 <SplineBlend+0x2d3>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    134e <SplineBlend+0x22e>
jp     134e <SplineBlend+0x22e>
movsd  -0x18(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
mov    -0x10(%rbp),%rdx
movsd  -0x18(%rbp),%xmm0
mov    -0x1c(%rbp),%ecx
call   1040 <SplineBlend@plt>
movaps %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    13ee <SplineBlend+0x2ce>
movsd  -0x18(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
subsd  %xmm1,%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
mov    -0x10(%rbp),%rdx
movsd  -0x18(%rbp),%xmm0
mov    -0x1c(%rbp),%ecx
call   1040 <SplineBlend@plt>
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
subsd  -0x18(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x4(%rbp),%edi
add    $0x1,%edi
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
mov    -0x10(%rbp),%rdx
movsd  -0x18(%rbp),%xmm0
mov    -0x1c(%rbp),%ecx
call   1040 <SplineBlend@plt>
movsd  -0x60(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm2
movaps %xmm0,%xmm3
movsd  -0x50(%rbp),%xmm0
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    13f3 <SplineBlend+0x2d3>
jmp    13f8 <SplineBlend+0x2d8>
jmp    13fd <SplineBlend+0x2dd>
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    1413 <SplineBlend+0x2f3>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<SplineBlend>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %ecx,%r14d
mov    %rdx,%rbx
cmp    $0x1,%esi
jne    1170 <SplineBlend+0x50>
movslq %edi,%rax
cvtsi2sdl (%rbx,%rax,4),%xmm1
add    $0x1,%edi
ucomisd %xmm1,%xmm0
movslq %edi,%rbp
jb     1256 <SplineBlend+0x136>
xorps  %xmm1,%xmm1
cvtsi2sdl (%rbx,%rbp,4),%xmm1
ucomisd %xmm0,%xmm1
jbe    1256 <SplineBlend+0x136>
movsd  0xe95(%rip),%xmm3
jmp    12bc <SplineBlend+0x19c>
mov    %esi,%ebp
lea    (%rdi,%rbp,1),%eax
movslq %edi,%rdx
mov    (%rbx,%rdx,4),%r13d
movslq %eax,%r12
mov    -0x4(%rbx,%r12,4),%eax
mov    (%rbx,%r12,4),%ecx
sub    %r13d,%eax
mov    %ecx,%r15d
sub    0x4(%rbx,%rdx,4),%r15d
xorpd  %xmm3,%xmm3
mov    %eax,%edx
or     %r15d,%edx
je     12bc <SplineBlend+0x19c>
lea    0x1(%rdi),%edx
cvtsi2sd %r15d,%xmm1
test   %eax,%eax
je     1288 <SplineBlend+0x168>
movsd  %xmm1,0x20(%rsp)
mov    %edx,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  %xmm1,0x18(%rsp)
add    $0xffffffff,%ebp
mov    %ebp,%esi
mov    %rbx,%rdx
mov    %r14d,%ecx
movsd  %xmm0,0x8(%rsp)
call   1040 <SplineBlend@plt>
movsd  0x8(%rsp),%xmm2
xorps  %xmm1,%xmm1
cvtsi2sd %r13d,%xmm1
movapd %xmm2,%xmm3
subsd  %xmm1,%xmm3
divsd  0x18(%rsp),%xmm3
test   %r15d,%r15d
je     12b8 <SplineBlend+0x198>
xorps  %xmm1,%xmm1
cvtsi2sdl (%rbx,%r12,4),%xmm1
subsd  %xmm2,%xmm1
divsd  0x20(%rsp),%xmm1
movsd  %xmm1,0x18(%rsp)
mov    0x10(%rsp),%edi
mov    %ebp,%esi
mov    %rbx,%rdx
movsd  %xmm0,0x10(%rsp)
movapd %xmm2,%xmm0
mov    %r14d,%ecx
movsd  %xmm3,0x8(%rsp)
call   1040 <SplineBlend@plt>
movsd  0x8(%rsp),%xmm3
mulsd  0x18(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm3
addsd  %xmm0,%xmm3
jmp    12bc <SplineBlend+0x19c>
xorps  %xmm1,%xmm1
cvtsi2sdl (%rbx,%rbp,4),%xmm1
subsd  %xmm1,%xmm0
call   1030 <fabs@plt>
cmp    %r14d,%ebp
je     1276 <SplineBlend+0x156>
xorpd  %xmm3,%xmm3
test   %eax,%eax
jg     1282 <SplineBlend+0x162>
jmp    12bc <SplineBlend+0x19c>
movsd  0xd82(%rip),%xmm3
test   %eax,%eax
jle    12bc <SplineBlend+0x19c>
xorpd  %xmm3,%xmm3
jmp    12bc <SplineBlend+0x19c>
cvtsi2sd %ecx,%xmm2
subsd  %xmm0,%xmm2
divsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rsp)
add    $0xffffffff,%ebp
mov    %edx,%edi
mov    %ebp,%esi
mov    %rbx,%rdx
mov    %r14d,%ecx
call   1040 <SplineBlend@plt>
movapd %xmm0,%xmm3
mulsd  0x8(%rsp),%xmm3
jmp    12bc <SplineBlend+0x19c>
mulsd  %xmm0,%xmm3
xorpd  %xmm0,%xmm0
maxsd  %xmm3,%xmm0
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define double @SplineBlend(i32 %0, i32 %1, i32* %2, double %3, i32 %4) {
%6 = icmp eq i32 %1, 1
br i1 %6, label %7, label %30
7: ; preds = %5
%8 = sext i32 %0 to i64
%9 = getelementptr inbounds i32, i32* %2, i64 %8
%10 = load i32, i32* %9
%11 = sitofp i32 %10 to double
%12 = fcmp ugt double %11, %3
%13 = add nsw i32 %0, 1
%14 = sext i32 %13 to i64
br i1 %12, label %20, label %15
15: ; preds = %7
%16 = getelementptr inbounds i32, i32* %2, i64 %14
%17 = load i32, i32* %16
%18 = sitofp i32 %17 to double
%19 = fcmp ogt double %18, %3
br i1 %19, label %77, label %20
20: ; preds = %7, %15
%21 = getelementptr inbounds i32, i32* %2, i64 %14
%22 = load i32, i32* %21
%23 = sitofp i32 %22 to double
%24 = fsub double %3, %23
%25 = tail call i32 @fabs(double %24)
%26 = icmp slt i32 %25, 1
%27 = icmp eq i32 %13, %4
%28 = select i1 %26, i1 %27, i1 false
%29 = select i1 %28, double 1.000000e+00, double 0.000000e+00
br label %77
30: ; preds = %5
%31 = add nsw i32 %1, %0
%32 = add nsw i32 %31, -1
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i32, i32* %2, i64 %33
%35 = load i32, i32* %34
%36 = sext i32 %0 to i64
%37 = getelementptr inbounds i32, i32* %2, i64 %36
%38 = load i32, i32* %37
%39 = sub nsw i32 %35, %38
%40 = sitofp i32 %39 to double
%41 = sext i32 %31 to i64
%42 = getelementptr inbounds i32, i32* %2, i64 %41
%43 = load i32, i32* %42
%44 = add nsw i32 %0, 1
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i32, i32* %2, i64 %45
%47 = load i32, i32* %46
%48 = sub nsw i32 %43, %47
%49 = sitofp i32 %48 to double
%50 = icmp eq i32 %39, 0
%51 = icmp eq i32 %48, 0
%52 = select i1 %50, i1 %51, i1 false
br i1 %52, label %77, label %53
53: ; preds = %30
br i1 %50, label %54, label %61
54: ; preds = %53
%55 = sitofp i32 %43 to double
%56 = fsub double %55, %3
%57 = fdiv double %56, %49
%58 = add nsw i32 %1, -1
%59 = tail call double @SplineBlend(i32 %44, i32 %58, i32* %2, double %3, i32 %4)
%60 = fmul double %57, %59
br label %77
61: ; preds = %53
%62 = sitofp i32 %38 to double
%63 = fsub double %3, %62
%64 = fdiv double %63, %40
%65 = add nsw i32 %1, -1
%66 = tail call double @SplineBlend(i32 %0, i32 %65, i32* %2, double %3, i32 %4)
br i1 %51, label %67, label %69
67: ; preds = %61
%68 = fmul double %64, %66
br label %77
69: ; preds = %61
%70 = load i32, i32* %42
%71 = sitofp i32 %70 to double
%72 = fsub double %71, %3
%73 = fdiv double %72, %49
%74 = tail call double @SplineBlend(i32 %44, i32 %65, i32* %2, double %3, i32 %4)
%75 = fmul double %74, %73
%76 = tail call double @llvm.fmuladd.f64(double %64, double %66, double %75)
br label %77
77: ; preds = %20, %30, %15, %67, %69, %54
%78 = phi double [ %60, %54 ], [ %68, %67 ], [ %76, %69 ], [ 1.000000e+00, %15 ], [ 0.000000e+00, %30 ], [ %29, %20 ]
%79 = fcmp olt double %78, 0.000000e+00
%80 = select i1 %79, double 0.000000e+00, double %78
ret double %80
}