void kernel_dgetr_4_lib4(int kmax, int kna, double *A, double *C, int sdc) {
  const int bs = 4;
  int k;
  k = 0;
  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;
  }
  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;
  }
}


x86 assembly (clang, -O0):
<kernel_dgetr_4_lib4>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
movl   $0x4,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x0,-0x8(%rbp)
jle    11c6 <kernel_dgetr_4_lib4+0xc6>
jmp    1133 <kernel_dgetr_4_lib4+0x33>
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11ab <kernel_dgetr_4_lib4+0xab>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x18(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1133 <kernel_dgetr_4_lib4+0x33>
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
jmp    11cb <kernel_dgetr_4_lib4+0xcb>
mov    -0x24(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    132e <kernel_dgetr_4_lib4+0x22e>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x1c(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x24(%rbp)
jmp    11cb <kernel_dgetr_4_lib4+0xcb>
jmp    1333 <kernel_dgetr_4_lib4+0x233>
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    13ab <kernel_dgetr_4_lib4+0x2ab>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x18(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1333 <kernel_dgetr_4_lib4+0x233>
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgetr_4_lib4>:
push   %r14
push   %rbx
test   %esi,%esi
jle    11ee <kernel_dgetr_4_lib4+0xee>
xor    %r9d,%r9d
mov    %esi,%r10d
add    $0xffffffff,%r10d
je     1255 <kernel_dgetr_4_lib4+0x155>
mov    %r10,%rax
shl    $0x5,%rax
add    %rdx,%rax
add    $0x20,%rax
cmp    %rcx,%rax
jbe    113f <kernel_dgetr_4_lib4+0x3f>
lea    (%rcx,%r10,8),%rax
add    $0x68,%rax
cmp    %rdx,%rax
ja     1255 <kernel_dgetr_4_lib4+0x155>
add    $0x1,%r10
mov    %r10,%r9
and    $0xfffffffffffffffe,%r9
lea    -0x2(%r9),%rax
mov    %rax,%r11
shr    %r11
add    $0x1,%r11
test   %rax,%rax
je     11f5 <kernel_dgetr_4_lib4+0xf5>
mov    %r11,%r14
and    $0xfffffffffffffffe,%r14
lea    0x40(%rdx),%rbx
xor    %eax,%eax
xchg   %ax,%ax
movups -0x40(%rbx),%xmm0
movups -0x30(%rbx),%xmm1
movups -0x20(%rbx),%xmm2
movups -0x10(%rbx),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%rcx,%rax,8)
movups %xmm0,0x20(%rcx,%rax,8)
movups %xmm2,0x40(%rcx,%rax,8)
movups %xmm1,0x60(%rcx,%rax,8)
movups (%rbx),%xmm0
movups 0x10(%rbx),%xmm1
movups 0x20(%rbx),%xmm2
movups 0x30(%rbx),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,0x10(%rcx,%rax,8)
movups %xmm0,0x30(%rcx,%rax,8)
movups %xmm2,0x50(%rcx,%rax,8)
movups %xmm1,0x70(%rcx,%rax,8)
add    $0x4,%rax
sub    $0xffffffffffffff80,%rbx
add    $0xfffffffffffffffe,%r14
jne    1170 <kernel_dgetr_4_lib4+0x70>
jmp    11f7 <kernel_dgetr_4_lib4+0xf7>
xor    %esi,%esi
jmp    1309 <kernel_dgetr_4_lib4+0x209>
xor    %eax,%eax
mov    %r9,%r14
shl    $0x5,%r14
test   $0x1,%r11b
je     1245 <kernel_dgetr_4_lib4+0x145>
mov    %rax,%rbx
shl    $0x5,%rbx
movups (%rdx,%rbx,1),%xmm0
movups 0x10(%rdx,%rbx,1),%xmm1
movups 0x20(%rdx,%rbx,1),%xmm2
movups 0x30(%rdx,%rbx,1),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%rcx,%rax,8)
movups %xmm0,0x20(%rcx,%rax,8)
movups %xmm2,0x40(%rcx,%rax,8)
movups %xmm1,0x60(%rcx,%rax,8)
add    %r14,%rdx
lea    (%rcx,%r9,8),%rcx
cmp    %r9,%r10
je     12fb <kernel_dgetr_4_lib4+0x1fb>
mov    %esi,%ebx
sub    %r9d,%ebx
mov    %r9d,%eax
not    %eax
test   $0x1,%bl
je     1296 <kernel_dgetr_4_lib4+0x196>
movsd  (%rdx),%xmm0
movsd  %xmm0,(%rcx)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x20(%rcx)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x40(%rcx)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x60(%rcx)
add    $0x8,%rcx
add    $0x20,%rdx
add    $0x1,%r9d
add    %esi,%eax
je     12fb <kernel_dgetr_4_lib4+0x1fb>
mov    %esi,%eax
sub    %r9d,%eax
nop
movsd  (%rdx),%xmm0
movsd  %xmm0,(%rcx)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x20(%rcx)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x40(%rcx)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x60(%rcx)
movsd  0x20(%rdx),%xmm0
movsd  %xmm0,0x8(%rcx)
movsd  0x28(%rdx),%xmm0
movsd  %xmm0,0x28(%rcx)
movsd  0x30(%rdx),%xmm0
movsd  %xmm0,0x48(%rcx)
movsd  0x38(%rdx),%xmm0
movsd  %xmm0,0x68(%rcx)
add    $0x10,%rcx
add    $0x40,%rdx
add    $0xfffffffe,%eax
jne    12a0 <kernel_dgetr_4_lib4+0x1a0>
lea    -0x4(,%r8,4),%eax
ff
cltq
lea    (%rcx,%rax,8),%rcx
lea    -0x3(%rdi),%eax
cmp    %eax,%esi
jge    13d0 <kernel_dgetr_4_lib4+0x2d0>
shl    $0x2,%r8d
movslq %r8d,%rbx
shl    $0x3,%rbx
nop
movsd  (%rdx),%xmm0
movsd  %xmm0,(%rcx)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x20(%rcx)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x40(%rcx)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x60(%rcx)
movsd  0x20(%rdx),%xmm0
movsd  %xmm0,0x8(%rcx)
movsd  0x28(%rdx),%xmm0
movsd  %xmm0,0x28(%rcx)
movsd  0x30(%rdx),%xmm0
movsd  %xmm0,0x48(%rcx)
movsd  0x38(%rdx),%xmm0
movsd  %xmm0,0x68(%rcx)
movsd  0x40(%rdx),%xmm0
movsd  %xmm0,0x10(%rcx)
movsd  0x48(%rdx),%xmm0
movsd  %xmm0,0x30(%rcx)
movsd  0x50(%rdx),%xmm0
movsd  %xmm0,0x50(%rcx)
movsd  0x58(%rdx),%xmm0
movsd  %xmm0,0x70(%rcx)
movsd  0x60(%rdx),%xmm0
movsd  %xmm0,0x18(%rcx)
movsd  0x68(%rdx),%xmm0
movsd  %xmm0,0x38(%rcx)
movsd  0x70(%rdx),%xmm0
movsd  %xmm0,0x58(%rcx)
movsd  0x78(%rdx),%xmm0
movsd  %xmm0,0x78(%rcx)
sub    $0xffffffffffffff80,%rdx
add    $0x4,%esi
add    %rbx,%rcx
cmp    %eax,%esi
jl     1320 <kernel_dgetr_4_lib4+0x220>
cmp    %edi,%esi
jge    15d2 <kernel_dgetr_4_lib4+0x4d2>
mov    %esi,%r9d
not    %r9d
add    %edi,%r9d
je     151d <kernel_dgetr_4_lib4+0x41d>
mov    %r9,%rax
shl    $0x5,%rax
add    %rdx,%rax
add    $0x20,%rax
cmp    %rax,%rcx
jae    140b <kernel_dgetr_4_lib4+0x30b>
lea    (%rcx,%r9,8),%rax
add    $0x68,%rax
cmp    %rax,%rdx
jb     151d <kernel_dgetr_4_lib4+0x41d>
add    $0x1,%r9
mov    %r9,%r8
and    $0xfffffffffffffffe,%r8
lea    -0x2(%r8),%rax
mov    %rax,%r10
shr    %r10
add    $0x1,%r10
test   %rax,%rax
je     15d6 <kernel_dgetr_4_lib4+0x4d6>
mov    %r10,%r11
and    $0xfffffffffffffffe,%r11
lea    0x40(%rdx),%rbx
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movups -0x40(%rbx),%xmm0
movups -0x30(%rbx),%xmm1
movups -0x20(%rbx),%xmm2
movups -0x10(%rbx),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%rcx,%rax,8)
movups %xmm0,0x20(%rcx,%rax,8)
movups %xmm2,0x40(%rcx,%rax,8)
movups %xmm1,0x60(%rcx,%rax,8)
movups (%rbx),%xmm0
movups 0x10(%rbx),%xmm1
movups 0x20(%rbx),%xmm2
movups 0x30(%rbx),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,0x10(%rcx,%rax,8)
movups %xmm0,0x30(%rcx,%rax,8)
movups %xmm2,0x50(%rcx,%rax,8)
movups %xmm1,0x70(%rcx,%rax,8)
add    $0x4,%rax
sub    $0xffffffffffffff80,%rbx
add    $0xfffffffffffffffe,%r11
jne    1440 <kernel_dgetr_4_lib4+0x340>
test   $0x1,%r10b
je     1503 <kernel_dgetr_4_lib4+0x403>
mov    %rax,%rbx
shl    $0x5,%rbx
movups (%rdx,%rbx,1),%xmm0
movups 0x10(%rdx,%rbx,1),%xmm1
movups 0x20(%rdx,%rbx,1),%xmm2
movups 0x30(%rdx,%rbx,1),%xmm3
movaps %xmm0,%xmm4
movlhps %xmm2,%xmm4
unpckhpd %xmm2,%xmm0
movaps %xmm1,%xmm2
movlhps %xmm3,%xmm2
unpckhpd %xmm3,%xmm1
movups %xmm4,(%rcx,%rax,8)
movups %xmm0,0x20(%rcx,%rax,8)
movups %xmm2,0x40(%rcx,%rax,8)
movups %xmm1,0x60(%rcx,%rax,8)
cmp    %r8,%r9
je     15d2 <kernel_dgetr_4_lib4+0x4d2>
lea    (%rcx,%r8,8),%rcx
mov    %r8,%rax
shl    $0x5,%rax
add    %r8d,%esi
add    %rax,%rdx
mov    %edi,%ebx
sub    %esi,%ebx
mov    %esi,%eax
not    %eax
test   $0x1,%bl
je     155b <kernel_dgetr_4_lib4+0x45b>
movsd  (%rdx),%xmm0
movsd  %xmm0,(%rcx)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x20(%rcx)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x40(%rcx)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x60(%rcx)
add    $0x8,%rcx
add    $0x20,%rdx
add    $0x1,%esi
add    %edi,%eax
je     15d2 <kernel_dgetr_4_lib4+0x4d2>
sub    %esi,%edi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%rdx),%xmm0
movsd  %xmm0,(%rcx,%rax,8)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x20(%rcx,%rax,8)
movsd  0x10(%rdx),%xmm0
movsd  %xmm0,0x40(%rcx,%rax,8)
movsd  0x18(%rdx),%xmm0
movsd  %xmm0,0x60(%rcx,%rax,8)
movsd  0x20(%rdx),%xmm0
movsd  %xmm0,0x8(%rcx,%rax,8)
movsd  0x28(%rdx),%xmm0
movsd  %xmm0,0x28(%rcx,%rax,8)
movsd  0x30(%rdx),%xmm0
movsd  %xmm0,0x48(%rcx,%rax,8)
movsd  0x38(%rdx),%xmm0
movsd  %xmm0,0x68(%rcx,%rax,8)
add    $0x2,%rax
add    $0x40,%rdx
cmp    %eax,%edi
jne    1570 <kernel_dgetr_4_lib4+0x470>
pop    %rbx
pop    %r14
ret
xor    %eax,%eax
test   $0x1,%r10b
jne    14c2 <kernel_dgetr_4_lib4+0x3c2>
jmp    1503 <kernel_dgetr_4_lib4+0x403>

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

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