double intlinarr2p(long nxm, long nym, double **fieldm, const double *xm,
                   const double *ym, double x, double y) {
  long ii, jj;
  double value = 0;
  for (jj = 1; jj < nym; jj++)
    if (y >= ((ym[jj - 1]) < (ym[jj]) ? (ym[jj - 1]) : (ym[jj])) &&
        y <= ((ym[jj - 1]) > (ym[jj]) ? (ym[jj - 1]) : (ym[jj])))
      break;
  for (ii = 1; ii < nxm; ii++)
    if (x >= xm[ii - 1] && x <= xm[ii])
      break;
  if (jj < nym && ii < nxm) {
    value = fieldm[jj - 1][ii - 1] * (x - xm[ii]) * (y - ym[jj]) /
                ((xm[ii - 1] - xm[ii]) * (ym[jj - 1] - ym[jj])) +
            fieldm[jj - 1][ii] * (x - xm[ii - 1]) * (y - ym[jj]) /
                ((xm[ii] - xm[ii - 1]) * (ym[jj - 1] - ym[jj])) +
            fieldm[jj][ii - 1] * (x - xm[ii]) * (y - ym[jj - 1]) /
                ((xm[ii - 1] - xm[ii]) * (ym[jj] - ym[jj - 1])) +
            fieldm[jj][ii] * (x - xm[ii - 1]) * (y - ym[jj - 1]) /
                ((xm[ii] - xm[ii - 1]) * (ym[jj] - ym[jj - 1]));
  }
  return value;
}


x86 assembly (clang, -O0):
<intlinarr2p>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movsd  %xmm0,-0x30(%rbp)
movsd  %xmm1,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
movq   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    123d <intlinarr2p+0x13d>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    118d <intlinarr2p+0x8d>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    119f <intlinarr2p+0x9f>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jb     1227 <intlinarr2p+0x127>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    11fc <intlinarr2p+0xfc>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    120e <intlinarr2p+0x10e>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1227 <intlinarr2p+0x127>
jmp    123d <intlinarr2p+0x13d>
jmp    122c <intlinarr2p+0x12c>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1132 <intlinarr2p+0x32>
movq   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x8(%rbp),%rax
jge    12a6 <intlinarr2p+0x1a6>
movsd  -0x30(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     1290 <intlinarr2p+0x190>
movsd  -0x30(%rbp),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     1290 <intlinarr2p+0x190>
jmp    12a6 <intlinarr2p+0x1a6>
jmp    1295 <intlinarr2p+0x195>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1245 <intlinarr2p+0x145>
mov    -0x48(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    1507 <intlinarr2p+0x407>
mov    -0x40(%rbp),%rax
cmp    -0x8(%rbp),%rax
jge    1507 <intlinarr2p+0x407>
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x30(%rbp),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x38(%rbp),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x30(%rbp),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x38(%rbp),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm3
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x30(%rbp),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x38(%rbp),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm3
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x30(%rbp),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x38(%rbp),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm3
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x1,%rcx
subsd  (%rax,%rcx,8),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<intlinarr2p>:
push   %rbx
cmp    $0x2,%rsi
jl     1151 <intlinarr2p+0x51>
movsd  (%r8),%xmm2
mov    $0x1,%eax
mov    $0x1,%r9b
jmp    1131 <intlinarr2p+0x31>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rax
movapd %xmm3,%xmm2
cmp    %rsi,%rax
setl   %r9b
je     115b <intlinarr2p+0x5b>
movsd  (%r8,%rax,8),%xmm3
movapd %xmm2,%xmm4
minsd  %xmm3,%xmm4
ucomisd %xmm4,%xmm1
jb     1120 <intlinarr2p+0x20>
maxsd  %xmm3,%xmm2
ucomisd %xmm1,%xmm2
jb     1120 <intlinarr2p+0x20>
jmp    115e <intlinarr2p+0x5e>
mov    $0x1,%eax
xor    %r9d,%r9d
jmp    115e <intlinarr2p+0x5e>
mov    %rsi,%rax
xorpd  %xmm2,%xmm2
cmp    $0x2,%rdi
jl     1263 <intlinarr2p+0x163>
mov    $0x1,%r10d
sub    %rdi,%r10
mov    $0x1,%r11b
mov    $0x2,%esi
jmp    119d <intlinarr2p+0x9d>
nop
cmp    %rdi,%rsi
setl   %r11b
lea    (%r10,%rsi,1),%rbx
add    $0x1,%rbx
add    $0x1,%rsi
cmp    $0x2,%rbx
je     1263 <intlinarr2p+0x163>
movsd  -0x10(%rcx,%rsi,8),%xmm3
ucomisd %xmm3,%xmm0
jb     1180 <intlinarr2p+0x80>
movsd  -0x8(%rcx,%rsi,8),%xmm5
ucomisd %xmm0,%xmm5
jb     1180 <intlinarr2p+0x80>
and    %r11b,%r9b
test   $0x1,%r9b
je     1263 <intlinarr2p+0x163>
unpcklpd %xmm0,%xmm0
movapd %xmm5,%xmm6
unpcklpd %xmm3,%xmm6
subpd  %xmm6,%xmm0
movsd  -0x8(%r8,%rax,8),%xmm8
movsd  (%r8,%rax,8),%xmm4
movapd %xmm1,%xmm2
subsd  %xmm4,%xmm2
movapd %xmm8,%xmm7
subsd  %xmm4,%xmm7
unpcklpd %xmm5,%xmm3
subpd  %xmm6,%xmm3
mov    -0x8(%rdx,%rax,8),%rcx
mov    (%rdx,%rax,8),%rax
movupd -0x10(%rcx,%rsi,8),%xmm5
mulpd  %xmm0,%xmm5
unpcklpd %xmm2,%xmm2
mulpd  %xmm5,%xmm2
unpcklpd %xmm7,%xmm7
mulpd  %xmm3,%xmm7
divpd  %xmm7,%xmm2
subsd  %xmm8,%xmm1
subsd  %xmm8,%xmm4
movupd -0x10(%rax,%rsi,8),%xmm5
mulpd  %xmm0,%xmm5
unpcklpd %xmm1,%xmm1
mulpd  %xmm5,%xmm1
unpcklpd %xmm4,%xmm4
mulpd  %xmm3,%xmm4
divpd  %xmm4,%xmm1
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
unpckhpd %xmm1,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm2
movapd %xmm2,%xmm0
pop    %rbx
ret

LLVM IR (-O0):
define double @intlinarr2p(i64 %0, i64 %1, double** %2, double* %3, double* %4, double %5, double %6) {
%8 = alloca i64
%9 = alloca i64
%10 = alloca double**
%11 = alloca double*
%12 = alloca double*
%13 = alloca double
%14 = alloca double
%15 = alloca i64
%16 = alloca i64
%17 = alloca double
store i64 %0, i64* %8
store i64 %1, i64* %9
store double** %2, double*** %10
store double* %3, double** %11
store double* %4, double** %12
store double %5, double* %13
store double %6, double* %14
store double 0.000000e+00, double* %17
store i64 1, i64* %16
br label %18
18: ; preds = %76, %7
%19 = load i64, i64* %16
%20 = load i64, i64* %9
%21 = icmp slt i64 %19, %20
br i1 %21, label %22, label %79
22: ; preds = %18
%23 = load double, double* %14
%24 = load double*, double** %12
%25 = load i64, i64* %16
%26 = sub nsw i64 %25, 1
%27 = getelementptr inbounds double, double* %24, i64 %26
%28 = load double, double* %27
%29 = load double*, double** %12
%30 = load i64, i64* %16
%31 = getelementptr inbounds double, double* %29, i64 %30
%32 = load double, double* %31
%33 = fcmp olt double %28, %32
br i1 %33, label %34, label %40
34: ; preds = %22
%35 = load double*, double** %12
%36 = load i64, i64* %16
%37 = sub nsw i64 %36, 1
%38 = getelementptr inbounds double, double* %35, i64 %37
%39 = load double, double* %38
br label %45
40: ; preds = %22
%41 = load double*, double** %12
%42 = load i64, i64* %16
%43 = getelementptr inbounds double, double* %41, i64 %42
%44 = load double, double* %43
br label %45
45: ; preds = %40, %34
%46 = phi double [ %39, %34 ], [ %44, %40 ]
%47 = fcmp oge double %23, %46
br i1 %47, label %48, label %75
48: ; preds = %45
%49 = load double, double* %14
%50 = load double*, double** %12
%51 = load i64, i64* %16
%52 = sub nsw i64 %51, 1
%53 = getelementptr inbounds double, double* %50, i64 %52
%54 = load double, double* %53
%55 = load double*, double** %12
%56 = load i64, i64* %16
%57 = getelementptr inbounds double, double* %55, i64 %56
%58 = load double, double* %57
%59 = fcmp ogt double %54, %58
br i1 %59, label %60, label %66
60: ; preds = %48
%61 = load double*, double** %12
%62 = load i64, i64* %16
%63 = sub nsw i64 %62, 1
%64 = getelementptr inbounds double, double* %61, i64 %63
%65 = load double, double* %64
br label %71
66: ; preds = %48
%67 = load double*, double** %12
%68 = load i64, i64* %16
%69 = getelementptr inbounds double, double* %67, i64 %68
%70 = load double, double* %69
br label %71
71: ; preds = %66, %60
%72 = phi double [ %65, %60 ], [ %70, %66 ]
%73 = fcmp ole double %49, %72
br i1 %73, label %74, label %75
74: ; preds = %71
br label %79
75: ; preds = %71, %45
br label %76
76: ; preds = %75
%77 = load i64, i64* %16
%78 = add nsw i64 %77, 1
store i64 %78, i64* %16
br label %18
79: ; preds = %74, %18
store i64 1, i64* %15
br label %80
80: ; preds = %101, %79
%81 = load i64, i64* %15
%82 = load i64, i64* %8
%83 = icmp slt i64 %81, %82
br i1 %83, label %84, label %104
84: ; preds = %80
%85 = load double, double* %13
%86 = load double*, double** %11
%87 = load i64, i64* %15
%88 = sub nsw i64 %87, 1
%89 = getelementptr inbounds double, double* %86, i64 %88
%90 = load double, double* %89
%91 = fcmp oge double %85, %90
br i1 %91, label %92, label %100
92: ; preds = %84
%93 = load double, double* %13
%94 = load double*, double** %11
%95 = load i64, i64* %15
%96 = getelementptr inbounds double, double* %94, i64 %95
%97 = load double, double* %96
%98 = fcmp ole double %93, %97
br i1 %98, label %99, label %100
99: ; preds = %92
br label %104
100: ; preds = %92, %84
br label %101
101: ; preds = %100
%102 = load i64, i64* %15
%103 = add nsw i64 %102, 1
store i64 %103, i64* %15
br label %80
104: ; preds = %99, %80
%105 = load i64, i64* %16
%106 = load i64, i64* %9
%107 = icmp slt i64 %105, %106
br i1 %107, label %108, label %296
108: ; preds = %104
%109 = load i64, i64* %15
%110 = load i64, i64* %8
%111 = icmp slt i64 %109, %110
br i1 %111, label %112, label %296
112: ; preds = %108
%113 = load double**, double*** %10
%114 = load i64, i64* %16
%115 = sub nsw i64 %114, 1
%116 = getelementptr inbounds double*, double** %113, i64 %115
%117 = load double*, double** %116
%118 = load i64, i64* %15
%119 = sub nsw i64 %118, 1
%120 = getelementptr inbounds double, double* %117, i64 %119
%121 = load double, double* %120
%122 = load double, double* %13
%123 = load double*, double** %11
%124 = load i64, i64* %15
%125 = getelementptr inbounds double, double* %123, i64 %124
%126 = load double, double* %125
%127 = fsub double %122, %126
%128 = fmul double %121, %127
%129 = load double, double* %14
%130 = load double*, double** %12
%131 = load i64, i64* %16
%132 = getelementptr inbounds double, double* %130, i64 %131
%133 = load double, double* %132
%134 = fsub double %129, %133
%135 = fmul double %128, %134
%136 = load double*, double** %11
%137 = load i64, i64* %15
%138 = sub nsw i64 %137, 1
%139 = getelementptr inbounds double, double* %136, i64 %138
%140 = load double, double* %139
%141 = load double*, double** %11
%142 = load i64, i64* %15
%143 = getelementptr inbounds double, double* %141, i64 %142
%144 = load double, double* %143
%145 = fsub double %140, %144
%146 = load double*, double** %12
%147 = load i64, i64* %16
%148 = sub nsw i64 %147, 1
%149 = getelementptr inbounds double, double* %146, i64 %148
%150 = load double, double* %149
%151 = load double*, double** %12
%152 = load i64, i64* %16
%153 = getelementptr inbounds double, double* %151, i64 %152
%154 = load double, double* %153
%155 = fsub double %150, %154
%156 = fmul double %145, %155
%157 = fdiv double %135, %156
%158 = load double**, double*** %10
%159 = load i64, i64* %16
%160 = sub nsw i64 %159, 1
%161 = getelementptr inbounds double*, double** %158, i64 %160
%162 = load double*, double** %161
%163 = load i64, i64* %15
%164 = getelementptr inbounds double, double* %162, i64 %163
%165 = load double, double* %164
%166 = load double, double* %13
%167 = load double*, double** %11
%168 = load i64, i64* %15
%169 = sub nsw i64 %168, 1
%170 = getelementptr inbounds double, double* %167, i64 %169
%171 = load double, double* %170
%172 = fsub double %166, %171
%173 = fmul double %165, %172
%174 = load double, double* %14
%175 = load double*, double** %12
%176 = load i64, i64* %16
%177 = getelementptr inbounds double, double* %175, i64 %176
%178 = load double, double* %177
%179 = fsub double %174, %178
%180 = fmul double %173, %179
%181 = load double*, double** %11
%182 = load i64, i64* %15
%183 = getelementptr inbounds double, double* %181, i64 %182
%184 = load double, double* %183
%185 = load double*, double** %11
%186 = load i64, i64* %15
%187 = sub nsw i64 %186, 1
%188 = getelementptr inbounds double, double* %185, i64 %187
%189 = load double, double* %188
%190 = fsub double %184, %189
%191 = load double*, double** %12
%192 = load i64, i64* %16
%193 = sub nsw i64 %192, 1
%194 = getelementptr inbounds double, double* %191, i64 %193
%195 = load double, double* %194
%196 = load double*, double** %12
%197 = load i64, i64* %16
%198 = getelementptr inbounds double, double* %196, i64 %197
%199 = load double, double* %198
%200 = fsub double %195, %199
%201 = fmul double %190, %200
%202 = fdiv double %180, %201
%203 = fadd double %157, %202
%204 = load double**, double*** %10
%205 = load i64, i64* %16
%206 = getelementptr inbounds double*, double** %204, i64 %205
%207 = load double*, double** %206
%208 = load i64, i64* %15
%209 = sub nsw i64 %208, 1
%210 = getelementptr inbounds double, double* %207, i64 %209
%211 = load double, double* %210
%212 = load double, double* %13
%213 = load double*, double** %11
%214 = load i64, i64* %15
%215 = getelementptr inbounds double, double* %213, i64 %214
%216 = load double, double* %215
%217 = fsub double %212, %216
%218 = fmul double %211, %217
%219 = load double, double* %14
%220 = load double*, double** %12
%221 = load i64, i64* %16
%222 = sub nsw i64 %221, 1
%223 = getelementptr inbounds double, double* %220, i64 %222
%224 = load double, double* %223
%225 = fsub double %219, %224
%226 = fmul double %218, %225
%227 = load double*, double** %11
%228 = load i64, i64* %15
%229 = sub nsw i64 %228, 1
%230 = getelementptr inbounds double, double* %227, i64 %229
%231 = load double, double* %230
%232 = load double*, double** %11
%233 = load i64, i64* %15
%234 = getelementptr inbounds double, double* %232, i64 %233
%235 = load double, double* %234
%236 = fsub double %231, %235
%237 = load double*, double** %12
%238 = load i64, i64* %16
%239 = getelementptr inbounds double, double* %237, i64 %238
%240 = load double, double* %239
%241 = load double*, double** %12
%242 = load i64, i64* %16
%243 = sub nsw i64 %242, 1
%244 = getelementptr inbounds double, double* %241, i64 %243
%245 = load double, double* %244
%246 = fsub double %240, %245
%247 = fmul double %236, %246
%248 = fdiv double %226, %247
%249 = fadd double %203, %248
%250 = load double**, double*** %10
%251 = load i64, i64* %16
%252 = getelementptr inbounds double*, double** %250, i64 %251
%253 = load double*, double** %252
%254 = load i64, i64* %15
%255 = getelementptr inbounds double, double* %253, i64 %254
%256 = load double, double* %255
%257 = load double, double* %13
%258 = load double*, double** %11
%259 = load i64, i64* %15
%260 = sub nsw i64 %259, 1
%261 = getelementptr inbounds double, double* %258, i64 %260
%262 = load double, double* %261
%263 = fsub double %257, %262
%264 = fmul double %256, %263
%265 = load double, double* %14
%266 = load double*, double** %12
%267 = load i64, i64* %16
%268 = sub nsw i64 %267, 1
%269 = getelementptr inbounds double, double* %266, i64 %268
%270 = load double, double* %269
%271 = fsub double %265, %270
%272 = fmul double %264, %271
%273 = load double*, double** %11
%274 = load i64, i64* %15
%275 = getelementptr inbounds double, double* %273, i64 %274
%276 = load double, double* %275
%277 = load double*, double** %11
%278 = load i64, i64* %15
%279 = sub nsw i64 %278, 1
%280 = getelementptr inbounds double, double* %277, i64 %279
%281 = load double, double* %280
%282 = fsub double %276, %281
%283 = load double*, double** %12
%284 = load i64, i64* %16
%285 = getelementptr inbounds double, double* %283, i64 %284
%286 = load double, double* %285
%287 = load double*, double** %12
%288 = load i64, i64* %16
%289 = sub nsw i64 %288, 1
%290 = getelementptr inbounds double, double* %287, i64 %289
%291 = load double, double* %290
%292 = fsub double %286, %291
%293 = fmul double %282, %292
%294 = fdiv double %272, %293
%295 = fadd double %249, %294
store double %295, double* %17
br label %296
296: ; preds = %112, %108, %104
%297 = load double, double* %17
ret double %297
}

LLVM IR (-O2):
define double @intlinarr2p(i64 %0, i64 %1, double** nocapture %2, double* nocapture %3, double* nocapture %4, double %5, double %6) {
%8 = icmp sgt i64 %1, 1
br i1 %8, label %9, label %28
9: ; preds = %7
%10 = load double, double* %4
br label %11
11: ; preds = %9, %24
%12 = phi double [ %16, %24 ], [ %10, %9 ]
%13 = phi i1 [ %26, %24 ], [ true, %9 ]
%14 = phi i64 [ %25, %24 ], [ 1, %9 ]
%15 = getelementptr inbounds double, double* %4, i64 %14
%16 = load double, double* %15
%17 = fcmp olt double %12, %16
%18 = select i1 %17, double %12, double %16
%19 = fcmp ugt double %18, %6
br i1 %19, label %24, label %20
20: ; preds = %11
%21 = fcmp ogt double %12, %16
%22 = select i1 %21, double %12, double %16
%23 = fcmp ult double %22, %6
br i1 %23, label %24, label %28
24: ; preds = %11, %20
%25 = add nuw nsw i64 %14, 1
%26 = icmp slt i64 %25, %1
%27 = icmp eq i64 %25, %1
br i1 %27, label %28, label %11
28: ; preds = %24, %20, %7
%29 = phi i64 [ 1, %7 ], [ %14, %20 ], [ %1, %24 ]
%30 = phi i1 [ false, %7 ], [ %13, %20 ], [ %26, %24 ]
%31 = icmp sgt i64 %0, 1
br i1 %31, label %32, label %99
32: ; preds = %28, %43
%33 = phi i1 [ %45, %43 ], [ true, %28 ]
%34 = phi i64 [ %44, %43 ], [ 1, %28 ]
%35 = add nsw i64 %34, -1
%36 = getelementptr inbounds double, double* %3, i64 %35
%37 = load double, double* %36
%38 = fcmp ugt double %37, %5
br i1 %38, label %43, label %39
39: ; preds = %32
%40 = getelementptr inbounds double, double* %3, i64 %34
%41 = load double, double* %40
%42 = fcmp ult double %41, %5
br i1 %42, label %43, label %47
43: ; preds = %32, %39
%44 = add nuw nsw i64 %34, 1
%45 = icmp slt i64 %44, %0
%46 = icmp eq i64 %44, %0
br i1 %46, label %99, label %32
47: ; preds = %39
%48 = select i1 %30, i1 %33, i1 false
br i1 %48, label %49, label %99
49: ; preds = %47
%50 = add nsw i64 %29, -1
%51 = getelementptr inbounds double*, double** %2, i64 %50
%52 = load double*, double** %51
%53 = getelementptr inbounds double, double* %52, i64 %35
%54 = insertelement <2 x double> poison, double %5, i64 0
%55 = shufflevector <2 x double> %54, <2 x double> poison, <2 x i32> zeroinitializer
%56 = insertelement <2 x double> poison, double %41, i64 0
%57 = insertelement <2 x double> %56, double %37, i64 1
%58 = fsub <2 x double> %55, %57
%59 = getelementptr inbounds double, double* %4, i64 %29
%60 = load double, double* %59
%61 = fsub double %6, %60
%62 = getelementptr inbounds double, double* %4, i64 %50
%63 = load double, double* %62
%64 = fsub double %63, %60
%65 = insertelement <2 x double> poison, double %37, i64 0
%66 = insertelement <2 x double> %65, double %41, i64 1
%67 = fsub <2 x double> %66, %57
%68 = bitcast double* %53 to <2 x double>*
%69 = load <2 x double>, <2 x double>* %68
%70 = fmul <2 x double> %69, %58
%71 = insertelement <2 x double> poison, double %61, i64 0
%72 = shufflevector <2 x double> %71, <2 x double> poison, <2 x i32> zeroinitializer
%73 = fmul <2 x double> %70, %72
%74 = insertelement <2 x double> poison, double %64, i64 0
%75 = shufflevector <2 x double> %74, <2 x double> poison, <2 x i32> zeroinitializer
%76 = fmul <2 x double> %67, %75
%77 = fdiv <2 x double> %73, %76
%78 = shufflevector <2 x double> %77, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%79 = fadd <2 x double> %77, %78
%80 = getelementptr inbounds double*, double** %2, i64 %29
%81 = load double*, double** %80
%82 = getelementptr inbounds double, double* %81, i64 %35
%83 = fsub double %6, %63
%84 = fsub double %60, %63
%85 = bitcast double* %82 to <2 x double>*
%86 = load <2 x double>, <2 x double>* %85
%87 = fmul <2 x double> %58, %86
%88 = insertelement <2 x double> poison, double %83, i64 0
%89 = shufflevector <2 x double> %88, <2 x double> poison, <2 x i32> zeroinitializer
%90 = fmul <2 x double> %89, %87
%91 = insertelement <2 x double> poison, double %84, i64 0
%92 = shufflevector <2 x double> %91, <2 x double> poison, <2 x i32> zeroinitializer
%93 = fmul <2 x double> %67, %92
%94 = fdiv <2 x double> %90, %93
%95 = fadd <2 x double> %79, %94
%96 = shufflevector <2 x double> %94, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%97 = fadd <2 x double> %95, %96
%98 = extractelement <2 x double> %97, i64 0
br label %99
99: ; preds = %43, %28, %47, %49
%100 = phi double [ %98, %49 ], [ 0.000000e+00, %47 ], [ 0.000000e+00, %28 ], [ 0.000000e+00, %43 ]
ret double %100
}