void interp(double **uf, double **uc, int nf) {
  int ic, iif, jc, jf, nc;
  nc = nf / 2 + 1;
  for (jc = 1, jf = 1; jc <= nc; jc++, jf += 2)
    for (ic = 1; ic <= nc; ic++)
      uf[2 * ic - 1][jf] = uc[ic][jc];
  for (jf = 1; jf <= nf; jf += 2)
    for (iif = 2; iif < nf; iif += 2)
      uf[iif][jf] = 0.5 * (uf[iif + 1][jf] + uf[iif - 1][jf]);
  for (jf = 2; jf < nf; jf += 2)
    for (iif = 1; iif <= nf; iif++)
      uf[iif][jf] = 0.5 * (uf[iif][jf + 1] + uf[iif][jf - 1]);
}


x86 assembly (clang, -O0):
<interp>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
movl   $0x1,-0x20(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     11a9 <interp+0xa9>
movl   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     118d <interp+0x8d>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1141 <interp+0x41>
jmp    1192 <interp+0x92>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    112e <interp+0x2e>
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     1245 <interp+0x145>
movl   $0x2,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1232 <interp+0x132>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xdf5(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    11c3 <interp+0xc3>
jmp    1237 <interp+0x137>
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    11b0 <interp+0xb0>
movl   $0x2,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12e1 <interp+0x1e1>
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     12ce <interp+0x1ce>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xd59(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    125f <interp+0x15f>
jmp    12d3 <interp+0x1d3>
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    124c <interp+0x14c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<interp>:
push   %r15
push   %r14
push   %r12
push   %rbx
cmp    $0xffffffff,%edx
jl     1366 <interp+0x266>
mov    %edx,%r11d
shr    $0x1f,%r11d
add    %edx,%r11d
sar    %r11d
lea    0x2(%r11),%r8
add    $0x1,%r11
lea    0x1(%rdx),%r10d
lea    0x18(%rdi),%r9
mov    %r11,%r14
and    $0xfffffffffffffffe,%r14
neg    %r14
mov    $0x1,%r12d
mov    $0x1,%r15d
jmp    115d <interp+0x5d>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r12
add    $0x2,%r15
cmp    %r8,%r12
je     11cf <interp+0xcf>
mov    $0x1,%eax
cmp    $0x3,%r10d
jb     11ae <interp+0xae>
mov    $0x1,%eax
mov    %r9,%rbx
mov    (%rsi,%rax,8),%rcx
movsd  (%rcx,%r12,8),%xmm0
mov    -0x10(%rbx),%rcx
movsd  %xmm0,(%rcx,%r15,8)
mov    0x8(%rsi,%rax,8),%rcx
movsd  (%rcx,%r12,8),%xmm0
mov    (%rbx),%rcx
movsd  %xmm0,(%rcx,%r15,8)
add    $0x20,%rbx
lea    (%r14,%rax,1),%rcx
add    $0x2,%rcx
add    $0x2,%rax
cmp    $0x1,%rcx
jne    1170 <interp+0x70>
test   $0x1,%r11b
je     1150 <interp+0x50>
mov    (%rsi,%rax,8),%rcx
movsd  (%rcx,%r12,8),%xmm0
shl    $0x4,%rax
mov    -0x8(%rax,%rdi,1),%rax
movsd  %xmm0,(%rax,%r15,8)
jmp    1150 <interp+0x50>
test   %edx,%edx
jle    1366 <interp+0x266>
mov    %edx,%r10d
lea    -0x3(%r10),%r9
mov    %r9,%r11
shr    %r11
add    $0x1,%r11
mov    %r11,%r8
and    $0xfffffffffffffffe,%r8
mov    $0x1,%ecx
movsd  0xe04(%rip),%xmm0
jmp    120d <interp+0x10d>
xchg   %ax,%ax
add    $0x2,%rcx
cmp    %r10,%rcx
ja     12ba <interp+0x1ba>
cmp    $0x3,%edx
jb     1200 <interp+0x100>
mov    $0x2,%ebx
cmp    $0x2,%r9
jb     127f <interp+0x17f>
mov    $0x2,%ebx
mov    %r8,%rax
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x8(%rdi,%rbx,8),%rsi
movsd  (%rsi,%rcx,8),%xmm1
mov    -0x8(%rdi,%rbx,8),%rsi
mov    (%rdi,%rbx,8),%r14
addsd  (%rsi,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%r14,%rcx,8)
mov    0x18(%rdi,%rbx,8),%rsi
movsd  (%rsi,%rcx,8),%xmm1
mov    0x8(%rdi,%rbx,8),%rsi
mov    0x10(%rdi,%rbx,8),%r14
addsd  (%rsi,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%r14,%rcx,8)
add    $0x4,%rbx
add    $0xfffffffffffffffe,%rax
jne    1230 <interp+0x130>
test   $0x1,%r11b
je     1200 <interp+0x100>
lea    0x0(,%rbx,8),%rax
or     $0x8,%rax
mov    (%rdi,%rax,1),%rax
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rdi,%rbx,8),%rax
mov    (%rdi,%rbx,8),%rsi
addsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi,%rcx,8)
jmp    1200 <interp+0x100>
cmp    $0x3,%edx
jl     1366 <interp+0x266>
mov    %r10d,%r8d
and    $0xfffffffe,%r8d
neg    %r8
mov    $0x2,%esi
jmp    12e9 <interp+0x1e9>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x2,%rsi
cmp    %r10,%rsi
jae    1366 <interp+0x266>
mov    %rsi,%rbx
or     $0x1,%rbx
mov    $0x1,%eax
cmp    $0x1,%edx
je     1343 <interp+0x243>
mov    $0x1,%eax
nop
mov    (%rdi,%rax,8),%rcx
movsd  (%rcx,%rbx,8),%xmm1
addsd  -0x8(%rcx,%rsi,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rcx,%rsi,8)
mov    0x8(%rdi,%rax,8),%rcx
movsd  (%rcx,%rbx,8),%xmm1
addsd  -0x8(%rcx,%rsi,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rcx,%rsi,8)
lea    (%r8,%rax,1),%rcx
add    $0x2,%rcx
add    $0x2,%rax
cmp    $0x1,%rcx
jne    1300 <interp+0x200>
test   $0x1,%r10b
je     12e0 <interp+0x1e0>
mov    (%rdi,%rax,8),%rax
movsd  (%rax,%rbx,8),%xmm1
addsd  -0x8(%rax,%rsi,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rax,%rsi,8)
jmp    12e0 <interp+0x1e0>
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @interp(double** %0, double** %1, i32 %2) {
%4 = alloca double**
%5 = alloca double**
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
store double** %0, double*** %4
store double** %1, double*** %5
store i32 %2, i32* %6
%12 = load i32, i32* %6
%13 = sdiv i32 %12, 2
%14 = add nsw i32 %13, 1
store i32 %14, i32* %11
store i32 1, i32* %9
store i32 1, i32* %10
br label %15
15: ; preds = %48, %3
%16 = load i32, i32* %9
%17 = load i32, i32* %11
%18 = icmp sle i32 %16, %17
br i1 %18, label %19, label %53
19: ; preds = %15
store i32 1, i32* %7
br label %20
20: ; preds = %44, %19
%21 = load i32, i32* %7
%22 = load i32, i32* %11
%23 = icmp sle i32 %21, %22
br i1 %23, label %24, label %47
24: ; preds = %20
%25 = load double**, double*** %5
%26 = load i32, i32* %7
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds double*, double** %25, i64 %27
%29 = load double*, double** %28
%30 = load i32, i32* %9
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds double, double* %29, i64 %31
%33 = load double, double* %32
%34 = load double**, double*** %4
%35 = load i32, i32* %7
%36 = mul nsw i32 2, %35
%37 = sub nsw i32 %36, 1
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double*, double** %34, i64 %38
%40 = load double*, double** %39
%41 = load i32, i32* %10
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %40, i64 %42
store double %33, double* %43
br label %44
44: ; preds = %24
%45 = load i32, i32* %7
%46 = add nsw i32 %45, 1
store i32 %46, i32* %7
br label %20
47: ; preds = %20
br label %48
48: ; preds = %47
%49 = load i32, i32* %9
%50 = add nsw i32 %49, 1
store i32 %50, i32* %9
%51 = load i32, i32* %10
%52 = add nsw i32 %51, 2
store i32 %52, i32* %10
br label %15
53: ; preds = %15
store i32 1, i32* %10
br label %54
54: ; preds = %98, %53
%55 = load i32, i32* %10
%56 = load i32, i32* %6
%57 = icmp sle i32 %55, %56
br i1 %57, label %58, label %101
58: ; preds = %54
store i32 2, i32* %8
br label %59
59: ; preds = %94, %58
%60 = load i32, i32* %8
%61 = load i32, i32* %6
%62 = icmp slt i32 %60, %61
br i1 %62, label %63, label %97
63: ; preds = %59
%64 = load double**, double*** %4
%65 = load i32, i32* %8
%66 = add nsw i32 %65, 1
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds double*, double** %64, i64 %67
%69 = load double*, double** %68
%70 = load i32, i32* %10
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds double, double* %69, i64 %71
%73 = load double, double* %72
%74 = load double**, double*** %4
%75 = load i32, i32* %8
%76 = sub nsw i32 %75, 1
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double*, double** %74, i64 %77
%79 = load double*, double** %78
%80 = load i32, i32* %10
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds double, double* %79, i64 %81
%83 = load double, double* %82
%84 = fadd double %73, %83
%85 = fmul double 5.000000e-01, %84
%86 = load double**, double*** %4
%87 = load i32, i32* %8
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds double*, double** %86, i64 %88
%90 = load double*, double** %89
%91 = load i32, i32* %10
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds double, double* %90, i64 %92
store double %85, double* %93
br label %94
94: ; preds = %63
%95 = load i32, i32* %8
%96 = add nsw i32 %95, 2
store i32 %96, i32* %8
br label %59
97: ; preds = %59
br label %98
98: ; preds = %97
%99 = load i32, i32* %10
%100 = add nsw i32 %99, 2
store i32 %100, i32* %10
br label %54
101: ; preds = %54
store i32 2, i32* %10
br label %102
102: ; preds = %146, %101
%103 = load i32, i32* %10
%104 = load i32, i32* %6
%105 = icmp slt i32 %103, %104
br i1 %105, label %106, label %149
106: ; preds = %102
store i32 1, i32* %8
br label %107
107: ; preds = %142, %106
%108 = load i32, i32* %8
%109 = load i32, i32* %6
%110 = icmp sle i32 %108, %109
br i1 %110, label %111, label %145
111: ; preds = %107
%112 = load double**, double*** %4
%113 = load i32, i32* %8
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double*, double** %112, i64 %114
%116 = load double*, double** %115
%117 = load i32, i32* %10
%118 = add nsw i32 %117, 1
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds double, double* %116, i64 %119
%121 = load double, double* %120
%122 = load double**, double*** %4
%123 = load i32, i32* %8
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds double*, double** %122, i64 %124
%126 = load double*, double** %125
%127 = load i32, i32* %10
%128 = sub nsw i32 %127, 1
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds double, double* %126, i64 %129
%131 = load double, double* %130
%132 = fadd double %121, %131
%133 = fmul double 5.000000e-01, %132
%134 = load double**, double*** %4
%135 = load i32, i32* %8
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds double*, double** %134, i64 %136
%138 = load double*, double** %137
%139 = load i32, i32* %10
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds double, double* %138, i64 %140
store double %133, double* %141
br label %142
142: ; preds = %111
%143 = load i32, i32* %8
%144 = add nsw i32 %143, 1
store i32 %144, i32* %8
br label %107
145: ; preds = %107
br label %146
146: ; preds = %145
%147 = load i32, i32* %10
%148 = add nsw i32 %147, 2
store i32 %148, i32* %10
br label %102
149: ; preds = %102
ret void
}

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