double interpolate_2d(double x, double y, int rowstride, double *coeff) {
  double wx[4], wy[4];
  int i, j;
  double v, vx;
  wx[0] = 4.0 / 21.0 + (-11.0 / 21.0 + (0.5 - x / 6.0) * x) * x;
  wx[1] = 13.0 / 21.0 + (1.0 / 14.0 + (-1.0 + x / 2.0) * x) * x;
  wx[2] = 4.0 / 21.0 + (3.0 / 7.0 + (0.5 - x / 2.0) * x) * x;
  wx[3] = (1.0 / 42.0 + x * x / 6.0) * x;
  wy[0] = 4.0 / 21.0 + (-11.0 / 21.0 + (0.5 - y / 6.0) * y) * y;
  wy[1] = 13.0 / 21.0 + (1.0 / 14.0 + (-1.0 + y / 2.0) * y) * y;
  wy[2] = 4.0 / 21.0 + (3.0 / 7.0 + (0.5 - y / 2.0) * y) * y;
  wy[3] = (1.0 / 42.0 + y * y / 6.0) * y;
  v = 0.0;
  for (i = 0; i < 4; i++) {
    vx = 0.0;
    for (j = 0; j < 4; j++)
      vx += coeff[i * rowstride + j] * wx[j];
    v += wy[i] * vx;
  }
  return v;
}


x86 assembly (clang, -O0):
<interpolate_2d>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %edi,-0x14(%rbp)
mov    %rsi,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  0xee6(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xef2(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  -0x8(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf05(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x8(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xeb8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  0xeba(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xec6(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x8(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xea9(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x8(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe8c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  0xe6e(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xe5a(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  -0x8(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe3d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x8(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe20(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movsd  0xdfd(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xde9(%rip),%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  0xdd6(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xde2(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf5(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xda8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  0xdaa(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xdb6(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd99(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd7c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  0xd5e(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xd4a(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd2d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd10(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xced(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xcd9(%rip),%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movl   $0x0,-0x64(%rbp)
cmpl   $0x4,-0x64(%rbp)
jge    13d6 <interpolate_2d+0x2d6>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x68(%rbp)
cmpl   $0x4,-0x68(%rbp)
jge    13a7 <interpolate_2d+0x2a7>
mov    -0x20(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x68(%rbp),%rax
movsd  -0x40(%rbp,%rax,8),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    135d <interpolate_2d+0x25d>
movslq -0x64(%rbp),%rax
movsd  -0x60(%rbp,%rax,8),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1344 <interpolate_2d+0x244>
movsd  -0x70(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<interpolate_2d>:
movsd  0xef7(%rip),%xmm8
movapd %xmm0,%xmm3
divsd  %xmm8,%xmm3
movsd  0xeed(%rip),%xmm15
movapd %xmm15,%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xedf(%rip),%xmm10
addsd  %xmm10,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xed5(%rip),%xmm9
addsd  %xmm9,%xmm2
movapd %xmm0,%xmm4
mulsd  %xmm15,%xmm4
movsd  0xec7(%rip),%xmm6
movapd %xmm15,%xmm5
subsd  %xmm4,%xmm5
addsd  %xmm6,%xmm4
mulsd  %xmm0,%xmm4
movsd  0xeb5(%rip),%xmm11
addsd  %xmm11,%xmm4
mulsd  %xmm0,%xmm4
movsd  0xeab(%rip),%xmm13
addsd  %xmm13,%xmm4
mulsd  %xmm0,%xmm5
movsd  0xea1(%rip),%xmm12
addsd  %xmm12,%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm9,%xmm5
movapd %xmm0,%xmm3
mulsd  %xmm0,%xmm3
divsd  %xmm8,%xmm3
movsd  0xe85(%rip),%xmm14
addsd  %xmm14,%xmm3
mulsd  %xmm3,%xmm0
movapd %xmm1,%xmm7
divsd  %xmm8,%xmm7
movapd %xmm15,%xmm3
subsd  %xmm7,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm10,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm9,%xmm3
movapd %xmm1,%xmm7
mulsd  %xmm15,%xmm7
addsd  %xmm7,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm11,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm13,%xmm6
subsd  %xmm7,%xmm15
mulsd  %xmm1,%xmm15
addsd  %xmm12,%xmm15
mulsd  %xmm1,%xmm15
addsd  %xmm9,%xmm15
movapd %xmm1,%xmm9
mulsd  %xmm1,%xmm9
divsd  %xmm8,%xmm9
addsd  %xmm14,%xmm9
mulsd  %xmm1,%xmm9
movslq %edi,%rax
movsd  (%rsi),%xmm7
mulsd  %xmm2,%xmm7
xorpd  %xmm8,%xmm8
addsd  %xmm8,%xmm7
movsd  0x8(%rsi),%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm7,%xmm1
movsd  0x10(%rsi),%xmm7
mulsd  %xmm5,%xmm7
addsd  %xmm1,%xmm7
movsd  0x18(%rsi),%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm7,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm8,%xmm1
movsd  (%rsi,%rax,8),%xmm3
mulsd  %xmm2,%xmm3
addsd  %xmm8,%xmm3
movsd  0x8(%rsi,%rax,8),%xmm7
mulsd  %xmm4,%xmm7
addsd  %xmm3,%xmm7
movsd  0x10(%rsi,%rax,8),%xmm3
mulsd  %xmm5,%xmm3
addsd  %xmm7,%xmm3
movsd  0x18(%rsi,%rax,8),%xmm7
mulsd  %xmm0,%xmm7
addsd  %xmm3,%xmm7
mulsd  %xmm6,%xmm7
addsd  %xmm1,%xmm7
lea    (%rax,%rax,2),%rcx
shl    $0x4,%rax
movsd  (%rsi,%rax,1),%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm8,%xmm1
movsd  0x8(%rsi,%rax,1),%xmm3
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
movsd  0x10(%rsi,%rax,1),%xmm1
mulsd  %xmm5,%xmm1
addsd  %xmm3,%xmm1
movsd  0x18(%rsi,%rax,1),%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm1,%xmm3
mulsd  %xmm15,%xmm3
addsd  %xmm7,%xmm3
mulsd  (%rsi,%rcx,8),%xmm2
addsd  %xmm8,%xmm2
mulsd  0x8(%rsi,%rcx,8),%xmm4
addsd  %xmm2,%xmm4
mulsd  0x10(%rsi,%rcx,8),%xmm5
mulsd  0x18(%rsi,%rcx,8),%xmm0
addsd  %xmm4,%xmm5
addsd  %xmm5,%xmm0
mulsd  %xmm9,%xmm0
addsd  %xmm3,%xmm0
ret

LLVM IR (-O0):
define double @interpolate_2d(double %0, double %1, i32 %2, double* %3) {
%5 = alloca double
%6 = alloca double
%7 = alloca i32
%8 = alloca double*
%9 = alloca [4 x double]
%10 = alloca [4 x double]
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca double
store double %0, double* %5
store double %1, double* %6
store i32 %2, i32* %7
store double* %3, double** %8
%15 = load double, double* %5
%16 = fdiv double %15, 6.000000e+00
%17 = fsub double 5.000000e-01, %16
%18 = load double, double* %5
%19 = call double @llvm.fmuladd.f64(double %17, double %18, double 0xBFE0C30C30C30C31)
%20 = load double, double* %5
%21 = call double @llvm.fmuladd.f64(double %19, double %20, double 0x3FC8618618618618)
%22 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 0
store double %21, double* %22
%23 = load double, double* %5
%24 = fdiv double %23, 2.000000e+00
%25 = fadd double -1.000000e+00, %24
%26 = load double, double* %5
%27 = call double @llvm.fmuladd.f64(double %25, double %26, double 0x3FB2492492492492)
%28 = load double, double* %5
%29 = call double @llvm.fmuladd.f64(double %27, double %28, double 0x3FE3CF3CF3CF3CF4)
%30 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 1
store double %29, double* %30
%31 = load double, double* %5
%32 = fdiv double %31, 2.000000e+00
%33 = fsub double 5.000000e-01, %32
%34 = load double, double* %5
%35 = call double @llvm.fmuladd.f64(double %33, double %34, double 0x3FDB6DB6DB6DB6DB)
%36 = load double, double* %5
%37 = call double @llvm.fmuladd.f64(double %35, double %36, double 0x3FC8618618618618)
%38 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 2
store double %37, double* %38
%39 = load double, double* %5
%40 = load double, double* %5
%41 = fmul double %39, %40
%42 = fdiv double %41, 6.000000e+00
%43 = fadd double 0x3F98618618618618, %42
%44 = load double, double* %5
%45 = fmul double %43, %44
%46 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 3
store double %45, double* %46
%47 = load double, double* %6
%48 = fdiv double %47, 6.000000e+00
%49 = fsub double 5.000000e-01, %48
%50 = load double, double* %6
%51 = call double @llvm.fmuladd.f64(double %49, double %50, double 0xBFE0C30C30C30C31)
%52 = load double, double* %6
%53 = call double @llvm.fmuladd.f64(double %51, double %52, double 0x3FC8618618618618)
%54 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 0
store double %53, double* %54
%55 = load double, double* %6
%56 = fdiv double %55, 2.000000e+00
%57 = fadd double -1.000000e+00, %56
%58 = load double, double* %6
%59 = call double @llvm.fmuladd.f64(double %57, double %58, double 0x3FB2492492492492)
%60 = load double, double* %6
%61 = call double @llvm.fmuladd.f64(double %59, double %60, double 0x3FE3CF3CF3CF3CF4)
%62 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 1
store double %61, double* %62
%63 = load double, double* %6
%64 = fdiv double %63, 2.000000e+00
%65 = fsub double 5.000000e-01, %64
%66 = load double, double* %6
%67 = call double @llvm.fmuladd.f64(double %65, double %66, double 0x3FDB6DB6DB6DB6DB)
%68 = load double, double* %6
%69 = call double @llvm.fmuladd.f64(double %67, double %68, double 0x3FC8618618618618)
%70 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 2
store double %69, double* %70
%71 = load double, double* %6
%72 = load double, double* %6
%73 = fmul double %71, %72
%74 = fdiv double %73, 6.000000e+00
%75 = fadd double 0x3F98618618618618, %74
%76 = load double, double* %6
%77 = fmul double %75, %76
%78 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 3
store double %77, double* %78
store double 0.000000e+00, double* %13
store i32 0, i32* %11
br label %79
79: ; preds = %113, %4
%80 = load i32, i32* %11
%81 = icmp slt i32 %80, 4
br i1 %81, label %82, label %116
82: ; preds = %79
store double 0.000000e+00, double* %14
store i32 0, i32* %12
br label %83
83: ; preds = %102, %82
%84 = load i32, i32* %12
%85 = icmp slt i32 %84, 4
br i1 %85, label %86, label %105
86: ; preds = %83
%87 = load double*, double** %8
%88 = load i32, i32* %11
%89 = load i32, i32* %7
%90 = mul nsw i32 %88, %89
%91 = load i32, i32* %12
%92 = add nsw i32 %90, %91
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds double, double* %87, i64 %93
%95 = load double, double* %94
%96 = load i32, i32* %12
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [4 x double], [4 x double]* %9, i64 0, i64 %97
%99 = load double, double* %98
%100 = load double, double* %14
%101 = call double @llvm.fmuladd.f64(double %95, double %99, double %100)
store double %101, double* %14
br label %102
102: ; preds = %86
%103 = load i32, i32* %12
%104 = add nsw i32 %103, 1
store i32 %104, i32* %12
br label %83
105: ; preds = %83
%106 = load i32, i32* %11
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 %107
%109 = load double, double* %108
%110 = load double, double* %14
%111 = load double, double* %13
%112 = call double @llvm.fmuladd.f64(double %109, double %110, double %111)
store double %112, double* %13
br label %113
113: ; preds = %105
%114 = load i32, i32* %11
%115 = add nsw i32 %114, 1
store i32 %115, i32* %11
br label %79
116: ; preds = %79
%117 = load double, double* %13
ret double %117
}

LLVM IR (-O2):
define double @interpolate_2d(double %0, double %1, i32 %2, double* nocapture %3) {
%5 = fdiv double %0, 6.000000e+00
%6 = fsub double 5.000000e-01, %5
%7 = tail call double @llvm.fmuladd.f64(double %6, double %0, double 0xBFE0C30C30C30C31)
%8 = tail call double @llvm.fmuladd.f64(double %7, double %0, double 0x3FC8618618618618)
%9 = fmul double %0, 5.000000e-01
%10 = fadd double %9, -1.000000e+00
%11 = tail call double @llvm.fmuladd.f64(double %10, double %0, double 0x3FB2492492492492)
%12 = tail call double @llvm.fmuladd.f64(double %11, double %0, double 0x3FE3CF3CF3CF3CF4)
%13 = fsub double 5.000000e-01, %9
%14 = tail call double @llvm.fmuladd.f64(double %13, double %0, double 0x3FDB6DB6DB6DB6DB)
%15 = tail call double @llvm.fmuladd.f64(double %14, double %0, double 0x3FC8618618618618)
%16 = fmul double %0, %0
%17 = fdiv double %16, 6.000000e+00
%18 = fadd double %17, 0x3F98618618618618
%19 = fmul double %18, %0
%20 = fdiv double %1, 6.000000e+00
%21 = fsub double 5.000000e-01, %20
%22 = tail call double @llvm.fmuladd.f64(double %21, double %1, double 0xBFE0C30C30C30C31)
%23 = tail call double @llvm.fmuladd.f64(double %22, double %1, double 0x3FC8618618618618)
%24 = fmul double %1, 5.000000e-01
%25 = fadd double %24, -1.000000e+00
%26 = tail call double @llvm.fmuladd.f64(double %25, double %1, double 0x3FB2492492492492)
%27 = tail call double @llvm.fmuladd.f64(double %26, double %1, double 0x3FE3CF3CF3CF3CF4)
%28 = fsub double 5.000000e-01, %24
%29 = tail call double @llvm.fmuladd.f64(double %28, double %1, double 0x3FDB6DB6DB6DB6DB)
%30 = tail call double @llvm.fmuladd.f64(double %29, double %1, double 0x3FC8618618618618)
%31 = fmul double %1, %1
%32 = fdiv double %31, 6.000000e+00
%33 = fadd double %32, 0x3F98618618618618
%34 = fmul double %33, %1
%35 = sext i32 %2 to i64
%36 = load double, double* %3
%37 = tail call double @llvm.fmuladd.f64(double %36, double %8, double 0.000000e+00)
%38 = getelementptr inbounds double, double* %3, i64 1
%39 = load double, double* %38
%40 = tail call double @llvm.fmuladd.f64(double %39, double %12, double %37)
%41 = getelementptr inbounds double, double* %3, i64 2
%42 = load double, double* %41
%43 = tail call double @llvm.fmuladd.f64(double %42, double %15, double %40)
%44 = getelementptr inbounds double, double* %3, i64 3
%45 = load double, double* %44
%46 = tail call double @llvm.fmuladd.f64(double %45, double %19, double %43)
%47 = tail call double @llvm.fmuladd.f64(double %23, double %46, double 0.000000e+00)
%48 = getelementptr inbounds double, double* %3, i64 %35
%49 = load double, double* %48
%50 = tail call double @llvm.fmuladd.f64(double %49, double %8, double 0.000000e+00)
%51 = add nsw i64 %35, 1
%52 = getelementptr inbounds double, double* %3, i64 %51
%53 = load double, double* %52
%54 = tail call double @llvm.fmuladd.f64(double %53, double %12, double %50)
%55 = add nsw i64 %35, 2
%56 = getelementptr inbounds double, double* %3, i64 %55
%57 = load double, double* %56
%58 = tail call double @llvm.fmuladd.f64(double %57, double %15, double %54)
%59 = add nsw i64 %35, 3
%60 = getelementptr inbounds double, double* %3, i64 %59
%61 = load double, double* %60
%62 = tail call double @llvm.fmuladd.f64(double %61, double %19, double %58)
%63 = tail call double @llvm.fmuladd.f64(double %27, double %62, double %47)
%64 = shl nsw i64 %35, 1
%65 = getelementptr inbounds double, double* %3, i64 %64
%66 = load double, double* %65
%67 = tail call double @llvm.fmuladd.f64(double %66, double %8, double 0.000000e+00)
%68 = or i64 %64, 1
%69 = getelementptr inbounds double, double* %3, i64 %68
%70 = load double, double* %69
%71 = tail call double @llvm.fmuladd.f64(double %70, double %12, double %67)
%72 = add nsw i64 %64, 2
%73 = getelementptr inbounds double, double* %3, i64 %72
%74 = load double, double* %73
%75 = tail call double @llvm.fmuladd.f64(double %74, double %15, double %71)
%76 = add nsw i64 %64, 3
%77 = getelementptr inbounds double, double* %3, i64 %76
%78 = load double, double* %77
%79 = tail call double @llvm.fmuladd.f64(double %78, double %19, double %75)
%80 = tail call double @llvm.fmuladd.f64(double %30, double %79, double %63)
%81 = mul nsw i64 %35, 3
%82 = getelementptr inbounds double, double* %3, i64 %81
%83 = load double, double* %82
%84 = tail call double @llvm.fmuladd.f64(double %83, double %8, double 0.000000e+00)
%85 = add nsw i64 %81, 1
%86 = getelementptr inbounds double, double* %3, i64 %85
%87 = load double, double* %86
%88 = tail call double @llvm.fmuladd.f64(double %87, double %12, double %84)
%89 = add nsw i64 %81, 2
%90 = getelementptr inbounds double, double* %3, i64 %89
%91 = load double, double* %90
%92 = tail call double @llvm.fmuladd.f64(double %91, double %15, double %88)
%93 = add nsw i64 %81, 3
%94 = getelementptr inbounds double, double* %3, i64 %93
%95 = load double, double* %94
%96 = tail call double @llvm.fmuladd.f64(double %95, double %19, double %92)
%97 = tail call double @llvm.fmuladd.f64(double %34, double %96, double %80)
ret double %97
}