void kernel_dgetr_4_lib4(int tri, int kmax, int kna, double *A, double *C,
                         int sdc) {
  if (tri == 1) {
    kmax += 1;
  }
  const int bs = 4;
  int k;
  k = 0;
  if (kmax < kna)
    goto cleanup_loop;
  if (kna > 0) {
    for (; k < kna; k++) {
      C[0 + bs * 0] = A[0 + bs * 0];
      C[0 + bs * 1] = A[1 + bs * 0];
      C[0 + bs * 2] = A[2 + bs * 0];
      C[0 + bs * 3] = A[3 + bs * 0];
      C += 1;
      A += bs;
    }
    C += bs * (sdc - 1);
  }
  for (; k < kmax - 3; k += 4) {
    C[0 + bs * 0] = A[0 + bs * 0];
    C[0 + bs * 1] = A[1 + bs * 0];
    C[0 + bs * 2] = A[2 + bs * 0];
    C[0 + bs * 3] = A[3 + bs * 0];
    C[1 + bs * 0] = A[0 + bs * 1];
    C[1 + bs * 1] = A[1 + bs * 1];
    C[1 + bs * 2] = A[2 + bs * 1];
    C[1 + bs * 3] = A[3 + bs * 1];
    C[2 + bs * 0] = A[0 + bs * 2];
    C[2 + bs * 1] = A[1 + bs * 2];
    C[2 + bs * 2] = A[2 + bs * 2];
    C[2 + bs * 3] = A[3 + bs * 2];
    C[3 + bs * 0] = A[0 + bs * 3];
    C[3 + bs * 1] = A[1 + bs * 3];
    C[3 + bs * 2] = A[2 + bs * 3];
    C[3 + bs * 3] = A[3 + bs * 3];
    C += bs * sdc;
    A += bs * bs;
  }
cleanup_loop:
  for (; k < kmax; k++) {
    C[0 + bs * 0] = A[0 + bs * 0];
    C[0 + bs * 1] = A[1 + bs * 0];
    C[0 + bs * 2] = A[2 + bs * 0];
    C[0 + bs * 3] = A[3 + bs * 0];
    C += 1;
    A += bs;
  }
  if (tri == 1) {
    kna = (bs - (bs - kna + kmax) % bs) % bs;
    if (kna == 1) {
      C[0 + bs * 1] = A[1 + bs * 0];
      C[0 + bs * 2] = A[2 + bs * 0];
      C[0 + bs * 3] = A[3 + bs * 0];
      C[1 + bs * (sdc + 1)] = A[2 + bs * 1];
      C[1 + bs * (sdc + 2)] = A[3 + bs * 1];
      C[2 + bs * (sdc + 2)] = A[3 + bs * 2];
    } else if (kna == 2) {
      C[0 + bs * 1] = A[1 + bs * 0];
      C[0 + bs * 2] = A[2 + bs * 0];
      C[0 + bs * 3] = A[3 + bs * 0];
      C[1 + bs * 2] = A[2 + bs * 1];
      C[1 + bs * 3] = A[3 + bs * 1];
      C[2 + bs * (sdc + 2)] = A[3 + bs * 2];
    } else {
      C[0 + bs * 1] = A[1 + bs * 0];
      C[0 + bs * 2] = A[2 + bs * 0];
      C[0 + bs * 3] = A[3 + bs * 0];
      C[1 + bs * 2] = A[2 + bs * 1];
      C[1 + bs * 3] = A[3 + bs * 1];
      C[2 + bs * 3] = A[3 + bs * 2];
    }
  }
}


x86 assembly (clang, -O0):
<kernel_dgetr_4_lib4>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
cmpl   $0x1,-0x4(%rbp)
jne    112c <kernel_dgetr_4_lib4+0x2c>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
movl   $0x4,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    114b <kernel_dgetr_4_lib4+0x4b>
jmp    135a <kernel_dgetr_4_lib4+0x25a>
cmpl   $0x0,-0xc(%rbp)
jle    11ed <kernel_dgetr_4_lib4+0xed>
jmp    115a <kernel_dgetr_4_lib4+0x5a>
mov    -0x2c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11d2 <kernel_dgetr_4_lib4+0xd2>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    115a <kernel_dgetr_4_lib4+0x5a>
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
jmp    11f2 <kernel_dgetr_4_lib4+0xf2>
mov    -0x2c(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1355 <kernel_dgetr_4_lib4+0x255>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x78(%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    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    11f2 <kernel_dgetr_4_lib4+0xf2>
jmp    135a <kernel_dgetr_4_lib4+0x25a>
jmp    135f <kernel_dgetr_4_lib4+0x25f>
mov    -0x2c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    13d7 <kernel_dgetr_4_lib4+0x2d7>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    135f <kernel_dgetr_4_lib4+0x25f>
cmpl   $0x1,-0x4(%rbp)
jne    15ae <kernel_dgetr_4_lib4+0x4ae>
mov    $0x4,%eax
sub    -0xc(%rbp),%eax
add    -0x8(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    $0x4,%eax
sub    %edx,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %edx,-0xc(%rbp)
cmpl   $0x1,-0xc(%rbp)
jne    14ae <kernel_dgetr_4_lib4+0x3ae>
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    15a9 <kernel_dgetr_4_lib4+0x4a9>
cmpl   $0x2,-0xc(%rbp)
jne    1538 <kernel_dgetr_4_lib4+0x438>
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    15a4 <kernel_dgetr_4_lib4+0x4a4>
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    15a9 <kernel_dgetr_4_lib4+0x4a9>
jmp    15ae <kernel_dgetr_4_lib4+0x4ae>
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgetr_4_lib4>:
push   %r15
push   %r14
push   %r12
push   %rbx
xor    %r10d,%r10d
cmp    $0x1,%edi
sete   %r10b
add    %esi,%r10d
xor    %r12d,%r12d
cmp    %edx,%r10d
jl     1432 <kernel_dgetr_4_lib4+0x332>
test   %edx,%edx
jle    121a <kernel_dgetr_4_lib4+0x11a>
xor    %r11d,%r11d
mov    %edx,%r15d
add    $0xffffffff,%r15d
je     1286 <kernel_dgetr_4_lib4+0x186>
mov    %r15,%rax
shl    $0x5,%rax
add    %rcx,%rax
add    $0x20,%rax
cmp    %r8,%rax
jbe    115c <kernel_dgetr_4_lib4+0x5c>
lea    (%r8,%r15,8),%rax
add    $0x68,%rax
cmp    %rcx,%rax
ja     1286 <kernel_dgetr_4_lib4+0x186>
add    $0x1,%r15
mov    %r15,%r11
and    $0xfffffffffffffffe,%r11
lea    -0x2(%r11),%rax
mov    %rax,%r14
shr    %r14
add    $0x1,%r14
test   %rax,%rax
je     1222 <kernel_dgetr_4_lib4+0x122>
mov    %r14,%rbx
and    $0xfffffffffffffffe,%rbx
lea    0x40(%rcx),%rax
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movups -0x40(%rax),%xmm0
movups -0x30(%rax),%xmm1
movups -0x20(%rax),%xmm2
movups -0x10(%rax),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%r8,%rsi,8)
movups %xmm0,0x20(%r8,%rsi,8)
movups %xmm2,0x40(%r8,%rsi,8)
movups %xmm1,0x60(%r8,%rsi,8)
movups (%rax),%xmm0
movups 0x10(%rax),%xmm1
movups 0x20(%rax),%xmm2
movups 0x30(%rax),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,0x10(%r8,%rsi,8)
movups %xmm0,0x30(%r8,%rsi,8)
movups %xmm2,0x50(%r8,%rsi,8)
movups %xmm1,0x70(%r8,%rsi,8)
add    $0x4,%rsi
sub    $0xffffffffffffff80,%rax
add    $0xfffffffffffffffe,%rbx
jne    1190 <kernel_dgetr_4_lib4+0x90>
jmp    1224 <kernel_dgetr_4_lib4+0x124>
xor    %r12d,%r12d
jmp    1354 <kernel_dgetr_4_lib4+0x254>
xor    %esi,%esi
mov    %r11,%rax
shl    $0x5,%rax
test   $0x1,%r14b
je     1276 <kernel_dgetr_4_lib4+0x176>
mov    %rsi,%rbx
shl    $0x5,%rbx
movups (%rcx,%rbx,1),%xmm0
movups 0x10(%rcx,%rbx,1),%xmm1
movups 0x20(%rcx,%rbx,1),%xmm2
movups 0x30(%rcx,%rbx,1),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%r8,%rsi,8)
movups %xmm0,0x20(%r8,%rsi,8)
movups %xmm2,0x40(%r8,%rsi,8)
movups %xmm1,0x60(%r8,%rsi,8)
lea    (%r8,%r11,8),%r8
add    %rax,%rcx
cmp    %r11,%r15
je     1343 <kernel_dgetr_4_lib4+0x243>
mov    %edx,%esi
sub    %r11d,%esi
mov    %r11d,%eax
not    %eax
test   $0x1,%sil
je     12cc <kernel_dgetr_4_lib4+0x1cc>
movsd  (%rcx),%xmm0
movsd  %xmm0,(%r8)
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
add    $0x8,%r8
add    $0x20,%rcx
add    $0x1,%r11d
add    %edx,%eax
je     1343 <kernel_dgetr_4_lib4+0x243>
mov    %edx,%eax
sub    %r11d,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rcx),%xmm0
movsd  %xmm0,(%r8)
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
movsd  0x20(%rcx),%xmm0
movsd  %xmm0,0x8(%r8)
movsd  0x28(%rcx),%xmm0
movsd  %xmm0,0x28(%r8)
movsd  0x30(%rcx),%xmm0
movsd  %xmm0,0x48(%r8)
movsd  0x38(%rcx),%xmm0
movsd  %xmm0,0x68(%r8)
add    $0x10,%r8
add    $0x40,%rcx
add    $0xfffffffe,%eax
jne    12e0 <kernel_dgetr_4_lib4+0x1e0>
lea    -0x4(,%r9,4),%eax
ff
cltq
lea    (%r8,%rax,8),%r8
mov    %edx,%r12d
lea    -0x3(%r10),%eax
cmp    %eax,%r12d
jge    1432 <kernel_dgetr_4_lib4+0x332>
lea    0x0(,%r9,4),%esi
movslq %esi,%rsi
shl    $0x3,%rsi
movsd  (%rcx),%xmm0
movsd  %xmm0,(%r8)
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
movsd  0x20(%rcx),%xmm0
movsd  %xmm0,0x8(%r8)
movsd  0x28(%rcx),%xmm0
movsd  %xmm0,0x28(%r8)
movsd  0x30(%rcx),%xmm0
movsd  %xmm0,0x48(%r8)
movsd  0x38(%rcx),%xmm0
movsd  %xmm0,0x68(%r8)
movsd  0x40(%rcx),%xmm0
movsd  %xmm0,0x10(%r8)
movsd  0x48(%rcx),%xmm0
movsd  %xmm0,0x30(%r8)
movsd  0x50(%rcx),%xmm0
movsd  %xmm0,0x50(%r8)
movsd  0x58(%rcx),%xmm0
movsd  %xmm0,0x70(%r8)
movsd  0x60(%rcx),%xmm0
movsd  %xmm0,0x18(%r8)
movsd  0x68(%rcx),%xmm0
movsd  %xmm0,0x38(%r8)
movsd  0x70(%rcx),%xmm0
movsd  %xmm0,0x58(%r8)
movsd  0x78(%rcx),%xmm0
movsd  %xmm0,0x78(%r8)
sub    $0xffffffffffffff80,%rcx
add    $0x4,%r12d
add    %rsi,%r8
cmp    %eax,%r12d
jl     1370 <kernel_dgetr_4_lib4+0x270>
cmp    %r10d,%r12d
jge    1653 <kernel_dgetr_4_lib4+0x553>
mov    %r12d,%r15d
not    %r15d
add    %r10d,%r15d
je     1591 <kernel_dgetr_4_lib4+0x491>
mov    %r15,%rax
shl    $0x5,%rax
add    %rcx,%rax
add    $0x20,%rax
cmp    %rax,%r8
jae    146e <kernel_dgetr_4_lib4+0x36e>
lea    (%r8,%r15,8),%rax
add    $0x68,%rax
cmp    %rax,%rcx
jb     1591 <kernel_dgetr_4_lib4+0x491>
add    $0x1,%r15
mov    %r15,%r11
and    $0xfffffffffffffffe,%r11
lea    -0x2(%r11),%rax
mov    %rax,%r14
shr    %r14
add    $0x1,%r14
test   %rax,%rax
je     152a <kernel_dgetr_4_lib4+0x42a>
mov    %r14,%rax
and    $0xfffffffffffffffe,%rax
lea    0x40(%rcx),%rsi
xor    %ebx,%ebx
nopl   (%rax)
movups -0x40(%rsi),%xmm0
movups -0x30(%rsi),%xmm1
movups -0x20(%rsi),%xmm2
movups -0x10(%rsi),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%r8,%rbx,8)
movups %xmm0,0x20(%r8,%rbx,8)
movups %xmm2,0x40(%r8,%rbx,8)
movups %xmm1,0x60(%r8,%rbx,8)
movups (%rsi),%xmm0
movups 0x10(%rsi),%xmm1
movups 0x20(%rsi),%xmm2
movups 0x30(%rsi),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,0x10(%r8,%rbx,8)
movups %xmm0,0x30(%r8,%rbx,8)
movups %xmm2,0x50(%r8,%rbx,8)
movups %xmm1,0x70(%r8,%rbx,8)
add    $0x4,%rbx
sub    $0xffffffffffffff80,%rsi
add    $0xfffffffffffffffe,%rax
jne    14a0 <kernel_dgetr_4_lib4+0x3a0>
jmp    152c <kernel_dgetr_4_lib4+0x42c>
xor    %ebx,%ebx
mov    %r11,%rax
shl    $0x5,%rax
test   $0x1,%r14b
je     157e <kernel_dgetr_4_lib4+0x47e>
mov    %rbx,%rsi
shl    $0x5,%rsi
movups (%rcx,%rsi,1),%xmm0
movups 0x10(%rcx,%rsi,1),%xmm1
movups 0x20(%rcx,%rsi,1),%xmm2
movups 0x30(%rcx,%rsi,1),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%r8,%rbx,8)
movups %xmm0,0x20(%r8,%rbx,8)
movups %xmm2,0x40(%r8,%rbx,8)
movups %xmm1,0x60(%r8,%rbx,8)
lea    (%r8,%r11,8),%r8
add    %rax,%rcx
cmp    %r11,%r15
je     1653 <kernel_dgetr_4_lib4+0x553>
add    %r11d,%r12d
mov    %r10d,%esi
sub    %r12d,%esi
lea    0x1(%r12),%eax
test   $0x1,%sil
je     15d7 <kernel_dgetr_4_lib4+0x4d7>
movsd  (%rcx),%xmm0
movsd  %xmm0,(%r8)
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
add    $0x8,%r8
add    $0x20,%rcx
mov    %eax,%r12d
cmp    %eax,%r10d
je     1653 <kernel_dgetr_4_lib4+0x553>
mov    %r10d,%eax
sub    %r12d,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rcx),%xmm0
movsd  %xmm0,(%r8)
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
movsd  0x20(%rcx),%xmm0
movsd  %xmm0,0x8(%r8)
movsd  0x28(%rcx),%xmm0
movsd  %xmm0,0x28(%r8)
movsd  0x30(%rcx),%xmm0
movsd  %xmm0,0x48(%r8)
movsd  0x38(%rcx),%xmm0
movsd  %xmm0,0x68(%r8)
add    $0x10,%r8
add    $0x40,%rcx
add    $0xfffffffe,%eax
jne    15f0 <kernel_dgetr_4_lib4+0x4f0>
cmp    $0x1,%edi
jne    1747 <kernel_dgetr_4_lib4+0x647>
sub    %r10d,%edx
and    $0x3,%edx
cmp    $0x2,%edx
je     16bd <kernel_dgetr_4_lib4+0x5bd>
cmp    $0x1,%edx
jne    1700 <kernel_dgetr_4_lib4+0x600>
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
movsd  0x30(%rcx),%xmm0
lea    0x5(,%r9,4),%eax
cltq
movsd  %xmm0,(%r8,%rax,8)
movsd  0x38(%rcx),%xmm0
lea    0x9(,%r9,4),%eax
cltq
movsd  %xmm0,(%r8,%rax,8)
jmp    16f4 <kernel_dgetr_4_lib4+0x5f4>
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
movsd  0x30(%rcx),%xmm0
movsd  %xmm0,0x48(%r8)
movsd  0x38(%rcx),%xmm0
movsd  %xmm0,0x68(%r8)
lea    0xa(,%r9,4),%eax
cltq
jmp    173c <kernel_dgetr_4_lib4+0x63c>
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x20(%r8)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x40(%r8)
movsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x60(%r8)
movsd  0x30(%rcx),%xmm0
movsd  %xmm0,0x48(%r8)
movsd  0x38(%rcx),%xmm0
movsd  %xmm0,0x68(%r8)
mov    $0xe,%eax
movsd  0x58(%rcx),%xmm0
movsd  %xmm0,(%r8,%rax,8)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

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

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