#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef size_t uint;

/* Variables and functions */
void fill_coeffs(uint rowmax, uint colmax, double th_cond, double dx, double dy,
                 double width, double TN, double *aP, double *aW, double *aE,
                 double *aS, double *aN, double *b) {
  for (uint col = 0; col < colmax; ++col) {
    for (uint row = 0; row < rowmax; ++row) {
      uint ind = col * rowmax + row;
      b[ind] = 0.0;
      double SP = 0.0;
      if (col == 0) {
        aW[ind] = 0.0;
        SP = -2.0 * th_cond * width * dy / dx;
      } else {
        aW[ind] = th_cond * width * dy / dx;
      }
      if (col == colmax - 1) {
        aE[ind] = 0.0;
        SP = -2.0 * th_cond * width * dy / dx;
      } else {
        aE[ind] = th_cond * width * dy / dx;
      }
      if (row == 0) {
        aS[ind] = 0.0;
        SP = -2.0 * th_cond * width * dx / dy;
      } else {
        aS[ind] = th_cond * width * dx / dy;
      }
      if (row == rowmax - 1) {
        aN[ind] = 0.0;
        b[ind] = 2.0 * th_cond * width * dx * TN / dy;
        SP = -2.0 * th_cond * width * dx / dy;
      } else {
        aN[ind] = th_cond * width * dx / dy;
      }
      aP[ind] = aW[ind] + aE[ind] + aS[ind] + aN[ind] - SP;
    }
  }
}


x86 assembly (clang, -O0):
<fill_coeffs>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
mov    %rdx,-0x40(%rbp)
mov    %rcx,-0x48(%rbp)
mov    %r8,-0x50(%rbp)
mov    %r9,-0x58(%rbp)
movq   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    13c9 <fill_coeffs+0x2c9>
movq   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%rax
cmp    -0x8(%rbp),%rax
jae    13b3 <fill_coeffs+0x2b3>
mov    -0x60(%rbp),%rax
imul   -0x8(%rbp),%rax
add    -0x68(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    0x18(%rbp),%rax
mov    -0x70(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpq   $0x0,-0x60(%rbp)
jne    11d3 <fill_coeffs+0xd3>
mov    -0x48(%rbp),%rax
mov    -0x70(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xe4b(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    11f4 <fill_coeffs+0xf4>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jne    123f <fill_coeffs+0x13f>
mov    -0x50(%rbp),%rax
mov    -0x70(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xddf(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1260 <fill_coeffs+0x160>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
cmpq   $0x0,-0x68(%rbp)
jne    12a1 <fill_coeffs+0x1a1>
mov    -0x58(%rbp),%rax
mov    -0x70(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xd7d(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    12c2 <fill_coeffs+0x1c2>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
mov    -0x58(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%rax
mov    -0x8(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jne    133b <fill_coeffs+0x23b>
mov    0x10(%rbp),%rax
mov    -0x70(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xd19(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
mov    0x18(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xce3(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    135c <fill_coeffs+0x25c>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
mov    0x10(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x70(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
mov    -0x70(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
mov    -0x70(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
subsd  -0x78(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x68(%rbp)
jmp    115b <fill_coeffs+0x5b>
jmp    13b8 <fill_coeffs+0x2b8>
mov    -0x60(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x60(%rbp)
jmp    1145 <fill_coeffs+0x45>
pop    %rbp
ret

x86 assembly (clang, -O2):
<fill_coeffs>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r9,-0x20(%rsp)
mov    %r8,-0x28(%rsp)
mov    %rdx,-0x18(%rsp)
mov    %rsi,-0x8(%rsp)
test   %rsi,%rsi
je     1367 <fill_coeffs+0x267>
mov    0x40(%rsp),%rsi
mov    0x38(%rsp),%r9
movapd %xmm0,%xmm5
mulsd  %xmm3,%xmm5
movapd %xmm5,%xmm9
mulsd  %xmm2,%xmm9
divsd  %xmm1,%xmm9
movsd  0xeaf(%rip),%xmm10
mulsd  %xmm0,%xmm10
mulsd  %xmm3,%xmm10
movapd %xmm10,%xmm8
mulsd  %xmm2,%xmm8
divsd  %xmm1,%xmm8
mov    -0x8(%rsp),%rax
lea    -0x1(%rax),%rax
mov    %rax,-0x10(%rsp)
mulsd  %xmm1,%xmm5
divsd  %xmm2,%xmm5
mulsd  %xmm1,%xmm10
divsd  %xmm2,%xmm10
lea    -0x1(%rdi),%r13
addsd  %xmm0,%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm4,%xmm0
divsd  %xmm2,%xmm0
lea    -0x2(%rdi),%r15
mov    -0x20(%rsp),%rax
add    $0x8,%rax
lea    0x0(,%rdi,8),%r8
mov    -0x28(%rsp),%rdx
lea    0x8(%rdx),%rbx
lea    0x8(%rcx),%rbp
lea    0x8(%rsi),%r10
lea    0x8(%r9),%r11
mov    -0x18(%rsp),%rdx
lea    0x8(%rdx),%r14
xor    %r9d,%r9d
jmp    1201 <fill_coeffs+0x101>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r9
add    %r8,%rax
add    %r8,%rbx
add    %r8,%rbp
add    %r8,%r10
add    %r8,%r11
add    %r8,%r14
cmp    -0x8(%rsp),%r9
je     1367 <fill_coeffs+0x267>
test   %rdi,%rdi
je     11e0 <fill_coeffs+0xe0>
xorpd  %xmm1,%xmm1
xorpd  %xmm2,%xmm2
test   %r9,%r9
je     1218 <fill_coeffs+0x118>
movapd %xmm9,%xmm2
mov    %r9,%rdx
imul   %rdi,%rdx
cmp    -0x10(%rsp),%r9
mov    0x40(%rsp),%r12
je     1230 <fill_coeffs+0x130>
movapd %xmm9,%xmm1
movq   $0x0,(%r12,%rdx,8)
movsd  %xmm2,(%rcx,%rdx,8)
mov    -0x28(%rsp),%rsi
movsd  %xmm1,(%rsi,%rdx,8)
mov    -0x20(%rsp),%rsi
movq   $0x0,(%rsi,%rdx,8)
mov    0x38(%rsp),%rsi
test   %r13,%r13
je     1270 <fill_coeffs+0x170>
movsd  %xmm5,(%rsi,%rdx,8)
movapd %xmm5,%xmm1
jmp    1283 <fill_coeffs+0x183>
nopl   0x0(%rax)
movq   $0x0,(%rsi,%rdx,8)
movsd  %xmm0,(%r12,%rdx,8)
movsd  (%rsi,%rdx,8),%xmm1
movsd  (%rcx,%rdx,8),%xmm2
mov    -0x28(%rsp),%rsi
addsd  (%rsi,%rdx,8),%xmm2
mov    -0x20(%rsp),%rsi
addsd  (%rsi,%rdx,8),%xmm2
addsd  %xmm1,%xmm2
subsd  %xmm10,%xmm2
mov    -0x18(%rsp),%rsi
movsd  %xmm2,(%rsi,%rdx,8)
cmp    $0x1,%rdi
je     11e0 <fill_coeffs+0xe0>
xorpd  %xmm1,%xmm1
xorpd  %xmm2,%xmm2
movapd %xmm8,%xmm4
test   %r9,%r9
je     12d4 <fill_coeffs+0x1d4>
movapd %xmm9,%xmm2
xorpd  %xmm4,%xmm4
movapd %xmm8,%xmm3
cmp    -0x10(%rsp),%r9
je     12e9 <fill_coeffs+0x1e9>
movapd %xmm9,%xmm1
movapd %xmm4,%xmm3
xor    %r12d,%r12d
jmp    132c <fill_coeffs+0x22c>
xchg   %ax,%ax
movsd  %xmm5,(%r11,%r12,8)
movapd %xmm5,%xmm4
movapd %xmm3,%xmm7
movsd  0x0(%rbp,%r12,8),%xmm6
addsd  (%rbx,%r12,8),%xmm6
addsd  (%rax,%r12,8),%xmm6
addsd  %xmm4,%xmm6
subsd  %xmm7,%xmm6
movsd  %xmm6,(%r14,%r12,8)
add    $0x1,%r12
cmp    %r12,%r13
je     11e0 <fill_coeffs+0xe0>
movq   $0x0,(%r10,%r12,8)
movsd  %xmm2,0x0(%rbp,%r12,8)
movsd  %xmm1,(%rbx,%r12,8)
movsd  %xmm5,(%rax,%r12,8)
cmp    %r12,%r15
jne    12f0 <fill_coeffs+0x1f0>
movq   $0x0,(%r11,%r12,8)
movsd  %xmm0,(%r10,%r12,8)
movsd  (%r11,%r12,8),%xmm4
movapd %xmm10,%xmm7
jmp    12fe <fill_coeffs+0x1fe>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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