int spread(double y, double *yy, int n, double x, int m) {
  int ihi, ilo, ix, j, nden;
  static int nfac[11] = {0, 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
  double fac;
  if (m > 10)
    return (1);
  ix = (int)x;
  if (x == (double)ix)
    yy[ix - 1] += y;
  else {
    ilo = (((((x - 0.5 * m + 1.0)) > (1) ? ((x - 0.5 * m + 1.0)) : (1))) <
                   (n - m + 1)
               ? ((((x - 0.5 * m + 1.0)) > (1) ? ((x - 0.5 * m + 1.0)) : (1)))
               : (n - m + 1));
    ihi = ilo + m - 1;
    nden = nfac[m];
    fac = x - ilo;
    for (j = ilo + 1; j <= ihi; j++)
      fac *= (x - j);
    yy[ihi - 1] += y * fac / (nden * (x - ihi));
    for (j = ihi - 1; j >= ilo; j--) {
      nden = (nden / (j + 1 - ilo)) * (j - ihi);
      yy[j - 1] += y * fac / (nden * (x - j));
    }
  }
  return (0);
}


x86 assembly (clang, -O0):
<spread>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %esi,-0x1c(%rbp)
movsd  %xmm1,-0x28(%rbp)
mov    %edx,-0x2c(%rbp)
cmpl   $0xa,-0x2c(%rbp)
jle    112e <spread+0x2e>
movl   $0x1,-0x4(%rbp)
jmp    13db <spread+0x2db>
cvttsd2si -0x28(%rbp),%eax
mov    %eax,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jne    1171 <spread+0x71>
jp     1171 <spread+0x71>
movsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    13d4 <spread+0x2d4>
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0x2c(%rbp),%xmm0
movsd  0xe85(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe6d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xe61(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11d9 <spread+0xd9>
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0x2c(%rbp),%xmm0
movsd  0xe4d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe35(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    11eb <spread+0xeb>
movsd  0xe1f(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    11eb <spread+0xeb>
movsd  -0x50(%rbp),%xmm1
mov    -0x1c(%rbp),%eax
sub    -0x2c(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
ucomisd %xmm1,%xmm0
jbe    1290 <spread+0x190>
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0x2c(%rbp),%xmm0
movsd  0xdef(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xdd7(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xdcb(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    126f <spread+0x16f>
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0x2c(%rbp),%xmm0
movsd  0xdb7(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xd9f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1281 <spread+0x181>
movsd  0xd89(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1281 <spread+0x181>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    12a2 <spread+0x1a2>
mov    -0x1c(%rbp),%eax
sub    -0x2c(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
movslq -0x2c(%rbp),%rcx
lea    0x2d6b(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x34(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jg     1319 <spread+0x219>
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
subsd  %xmm1,%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12e7 <spread+0x1e7>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
cvtsi2sdl -0x30(%rbp),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jl     13cf <spread+0x2cf>
mov    -0x40(%rbp),%eax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
sub    -0x34(%rbp),%ecx
cltd
idiv   %ecx
mov    -0x3c(%rbp),%ecx
sub    -0x30(%rbp),%ecx
imul   %ecx,%eax
mov    %eax,-0x40(%rbp)
movsd  -0x10(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
cvtsi2sdl -0x3c(%rbp),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3c(%rbp)
jmp    135e <spread+0x25e>
jmp    13d4 <spread+0x2d4>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<spread>:
push   %rbx
mov    $0x1,%r11d
cmp    $0xa,%edx
jg     131b <spread+0x21b>
cvttpd2dq %xmm1,%xmm2
cvtdq2pd %xmm2,%xmm2
ucomisd %xmm1,%xmm2
jne    113a <spread+0x3a>
jp     113a <spread+0x3a>
cvttsd2si %xmm1,%eax
cltq
addsd  -0x8(%rdi,%rax,8),%xmm0
movsd  %xmm0,-0x8(%rdi,%rax,8)
xor    %r11d,%r11d
jmp    131b <spread+0x21b>
mov    %edx,%r8d
cvtsi2sd %edx,%xmm3
mulsd  0xeb7(%rip),%xmm3
addsd  %xmm1,%xmm3
movsd  0xeb3(%rip),%xmm4
addsd  %xmm4,%xmm3
movapd %xmm3,%xmm2
maxsd  %xmm4,%xmm2
sub    %edx,%esi
add    $0x1,%esi
cvtsi2sd %esi,%xmm5
ucomisd %xmm2,%xmm5
cmpnltsd %xmm5,%xmm2
andpd  %xmm2,%xmm5
andnpd %xmm4,%xmm2
orpd   %xmm5,%xmm2
jbe    119a <spread+0x9a>
cmpltsd %xmm3,%xmm4
movapd %xmm4,%xmm5
andnpd %xmm2,%xmm5
andpd  %xmm3,%xmm4
orpd   %xmm5,%xmm4
movapd %xmm4,%xmm2
cvttsd2si %xmm2,%r9d
lea    (%r9,%r8,1),%r10d
lea    (%r9,%r8,1),%ebx
add    $0xffffffff,%ebx
movslq %r8d,%rax
lea    0xe5c(%rip),%rdx
mov    (%rdx,%rax,4),%eax
cvttpd2dq %xmm2,%xmm2
cvtdq2pd %xmm2,%xmm3
movapd %xmm1,%xmm2
subsd  %xmm3,%xmm2
cmp    %r9d,%ebx
jle    1273 <spread+0x173>
lea    -0x1(%r8),%esi
lea    -0x2(%r8),%r11d
mov    %r9d,%edx
and    $0x3,%esi
je     11fb <spread+0xfb>
add    $0x1,%edx
xorps  %xmm3,%xmm3
cvtsi2sd %edx,%xmm3
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
mulsd  %xmm4,%xmm2
add    $0xffffffff,%esi
jne    11e0 <spread+0xe0>
cmp    $0x3,%r11d
jb     1273 <spread+0x173>
mov    %r10d,%esi
neg    %esi
add    $0x2,%edx
nopl   0x0(%rax)
lea    -0x1(%rdx),%ecx
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
xorps  %xmm3,%xmm3
cvtsi2sd %edx,%xmm3
mulsd  %xmm2,%xmm4
movapd %xmm1,%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm4,%xmm2
lea    0x1(%rdx),%ecx
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
mulsd  %xmm2,%xmm4
lea    0x2(%rdx),%ecx
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
movapd %xmm1,%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm4,%xmm2
lea    (%rsi,%rdx,1),%ecx
add    $0x4,%ecx
add    $0x4,%edx
cmp    $0x1,%ecx
jne    1210 <spread+0x110>
mulsd  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
xorps  %xmm3,%xmm3
cvtsi2sd %ebx,%xmm3
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
movapd %xmm2,%xmm0
divsd  %xmm4,%xmm0
movslq %r10d,%rsi
addsd  -0x10(%rdi,%rsi,8),%xmm0
lea    -0x2(%r10),%ecx
movsd  %xmm0,-0x10(%rdi,%rsi,8)
xor    %r11d,%r11d
cmp    %r9d,%ecx
jl     131b <spread+0x21b>
add    $0xfffffffffffffffe,%rsi
movslq %r9d,%r9
add    $0x1,%rsi
mov    $0xffffffff,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%r8,%rcx,1),%ebx
cltd
idiv   %ebx
imul   %ecx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
lea    (%r10,%rcx,1),%edx
add    $0xffffffff,%edx
xorps  %xmm3,%xmm3
cvtsi2sd %edx,%xmm3
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
movapd %xmm2,%xmm0
divsd  %xmm4,%xmm0
addsd  -0x10(%rdi,%rsi,8),%xmm0
movsd  %xmm0,-0x10(%rdi,%rsi,8)
add    $0xffffffff,%ecx
add    $0xffffffffffffffff,%rsi
cmp    %r9,%rsi
jg     12d0 <spread+0x1d0>
mov    %r11d,%eax
pop    %rbx
ret

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

LLVM IR (-O2):
@spread.nfac = internal unnamed_addr constant [11 x i32] [i32 0, i32 1, i32 1, i32 2, i32 6, i32 24, i32 120, i32 720, i32 5040, i32 40320, i32 362880]
define i32 @spread(double %0, double* nocapture %1, i32 %2, double %3, i32 %4) {
%6 = icmp sgt i32 %4, 10
br i1 %6, label %116, label %7
7: ; preds = %5
%8 = fptosi double %3 to i32
%9 = sitofp i32 %8 to double
%10 = fcmp oeq double %9, %3
br i1 %10, label %11, label %17
11: ; preds = %7
%12 = add nsw i32 %8, -1
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds double, double* %1, i64 %13
%15 = load double, double* %14
%16 = fadd double %15, %0
store double %16, double* %14
br label %116
17: ; preds = %7
%18 = sitofp i32 %4 to double
%19 = tail call double @llvm.fmuladd.f64(double %18, double -5.000000e-01, double %3)
%20 = fadd double %19, 1.000000e+00
%21 = fcmp ogt double %20, 1.000000e+00
%22 = select i1 %21, double %20, double 1.000000e+00
%23 = add i32 %2, 1
%24 = sub i32 %23, %4
%25 = sitofp i32 %24 to double
%26 = fcmp uge double %22, %25
%27 = xor i1 %21, true
%28 = or i1 %26, %27
%29 = select i1 %26, double %25, double 1.000000e+00
%30 = select i1 %28, double %29, double %20
%31 = fptosi double %30 to i32
%32 = add nsw i32 %31, %4
%33 = add i32 %32, -1
%34 = sext i32 %4 to i64
%35 = getelementptr inbounds [11 x i32], [11 x i32]* @spread.nfac, i64 0, i64 %34
%36 = load i32, i32* %35
%37 = sitofp i32 %31 to double
%38 = fsub double %3, %37
%39 = icmp sgt i32 %33, %31
br i1 %39, label %40, label %80
40: ; preds = %17
%41 = add i32 %4, 3
%42 = add i32 %4, -2
%43 = and i32 %41, 3
%44 = icmp eq i32 %43, 0
br i1 %44, label %55, label %45
45: ; preds = %40, %45
%46 = phi i32 [ %49, %45 ], [ %31, %40 ]
%47 = phi double [ %52, %45 ], [ %38, %40 ]
%48 = phi i32 [ %53, %45 ], [ 0, %40 ]
%49 = add nsw i32 %46, 1
%50 = sitofp i32 %49 to double
%51 = fsub double %3, %50
%52 = fmul double %47, %51
%53 = add i32 %48, 1
%54 = icmp eq i32 %53, %43
br i1 %54, label %55, label %45
55: ; preds = %45, %40
%56 = phi double [ undef, %40 ], [ %52, %45 ]
%57 = phi i32 [ %31, %40 ], [ %49, %45 ]
%58 = phi double [ %38, %40 ], [ %52, %45 ]
%59 = icmp ult i32 %42, 3
br i1 %59, label %80, label %60
60: ; preds = %55, %60
%61 = phi i32 [ %75, %60 ], [ %57, %55 ]
%62 = phi double [ %78, %60 ], [ %58, %55 ]
%63 = add nsw i32 %61, 1
%64 = sitofp i32 %63 to double
%65 = fsub double %3, %64
%66 = fmul double %62, %65
%67 = add nsw i32 %61, 2
%68 = sitofp i32 %67 to double
%69 = fsub double %3, %68
%70 = fmul double %66, %69
%71 = add nsw i32 %61, 3
%72 = sitofp i32 %71 to double
%73 = fsub double %3, %72
%74 = fmul double %70, %73
%75 = add nsw i32 %61, 4
%76 = sitofp i32 %75 to double
%77 = fsub double %3, %76
%78 = fmul double %74, %77
%79 = icmp eq i32 %75, %33
br i1 %79, label %80, label %60
80: ; preds = %55, %60, %17
%81 = phi double [ %38, %17 ], [ %56, %55 ], [ %78, %60 ]
%82 = fmul double %81, %0
%83 = sitofp i32 %36 to double
%84 = sitofp i32 %33 to double
%85 = fsub double %3, %84
%86 = fmul double %85, %83
%87 = fdiv double %82, %86
%88 = add nsw i32 %32, -2
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds double, double* %1, i64 %89
%91 = load double, double* %90
%92 = fadd double %87, %91
store double %92, double* %90
%93 = icmp slt i32 %88, %31
br i1 %93, label %116, label %94
94: ; preds = %80
%95 = sub i32 1, %31
%96 = sext i32 %31 to i64
br label %97
97: ; preds = %94, %97
%98 = phi i64 [ %89, %94 ], [ %111, %97 ]
%99 = phi i32 [ %36, %94 ], [ %105, %97 ]
%100 = trunc i64 %98 to i32
%101 = add i32 %95, %100
%102 = sdiv i32 %99, %101
%103 = trunc i64 %98 to i32
%104 = sub i32 %103, %33
%105 = mul nsw i32 %102, %104
%106 = sitofp i32 %105 to double
%107 = sitofp i32 %100 to double
%108 = fsub double %3, %107
%109 = fmul double %108, %106
%110 = fdiv double %82, %109
%111 = add nsw i64 %98, -1
%112 = getelementptr inbounds double, double* %1, i64 %111
%113 = load double, double* %112
%114 = fadd double %113, %110
store double %114, double* %112
%115 = icmp sgt i64 %98, %96
br i1 %115, label %97, label %116
116: ; preds = %97, %80, %11, %5
%117 = phi i32 [ 1, %5 ], [ 0, %11 ], [ 0, %80 ], [ 0, %97 ]
ret i32 %117
}