void setupBoundaryConditions(double **X, unsigned long int x,
                             unsigned long int y) {
  unsigned long int ix, jy, i, j;
  double leftBC = 0, rightBC = 0, topBC = 0, bottomBC = 0;
  for (i = 0; i < x; i++) {
    X[i][0] = bottomBC;
    X[i][y - 1] = topBC;
  }
  for (j = 0; j < y; j++) {
    X[0][j] = leftBC;
    X[x - 1][j] = rightBC;
  }
  X[0][0] = 0.5 * (leftBC + bottomBC);
  X[0][y - 1] = 0.5 * (topBC + leftBC);
  X[x - 1][y - 1] = 0.5 * (topBC + rightBC);
  X[x - 1][0] = 0.5 * (bottomBC + rightBC);
}


x86 assembly (clang, -O0):
<setupBoundaryConditions>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    118a <setupBoundaryConditions+0x8a>
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,(%rax)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1138 <setupBoundaryConditions+0x38>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    11e4 <setupBoundaryConditions+0xe4>
movsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1192 <setupBoundaryConditions+0x92>
movsd  -0x40(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
movsd  0xe0a(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movsd  %xmm0,(%rax)
movsd  -0x50(%rbp),%xmm1
addsd  -0x40(%rbp),%xmm1
movsd  0xde9(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0xdbf(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0xd8c(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<setupBoundaryConditions>:
test   %rsi,%rsi
je     11bd <setupBoundaryConditions+0xbd>
lea    -0x1(%rsi),%rax
mov    %esi,%r8d
and    $0x3,%r8d
cmp    $0x3,%rax
jae    111e <setupBoundaryConditions+0x1e>
xor    %ecx,%ecx
jmp    118c <setupBoundaryConditions+0x8c>
mov    %rsi,%r9
and    $0xfffffffffffffffc,%r9
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rcx,8),%rax
movq   $0x0,(%rax)
movq   $0x0,-0x8(%rax,%rdx,8)
mov    0x8(%rdi,%rcx,8),%rax
movq   $0x0,(%rax)
movq   $0x0,-0x8(%rax,%rdx,8)
mov    0x10(%rdi,%rcx,8),%rax
movq   $0x0,(%rax)
movq   $0x0,-0x8(%rax,%rdx,8)
mov    0x18(%rdi,%rcx,8),%rax
movq   $0x0,(%rax)
movq   $0x0,-0x8(%rax,%rdx,8)
add    $0x4,%rcx
cmp    %rcx,%r9
jne    1130 <setupBoundaryConditions+0x30>
test   %r8,%r8
je     11bd <setupBoundaryConditions+0xbd>
lea    (%rdi,%rcx,8),%r9
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
mov    (%r9,%rcx,8),%rax
movq   $0x0,(%rax)
movq   $0x0,-0x8(%rax,%rdx,8)
add    $0x1,%rcx
cmp    %rcx,%r8
jne    11a0 <setupBoundaryConditions+0xa0>
mov    (%rdi),%rcx
mov    -0x8(%rdi,%rsi,8),%rax
test   %rdx,%rdx
je     1378 <setupBoundaryConditions+0x278>
cmp    $0x4,%rdx
jb     11ee <setupBoundaryConditions+0xee>
lea    (%rax,%rdx,8),%rsi
cmp    %rsi,%rcx
jae    1294 <setupBoundaryConditions+0x194>
lea    (%rcx,%rdx,8),%rsi
cmp    %rsi,%rax
jae    1294 <setupBoundaryConditions+0x194>
xor    %esi,%esi
mov    %rsi,%r8
not    %r8
add    %rdx,%r8
mov    %rdx,%rdi
and    $0x3,%rdi
je     122a <setupBoundaryConditions+0x12a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movq   $0x0,(%rcx,%rsi,8)
movq   $0x0,(%rax,%rsi,8)
add    $0x1,%rsi
add    $0xffffffffffffffff,%rdi
jne    1210 <setupBoundaryConditions+0x110>
cmp    $0x3,%r8
jb     1378 <setupBoundaryConditions+0x278>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movq   $0x0,(%rcx,%rsi,8)
movq   $0x0,(%rax,%rsi,8)
movq   $0x0,0x8(%rcx,%rsi,8)
movq   $0x0,0x8(%rax,%rsi,8)
movq   $0x0,0x10(%rcx,%rsi,8)
movq   $0x0,0x10(%rax,%rsi,8)
movq   $0x0,0x18(%rcx,%rsi,8)
movq   $0x0,0x18(%rax,%rsi,8)
add    $0x4,%rsi
cmp    %rsi,%rdx
jne    1240 <setupBoundaryConditions+0x140>
jmp    1378 <setupBoundaryConditions+0x278>
mov    %rdx,%rsi
and    $0xfffffffffffffffc,%rsi
lea    -0x4(%rsi),%rdi
mov    %rdi,%r9
shr    $0x2,%r9
add    $0x1,%r9
mov    %r9d,%r8d
and    $0x3,%r8d
cmp    $0xc,%rdi
jae    12bb <setupBoundaryConditions+0x1bb>
xor    %edi,%edi
jmp    1328 <setupBoundaryConditions+0x228>
and    $0xfffffffffffffffc,%r9
xor    %edi,%edi
xorps  %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movups %xmm0,(%rcx,%rdi,8)
movups %xmm0,0x10(%rcx,%rdi,8)
movups %xmm0,(%rax,%rdi,8)
movups %xmm0,0x10(%rax,%rdi,8)
movups %xmm0,0x20(%rcx,%rdi,8)
movups %xmm0,0x30(%rcx,%rdi,8)
movups %xmm0,0x20(%rax,%rdi,8)
movups %xmm0,0x30(%rax,%rdi,8)
movups %xmm0,0x40(%rcx,%rdi,8)
movups %xmm0,0x50(%rcx,%rdi,8)
movups %xmm0,0x40(%rax,%rdi,8)
movups %xmm0,0x50(%rax,%rdi,8)
movups %xmm0,0x60(%rcx,%rdi,8)
movups %xmm0,0x70(%rcx,%rdi,8)
movups %xmm0,0x60(%rax,%rdi,8)
movups %xmm0,0x70(%rax,%rdi,8)
add    $0x10,%rdi
add    $0xfffffffffffffffc,%r9
jne    12d0 <setupBoundaryConditions+0x1d0>
test   %r8,%r8
je     136f <setupBoundaryConditions+0x26f>
lea    (%rax,%rdi,8),%r9
add    $0x10,%r9
lea    (%rcx,%rdi,8),%r10
add    $0x10,%r10
shl    $0x5,%r8
xor    %edi,%edi
xorps  %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
movups %xmm0,-0x10(%r10,%rdi,1)
movups %xmm0,(%r10,%rdi,1)
movups %xmm0,-0x10(%r9,%rdi,1)
movups %xmm0,(%r9,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%r8
jne    1350 <setupBoundaryConditions+0x250>
cmp    %rdx,%rsi
jne    11f0 <setupBoundaryConditions+0xf0>
movq   $0x0,(%rcx)
movq   $0x0,-0x8(%rcx,%rdx,8)
movq   $0x0,-0x8(%rax,%rdx,8)
movq   $0x0,(%rax)
ret

LLVM IR (-O0):
define void @setupBoundaryConditions(double** %0, i64 %1, i64 %2) {
%4 = alloca double**
%5 = alloca i64
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
store double** %0, double*** %4
store i64 %1, i64* %5
store i64 %2, i64* %6
store double 0.000000e+00, double* %11
store double 0.000000e+00, double* %12
store double 0.000000e+00, double* %13
store double 0.000000e+00, double* %14
store i64 0, i64* %9
br label %15
15: ; preds = %34, %3
%16 = load i64, i64* %9
%17 = load i64, i64* %5
%18 = icmp ult i64 %16, %17
br i1 %18, label %19, label %37
19: ; preds = %15
%20 = load double, double* %14
%21 = load double**, double*** %4
%22 = load i64, i64* %9
%23 = getelementptr inbounds double*, double** %21, i64 %22
%24 = load double*, double** %23
%25 = getelementptr inbounds double, double* %24, i64 0
store double %20, double* %25
%26 = load double, double* %13
%27 = load double**, double*** %4
%28 = load i64, i64* %9
%29 = getelementptr inbounds double*, double** %27, i64 %28
%30 = load double*, double** %29
%31 = load i64, i64* %6
%32 = sub i64 %31, 1
%33 = getelementptr inbounds double, double* %30, i64 %32
store double %26, double* %33
br label %34
34: ; preds = %19
%35 = load i64, i64* %9
%36 = add i64 %35, 1
store i64 %36, i64* %9
br label %15
37: ; preds = %15
store i64 0, i64* %10
br label %38
38: ; preds = %57, %37
%39 = load i64, i64* %10
%40 = load i64, i64* %6
%41 = icmp ult i64 %39, %40
br i1 %41, label %42, label %60
42: ; preds = %38
%43 = load double, double* %11
%44 = load double**, double*** %4
%45 = getelementptr inbounds double*, double** %44, i64 0
%46 = load double*, double** %45
%47 = load i64, i64* %10
%48 = getelementptr inbounds double, double* %46, i64 %47
store double %43, double* %48
%49 = load double, double* %12
%50 = load double**, double*** %4
%51 = load i64, i64* %5
%52 = sub i64 %51, 1
%53 = getelementptr inbounds double*, double** %50, i64 %52
%54 = load double*, double** %53
%55 = load i64, i64* %10
%56 = getelementptr inbounds double, double* %54, i64 %55
store double %49, double* %56
br label %57
57: ; preds = %42
%58 = load i64, i64* %10
%59 = add i64 %58, 1
store i64 %59, i64* %10
br label %38
60: ; preds = %38
%61 = load double, double* %11
%62 = load double, double* %14
%63 = fadd double %61, %62
%64 = fmul double 5.000000e-01, %63
%65 = load double**, double*** %4
%66 = getelementptr inbounds double*, double** %65, i64 0
%67 = load double*, double** %66
%68 = getelementptr inbounds double, double* %67, i64 0
store double %64, double* %68
%69 = load double, double* %13
%70 = load double, double* %11
%71 = fadd double %69, %70
%72 = fmul double 5.000000e-01, %71
%73 = load double**, double*** %4
%74 = getelementptr inbounds double*, double** %73, i64 0
%75 = load double*, double** %74
%76 = load i64, i64* %6
%77 = sub i64 %76, 1
%78 = getelementptr inbounds double, double* %75, i64 %77
store double %72, double* %78
%79 = load double, double* %13
%80 = load double, double* %12
%81 = fadd double %79, %80
%82 = fmul double 5.000000e-01, %81
%83 = load double**, double*** %4
%84 = load i64, i64* %5
%85 = sub i64 %84, 1
%86 = getelementptr inbounds double*, double** %83, i64 %85
%87 = load double*, double** %86
%88 = load i64, i64* %6
%89 = sub i64 %88, 1
%90 = getelementptr inbounds double, double* %87, i64 %89
store double %82, double* %90
%91 = load double, double* %14
%92 = load double, double* %12
%93 = fadd double %91, %92
%94 = fmul double 5.000000e-01, %93
%95 = load double**, double*** %4
%96 = load i64, i64* %5
%97 = sub i64 %96, 1
%98 = getelementptr inbounds double*, double** %95, i64 %97
%99 = load double*, double** %98
%100 = getelementptr inbounds double, double* %99, i64 0
store double %94, double* %100
ret void
}

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