void storeJ(double *GJ, const double *PT, int nBasis, double EE, int p, int q,
            int i, int j, char type) {
  switch (type) {
  case 5:
    GJ[p * nBasis + q] += PT[i * nBasis + j] * EE;
    break;
  case 4:
    GJ[p * nBasis + q] += PT[i * nBasis + j] * EE;
    GJ[i * nBasis + j] += PT[p * nBasis + q] * EE;
    break;
  case 3:
    GJ[i * nBasis + j] += PT[p * nBasis + q] * EE;
    EE += EE;
    GJ[p * nBasis + q] += PT[i * nBasis + j] * EE;
    break;
  case 2:
    GJ[p * nBasis + q] += PT[i * nBasis + j] * EE;
    EE += EE;
    GJ[i * nBasis + j] += PT[p * nBasis + q] * EE;
    break;
  case 1:
    EE += EE;
    GJ[p * nBasis + q] += PT[i * nBasis + j] * EE;
    break;
  default:
    EE += EE;
    GJ[p * nBasis + q] += PT[i * nBasis + j] * EE;
    GJ[i * nBasis + j] += PT[p * nBasis + q] * EE;
    break;
  }
}


x86 assembly (clang, -O0):
<storeJ>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%al
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8d,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
movsbl 0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x4,%eax
ja     1385 <storeJ+0x285>
mov    -0x38(%rbp),%rax
lea    0xeba(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1410 <storeJ+0x310>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1410 <storeJ+0x310>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x20(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1410 <storeJ+0x310>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x20(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1410 <storeJ+0x310>
movsd  -0x20(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1410 <storeJ+0x310>
movsd  -0x20(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    0x10(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
pop    %rbp
ret

x86 assembly (clang, -O2):
<storeJ>:
mov    0x8(%rsp),%r10d
movsbl 0x10(%rsp),%eax
add    $0xffffffff,%eax
cmp    $0x4,%eax
ja     1140 <storeJ+0x40>
lea    0xee7(%rip),%r11
movslq (%r11,%rax,4),%rax
add    %r11,%rax
jmp    *%rax
addsd  %xmm0,%xmm0
imul   %edx,%r9d
add    %r10d,%r9d
movslq %r9d,%rax
imul   %edx,%ecx
add    %r8d,%ecx
mulsd  (%rsi,%rax,8),%xmm0
movslq %ecx,%rax
jmp    11b0 <storeJ+0xb0>
addsd  %xmm0,%xmm0
imul   %edx,%r9d
add    %r10d,%r9d
movslq %r9d,%rax
imul   %edx,%ecx
add    %r8d,%ecx
movslq %ecx,%rcx
movsd  (%rsi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rdi,%rcx,8),%xmm1
movsd  %xmm1,(%rdi,%rcx,8)
jmp    11ab <storeJ+0xab>
imul   %edx,%r9d
add    %r10d,%r9d
movslq %r9d,%rax
imul   %edx,%ecx
add    %r8d,%ecx
movslq %ecx,%rcx
jmp    1194 <storeJ+0x94>
imul   %edx,%ecx
add    %r8d,%ecx
movslq %ecx,%rax
imul   %edx,%r9d
add    %r10d,%r9d
movslq %r9d,%rcx
movsd  (%rsi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rdi,%rcx,8),%xmm1
movsd  %xmm1,(%rdi,%rcx,8)
addsd  %xmm0,%xmm0
mulsd  (%rsi,%rcx,8),%xmm0
addsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%rdi,%rax,8)
ret

LLVM IR (-O0):
define void @storeJ(double* %0, double* %1, i32 %2, double %3, i32 %4, i32 %5, i32 %6, i32 %7, i8 signext %8) {
%10 = alloca double*
%11 = alloca double*
%12 = alloca i32
%13 = alloca double
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i8
store double* %0, double** %10
store double* %1, double** %11
store i32 %2, i32* %12
store double %3, double* %13
store i32 %4, i32* %14
store i32 %5, i32* %15
store i32 %6, i32* %16
store i32 %7, i32* %17
store i8 %8, i8* %18
%19 = load i8, i8* %18
%20 = sext i8 %19 to i32
switch i32 %20, label %195 [
i32 5, label %21
i32 4, label %42
i32 3, label %83
i32 2, label %127
i32 1, label %171
]
21: ; preds = %9
%22 = load double*, double** %11
%23 = load i32, i32* %16
%24 = load i32, i32* %12
%25 = mul nsw i32 %23, %24
%26 = load i32, i32* %17
%27 = add nsw i32 %25, %26
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds double, double* %22, i64 %28
%30 = load double, double* %29
%31 = load double, double* %13
%32 = load double*, double** %10
%33 = load i32, i32* %14
%34 = load i32, i32* %12
%35 = mul nsw i32 %33, %34
%36 = load i32, i32* %15
%37 = add nsw i32 %35, %36
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double, double* %32, i64 %38
%40 = load double, double* %39
%41 = call double @llvm.fmuladd.f64(double %30, double %31, double %40)
store double %41, double* %39
br label %239
42: ; preds = %9
%43 = load double*, double** %11
%44 = load i32, i32* %16
%45 = load i32, i32* %12
%46 = mul nsw i32 %44, %45
%47 = load i32, i32* %17
%48 = add nsw i32 %46, %47
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds double, double* %43, i64 %49
%51 = load double, double* %50
%52 = load double, double* %13
%53 = load double*, double** %10
%54 = load i32, i32* %14
%55 = load i32, i32* %12
%56 = mul nsw i32 %54, %55
%57 = load i32, i32* %15
%58 = add nsw i32 %56, %57
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds double, double* %53, i64 %59
%61 = load double, double* %60
%62 = call double @llvm.fmuladd.f64(double %51, double %52, double %61)
store double %62, double* %60
%63 = load double*, double** %11
%64 = load i32, i32* %14
%65 = load i32, i32* %12
%66 = mul nsw i32 %64, %65
%67 = load i32, i32* %15
%68 = add nsw i32 %66, %67
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds double, double* %63, i64 %69
%71 = load double, double* %70
%72 = load double, double* %13
%73 = load double*, double** %10
%74 = load i32, i32* %16
%75 = load i32, i32* %12
%76 = mul nsw i32 %74, %75
%77 = load i32, i32* %17
%78 = add nsw i32 %76, %77
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds double, double* %73, i64 %79
%81 = load double, double* %80
%82 = call double @llvm.fmuladd.f64(double %71, double %72, double %81)
store double %82, double* %80
br label %239
83: ; preds = %9
%84 = load double*, double** %11
%85 = load i32, i32* %14
%86 = load i32, i32* %12
%87 = mul nsw i32 %85, %86
%88 = load i32, i32* %15
%89 = add nsw i32 %87, %88
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds double, double* %84, i64 %90
%92 = load double, double* %91
%93 = load double, double* %13
%94 = load double*, double** %10
%95 = load i32, i32* %16
%96 = load i32, i32* %12
%97 = mul nsw i32 %95, %96
%98 = load i32, i32* %17
%99 = add nsw i32 %97, %98
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds double, double* %94, i64 %100
%102 = load double, double* %101
%103 = call double @llvm.fmuladd.f64(double %92, double %93, double %102)
store double %103, double* %101
%104 = load double, double* %13
%105 = load double, double* %13
%106 = fadd double %105, %104
store double %106, double* %13
%107 = load double*, double** %11
%108 = load i32, i32* %16
%109 = load i32, i32* %12
%110 = mul nsw i32 %108, %109
%111 = load i32, i32* %17
%112 = add nsw i32 %110, %111
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds double, double* %107, i64 %113
%115 = load double, double* %114
%116 = load double, double* %13
%117 = load double*, double** %10
%118 = load i32, i32* %14
%119 = load i32, i32* %12
%120 = mul nsw i32 %118, %119
%121 = load i32, i32* %15
%122 = add nsw i32 %120, %121
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %117, i64 %123
%125 = load double, double* %124
%126 = call double @llvm.fmuladd.f64(double %115, double %116, double %125)
store double %126, double* %124
br label %239
127: ; preds = %9
%128 = load double*, double** %11
%129 = load i32, i32* %16
%130 = load i32, i32* %12
%131 = mul nsw i32 %129, %130
%132 = load i32, i32* %17
%133 = add nsw i32 %131, %132
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds double, double* %128, i64 %134
%136 = load double, double* %135
%137 = load double, double* %13
%138 = load double*, double** %10
%139 = load i32, i32* %14
%140 = load i32, i32* %12
%141 = mul nsw i32 %139, %140
%142 = load i32, i32* %15
%143 = add nsw i32 %141, %142
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds double, double* %138, i64 %144
%146 = load double, double* %145
%147 = call double @llvm.fmuladd.f64(double %136, double %137, double %146)
store double %147, double* %145
%148 = load double, double* %13
%149 = load double, double* %13
%150 = fadd double %149, %148
store double %150, double* %13
%151 = load double*, double** %11
%152 = load i32, i32* %14
%153 = load i32, i32* %12
%154 = mul nsw i32 %152, %153
%155 = load i32, i32* %15
%156 = add nsw i32 %154, %155
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds double, double* %151, i64 %157
%159 = load double, double* %158
%160 = load double, double* %13
%161 = load double*, double** %10
%162 = load i32, i32* %16
%163 = load i32, i32* %12
%164 = mul nsw i32 %162, %163
%165 = load i32, i32* %17
%166 = add nsw i32 %164, %165
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds double, double* %161, i64 %167
%169 = load double, double* %168
%170 = call double @llvm.fmuladd.f64(double %159, double %160, double %169)
store double %170, double* %168
br label %239
171: ; preds = %9
%172 = load double, double* %13
%173 = load double, double* %13
%174 = fadd double %173, %172
store double %174, double* %13
%175 = load double*, double** %11
%176 = load i32, i32* %16
%177 = load i32, i32* %12
%178 = mul nsw i32 %176, %177
%179 = load i32, i32* %17
%180 = add nsw i32 %178, %179
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds double, double* %175, i64 %181
%183 = load double, double* %182
%184 = load double, double* %13
%185 = load double*, double** %10
%186 = load i32, i32* %14
%187 = load i32, i32* %12
%188 = mul nsw i32 %186, %187
%189 = load i32, i32* %15
%190 = add nsw i32 %188, %189
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds double, double* %185, i64 %191
%193 = load double, double* %192
%194 = call double @llvm.fmuladd.f64(double %183, double %184, double %193)
store double %194, double* %192
br label %239
195: ; preds = %9
%196 = load double, double* %13
%197 = load double, double* %13
%198 = fadd double %197, %196
store double %198, double* %13
%199 = load double*, double** %11
%200 = load i32, i32* %16
%201 = load i32, i32* %12
%202 = mul nsw i32 %200, %201
%203 = load i32, i32* %17
%204 = add nsw i32 %202, %203
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds double, double* %199, i64 %205
%207 = load double, double* %206
%208 = load double, double* %13
%209 = load double*, double** %10
%210 = load i32, i32* %14
%211 = load i32, i32* %12
%212 = mul nsw i32 %210, %211
%213 = load i32, i32* %15
%214 = add nsw i32 %212, %213
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds double, double* %209, i64 %215
%217 = load double, double* %216
%218 = call double @llvm.fmuladd.f64(double %207, double %208, double %217)
store double %218, double* %216
%219 = load double*, double** %11
%220 = load i32, i32* %14
%221 = load i32, i32* %12
%222 = mul nsw i32 %220, %221
%223 = load i32, i32* %15
%224 = add nsw i32 %222, %223
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds double, double* %219, i64 %225
%227 = load double, double* %226
%228 = load double, double* %13
%229 = load double*, double** %10
%230 = load i32, i32* %16
%231 = load i32, i32* %12
%232 = mul nsw i32 %230, %231
%233 = load i32, i32* %17
%234 = add nsw i32 %232, %233
%235 = sext i32 %234 to i64
%236 = getelementptr inbounds double, double* %229, i64 %235
%237 = load double, double* %236
%238 = call double @llvm.fmuladd.f64(double %227, double %228, double %237)
store double %238, double* %236
br label %239
239: ; preds = %195, %171, %127, %83, %42, %21
ret void
}

LLVM IR (-O2):
define void @storeJ(double* nocapture %0, double* nocapture %1, i32 %2, double %3, i32 %4, i32 %5, i32 %6, i32 %7, i8 signext %8) {
%10 = sext i8 %8 to i32
switch i32 %10, label %89 [
i32 5, label %11
i32 4, label %23
i32 3, label %40
i32 2, label %58
i32 1, label %76
]
11: ; preds = %9
%12 = mul nsw i32 %6, %2
%13 = add nsw i32 %12, %7
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds double, double* %1, i64 %14
%16 = load double, double* %15
%17 = mul nsw i32 %4, %2
%18 = add nsw i32 %17, %5
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds double, double* %0, i64 %19
%21 = load double, double* %20
%22 = tail call double @llvm.fmuladd.f64(double %16, double %3, double %21)
store double %22, double* %20
br label %107
23: ; preds = %9
%24 = mul nsw i32 %6, %2
%25 = add nsw i32 %24, %7
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds double, double* %1, i64 %26
%28 = load double, double* %27
%29 = mul nsw i32 %4, %2
%30 = add nsw i32 %29, %5
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds double, double* %0, i64 %31
%33 = load double, double* %32
%34 = tail call double @llvm.fmuladd.f64(double %28, double %3, double %33)
store double %34, double* %32
%35 = getelementptr inbounds double, double* %1, i64 %31
%36 = load double, double* %35
%37 = getelementptr inbounds double, double* %0, i64 %26
%38 = load double, double* %37
%39 = tail call double @llvm.fmuladd.f64(double %36, double %3, double %38)
store double %39, double* %37
br label %107
40: ; preds = %9
%41 = mul nsw i32 %4, %2
%42 = add nsw i32 %41, %5
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds double, double* %1, i64 %43
%45 = load double, double* %44
%46 = mul nsw i32 %6, %2
%47 = add nsw i32 %46, %7
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds double, double* %0, i64 %48
%50 = load double, double* %49
%51 = tail call double @llvm.fmuladd.f64(double %45, double %3, double %50)
store double %51, double* %49
%52 = fadd double %3, %3
%53 = getelementptr inbounds double, double* %1, i64 %48
%54 = load double, double* %53
%55 = getelementptr inbounds double, double* %0, i64 %43
%56 = load double, double* %55
%57 = tail call double @llvm.fmuladd.f64(double %54, double %52, double %56)
store double %57, double* %55
br label %107
58: ; preds = %9
%59 = mul nsw i32 %6, %2
%60 = add nsw i32 %59, %7
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds double, double* %1, i64 %61
%63 = load double, double* %62
%64 = mul nsw i32 %4, %2
%65 = add nsw i32 %64, %5
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds double, double* %0, i64 %66
%68 = load double, double* %67
%69 = tail call double @llvm.fmuladd.f64(double %63, double %3, double %68)
store double %69, double* %67
%70 = fadd double %3, %3
%71 = getelementptr inbounds double, double* %1, i64 %66
%72 = load double, double* %71
%73 = getelementptr inbounds double, double* %0, i64 %61
%74 = load double, double* %73
%75 = tail call double @llvm.fmuladd.f64(double %72, double %70, double %74)
store double %75, double* %73
br label %107
76: ; preds = %9
%77 = fadd double %3, %3
%78 = mul nsw i32 %6, %2
%79 = add nsw i32 %78, %7
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds double, double* %1, i64 %80
%82 = load double, double* %81
%83 = mul nsw i32 %4, %2
%84 = add nsw i32 %83, %5
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds double, double* %0, i64 %85
%87 = load double, double* %86
%88 = tail call double @llvm.fmuladd.f64(double %82, double %77, double %87)
store double %88, double* %86
br label %107
89: ; preds = %9
%90 = fadd double %3, %3
%91 = mul nsw i32 %6, %2
%92 = add nsw i32 %91, %7
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds double, double* %1, i64 %93
%95 = load double, double* %94
%96 = mul nsw i32 %4, %2
%97 = add nsw i32 %96, %5
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds double, double* %0, i64 %98
%100 = load double, double* %99
%101 = tail call double @llvm.fmuladd.f64(double %95, double %90, double %100)
store double %101, double* %99
%102 = getelementptr inbounds double, double* %1, i64 %98
%103 = load double, double* %102
%104 = getelementptr inbounds double, double* %0, i64 %93
%105 = load double, double* %104
%106 = tail call double @llvm.fmuladd.f64(double %103, double %90, double %105)
store double %106, double* %104
br label %107
107: ; preds = %89, %76, %58, %40, %23, %11
ret void
}