void dmat_scale_add_1x2(double **a11, double **a12, double **b11, double **b12,
                        double **P11, double **P12, 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];
      }
    }
  } 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];
      }
    }
  } 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;
      }
    }
  }
}


x86 assembly (clang, -O0):
<dmat_scale_add_1x2>:
push   %rbp
mov    %rsp,%rbp
mov    0x10(%rbp),%eax
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  0xecf(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    120b <dmat_scale_add_1x2+0x10b>
jp     120b <dmat_scale_add_1x2+0x10b>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1206 <dmat_scale_add_1x2+0x106>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    11f3 <dmat_scale_add_1x2+0xf3>
mov    -0x8(%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    -0x28(%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    -0x20(%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    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    115b <dmat_scale_add_1x2+0x5b>
jmp    11f8 <dmat_scale_add_1x2+0xf8>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1148 <dmat_scale_add_1x2+0x48>
jmp    13db <dmat_scale_add_1x2+0x2db>
movsd  -0x38(%rbp),%xmm0
movsd  0xdf0(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12f2 <dmat_scale_add_1x2+0x1f2>
jp     12f2 <dmat_scale_add_1x2+0x1f2>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    12ed <dmat_scale_add_1x2+0x1ed>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    12da <dmat_scale_add_1x2+0x1da>
mov    -0x8(%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    -0x28(%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    -0x20(%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    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1242 <dmat_scale_add_1x2+0x142>
jmp    12df <dmat_scale_add_1x2+0x1df>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    122f <dmat_scale_add_1x2+0x12f>
jmp    13d6 <dmat_scale_add_1x2+0x2d6>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    13d1 <dmat_scale_add_1x2+0x2d1>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    13be <dmat_scale_add_1x2+0x2be>
mov    -0x8(%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    -0x28(%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    -0x20(%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    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    130c <dmat_scale_add_1x2+0x20c>
jmp    13c3 <dmat_scale_add_1x2+0x2c3>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12f9 <dmat_scale_add_1x2+0x1f9>
jmp    13d6 <dmat_scale_add_1x2+0x2d6>
jmp    13db <dmat_scale_add_1x2+0x2db>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dmat_scale_add_1x2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r9,-0x8(%rsp)
mov    %r8,-0x10(%rsp)
mov    0x38(%rsp),%eax
ucomisd 0xee0(%rip),%xmm0
jne    121e <dmat_scale_add_1x2+0x11e>
jp     121e <dmat_scale_add_1x2+0x11e>
test   %eax,%eax
jle    1426 <dmat_scale_add_1x2+0x326>
mov    0x38(%rsp),%r8d
mov    %r8d,%r14d
and    $0xfffffffe,%r14d
xor    %r10d,%r10d
mov    -0x8(%rsp),%rbx
jmp    115d <dmat_scale_add_1x2+0x5d>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r10
cmp    %r8,%r10
je     1426 <dmat_scale_add_1x2+0x326>
mov    (%rdi,%r10,8),%rax
mov    (%rdx,%r10,8),%r13
mov    -0x10(%rsp),%rbp
mov    0x0(%rbp,%r10,8),%r9
mov    (%rsi,%r10,8),%rbp
mov    (%rcx,%r10,8),%r12
mov    (%rbx,%r10,8),%r15
xor    %r11d,%r11d
cmpl   $0x1,0x38(%rsp)
je     11e9 <dmat_scale_add_1x2+0xe9>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rax,%r11,8),%xmm0
addsd  0x0(%r13,%r11,8),%xmm0
movsd  %xmm0,(%r9,%r11,8)
movsd  0x0(%rbp,%r11,8),%xmm0
addsd  (%r12,%r11,8),%xmm0
movsd  %xmm0,(%r15,%r11,8)
movsd  0x8(%rax,%r11,8),%xmm0
addsd  0x8(%r13,%r11,8),%xmm0
movsd  %xmm0,0x8(%r9,%r11,8)
movsd  0x8(%rbp,%r11,8),%xmm0
addsd  0x8(%r12,%r11,8),%xmm0
movsd  %xmm0,0x8(%r15,%r11,8)
add    $0x2,%r11
cmp    %r11,%r14
jne    1190 <dmat_scale_add_1x2+0x90>
test   $0x1,%r8b
je     1150 <dmat_scale_add_1x2+0x50>
movsd  (%rax,%r11,8),%xmm0
addsd  0x0(%r13,%r11,8),%xmm0
movsd  %xmm0,(%r9,%r11,8)
movsd  0x0(%rbp,%r11,8),%xmm0
addsd  (%r12,%r11,8),%xmm0
movsd  %xmm0,(%r15,%r11,8)
jmp    1150 <dmat_scale_add_1x2+0x50>
ucomisd 0xde2(%rip),%xmm0
jne    1318 <dmat_scale_add_1x2+0x218>
jp     1318 <dmat_scale_add_1x2+0x218>
test   %eax,%eax
jle    1426 <dmat_scale_add_1x2+0x326>
mov    0x38(%rsp),%r11d
mov    %r11d,%r14d
and    $0xfffffffe,%r14d
xor    %r10d,%r10d
jmp    125d <dmat_scale_add_1x2+0x15d>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r10
cmp    %r11,%r10
je     1426 <dmat_scale_add_1x2+0x326>
mov    (%rdi,%r10,8),%rax
mov    (%rdx,%r10,8),%r13
mov    -0x10(%rsp),%rbp
mov    0x0(%rbp,%r10,8),%r9
mov    (%rsi,%r10,8),%rbp
mov    (%rcx,%r10,8),%r12
mov    -0x8(%rsp),%rbx
mov    (%rbx,%r10,8),%r15
xor    %ebx,%ebx
cmpl   $0x1,0x38(%rsp)
je     12e5 <dmat_scale_add_1x2+0x1e5>
nopl   0x0(%rax)
movsd  (%rax,%rbx,8),%xmm0
subsd  0x0(%r13,%rbx,8),%xmm0
movsd  %xmm0,(%r9,%rbx,8)
movsd  0x0(%rbp,%rbx,8),%xmm0
subsd  (%r12,%rbx,8),%xmm0
movsd  %xmm0,(%r15,%rbx,8)
movsd  0x8(%rax,%rbx,8),%xmm0
subsd  0x8(%r13,%rbx,8),%xmm0
movsd  %xmm0,0x8(%r9,%rbx,8)
movsd  0x8(%rbp,%rbx,8),%xmm0
subsd  0x8(%r12,%rbx,8),%xmm0
movsd  %xmm0,0x8(%r15,%rbx,8)
add    $0x2,%rbx
cmp    %rbx,%r14
jne    1290 <dmat_scale_add_1x2+0x190>
test   $0x1,%r11b
je     1250 <dmat_scale_add_1x2+0x150>
movsd  (%rax,%rbx,8),%xmm0
subsd  0x0(%r13,%rbx,8),%xmm0
movsd  %xmm0,(%r9,%rbx,8)
movsd  0x0(%rbp,%rbx,8),%xmm0
subsd  (%r12,%rbx,8),%xmm0
movsd  %xmm0,(%r15,%rbx,8)
jmp    1250 <dmat_scale_add_1x2+0x150>
test   %eax,%eax
jle    1426 <dmat_scale_add_1x2+0x326>
mov    0x38(%rsp),%r8d
mov    %r8d,%r15d
and    $0xfffffffe,%r15d
xor    %r14d,%r14d
mov    -0x8(%rsp),%rbx
jmp    134d <dmat_scale_add_1x2+0x24d>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r14
cmp    %r8,%r14
je     1426 <dmat_scale_add_1x2+0x326>
mov    (%rdi,%r14,8),%r9
mov    (%rdx,%r14,8),%r11
mov    -0x10(%rsp),%rax
mov    (%rax,%r14,8),%rax
mov    (%rsi,%r14,8),%r12
mov    (%rcx,%r14,8),%rbp
mov    (%rbx,%r14,8),%r13
xor    %r10d,%r10d
cmpl   $0x1,0x38(%rsp)
je     13e9 <dmat_scale_add_1x2+0x2e9>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%r11,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r9,%r10,8),%xmm1
movsd  %xmm1,(%rax,%r10,8)
movsd  0x0(%rbp,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r12,%r10,8),%xmm1
movsd  %xmm1,0x0(%r13,%r10,8)
movsd  0x8(%r11,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x8(%r9,%r10,8),%xmm1
movsd  %xmm1,0x8(%rax,%r10,8)
movsd  0x8(%rbp,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x8(%r12,%r10,8),%xmm1
movsd  %xmm1,0x8(%r13,%r10,8)
add    $0x2,%r10
cmp    %r10,%r15
jne    1380 <dmat_scale_add_1x2+0x280>
test   $0x1,%r8b
je     1340 <dmat_scale_add_1x2+0x240>
movsd  (%r11,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r9,%r10,8),%xmm1
movsd  %xmm1,(%rax,%r10,8)
movsd  0x0(%rbp,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r12,%r10,8),%xmm1
movsd  %xmm1,0x0(%r13,%r10,8)
jmp    1340 <dmat_scale_add_1x2+0x240>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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