void dmat_scale_add_2x2(double **a11, double **a12, double **a21, double **a22,
                        double **b11, double **b12, double **b21, double **b22,
                        double **P11, double **P12, double **P21, double **P22,
                        double alpha, int n) {
  int i;
  int j;
  if (alpha == 1.) {
    for (i = 0; i < n; ++i) {
      for (j = 0; j < n; ++j) {
        P11[i][j] = a11[i][j] + b11[i][j];
        P12[i][j] = a12[i][j] + b12[i][j];
        P21[i][j] = a21[i][j] + b21[i][j];
        P22[i][j] = a22[i][j] + b22[i][j];
      }
    }
  } else if (alpha == -1.) {
    for (i = 0; i < n; ++i) {
      for (j = 0; j < n; ++j) {
        P11[i][j] = a11[i][j] - b11[i][j];
        P12[i][j] = a12[i][j] - b12[i][j];
        P21[i][j] = a21[i][j] - b21[i][j];
        P22[i][j] = a22[i][j] - b22[i][j];
      }
    }
  } else {
    for (i = 0; i < n; ++i) {
      for (j = 0; j < n; ++j) {
        P11[i][j] = a11[i][j] + b11[i][j] * alpha;
        P12[i][j] = a12[i][j] + b12[i][j] * alpha;
        P21[i][j] = a21[i][j] + b21[i][j] * alpha;
        P22[i][j] = a22[i][j] + b22[i][j] * alpha;
      }
    }
  }
}


x86 assembly (clang, -O0):
<dmat_scale_add_2x2>:
push   %rbp
mov    %rsp,%rbp
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xeb7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12a1 <dmat_scale_add_2x2+0x1a1>
jp     12a1 <dmat_scale_add_2x2+0x1a1>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    129c <dmat_scale_add_2x2+0x19c>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    1289 <dmat_scale_add_2x2+0x189>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x38(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1173 <dmat_scale_add_2x2+0x73>
jmp    128e <dmat_scale_add_2x2+0x18e>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1160 <dmat_scale_add_2x2+0x60>
jmp    1587 <dmat_scale_add_2x2+0x487>
movsd  -0x38(%rbp),%xmm0
movsd  0xd5a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1406 <dmat_scale_add_2x2+0x306>
jp     1406 <dmat_scale_add_2x2+0x306>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    1401 <dmat_scale_add_2x2+0x301>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    13ee <dmat_scale_add_2x2+0x2ee>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x38(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    12d8 <dmat_scale_add_2x2+0x1d8>
jmp    13f3 <dmat_scale_add_2x2+0x2f3>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12c5 <dmat_scale_add_2x2+0x1c5>
jmp    1582 <dmat_scale_add_2x2+0x482>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    157d <dmat_scale_add_2x2+0x47d>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    156a <dmat_scale_add_2x2+0x46a>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x38(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1420 <dmat_scale_add_2x2+0x320>
jmp    156f <dmat_scale_add_2x2+0x46f>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    140d <dmat_scale_add_2x2+0x30d>
jmp    1582 <dmat_scale_add_2x2+0x482>
jmp    1587 <dmat_scale_add_2x2+0x487>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dmat_scale_add_2x2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r9,-0x8(%rsp)
mov    %r8,-0x10(%rsp)
mov    %rcx,-0x18(%rsp)
mov    %rdx,-0x20(%rsp)
mov    %rsi,-0x28(%rsp)
mov    %rdi,-0x30(%rsp)
mov    0x68(%rsp),%eax
ucomisd 0xecc(%rip),%xmm0
jne    1237 <dmat_scale_add_2x2+0x137>
jp     1237 <dmat_scale_add_2x2+0x137>
test   %eax,%eax
jle    143e <dmat_scale_add_2x2+0x33e>
mov    %eax,%eax
mov    %rax,-0x38(%rsp)
lea    0x0(,%rax,8),%r10
xor    %r8d,%r8d
nopw   0x0(%rax,%rax,1)
mov    -0x30(%rsp),%rax
mov    (%rax,%r8,8),%r11
mov    -0x10(%rsp),%rax
mov    (%rax,%r8,8),%r14
mov    0x48(%rsp),%rax
mov    (%rax,%r8,8),%r15
mov    -0x28(%rsp),%rax
mov    (%rax,%r8,8),%r12
mov    -0x8(%rsp),%rax
mov    (%rax,%r8,8),%r13
mov    0x50(%rsp),%rax
mov    (%rax,%r8,8),%rbp
mov    -0x20(%rsp),%rax
mov    (%rax,%r8,8),%rdi
mov    0x38(%rsp),%rax
mov    (%rax,%r8,8),%rax
mov    0x58(%rsp),%rcx
mov    (%rcx,%r8,8),%rbx
mov    -0x18(%rsp),%rcx
mov    (%rcx,%r8,8),%rcx
mov    0x40(%rsp),%rdx
mov    (%rdx,%r8,8),%rdx
mov    0x60(%rsp),%rsi
mov    (%rsi,%r8,8),%rsi
xor    %r9d,%r9d
nop
movsd  (%r11,%r9,1),%xmm0
addsd  (%r14,%r9,1),%xmm0
movsd  %xmm0,(%r15,%r9,1)
movsd  (%r12,%r9,1),%xmm0
addsd  0x0(%r13,%r9,1),%xmm0
movsd  %xmm0,0x0(%rbp,%r9,1)
movsd  (%rdi,%r9,1),%xmm0
addsd  (%rax,%r9,1),%xmm0
movsd  %xmm0,(%rbx,%r9,1)
movsd  (%rcx,%r9,1),%xmm0
addsd  (%rdx,%r9,1),%xmm0
movsd  %xmm0,(%rsi,%r9,1)
add    $0x8,%r9
cmp    %r9,%r10
jne    11d0 <dmat_scale_add_2x2+0xd0>
add    $0x1,%r8
cmp    -0x38(%rsp),%r8
jne    1160 <dmat_scale_add_2x2+0x60>
jmp    143e <dmat_scale_add_2x2+0x33e>
ucomisd 0xdc9(%rip),%xmm0
jne    1347 <dmat_scale_add_2x2+0x247>
jp     1347 <dmat_scale_add_2x2+0x247>
test   %eax,%eax
jle    143e <dmat_scale_add_2x2+0x33e>
mov    %eax,%eax
mov    %rax,-0x38(%rsp)
lea    0x0(,%rax,8),%r10
xor    %r8d,%r8d
cs nopw 0x0(%rax,%rax,1)
nop
mov    -0x30(%rsp),%rax
mov    (%rax,%r8,8),%r11
mov    -0x10(%rsp),%rax
mov    (%rax,%r8,8),%r14
mov    0x48(%rsp),%rax
mov    (%rax,%r8,8),%r15
mov    -0x28(%rsp),%rax
mov    (%rax,%r8,8),%r12
mov    -0x8(%rsp),%rax
mov    (%rax,%r8,8),%r13
mov    0x50(%rsp),%rax
mov    (%rax,%r8,8),%rbp
mov    -0x20(%rsp),%rax
mov    (%rax,%r8,8),%rdi
mov    0x38(%rsp),%rax
mov    (%rax,%r8,8),%rax
mov    0x58(%rsp),%rcx
mov    (%rcx,%r8,8),%rbx
mov    -0x18(%rsp),%rcx
mov    (%rcx,%r8,8),%rcx
mov    0x40(%rsp),%rdx
mov    (%rdx,%r8,8),%rdx
mov    0x60(%rsp),%rsi
mov    (%rsi,%r8,8),%rsi
xor    %r9d,%r9d
nop
movsd  (%r11,%r9,1),%xmm0
subsd  (%r14,%r9,1),%xmm0
movsd  %xmm0,(%r15,%r9,1)
movsd  (%r12,%r9,1),%xmm0
subsd  0x0(%r13,%r9,1),%xmm0
movsd  %xmm0,0x0(%rbp,%r9,1)
movsd  (%rdi,%r9,1),%xmm0
subsd  (%rax,%r9,1),%xmm0
movsd  %xmm0,(%rbx,%r9,1)
movsd  (%rcx,%r9,1),%xmm0
subsd  (%rdx,%r9,1),%xmm0
movsd  %xmm0,(%rsi,%r9,1)
add    $0x8,%r9
cmp    %r9,%r10
jne    12e0 <dmat_scale_add_2x2+0x1e0>
add    $0x1,%r8
cmp    -0x38(%rsp),%r8
jne    1270 <dmat_scale_add_2x2+0x170>
jmp    143e <dmat_scale_add_2x2+0x33e>
test   %eax,%eax
jle    143e <dmat_scale_add_2x2+0x33e>
mov    %eax,%eax
mov    %rax,-0x38(%rsp)
lea    0x0(,%rax,8),%rax
xor    %edi,%edi
mov    -0x30(%rsp),%rcx
mov    (%rcx,%rdi,8),%rbx
mov    -0x10(%rsp),%rcx
mov    (%rcx,%rdi,8),%r10
mov    0x48(%rsp),%rcx
mov    (%rcx,%rdi,8),%r11
mov    -0x28(%rsp),%rcx
mov    (%rcx,%rdi,8),%r14
mov    -0x8(%rsp),%rcx
mov    (%rcx,%rdi,8),%r15
mov    0x50(%rsp),%rcx
mov    (%rcx,%rdi,8),%r13
mov    -0x20(%rsp),%rcx
mov    (%rcx,%rdi,8),%r12
mov    0x38(%rsp),%rcx
mov    (%rcx,%rdi,8),%rbp
mov    0x58(%rsp),%rcx
mov    (%rcx,%rdi,8),%r9
mov    -0x18(%rsp),%rcx
mov    (%rcx,%rdi,8),%r8
mov    0x40(%rsp),%rcx
mov    (%rcx,%rdi,8),%rcx
mov    0x60(%rsp),%rdx
mov    (%rdx,%rdi,8),%rdx
xor    %esi,%esi
xchg   %ax,%ax
movsd  (%r10,%rsi,1),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rbx,%rsi,1),%xmm1
movsd  %xmm1,(%r11,%rsi,1)
movsd  (%r15,%rsi,1),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r14,%rsi,1),%xmm1
movsd  %xmm1,0x0(%r13,%rsi,1)
movsd  0x0(%rbp,%rsi,1),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r12,%rsi,1),%xmm1
movsd  %xmm1,(%r9,%rsi,1)
movsd  (%rcx,%rsi,1),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r8,%rsi,1),%xmm1
movsd  %xmm1,(%rdx,%rsi,1)
add    $0x8,%rsi
cmp    %rsi,%rax
jne    13d0 <dmat_scale_add_2x2+0x2d0>
add    $0x1,%rdi
cmp    -0x38(%rsp),%rdi
jne    1360 <dmat_scale_add_2x2+0x260>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @dmat_scale_add_2x2(double** %0, double** %1, double** %2, double** %3, double** %4, double** %5, double** %6, double** %7, double** %8, double** %9, double** %10, double** %11, double %12, i32 %13) {
%15 = alloca double**
%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 double
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
store double** %0, double*** %15
store double** %1, double*** %16
store double** %2, double*** %17
store double** %3, double*** %18
store double** %4, double*** %19
store double** %5, double*** %20
store double** %6, double*** %21
store double** %7, double*** %22
store double** %8, double*** %23
store double** %9, double*** %24
store double** %10, double*** %25
store double** %11, double*** %26
store double %12, double* %27
store i32 %13, i32* %28
%31 = load double, double* %27
%32 = fcmp oeq double %31, 1.000000e+00
br i1 %32, label %33, label %160
33: ; preds = %14
store i32 0, i32* %29
br label %34
34: ; preds = %156, %33
%35 = load i32, i32* %29
%36 = load i32, i32* %28
%37 = icmp slt i32 %35, %36
br i1 %37, label %38, label %159
38: ; preds = %34
store i32 0, i32* %30
br label %39
39: ; preds = %152, %38
%40 = load i32, i32* %30
%41 = load i32, i32* %28
%42 = icmp slt i32 %40, %41
br i1 %42, label %43, label %155
43: ; preds = %39
%44 = load double**, double*** %15
%45 = load i32, i32* %29
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds double*, double** %44, i64 %46
%48 = load double*, double** %47
%49 = load i32, i32* %30
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds double, double* %48, i64 %50
%52 = load double, double* %51
%53 = load double**, double*** %19
%54 = load i32, i32* %29
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds double*, double** %53, i64 %55
%57 = load double*, double** %56
%58 = load i32, i32* %30
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds double, double* %57, i64 %59
%61 = load double, double* %60
%62 = fadd double %52, %61
%63 = load double**, double*** %23
%64 = load i32, i32* %29
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds double*, double** %63, i64 %65
%67 = load double*, double** %66
%68 = load i32, i32* %30
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds double, double* %67, i64 %69
store double %62, double* %70
%71 = load double**, double*** %16
%72 = load i32, i32* %29
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds double*, double** %71, i64 %73
%75 = load double*, double** %74
%76 = load i32, i32* %30
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double, double* %75, i64 %77
%79 = load double, double* %78
%80 = load double**, double*** %20
%81 = load i32, i32* %29
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double*, double** %80, i64 %82
%84 = load double*, double** %83
%85 = load i32, i32* %30
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds double, double* %84, i64 %86
%88 = load double, double* %87
%89 = fadd double %79, %88
%90 = load double**, double*** %24
%91 = load i32, i32* %29
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds double*, double** %90, i64 %92
%94 = load double*, double** %93
%95 = load i32, i32* %30
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds double, double* %94, i64 %96
store double %89, double* %97
%98 = load double**, double*** %17
%99 = load i32, i32* %29
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds double*, double** %98, i64 %100
%102 = load double*, double** %101
%103 = load i32, i32* %30
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds double, double* %102, i64 %104
%106 = load double, double* %105
%107 = load double**, double*** %21
%108 = load i32, i32* %29
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds double*, double** %107, i64 %109
%111 = load double*, double** %110
%112 = load i32, i32* %30
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds double, double* %111, i64 %113
%115 = load double, double* %114
%116 = fadd double %106, %115
%117 = load double**, double*** %25
%118 = load i32, i32* %29
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds double*, double** %117, i64 %119
%121 = load double*, double** %120
%122 = load i32, i32* %30
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %121, i64 %123
store double %116, double* %124
%125 = load double**, double*** %18
%126 = load i32, i32* %29
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds double*, double** %125, i64 %127
%129 = load double*, double** %128
%130 = load i32, i32* %30
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds double, double* %129, i64 %131
%133 = load double, double* %132
%134 = load double**, double*** %22
%135 = load i32, i32* %29
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds double*, double** %134, i64 %136
%138 = load double*, double** %137
%139 = load i32, i32* %30
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds double, double* %138, i64 %140
%142 = load double, double* %141
%143 = fadd double %133, %142
%144 = load double**, double*** %26
%145 = load i32, i32* %29
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds double*, double** %144, i64 %146
%148 = load double*, double** %147
%149 = load i32, i32* %30
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds double, double* %148, i64 %150
store double %143, double* %151
br label %152
152: ; preds = %43
%153 = load i32, i32* %30
%154 = add nsw i32 %153, 1
store i32 %154, i32* %30
br label %39
155: ; preds = %39
br label %156
156: ; preds = %155
%157 = load i32, i32* %29
%158 = add nsw i32 %157, 1
store i32 %158, i32* %29
br label %34
159: ; preds = %34
br label %422
160: ; preds = %14
%161 = load double, double* %27
%162 = fcmp oeq double %161, -1.000000e+00
br i1 %162, label %163, label %290
163: ; preds = %160
store i32 0, i32* %29
br label %164
164: ; preds = %286, %163
%165 = load i32, i32* %29
%166 = load i32, i32* %28
%167 = icmp slt i32 %165, %166
br i1 %167, label %168, label %289
168: ; preds = %164
store i32 0, i32* %30
br label %169
169: ; preds = %282, %168
%170 = load i32, i32* %30
%171 = load i32, i32* %28
%172 = icmp slt i32 %170, %171
br i1 %172, label %173, label %285
173: ; preds = %169
%174 = load double**, double*** %15
%175 = load i32, i32* %29
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds double*, double** %174, i64 %176
%178 = load double*, double** %177
%179 = load i32, i32* %30
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds double, double* %178, i64 %180
%182 = load double, double* %181
%183 = load double**, double*** %19
%184 = load i32, i32* %29
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds double*, double** %183, i64 %185
%187 = load double*, double** %186
%188 = load i32, i32* %30
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds double, double* %187, i64 %189
%191 = load double, double* %190
%192 = fsub double %182, %191
%193 = load double**, double*** %23
%194 = load i32, i32* %29
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds double*, double** %193, i64 %195
%197 = load double*, double** %196
%198 = load i32, i32* %30
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds double, double* %197, i64 %199
store double %192, double* %200
%201 = load double**, double*** %16
%202 = load i32, i32* %29
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds double*, double** %201, i64 %203
%205 = load double*, double** %204
%206 = load i32, i32* %30
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds double, double* %205, i64 %207
%209 = load double, double* %208
%210 = load double**, double*** %20
%211 = load i32, i32* %29
%212 = sext i32 %211 to i64
%213 = getelementptr inbounds double*, double** %210, i64 %212
%214 = load double*, double** %213
%215 = load i32, i32* %30
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds double, double* %214, i64 %216
%218 = load double, double* %217
%219 = fsub double %209, %218
%220 = load double**, double*** %24
%221 = load i32, i32* %29
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds double*, double** %220, i64 %222
%224 = load double*, double** %223
%225 = load i32, i32* %30
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds double, double* %224, i64 %226
store double %219, double* %227
%228 = load double**, double*** %17
%229 = load i32, i32* %29
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds double*, double** %228, i64 %230
%232 = load double*, double** %231
%233 = load i32, i32* %30
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds double, double* %232, i64 %234
%236 = load double, double* %235
%237 = load double**, double*** %21
%238 = load i32, i32* %29
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds double*, double** %237, i64 %239
%241 = load double*, double** %240
%242 = load i32, i32* %30
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds double, double* %241, i64 %243
%245 = load double, double* %244
%246 = fsub double %236, %245
%247 = load double**, double*** %25
%248 = load i32, i32* %29
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds double*, double** %247, i64 %249
%251 = load double*, double** %250
%252 = load i32, i32* %30
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds double, double* %251, i64 %253
store double %246, double* %254
%255 = load double**, double*** %18
%256 = load i32, i32* %29
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds double*, double** %255, i64 %257
%259 = load double*, double** %258
%260 = load i32, i32* %30
%261 = sext i32 %260 to i64
%262 = getelementptr inbounds double, double* %259, i64 %261
%263 = load double, double* %262
%264 = load double**, double*** %22
%265 = load i32, i32* %29
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds double*, double** %264, i64 %266
%268 = load double*, double** %267
%269 = load i32, i32* %30
%270 = sext i32 %269 to i64
%271 = getelementptr inbounds double, double* %268, i64 %270
%272 = load double, double* %271
%273 = fsub double %263, %272
%274 = load double**, double*** %26
%275 = load i32, i32* %29
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds double*, double** %274, i64 %276
%278 = load double*, double** %277
%279 = load i32, i32* %30
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds double, double* %278, i64 %280
store double %273, double* %281
br label %282
282: ; preds = %173
%283 = load i32, i32* %30
%284 = add nsw i32 %283, 1
store i32 %284, i32* %30
br label %169
285: ; preds = %169
br label %286
286: ; preds = %285
%287 = load i32, i32* %29
%288 = add nsw i32 %287, 1
store i32 %288, i32* %29
br label %164
289: ; preds = %164
br label %421
290: ; preds = %160
store i32 0, i32* %29
br label %291
291: ; preds = %417, %290
%292 = load i32, i32* %29
%293 = load i32, i32* %28
%294 = icmp slt i32 %292, %293
br i1 %294, label %295, label %420
295: ; preds = %291
store i32 0, i32* %30
br label %296
296: ; preds = %413, %295
%297 = load i32, i32* %30
%298 = load i32, i32* %28
%299 = icmp slt i32 %297, %298
br i1 %299, label %300, label %416
300: ; preds = %296
%301 = load double**, double*** %15
%302 = load i32, i32* %29
%303 = sext i32 %302 to i64
%304 = getelementptr inbounds double*, double** %301, i64 %303
%305 = load double*, double** %304
%306 = load i32, i32* %30
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds double, double* %305, i64 %307
%309 = load double, double* %308
%310 = load double**, double*** %19
%311 = load i32, i32* %29
%312 = sext i32 %311 to i64
%313 = getelementptr inbounds double*, double** %310, i64 %312
%314 = load double*, double** %313
%315 = load i32, i32* %30
%316 = sext i32 %315 to i64
%317 = getelementptr inbounds double, double* %314, i64 %316
%318 = load double, double* %317
%319 = load double, double* %27
%320 = call double @llvm.fmuladd.f64(double %318, double %319, double %309)
%321 = load double**, double*** %23
%322 = load i32, i32* %29
%323 = sext i32 %322 to i64
%324 = getelementptr inbounds double*, double** %321, i64 %323
%325 = load double*, double** %324
%326 = load i32, i32* %30
%327 = sext i32 %326 to i64
%328 = getelementptr inbounds double, double* %325, i64 %327
store double %320, double* %328
%329 = load double**, double*** %16
%330 = load i32, i32* %29
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds double*, double** %329, i64 %331
%333 = load double*, double** %332
%334 = load i32, i32* %30
%335 = sext i32 %334 to i64
%336 = getelementptr inbounds double, double* %333, i64 %335
%337 = load double, double* %336
%338 = load double**, double*** %20
%339 = load i32, i32* %29
%340 = sext i32 %339 to i64
%341 = getelementptr inbounds double*, double** %338, i64 %340
%342 = load double*, double** %341
%343 = load i32, i32* %30
%344 = sext i32 %343 to i64
%345 = getelementptr inbounds double, double* %342, i64 %344
%346 = load double, double* %345
%347 = load double, double* %27
%348 = call double @llvm.fmuladd.f64(double %346, double %347, double %337)
%349 = load double**, double*** %24
%350 = load i32, i32* %29
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds double*, double** %349, i64 %351
%353 = load double*, double** %352
%354 = load i32, i32* %30
%355 = sext i32 %354 to i64
%356 = getelementptr inbounds double, double* %353, i64 %355
store double %348, double* %356
%357 = load double**, double*** %17
%358 = load i32, i32* %29
%359 = sext i32 %358 to i64
%360 = getelementptr inbounds double*, double** %357, i64 %359
%361 = load double*, double** %360
%362 = load i32, i32* %30
%363 = sext i32 %362 to i64
%364 = getelementptr inbounds double, double* %361, i64 %363
%365 = load double, double* %364
%366 = load double**, double*** %21
%367 = load i32, i32* %29
%368 = sext i32 %367 to i64
%369 = getelementptr inbounds double*, double** %366, i64 %368
%370 = load double*, double** %369
%371 = load i32, i32* %30
%372 = sext i32 %371 to i64
%373 = getelementptr inbounds double, double* %370, i64 %372
%374 = load double, double* %373
%375 = load double, double* %27
%376 = call double @llvm.fmuladd.f64(double %374, double %375, double %365)
%377 = load double**, double*** %25
%378 = load i32, i32* %29
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds double*, double** %377, i64 %379
%381 = load double*, double** %380
%382 = load i32, i32* %30
%383 = sext i32 %382 to i64
%384 = getelementptr inbounds double, double* %381, i64 %383
store double %376, double* %384
%385 = load double**, double*** %18
%386 = load i32, i32* %29
%387 = sext i32 %386 to i64
%388 = getelementptr inbounds double*, double** %385, i64 %387
%389 = load double*, double** %388
%390 = load i32, i32* %30
%391 = sext i32 %390 to i64
%392 = getelementptr inbounds double, double* %389, i64 %391
%393 = load double, double* %392
%394 = load double**, double*** %22
%395 = load i32, i32* %29
%396 = sext i32 %395 to i64
%397 = getelementptr inbounds double*, double** %394, i64 %396
%398 = load double*, double** %397
%399 = load i32, i32* %30
%400 = sext i32 %399 to i64
%401 = getelementptr inbounds double, double* %398, i64 %400
%402 = load double, double* %401
%403 = load double, double* %27
%404 = call double @llvm.fmuladd.f64(double %402, double %403, double %393)
%405 = load double**, double*** %26
%406 = load i32, i32* %29
%407 = sext i32 %406 to i64
%408 = getelementptr inbounds double*, double** %405, i64 %407
%409 = load double*, double** %408
%410 = load i32, i32* %30
%411 = sext i32 %410 to i64
%412 = getelementptr inbounds double, double* %409, i64 %411
store double %404, double* %412
br label %413
413: ; preds = %300
%414 = load i32, i32* %30
%415 = add nsw i32 %414, 1
store i32 %415, i32* %30
br label %296
416: ; preds = %296
br label %417
417: ; preds = %416
%418 = load i32, i32* %29
%419 = add nsw i32 %418, 1
store i32 %419, i32* %29
br label %291
420: ; preds = %291
br label %421
421: ; preds = %420, %289
br label %422
422: ; preds = %421, %159
ret void
}

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