void kernel_dgema_1_lib4(int kmax, int kna, double *A, int sda, double *C,
                         int sdc) {
  const int bs = 4;
  int k;
  if (kna == 0) {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[0 + bs * 0] = A[0 + bs * 0];
      C[1 + bs * 0] = A[1 + bs * 0];
      C[2 + bs * 0] = A[2 + bs * 0];
      C[3 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
      C += bs * sdc;
    }
    for (; k < kmax; k++) {
      C[0 + bs * 0] = A[0 + bs * 0];
      A += 1;
      C += 1;
    }
    return;
  } else if (kna == 1) {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[3 + bs * 0] = A[0 + bs * 0];
      C += bs * sdc;
      C[0 + bs * 0] = A[1 + bs * 0];
      C[1 + bs * 0] = A[2 + bs * 0];
      C[2 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
    }
    if (k >= kmax) {
      return;
    }
    C[3 + bs * 0] = A[0 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C += bs * sdc;
    C[0 + bs * 0] = A[1 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[1 + bs * 0] = A[2 + bs * 0];
    return;
  } else if (kna == 2) {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[2 + bs * 0] = A[0 + bs * 0];
      C[3 + bs * 0] = A[1 + bs * 0];
      C += bs * sdc;
      C[0 + bs * 0] = A[2 + bs * 0];
      C[1 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
    }
    if (k >= kmax) {
      return;
    }
    C[2 + bs * 0] = A[0 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[3 + bs * 0] = A[1 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C += bs * sdc;
    C[0 + bs * 0] = A[3 + bs * 0];
    return;
  } else {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[1 + bs * 0] = A[0 + bs * 0];
      C[2 + bs * 0] = A[1 + bs * 0];
      C[3 + bs * 0] = A[2 + bs * 0];
      C += bs * sdc;
      C[0 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
    }
    if (k >= kmax) {
      return;
    }
    C[1 + bs * 0] = A[0 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[2 + bs * 0] = A[1 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[3 + bs * 0] = A[2 + bs * 0];
    return;
  }
}


x86 assembly (clang, -O0):
<kernel_dgema_1_lib4>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x4,-0x28(%rbp)
cmpl   $0x0,-0x8(%rbp)
jne    1212 <kernel_dgema_1_lib4+0x112>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    11c6 <kernel_dgema_1_lib4+0xc6>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    1131 <kernel_dgema_1_lib4+0x31>
jmp    11cb <kernel_dgema_1_lib4+0xcb>
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    120d <kernel_dgema_1_lib4+0x10d>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11cb <kernel_dgema_1_lib4+0xcb>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
cmpl   $0x1,-0x8(%rbp)
jne    134e <kernel_dgema_1_lib4+0x24e>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    12b8 <kernel_dgema_1_lib4+0x1b8>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    1223 <kernel_dgema_1_lib4+0x123>
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jl     12c9 <kernel_dgema_1_lib4+0x1c9>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    12f4 <kernel_dgema_1_lib4+0x1f4>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    1337 <kernel_dgema_1_lib4+0x237>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
cmpl   $0x2,-0x8(%rbp)
jne    148a <kernel_dgema_1_lib4+0x38a>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    13f4 <kernel_dgema_1_lib4+0x2f4>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    135f <kernel_dgema_1_lib4+0x25f>
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jl     1405 <kernel_dgema_1_lib4+0x305>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    1430 <kernel_dgema_1_lib4+0x330>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    145c <kernel_dgema_1_lib4+0x35c>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1526 <kernel_dgema_1_lib4+0x426>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    1491 <kernel_dgema_1_lib4+0x391>
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jl     1537 <kernel_dgema_1_lib4+0x437>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    1562 <kernel_dgema_1_lib4+0x462>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    158e <kernel_dgema_1_lib4+0x48e>
jmp    15a0 <kernel_dgema_1_lib4+0x4a0>
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgema_1_lib4>:
push   %rbp
push   %r15
push   %r14
push   %rbx
test   %esi,%esi
je     13c3 <kernel_dgema_1_lib4+0x2c3>
xor    %eax,%eax
cmp    $0x1,%esi
je     1270 <kernel_dgema_1_lib4+0x170>
cmp    $0x2,%esi
jne    1547 <kernel_dgema_1_lib4+0x447>
cmp    $0x4,%edi
jl     1224 <kernel_dgema_1_lib4+0x124>
lea    0x0(,%r9,4),%eax
cltq
shl    $0x2,%ecx
movslq %ecx,%r10
lea    -0x4(%rdi),%ecx
mov    %ecx,%r14d
shr    $0x2,%r14d
add    $0x1,%r14d
cmp    $0x4,%ecx
jb     11e5 <kernel_dgema_1_lib4+0xe5>
mov    %r14d,%esi
and    $0xfffffffe,%esi
mov    %r10,%r11
shl    $0x4,%r11
mov    %rax,%rbx
shl    $0x4,%rbx
lea    0x0(,%r10,8),%rbp
xchg   %ax,%ax
mov    %rdx,%rcx
movsd  (%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x8(%r8,%rax,8)
add    %rbp,%rdx
movsd  (%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x10(%r8,%rax,8)
movsd  0x8(%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x18(%r8,%rax,8)
movsd  0x10(%rcx,%rbp,1),%xmm0
movsd  %xmm0,(%r8,%rbx,1)
movsd  0x18(%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x8(%r8,%rbx,1)
add    %rbx,%r8
add    %rbp,%rdx
add    $0xfffffffe,%esi
jne    1170 <kernel_dgema_1_lib4+0x70>
add    %r11,%rcx
mov    %rcx,%rdx
test   $0x1,%r14b
je     121f <kernel_dgema_1_lib4+0x11f>
movsd  (%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x8(%r8,%rax,8)
lea    (%r8,%rax,8),%r8
lea    (%rdx,%r10,8),%rdx
mov    %edi,%eax
and    $0xfffffffc,%eax
cmp    %edi,%eax
jge    17fe <kernel_dgema_1_lib4+0x6fe>
movsd  (%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
mov    %eax,%ecx
or     $0x1,%ecx
cmp    %edi,%ecx
je     17fe <kernel_dgema_1_lib4+0x6fe>
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
or     $0x2,%eax
cmp    %edi,%eax
je     17fe <kernel_dgema_1_lib4+0x6fe>
shl    $0x2,%r9d
movslq %r9d,%rax
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
jmp    17fe <kernel_dgema_1_lib4+0x6fe>
cmp    $0x4,%edi
jl     1376 <kernel_dgema_1_lib4+0x276>
lea    0x0(,%r9,4),%eax
cltq
shl    $0x2,%ecx
movslq %ecx,%r10
lea    -0x4(%rdi),%ecx
mov    %ecx,%r14d
shr    $0x2,%r14d
add    $0x1,%r14d
cmp    $0x4,%ecx
jb     1336 <kernel_dgema_1_lib4+0x236>
mov    %r14d,%esi
and    $0xfffffffe,%esi
mov    %r10,%r11
shl    $0x4,%r11
mov    %rax,%rbx
shl    $0x4,%rbx
lea    0x0(,%r10,8),%rbp
nopl   0x0(%rax)
mov    %rdx,%rcx
movsd  (%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x8(%r8,%rax,8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x10(%r8,%rax,8)
add    %rbp,%rdx
movsd  (%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x18(%r8,%rax,8)
movsd  0x8(%rcx,%rbp,1),%xmm0
movsd  %xmm0,(%r8,%rbx,1)
movsd  0x10(%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x8(%r8,%rbx,1)
movsd  0x18(%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x10(%r8,%rbx,1)
add    %rbx,%r8
add    %rbp,%rdx
add    $0xfffffffe,%esi
jne    12c0 <kernel_dgema_1_lib4+0x1c0>
add    %r11,%rcx
mov    %rcx,%rdx
test   $0x1,%r14b
je     1371 <kernel_dgema_1_lib4+0x271>
movsd  (%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x8(%r8,%rax,8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x10(%r8,%rax,8)
lea    (%r8,%rax,8),%r8
lea    (%rdx,%r10,8),%rdx
mov    %edi,%eax
and    $0xfffffffc,%eax
cmp    %edi,%eax
jge    17fe <kernel_dgema_1_lib4+0x6fe>
movsd  (%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
mov    %eax,%ecx
or     $0x1,%ecx
cmp    %edi,%ecx
je     17fe <kernel_dgema_1_lib4+0x6fe>
shl    $0x2,%r9d
movslq %r9d,%rcx
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,(%r8,%rcx,8)
or     $0x2,%eax
cmp    %edi,%eax
je     17fe <kernel_dgema_1_lib4+0x6fe>
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x8(%r8,%rcx,8)
jmp    17fe <kernel_dgema_1_lib4+0x6fe>
xor    %r10d,%r10d
cmp    $0x4,%edi
jl     14dd <kernel_dgema_1_lib4+0x3dd>
shl    $0x2,%ecx
movslq %ecx,%r10
shl    $0x2,%r9d
movslq %r9d,%r9
lea    -0x4(%rdi),%eax
mov    %eax,%r15d
shr    $0x2,%r15d
add    $0x1,%r15d
cmp    $0x4,%eax
jb     149e <kernel_dgema_1_lib4+0x39e>
mov    %r15d,%esi
and    $0xfffffffe,%esi
mov    %r10,%r11
shl    $0x4,%r11
mov    %r9,%r14
shl    $0x4,%r14
lea    0x0(,%r10,8),%rbx
lea    0x0(,%r9,8),%rcx
nopw   0x0(%rax,%rax,1)
mov    %rdx,%rax
movsd  (%rdx),%xmm0
mov    %r8,%rbp
movsd  %xmm0,(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x8(%r8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  (%rdx,%rbx,1),%xmm0
movsd  %xmm0,(%r8,%rcx,1)
movsd  0x8(%rdx,%rbx,1),%xmm0
movsd  %xmm0,0x8(%r8,%rcx,1)
add    %rbx,%rdx
movsd  0x10(%rax,%rbx,1),%xmm0
movsd  %xmm0,0x10(%r8,%rcx,1)
movsd  0x18(%rax,%rbx,1),%xmm0
add    %rcx,%r8
movsd  %xmm0,0x18(%rbp,%rcx,1)
add    %rbx,%rdx
add    %rcx,%r8
add    $0xfffffffe,%esi
jne    1420 <kernel_dgema_1_lib4+0x320>
add    %r11,%rax
add    %r14,%rbp
mov    %rax,%rdx
mov    %rbp,%r8
test   $0x1,%r15b
je     14d6 <kernel_dgema_1_lib4+0x3d6>
movsd  (%rdx),%xmm0
movsd  %xmm0,(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x8(%r8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
lea    (%rdx,%r10,8),%rdx
lea    (%r8,%r9,8),%r8
mov    %edi,%r10d
and    $0xfffffffc,%r10d
cmp    %edi,%r10d
jge    17fe <kernel_dgema_1_lib4+0x6fe>
mov    %r10d,%r11d
not    %r11d
add    %edi,%r11d
cmp    $0x3,%r11d
jb     173f <kernel_dgema_1_lib4+0x63f>
lea    (%rdx,%r11,8),%rax
add    $0x8,%rax
cmp    %rax,%r8
jae    1517 <kernel_dgema_1_lib4+0x417>
lea    (%r8,%r11,8),%rax
add    $0x8,%rax
cmp    %rax,%rdx
jb     173f <kernel_dgema_1_lib4+0x63f>
add    $0x1,%r11
mov    %r11,%r9
and    $0xfffffffffffffffc,%r9
lea    -0x4(%r9),%rcx
mov    %rcx,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%eax
and    $0x3,%eax
cmp    $0xc,%rcx
jae    1687 <kernel_dgema_1_lib4+0x587>
xor    %ecx,%ecx
jmp    16f0 <kernel_dgema_1_lib4+0x5f0>
cmp    $0x4,%edi
jl     1642 <kernel_dgema_1_lib4+0x542>
shl    $0x2,%r9d
movslq %r9d,%rax
shl    $0x2,%ecx
movslq %ecx,%r9
lea    -0x4(%rdi),%ecx
mov    %ecx,%r11d
shr    $0x2,%r11d
add    $0x1,%r11d
cmp    $0x4,%ecx
jb     1604 <kernel_dgema_1_lib4+0x504>
mov    %r11d,%esi
and    $0xfffffffe,%esi
mov    %r9,%r10
shl    $0x4,%r10
mov    %rax,%rbx
shl    $0x4,%rbx
lea    0x0(,%r9,8),%rbp
mov    %rdx,%rcx
movsd  (%rdx),%xmm0
movsd  %xmm0,0x8(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
add    %rbp,%rdx
movsd  (%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x8(%r8,%rax,8)
movsd  0x8(%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x10(%r8,%rax,8)
movsd  0x10(%rcx,%rbp,1),%xmm0
movsd  %xmm0,0x18(%r8,%rax,8)
movsd  0x18(%rcx,%rbp,1),%xmm0
movsd  %xmm0,(%r8,%rbx,1)
add    %rbx,%r8
add    %rbp,%rdx
add    $0xfffffffe,%esi
jne    1590 <kernel_dgema_1_lib4+0x490>
add    %r10,%rcx
mov    %rcx,%rdx
test   $0x1,%r11b
je     163d <kernel_dgema_1_lib4+0x53d>
movsd  (%rdx),%xmm0
movsd  %xmm0,0x8(%r8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
lea    (%r8,%rax,8),%r8
lea    (%rdx,%r9,8),%rdx
mov    %edi,%eax
and    $0xfffffffc,%eax
cmp    %edi,%eax
jge    17fe <kernel_dgema_1_lib4+0x6fe>
movsd  (%rdx),%xmm0
movsd  %xmm0,0x8(%r8)
mov    %eax,%ecx
or     $0x1,%ecx
cmp    %edi,%ecx
je     17fe <kernel_dgema_1_lib4+0x6fe>
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x10(%r8)
or     $0x2,%eax
cmp    %edi,%eax
je     17fe <kernel_dgema_1_lib4+0x6fe>
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
jmp    17fe <kernel_dgema_1_lib4+0x6fe>
and    $0xfffffffffffffffc,%rsi
xor    %ecx,%ecx
nopl   (%rax)
movups (%rdx,%rcx,8),%xmm0
movups 0x10(%rdx,%rcx,8),%xmm1
movups %xmm0,(%r8,%rcx,8)
movups %xmm1,0x10(%r8,%rcx,8)
movups 0x20(%rdx,%rcx,8),%xmm0
movups 0x30(%rdx,%rcx,8),%xmm1
movups %xmm0,0x20(%r8,%rcx,8)
movups %xmm1,0x30(%r8,%rcx,8)
movups 0x40(%rdx,%rcx,8),%xmm0
movups 0x50(%rdx,%rcx,8),%xmm1
movups %xmm0,0x40(%r8,%rcx,8)
movups %xmm1,0x50(%r8,%rcx,8)
movups 0x60(%rdx,%rcx,8),%xmm0
movups 0x70(%rdx,%rcx,8),%xmm1
movups %xmm0,0x60(%r8,%rcx,8)
movups %xmm1,0x70(%r8,%rcx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffc,%rsi
jne    1690 <kernel_dgema_1_lib4+0x590>
test   %rax,%rax
je     172b <kernel_dgema_1_lib4+0x62b>
lea    (%r8,%rcx,8),%rsi
add    $0x10,%rsi
lea    (%rdx,%rcx,8),%rcx
add    $0x10,%rcx
shl    $0x5,%rax
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movups -0x10(%rcx,%rbx,1),%xmm0
movups (%rcx,%rbx,1),%xmm1
movups %xmm0,-0x10(%rsi,%rbx,1)
movups %xmm1,(%rsi,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%rax
jne    1710 <kernel_dgema_1_lib4+0x610>
cmp    %r9,%r11
je     17fe <kernel_dgema_1_lib4+0x6fe>
add    %r9d,%r10d
lea    (%rdx,%r9,8),%rdx
lea    (%r8,%r9,8),%r8
mov    %edi,%eax
sub    %r10d,%eax
mov    %r10d,%ecx
not    %ecx
add    %edi,%ecx
and    $0x7,%eax
je     177b <kernel_dgema_1_lib4+0x67b>
neg    %eax
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rdx),%xmm0
movsd  %xmm0,(%r8)
add    $0x8,%rdx
add    $0x8,%r8
add    $0xffffffff,%esi
cmp    %esi,%eax
jne    1760 <kernel_dgema_1_lib4+0x660>
sub    %esi,%r10d
cmp    $0x7,%ecx
jb     17fe <kernel_dgema_1_lib4+0x6fe>
sub    %r10d,%edi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rdx,%rax,8),%xmm0
movsd  %xmm0,(%r8,%rax,8)
movsd  0x8(%rdx,%rax,8),%xmm0
movsd  %xmm0,0x8(%r8,%rax,8)
movsd  0x10(%rdx,%rax,8),%xmm0
movsd  %xmm0,0x10(%r8,%rax,8)
movsd  0x18(%rdx,%rax,8),%xmm0
movsd  %xmm0,0x18(%r8,%rax,8)
movsd  0x20(%rdx,%rax,8),%xmm0
movsd  %xmm0,0x20(%r8,%rax,8)
movsd  0x28(%rdx,%rax,8),%xmm0
movsd  %xmm0,0x28(%r8,%rax,8)
movsd  0x30(%rdx,%rax,8),%xmm0
movsd  %xmm0,0x30(%r8,%rax,8)
movsd  0x38(%rdx,%rax,8),%xmm0
movsd  %xmm0,0x38(%r8,%rax,8)
add    $0x8,%rax
cmp    %eax,%edi
jne    1790 <kernel_dgema_1_lib4+0x690>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @kernel_dgema_1_lib4(i32 %0, i32 %1, double* %2, i32 %3, double* %4, i32 %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca double*
%10 = alloca i32
%11 = alloca double*
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store i32 %0, i32* %7
store i32 %1, i32* %8
store double* %2, double** %9
store i32 %3, i32* %10
store double* %4, double** %11
store i32 %5, i32* %12
store i32 4, i32* %13
%15 = load i32, i32* %8
%16 = icmp eq i32 %15, 0
br i1 %16, label %17, label %76
17: ; preds = %6
store i32 0, i32* %14
br label %18
18: ; preds = %54, %17
%19 = load i32, i32* %14
%20 = load i32, i32* %7
%21 = sub nsw i32 %20, 3
%22 = icmp slt i32 %19, %21
br i1 %22, label %23, label %57
23: ; preds = %18
%24 = load double*, double** %9
%25 = getelementptr inbounds double, double* %24, i64 0
%26 = load double, double* %25
%27 = load double*, double** %11
%28 = getelementptr inbounds double, double* %27, i64 0
store double %26, double* %28
%29 = load double*, double** %9
%30 = getelementptr inbounds double, double* %29, i64 1
%31 = load double, double* %30
%32 = load double*, double** %11
%33 = getelementptr inbounds double, double* %32, i64 1
store double %31, double* %33
%34 = load double*, double** %9
%35 = getelementptr inbounds double, double* %34, i64 2
%36 = load double, double* %35
%37 = load double*, double** %11
%38 = getelementptr inbounds double, double* %37, i64 2
store double %36, double* %38
%39 = load double*, double** %9
%40 = getelementptr inbounds double, double* %39, i64 3
%41 = load double, double* %40
%42 = load double*, double** %11
%43 = getelementptr inbounds double, double* %42, i64 3
store double %41, double* %43
%44 = load i32, i32* %10
%45 = mul nsw i32 4, %44
%46 = load double*, double** %9
%47 = sext i32 %45 to i64
%48 = getelementptr inbounds double, double* %46, i64 %47
store double* %48, double** %9
%49 = load i32, i32* %12
%50 = mul nsw i32 4, %49
%51 = load double*, double** %11
%52 = sext i32 %50 to i64
%53 = getelementptr inbounds double, double* %51, i64 %52
store double* %53, double** %11
br label %54
54: ; preds = %23
%55 = load i32, i32* %14
%56 = add nsw i32 %55, 4
store i32 %56, i32* %14
br label %18
57: ; preds = %18
br label %58
58: ; preds = %72, %57
%59 = load i32, i32* %14
%60 = load i32, i32* %7
%61 = icmp slt i32 %59, %60
br i1 %61, label %62, label %75
62: ; preds = %58
%63 = load double*, double** %9
%64 = getelementptr inbounds double, double* %63, i64 0
%65 = load double, double* %64
%66 = load double*, double** %11
%67 = getelementptr inbounds double, double* %66, i64 0
store double %65, double* %67
%68 = load double*, double** %9
%69 = getelementptr inbounds double, double* %68, i64 1
store double* %69, double** %9
%70 = load double*, double** %11
%71 = getelementptr inbounds double, double* %70, i64 1
store double* %71, double** %11
br label %72
72: ; preds = %62
%73 = load i32, i32* %14
%74 = add nsw i32 %73, 1
store i32 %74, i32* %14
br label %58
75: ; preds = %58
br label %317
76: ; preds = %6
%77 = load i32, i32* %8
%78 = icmp eq i32 %77, 1
br i1 %78, label %79, label %159
79: ; preds = %76
store i32 0, i32* %14
br label %80
80: ; preds = %116, %79
%81 = load i32, i32* %14
%82 = load i32, i32* %7
%83 = sub nsw i32 %82, 3
%84 = icmp slt i32 %81, %83
br i1 %84, label %85, label %119
85: ; preds = %80
%86 = load double*, double** %9
%87 = getelementptr inbounds double, double* %86, i64 0
%88 = load double, double* %87
%89 = load double*, double** %11
%90 = getelementptr inbounds double, double* %89, i64 3
store double %88, double* %90
%91 = load i32, i32* %12
%92 = mul nsw i32 4, %91
%93 = load double*, double** %11
%94 = sext i32 %92 to i64
%95 = getelementptr inbounds double, double* %93, i64 %94
store double* %95, double** %11
%96 = load double*, double** %9
%97 = getelementptr inbounds double, double* %96, i64 1
%98 = load double, double* %97
%99 = load double*, double** %11
%100 = getelementptr inbounds double, double* %99, i64 0
store double %98, double* %100
%101 = load double*, double** %9
%102 = getelementptr inbounds double, double* %101, i64 2
%103 = load double, double* %102
%104 = load double*, double** %11
%105 = getelementptr inbounds double, double* %104, i64 1
store double %103, double* %105
%106 = load double*, double** %9
%107 = getelementptr inbounds double, double* %106, i64 3
%108 = load double, double* %107
%109 = load double*, double** %11
%110 = getelementptr inbounds double, double* %109, i64 2
store double %108, double* %110
%111 = load i32, i32* %10
%112 = mul nsw i32 4, %111
%113 = load double*, double** %9
%114 = sext i32 %112 to i64
%115 = getelementptr inbounds double, double* %113, i64 %114
store double* %115, double** %9
br label %116
116: ; preds = %85
%117 = load i32, i32* %14
%118 = add nsw i32 %117, 4
store i32 %118, i32* %14
br label %80
119: ; preds = %80
%120 = load i32, i32* %14
%121 = load i32, i32* %7
%122 = icmp sge i32 %120, %121
br i1 %122, label %123, label %124
123: ; preds = %119
br label %317
124: ; preds = %119
%125 = load double*, double** %9
%126 = getelementptr inbounds double, double* %125, i64 0
%127 = load double, double* %126
%128 = load double*, double** %11
%129 = getelementptr inbounds double, double* %128, i64 3
store double %127, double* %129
%130 = load i32, i32* %14
%131 = add nsw i32 %130, 1
store i32 %131, i32* %14
%132 = load i32, i32* %14
%133 = load i32, i32* %7
%134 = icmp eq i32 %132, %133
br i1 %134, label %135, label %136
135: ; preds = %124
br label %317
136: ; preds = %124
%137 = load i32, i32* %12
%138 = mul nsw i32 4, %137
%139 = load double*, double** %11
%140 = sext i32 %138 to i64
%141 = getelementptr inbounds double, double* %139, i64 %140
store double* %141, double** %11
%142 = load double*, double** %9
%143 = getelementptr inbounds double, double* %142, i64 1
%144 = load double, double* %143
%145 = load double*, double** %11
%146 = getelementptr inbounds double, double* %145, i64 0
store double %144, double* %146
%147 = load i32, i32* %14
%148 = add nsw i32 %147, 1
store i32 %148, i32* %14
%149 = load i32, i32* %14
%150 = load i32, i32* %7
%151 = icmp eq i32 %149, %150
br i1 %151, label %152, label %153
152: ; preds = %136
br label %317
153: ; preds = %136
%154 = load double*, double** %9
%155 = getelementptr inbounds double, double* %154, i64 2
%156 = load double, double* %155
%157 = load double*, double** %11
%158 = getelementptr inbounds double, double* %157, i64 1
store double %156, double* %158
br label %317
159: ; preds = %76
%160 = load i32, i32* %8
%161 = icmp eq i32 %160, 2
br i1 %161, label %162, label %242
162: ; preds = %159
store i32 0, i32* %14
br label %163
163: ; preds = %199, %162
%164 = load i32, i32* %14
%165 = load i32, i32* %7
%166 = sub nsw i32 %165, 3
%167 = icmp slt i32 %164, %166
br i1 %167, label %168, label %202
168: ; preds = %163
%169 = load double*, double** %9
%170 = getelementptr inbounds double, double* %169, i64 0
%171 = load double, double* %170
%172 = load double*, double** %11
%173 = getelementptr inbounds double, double* %172, i64 2
store double %171, double* %173
%174 = load double*, double** %9
%175 = getelementptr inbounds double, double* %174, i64 1
%176 = load double, double* %175
%177 = load double*, double** %11
%178 = getelementptr inbounds double, double* %177, i64 3
store double %176, double* %178
%179 = load i32, i32* %12
%180 = mul nsw i32 4, %179
%181 = load double*, double** %11
%182 = sext i32 %180 to i64
%183 = getelementptr inbounds double, double* %181, i64 %182
store double* %183, double** %11
%184 = load double*, double** %9
%185 = getelementptr inbounds double, double* %184, i64 2
%186 = load double, double* %185
%187 = load double*, double** %11
%188 = getelementptr inbounds double, double* %187, i64 0
store double %186, double* %188
%189 = load double*, double** %9
%190 = getelementptr inbounds double, double* %189, i64 3
%191 = load double, double* %190
%192 = load double*, double** %11
%193 = getelementptr inbounds double, double* %192, i64 1
store double %191, double* %193
%194 = load i32, i32* %10
%195 = mul nsw i32 4, %194
%196 = load double*, double** %9
%197 = sext i32 %195 to i64
%198 = getelementptr inbounds double, double* %196, i64 %197
store double* %198, double** %9
br label %199
199: ; preds = %168
%200 = load i32, i32* %14
%201 = add nsw i32 %200, 4
store i32 %201, i32* %14
br label %163
202: ; preds = %163
%203 = load i32, i32* %14
%204 = load i32, i32* %7
%205 = icmp sge i32 %203, %204
br i1 %205, label %206, label %207
206: ; preds = %202
br label %317
207: ; preds = %202
%208 = load double*, double** %9
%209 = getelementptr inbounds double, double* %208, i64 0
%210 = load double, double* %209
%211 = load double*, double** %11
%212 = getelementptr inbounds double, double* %211, i64 2
store double %210, double* %212
%213 = load i32, i32* %14
%214 = add nsw i32 %213, 1
store i32 %214, i32* %14
%215 = load i32, i32* %14
%216 = load i32, i32* %7
%217 = icmp eq i32 %215, %216
br i1 %217, label %218, label %219
218: ; preds = %207
br label %317
219: ; preds = %207
%220 = load double*, double** %9
%221 = getelementptr inbounds double, double* %220, i64 1
%222 = load double, double* %221
%223 = load double*, double** %11
%224 = getelementptr inbounds double, double* %223, i64 3
store double %222, double* %224
%225 = load i32, i32* %14
%226 = add nsw i32 %225, 1
store i32 %226, i32* %14
%227 = load i32, i32* %14
%228 = load i32, i32* %7
%229 = icmp eq i32 %227, %228
br i1 %229, label %230, label %231
230: ; preds = %219
br label %317
231: ; preds = %219
%232 = load i32, i32* %12
%233 = mul nsw i32 4, %232
%234 = load double*, double** %11
%235 = sext i32 %233 to i64
%236 = getelementptr inbounds double, double* %234, i64 %235
store double* %236, double** %11
%237 = load double*, double** %9
%238 = getelementptr inbounds double, double* %237, i64 3
%239 = load double, double* %238
%240 = load double*, double** %11
%241 = getelementptr inbounds double, double* %240, i64 0
store double %239, double* %241
br label %317
242: ; preds = %159
store i32 0, i32* %14
br label %243
243: ; preds = %279, %242
%244 = load i32, i32* %14
%245 = load i32, i32* %7
%246 = sub nsw i32 %245, 3
%247 = icmp slt i32 %244, %246
br i1 %247, label %248, label %282
248: ; preds = %243
%249 = load double*, double** %9
%250 = getelementptr inbounds double, double* %249, i64 0
%251 = load double, double* %250
%252 = load double*, double** %11
%253 = getelementptr inbounds double, double* %252, i64 1
store double %251, double* %253
%254 = load double*, double** %9
%255 = getelementptr inbounds double, double* %254, i64 1
%256 = load double, double* %255
%257 = load double*, double** %11
%258 = getelementptr inbounds double, double* %257, i64 2
store double %256, double* %258
%259 = load double*, double** %9
%260 = getelementptr inbounds double, double* %259, i64 2
%261 = load double, double* %260
%262 = load double*, double** %11
%263 = getelementptr inbounds double, double* %262, i64 3
store double %261, double* %263
%264 = load i32, i32* %12
%265 = mul nsw i32 4, %264
%266 = load double*, double** %11
%267 = sext i32 %265 to i64
%268 = getelementptr inbounds double, double* %266, i64 %267
store double* %268, double** %11
%269 = load double*, double** %9
%270 = getelementptr inbounds double, double* %269, i64 3
%271 = load double, double* %270
%272 = load double*, double** %11
%273 = getelementptr inbounds double, double* %272, i64 0
store double %271, double* %273
%274 = load i32, i32* %10
%275 = mul nsw i32 4, %274
%276 = load double*, double** %9
%277 = sext i32 %275 to i64
%278 = getelementptr inbounds double, double* %276, i64 %277
store double* %278, double** %9
br label %279
279: ; preds = %248
%280 = load i32, i32* %14
%281 = add nsw i32 %280, 4
store i32 %281, i32* %14
br label %243
282: ; preds = %243
%283 = load i32, i32* %14
%284 = load i32, i32* %7
%285 = icmp sge i32 %283, %284
br i1 %285, label %286, label %287
286: ; preds = %282
br label %317
287: ; preds = %282
%288 = load double*, double** %9
%289 = getelementptr inbounds double, double* %288, i64 0
%290 = load double, double* %289
%291 = load double*, double** %11
%292 = getelementptr inbounds double, double* %291, i64 1
store double %290, double* %292
%293 = load i32, i32* %14
%294 = add nsw i32 %293, 1
store i32 %294, i32* %14
%295 = load i32, i32* %14
%296 = load i32, i32* %7
%297 = icmp eq i32 %295, %296
br i1 %297, label %298, label %299
298: ; preds = %287
br label %317
299: ; preds = %287
%300 = load double*, double** %9
%301 = getelementptr inbounds double, double* %300, i64 1
%302 = load double, double* %301
%303 = load double*, double** %11
%304 = getelementptr inbounds double, double* %303, i64 2
store double %302, double* %304
%305 = load i32, i32* %14
%306 = add nsw i32 %305, 1
store i32 %306, i32* %14
%307 = load i32, i32* %14
%308 = load i32, i32* %7
%309 = icmp eq i32 %307, %308
br i1 %309, label %310, label %311
310: ; preds = %299
br label %317
311: ; preds = %299
%312 = load double*, double** %9
%313 = getelementptr inbounds double, double* %312, i64 2
%314 = load double, double* %313
%315 = load double*, double** %11
%316 = getelementptr inbounds double, double* %315, i64 3
store double %314, double* %316
br label %317
317: ; preds = %311, %310, %298, %286, %231, %230, %218, %206, %153, %152, %135, %123, %75
ret void
}

LLVM IR (-O2):
define void @kernel_dgema_1_lib4(i32 %0, i32 %1, double* nocapture %2, i32 %3, double* nocapture writeonly %4, i32 %5) {
switch i32 %1, label %49 [
i32 0, label %35
i32 1, label %21
i32 2, label %7
]
7: ; preds = %6
%8 = icmp sgt i32 %0, 3
br i1 %8, label %9, label %403
9: ; preds = %7
%10 = shl nsw i32 %5, 2
%11 = sext i32 %10 to i64
%12 = shl nsw i32 %3, 2
%13 = sext i32 %12 to i64
%14 = add i32 %0, -4
%15 = lshr i32 %14, 2
%16 = add nuw nsw i32 %15, 1
%17 = and i32 %16, 1
%18 = icmp ult i32 %14, 4
br i1 %18, label %380, label %19
19: ; preds = %9
%20 = and i32 %16, 2147483646
br label %350
21: ; preds = %6
%22 = icmp sgt i32 %0, 3
br i1 %22, label %23, label %328
23: ; preds = %21
%24 = shl nsw i32 %5, 2
%25 = sext i32 %24 to i64
%26 = shl nsw i32 %3, 2
%27 = sext i32 %26 to i64
%28 = add i32 %0, -4
%29 = lshr i32 %28, 2
%30 = add nuw nsw i32 %29, 1
%31 = and i32 %30, 1
%32 = icmp ult i32 %28, 4
br i1 %32, label %305, label %33
33: ; preds = %23
%34 = and i32 %30, 2147483646
br label %275
35: ; preds = %6
%36 = icmp sgt i32 %0, 3
br i1 %36, label %37, label %86
37: ; preds = %35
%38 = shl nsw i32 %3, 2
%39 = sext i32 %38 to i64
%40 = shl nsw i32 %5, 2
%41 = sext i32 %40 to i64
%42 = add i32 %0, -4
%43 = lshr i32 %42, 2
%44 = add nuw nsw i32 %43, 1
%45 = and i32 %44, 1
%46 = icmp ult i32 %42, 4
br i1 %46, label %63, label %47
47: ; preds = %37
%48 = and i32 %44, 2147483646
br label %215
49: ; preds = %6
%50 = icmp sgt i32 %0, 3
br i1 %50, label %51, label %478
51: ; preds = %49
%52 = shl nsw i32 %5, 2
%53 = sext i32 %52 to i64
%54 = shl nsw i32 %3, 2
%55 = sext i32 %54 to i64
%56 = add i32 %0, -4
%57 = lshr i32 %56, 2
%58 = add nuw nsw i32 %57, 1
%59 = and i32 %58, 1
%60 = icmp ult i32 %56, 4
br i1 %60, label %455, label %61
61: ; preds = %51
%62 = and i32 %58, 2147483646
br label %425
63: ; preds = %215, %37
%64 = phi double* [ undef, %37 ], [ %241, %215 ]
%65 = phi double* [ undef, %37 ], [ %242, %215 ]
%66 = phi double* [ %2, %37 ], [ %241, %215 ]
%67 = phi double* [ %4, %37 ], [ %242, %215 ]
%68 = icmp eq i32 %45, 0
br i1 %68, label %82, label %69
69: ; preds = %63
%70 = load double, double* %66
store double %70, double* %67
%71 = getelementptr inbounds double, double* %66, i64 1
%72 = load double, double* %71
%73 = getelementptr inbounds double, double* %67, i64 1
store double %72, double* %73
%74 = getelementptr inbounds double, double* %66, i64 2
%75 = load double, double* %74
%76 = getelementptr inbounds double, double* %67, i64 2
store double %75, double* %76
%77 = getelementptr inbounds double, double* %66, i64 3
%78 = load double, double* %77
%79 = getelementptr inbounds double, double* %67, i64 3
store double %78, double* %79
%80 = getelementptr inbounds double, double* %66, i64 %39
%81 = getelementptr inbounds double, double* %67, i64 %41
br label %82
82: ; preds = %63, %69
%83 = phi double* [ %64, %63 ], [ %80, %69 ]
%84 = phi double* [ %65, %63 ], [ %81, %69 ]
%85 = and i32 %0, -4
br label %86
86: ; preds = %82, %35
%87 = phi double* [ %4, %35 ], [ %84, %82 ]
%88 = phi double* [ %2, %35 ], [ %83, %82 ]
%89 = phi i32 [ 0, %35 ], [ %85, %82 ]
%90 = icmp slt i32 %89, %0
br i1 %90, label %91, label %498
91: ; preds = %86
%92 = xor i32 %89, -1
%93 = add i32 %92, %0
%94 = zext i32 %93 to i64
%95 = add nuw nsw i64 %94, 1
%96 = icmp ult i32 %93, 3
br i1 %96, label %190, label %97
97: ; preds = %91
%98 = xor i32 %89, -1
%99 = add i32 %98, %0
%100 = zext i32 %99 to i64
%101 = add nuw nsw i64 %100, 1
%102 = getelementptr double, double* %87, i64 %101
%103 = getelementptr double, double* %88, i64 %101
%104 = icmp ult double* %87, %103
%105 = icmp ult double* %88, %102
%106 = and i1 %104, %105
br i1 %106, label %190, label %107
107: ; preds = %97
%108 = and i64 %95, 8589934588
%109 = trunc i64 %108 to i32
%110 = add i32 %89, %109
%111 = getelementptr double, double* %88, i64 %108
%112 = getelementptr double, double* %87, i64 %108
%113 = add nsw i64 %108, -4
%114 = lshr exact i64 %113, 2
%115 = add nuw nsw i64 %114, 1
%116 = and i64 %115, 3
%117 = icmp ult i64 %113, 12
br i1 %117, label %169, label %118
118: ; preds = %107
%119 = and i64 %115, 9223372036854775804
br label %120
120: ; preds = %120, %118
%121 = phi i64 [ 0, %118 ], [ %166, %120 ]
%122 = phi i64 [ 0, %118 ], [ %167, %120 ]
%123 = getelementptr double, double* %88, i64 %121
%124 = getelementptr double, double* %87, i64 %121
%125 = bitcast double* %123 to <2 x double>*
%126 = load <2 x double>, <2 x double>* %125
%127 = getelementptr double, double* %123, i64 2
%128 = bitcast double* %127 to <2 x double>*
%129 = load <2 x double>, <2 x double>* %128
%130 = bitcast double* %124 to <2 x double>*
store <2 x double> %126, <2 x double>* %130
%131 = getelementptr double, double* %124, i64 2
%132 = bitcast double* %131 to <2 x double>*
store <2 x double> %129, <2 x double>* %132
%133 = or i64 %121, 4
%134 = getelementptr double, double* %88, i64 %133
%135 = getelementptr double, double* %87, i64 %133
%136 = bitcast double* %134 to <2 x double>*
%137 = load <2 x double>, <2 x double>* %136
%138 = getelementptr double, double* %134, i64 2
%139 = bitcast double* %138 to <2 x double>*
%140 = load <2 x double>, <2 x double>* %139
%141 = bitcast double* %135 to <2 x double>*
store <2 x double> %137, <2 x double>* %141
%142 = getelementptr double, double* %135, i64 2
%143 = bitcast double* %142 to <2 x double>*
store <2 x double> %140, <2 x double>* %143
%144 = or i64 %121, 8
%145 = getelementptr double, double* %88, i64 %144
%146 = getelementptr double, double* %87, i64 %144
%147 = bitcast double* %145 to <2 x double>*
%148 = load <2 x double>, <2 x double>* %147
%149 = getelementptr double, double* %145, i64 2
%150 = bitcast double* %149 to <2 x double>*
%151 = load <2 x double>, <2 x double>* %150
%152 = bitcast double* %146 to <2 x double>*
store <2 x double> %148, <2 x double>* %152
%153 = getelementptr double, double* %146, i64 2
%154 = bitcast double* %153 to <2 x double>*
store <2 x double> %151, <2 x double>* %154
%155 = or i64 %121, 12
%156 = getelementptr double, double* %88, i64 %155
%157 = getelementptr double, double* %87, i64 %155
%158 = bitcast double* %156 to <2 x double>*
%159 = load <2 x double>, <2 x double>* %158
%160 = getelementptr double, double* %156, i64 2
%161 = bitcast double* %160 to <2 x double>*
%162 = load <2 x double>, <2 x double>* %161
%163 = bitcast double* %157 to <2 x double>*
store <2 x double> %159, <2 x double>* %163
%164 = getelementptr double, double* %157, i64 2
%165 = bitcast double* %164 to <2 x double>*
store <2 x double> %162, <2 x double>* %165
%166 = add nuw i64 %121, 16
%167 = add nuw i64 %122, 4
%168 = icmp eq i64 %167, %119
br i1 %168, label %169, label %120
169: ; preds = %120, %107
%170 = phi i64 [ 0, %107 ], [ %166, %120 ]
%171 = icmp eq i64 %116, 0
br i1 %171, label %188, label %172
172: ; preds = %169, %172
%173 = phi i64 [ %185, %172 ], [ %170, %169 ]
%174 = phi i64 [ %186, %172 ], [ 0, %169 ]
%175 = getelementptr double, double* %88, i64 %173
%176 = getelementptr double, double* %87, i64 %173
%177 = bitcast double* %175 to <2 x double>*
%178 = load <2 x double>, <2 x double>* %177
%179 = getelementptr double, double* %175, i64 2
%180 = bitcast double* %179 to <2 x double>*
%181 = load <2 x double>, <2 x double>* %180
%182 = bitcast double* %176 to <2 x double>*
store <2 x double> %178, <2 x double>* %182
%183 = getelementptr double, double* %176, i64 2
%184 = bitcast double* %183 to <2 x double>*
store <2 x double> %181, <2 x double>* %184
%185 = add nuw i64 %173, 4
%186 = add i64 %174, 1
%187 = icmp eq i64 %186, %116
br i1 %187, label %188, label %172
188: ; preds = %172, %169
%189 = icmp eq i64 %95, %108
br i1 %189, label %498, label %190
190: ; preds = %97, %91, %188
%191 = phi i32 [ %89, %97 ], [ %89, %91 ], [ %110, %188 ]
%192 = phi double* [ %88, %97 ], [ %88, %91 ], [ %111, %188 ]
%193 = phi double* [ %87, %97 ], [ %87, %91 ], [ %112, %188 ]
%194 = sub i32 %0, %191
%195 = xor i32 %191, -1
%196 = add i32 %195, %0
%197 = and i32 %194, 7
%198 = icmp eq i32 %197, 0
br i1 %198, label %210, label %199
199: ; preds = %190, %199
%200 = phi i32 [ %207, %199 ], [ %191, %190 ]
%201 = phi double* [ %205, %199 ], [ %192, %190 ]
%202 = phi double* [ %206, %199 ], [ %193, %190 ]
%203 = phi i32 [ %208, %199 ], [ 0, %190 ]
%204 = load double, double* %201
store double %204, double* %202
%205 = getelementptr inbounds double, double* %201, i64 1
%206 = getelementptr inbounds double, double* %202, i64 1
%207 = add nuw nsw i32 %200, 1
%208 = add i32 %203, 1
%209 = icmp eq i32 %208, %197
br i1 %209, label %210, label %199
210: ; preds = %199, %190
%211 = phi i32 [ %191, %190 ], [ %207, %199 ]
%212 = phi double* [ %192, %190 ], [ %205, %199 ]
%213 = phi double* [ %193, %190 ], [ %206, %199 ]
%214 = icmp ult i32 %196, 7
br i1 %214, label %498, label %245
215: ; preds = %215, %47
%216 = phi double* [ %2, %47 ], [ %241, %215 ]
%217 = phi double* [ %4, %47 ], [ %242, %215 ]
%218 = phi i32 [ 0, %47 ], [ %243, %215 ]
%219 = load double, double* %216
store double %219, double* %217
%220 = getelementptr inbounds double, double* %216, i64 1
%221 = load double, double* %220
%222 = getelementptr inbounds double, double* %217, i64 1
store double %221, double* %222
%223 = getelementptr inbounds double, double* %216, i64 2
%224 = load double, double* %223
%225 = getelementptr inbounds double, double* %217, i64 2
store double %224, double* %225
%226 = getelementptr inbounds double, double* %216, i64 3
%227 = load double, double* %226
%228 = getelementptr inbounds double, double* %217, i64 3
store double %227, double* %228
%229 = getelementptr inbounds double, double* %216, i64 %39
%230 = getelementptr inbounds double, double* %217, i64 %41
%231 = load double, double* %229
store double %231, double* %230
%232 = getelementptr inbounds double, double* %229, i64 1
%233 = load double, double* %232
%234 = getelementptr inbounds double, double* %230, i64 1
store double %233, double* %234
%235 = getelementptr inbounds double, double* %229, i64 2
%236 = load double, double* %235
%237 = getelementptr inbounds double, double* %230, i64 2
store double %236, double* %237
%238 = getelementptr inbounds double, double* %229, i64 3
%239 = load double, double* %238
%240 = getelementptr inbounds double, double* %230, i64 3
store double %239, double* %240
%241 = getelementptr inbounds double, double* %229, i64 %39
%242 = getelementptr inbounds double, double* %230, i64 %41
%243 = add i32 %218, 2
%244 = icmp eq i32 %243, %48
br i1 %244, label %63, label %215
245: ; preds = %210, %245
%246 = phi i32 [ %273, %245 ], [ %211, %210 ]
%247 = phi double* [ %271, %245 ], [ %212, %210 ]
%248 = phi double* [ %272, %245 ], [ %213, %210 ]
%249 = load double, double* %247
store double %249, double* %248
%250 = getelementptr inbounds double, double* %247, i64 1
%251 = getelementptr inbounds double, double* %248, i64 1
%252 = load double, double* %250
store double %252, double* %251
%253 = getelementptr inbounds double, double* %247, i64 2
%254 = getelementptr inbounds double, double* %248, i64 2
%255 = load double, double* %253
store double %255, double* %254
%256 = getelementptr inbounds double, double* %247, i64 3
%257 = getelementptr inbounds double, double* %248, i64 3
%258 = load double, double* %256
store double %258, double* %257
%259 = getelementptr inbounds double, double* %247, i64 4
%260 = getelementptr inbounds double, double* %248, i64 4
%261 = load double, double* %259
store double %261, double* %260
%262 = getelementptr inbounds double, double* %247, i64 5
%263 = getelementptr inbounds double, double* %248, i64 5
%264 = load double, double* %262
store double %264, double* %263
%265 = getelementptr inbounds double, double* %247, i64 6
%266 = getelementptr inbounds double, double* %248, i64 6
%267 = load double, double* %265
store double %267, double* %266
%268 = getelementptr inbounds double, double* %247, i64 7
%269 = getelementptr inbounds double, double* %248, i64 7
%270 = load double, double* %268
store double %270, double* %269
%271 = getelementptr inbounds double, double* %247, i64 8
%272 = getelementptr inbounds double, double* %248, i64 8
%273 = add nuw nsw i32 %246, 8
%274 = icmp eq i32 %273, %0
br i1 %274, label %498, label %245
275: ; preds = %275, %33
%276 = phi double* [ %2, %33 ], [ %302, %275 ]
%277 = phi double* [ %4, %33 ], [ %293, %275 ]
%278 = phi i32 [ 0, %33 ], [ %303, %275 ]
%279 = load double, double* %276
%280 = getelementptr inbounds double, double* %277, i64 3
store double %279, double* %280
%281 = getelementptr inbounds double, double* %277, i64 %25
%282 = getelementptr inbounds double, double* %276, i64 1
%283 = load double, double* %282
store double %283, double* %281
%284 = getelementptr inbounds double, double* %276, i64 2
%285 = load double, double* %284
%286 = getelementptr inbounds double, double* %281, i64 1
store double %285, double* %286
%287 = getelementptr inbounds double, double* %276, i64 3
%288 = load double, double* %287
%289 = getelementptr inbounds double, double* %281, i64 2
store double %288, double* %289
%290 = getelementptr inbounds double, double* %276, i64 %27
%291 = load double, double* %290
%292 = getelementptr inbounds double, double* %281, i64 3
store double %291, double* %292
%293 = getelementptr inbounds double, double* %281, i64 %25
%294 = getelementptr inbounds double, double* %290, i64 1
%295 = load double, double* %294
store double %295, double* %293
%296 = getelementptr inbounds double, double* %290, i64 2
%297 = load double, double* %296
%298 = getelementptr inbounds double, double* %293, i64 1
store double %297, double* %298
%299 = getelementptr inbounds double, double* %290, i64 3
%300 = load double, double* %299
%301 = getelementptr inbounds double, double* %293, i64 2
store double %300, double* %301
%302 = getelementptr inbounds double, double* %290, i64 %27
%303 = add i32 %278, 2
%304 = icmp eq i32 %303, %34
br i1 %304, label %305, label %275
305: ; preds = %275, %23
%306 = phi double* [ undef, %23 ], [ %293, %275 ]
%307 = phi double* [ undef, %23 ], [ %302, %275 ]
%308 = phi double* [ %2, %23 ], [ %302, %275 ]
%309 = phi double* [ %4, %23 ], [ %293, %275 ]
%310 = icmp eq i32 %31, 0
br i1 %310, label %324, label %311
311: ; preds = %305
%312 = load double, double* %308
%313 = getelementptr inbounds double, double* %309, i64 3
store double %312, double* %313
%314 = getelementptr inbounds double, double* %309, i64 %25
%315 = getelementptr inbounds double, double* %308, i64 1
%316 = load double, double* %315
store double %316, double* %314
%317 = getelementptr inbounds double, double* %308, i64 2
%318 = load double, double* %317
%319 = getelementptr inbounds double, double* %314, i64 1
store double %318, double* %319
%320 = getelementptr inbounds double, double* %308, i64 3
%321 = load double, double* %320
%322 = getelementptr inbounds double, double* %314, i64 2
store double %321, double* %322
%323 = getelementptr inbounds double, double* %308, i64 %27
br label %324
324: ; preds = %305, %311
%325 = phi double* [ %306, %305 ], [ %314, %311 ]
%326 = phi double* [ %307, %305 ], [ %323, %311 ]
%327 = and i32 %0, -4
br label %328
328: ; preds = %324, %21
%329 = phi double* [ %4, %21 ], [ %325, %324 ]
%330 = phi double* [ %2, %21 ], [ %326, %324 ]
%331 = phi i32 [ 0, %21 ], [ %327, %324 ]
%332 = icmp slt i32 %331, %0
br i1 %332, label %333, label %498
333: ; preds = %328
%334 = load double, double* %330
%335 = getelementptr inbounds double, double* %329, i64 3
store double %334, double* %335
%336 = or i32 %331, 1
%337 = icmp eq i32 %336, %0
br i1 %337, label %498, label %338
338: ; preds = %333
%339 = shl nsw i32 %5, 2
%340 = sext i32 %339 to i64
%341 = getelementptr inbounds double, double* %329, i64 %340
%342 = getelementptr inbounds double, double* %330, i64 1
%343 = load double, double* %342
store double %343, double* %341
%344 = or i32 %331, 2
%345 = icmp eq i32 %344, %0
br i1 %345, label %498, label %346
346: ; preds = %338
%347 = getelementptr inbounds double, double* %330, i64 2
%348 = load double, double* %347
%349 = getelementptr inbounds double, double* %341, i64 1
store double %348, double* %349
br label %498
350: ; preds = %350, %19
%351 = phi double* [ %2, %19 ], [ %377, %350 ]
%352 = phi double* [ %4, %19 ], [ %371, %350 ]
%353 = phi i32 [ 0, %19 ], [ %378, %350 ]
%354 = load double, double* %351
%355 = getelementptr inbounds double, double* %352, i64 2
store double %354, double* %355
%356 = getelementptr inbounds double, double* %351, i64 1
%357 = load double, double* %356
%358 = getelementptr inbounds double, double* %352, i64 3
store double %357, double* %358
%359 = getelementptr inbounds double, double* %352, i64 %11
%360 = getelementptr inbounds double, double* %351, i64 2
%361 = load double, double* %360
store double %361, double* %359
%362 = getelementptr inbounds double, double* %351, i64 3
%363 = load double, double* %362
%364 = getelementptr inbounds double, double* %359, i64 1
store double %363, double* %364
%365 = getelementptr inbounds double, double* %351, i64 %13
%366 = load double, double* %365
%367 = getelementptr inbounds double, double* %359, i64 2
store double %366, double* %367
%368 = getelementptr inbounds double, double* %365, i64 1
%369 = load double, double* %368
%370 = getelementptr inbounds double, double* %359, i64 3
store double %369, double* %370
%371 = getelementptr inbounds double, double* %359, i64 %11
%372 = getelementptr inbounds double, double* %365, i64 2
%373 = load double, double* %372
store double %373, double* %371
%374 = getelementptr inbounds double, double* %365, i64 3
%375 = load double, double* %374
%376 = getelementptr inbounds double, double* %371, i64 1
store double %375, double* %376
%377 = getelementptr inbounds double, double* %365, i64 %13
%378 = add i32 %353, 2
%379 = icmp eq i32 %378, %20
br i1 %379, label %380, label %350
380: ; preds = %350, %9
%381 = phi double* [ undef, %9 ], [ %371, %350 ]
%382 = phi double* [ undef, %9 ], [ %377, %350 ]
%383 = phi double* [ %2, %9 ], [ %377, %350 ]
%384 = phi double* [ %4, %9 ], [ %371, %350 ]
%385 = icmp eq i32 %17, 0
br i1 %385, label %399, label %386
386: ; preds = %380
%387 = load double, double* %383
%388 = getelementptr inbounds double, double* %384, i64 2
store double %387, double* %388
%389 = getelementptr inbounds double, double* %383, i64 1
%390 = load double, double* %389
%391 = getelementptr inbounds double, double* %384, i64 3
store double %390, double* %391
%392 = getelementptr inbounds double, double* %384, i64 %11
%393 = getelementptr inbounds double, double* %383, i64 2
%394 = load double, double* %393
store double %394, double* %392
%395 = getelementptr inbounds double, double* %383, i64 3
%396 = load double, double* %395
%397 = getelementptr inbounds double, double* %392, i64 1
store double %396, double* %397
%398 = getelementptr inbounds double, double* %383, i64 %13
br label %399
399: ; preds = %380, %386
%400 = phi double* [ %381, %380 ], [ %392, %386 ]
%401 = phi double* [ %382, %380 ], [ %398, %386 ]
%402 = and i32 %0, -4
br label %403
403: ; preds = %399, %7
%404 = phi double* [ %4, %7 ], [ %400, %399 ]
%405 = phi double* [ %2, %7 ], [ %401, %399 ]
%406 = phi i32 [ 0, %7 ], [ %402, %399 ]
%407 = icmp slt i32 %406, %0
br i1 %407, label %408, label %498
408: ; preds = %403
%409 = load double, double* %405
%410 = getelementptr inbounds double, double* %404, i64 2
store double %409, double* %410
%411 = or i32 %406, 1
%412 = icmp eq i32 %411, %0
br i1 %412, label %498, label %413
413: ; preds = %408
%414 = getelementptr inbounds double, double* %405, i64 1
%415 = load double, double* %414
%416 = getelementptr inbounds double, double* %404, i64 3
store double %415, double* %416
%417 = or i32 %406, 2
%418 = icmp eq i32 %417, %0
br i1 %418, label %498, label %419
419: ; preds = %413
%420 = shl nsw i32 %5, 2
%421 = sext i32 %420 to i64
%422 = getelementptr inbounds double, double* %404, i64 %421
%423 = getelementptr inbounds double, double* %405, i64 3
%424 = load double, double* %423
store double %424, double* %422
br label %498
425: ; preds = %425, %61
%426 = phi double* [ %2, %61 ], [ %452, %425 ]
%427 = phi double* [ %4, %61 ], [ %449, %425 ]
%428 = phi i32 [ 0, %61 ], [ %453, %425 ]
%429 = load double, double* %426
%430 = getelementptr inbounds double, double* %427, i64 1
store double %429, double* %430
%431 = getelementptr inbounds double, double* %426, i64 1
%432 = load double, double* %431
%433 = getelementptr inbounds double, double* %427, i64 2
store double %432, double* %433
%434 = getelementptr inbounds double, double* %426, i64 2
%435 = load double, double* %434
%436 = getelementptr inbounds double, double* %427, i64 3
store double %435, double* %436
%437 = getelementptr inbounds double, double* %427, i64 %53
%438 = getelementptr inbounds double, double* %426, i64 3
%439 = load double, double* %438
store double %439, double* %437
%440 = getelementptr inbounds double, double* %426, i64 %55
%441 = load double, double* %440
%442 = getelementptr inbounds double, double* %437, i64 1
store double %441, double* %442
%443 = getelementptr inbounds double, double* %440, i64 1
%444 = load double, double* %443
%445 = getelementptr inbounds double, double* %437, i64 2
store double %444, double* %445
%446 = getelementptr inbounds double, double* %440, i64 2
%447 = load double, double* %446
%448 = getelementptr inbounds double, double* %437, i64 3
store double %447, double* %448
%449 = getelementptr inbounds double, double* %437, i64 %53
%450 = getelementptr inbounds double, double* %440, i64 3
%451 = load double, double* %450
store double %451, double* %449
%452 = getelementptr inbounds double, double* %440, i64 %55
%453 = add i32 %428, 2
%454 = icmp eq i32 %453, %62
br i1 %454, label %455, label %425
455: ; preds = %425, %51
%456 = phi double* [ undef, %51 ], [ %449, %425 ]
%457 = phi double* [ undef, %51 ], [ %452, %425 ]
%458 = phi double* [ %2, %51 ], [ %452, %425 ]
%459 = phi double* [ %4, %51 ], [ %449, %425 ]
%460 = icmp eq i32 %59, 0
br i1 %460, label %474, label %461
461: ; preds = %455
%462 = load double, double* %458
%463 = getelementptr inbounds double, double* %459, i64 1
store double %462, double* %463
%464 = getelementptr inbounds double, double* %458, i64 1
%465 = load double, double* %464
%466 = getelementptr inbounds double, double* %459, i64 2
store double %465, double* %466
%467 = getelementptr inbounds double, double* %458, i64 2
%468 = load double, double* %467
%469 = getelementptr inbounds double, double* %459, i64 3
store double %468, double* %469
%470 = getelementptr inbounds double, double* %459, i64 %53
%471 = getelementptr inbounds double, double* %458, i64 3
%472 = load double, double* %471
store double %472, double* %470
%473 = getelementptr inbounds double, double* %458, i64 %55
br label %474
474: ; preds = %455, %461
%475 = phi double* [ %456, %455 ], [ %470, %461 ]
%476 = phi double* [ %457, %455 ], [ %473, %461 ]
%477 = and i32 %0, -4
br label %478
478: ; preds = %474, %49
%479 = phi double* [ %4, %49 ], [ %475, %474 ]
%480 = phi double* [ %2, %49 ], [ %476, %474 ]
%481 = phi i32 [ 0, %49 ], [ %477, %474 ]
%482 = icmp slt i32 %481, %0
br i1 %482, label %483, label %498
483: ; preds = %478
%484 = load double, double* %480
%485 = getelementptr inbounds double, double* %479, i64 1
store double %484, double* %485
%486 = or i32 %481, 1
%487 = icmp eq i32 %486, %0
br i1 %487, label %498, label %488
488: ; preds = %483
%489 = getelementptr inbounds double, double* %480, i64 1
%490 = load double, double* %489
%491 = getelementptr inbounds double, double* %479, i64 2
store double %490, double* %491
%492 = or i32 %481, 2
%493 = icmp eq i32 %492, %0
br i1 %493, label %498, label %494
494: ; preds = %488
%495 = getelementptr inbounds double, double* %480, i64 2
%496 = load double, double* %495
%497 = getelementptr inbounds double, double* %479, i64 3
store double %496, double* %497
br label %498
498: ; preds = %210, %245, %188, %86, %488, %483, %478, %413, %408, %403, %338, %333, %328, %494, %419, %346
ret void
}