void kernel_dgemm_diag_left_4_lib4(int kmax, double *A, double *B, double *C,
                                   double *D, int alg) {
  if (kmax <= 0)
    return;
  const int bs = 4;
  int k;
  double a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3, c_0, c_1, c_2, c_3;
  if (alg == -1) {
    a_0 = -A[0];
    a_1 = -A[1];
    a_2 = -A[2];
    a_3 = -A[3];
  } else {
    a_0 = A[0];
    a_1 = A[1];
    a_2 = A[2];
    a_3 = A[3];
  }
  if (alg == 0) {
    for (k = 0; k < kmax - 3; k += 4) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      b_0 = B[0 + bs * 1];
      b_1 = B[1 + bs * 1];
      b_2 = B[2 + bs * 1];
      b_3 = B[3 + bs * 1];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 1] = c_0;
      D[1 + bs * 1] = c_1;
      D[2 + bs * 1] = c_2;
      D[3 + bs * 1] = c_3;
      b_0 = B[0 + bs * 2];
      b_1 = B[1 + bs * 2];
      b_2 = B[2 + bs * 2];
      b_3 = B[3 + bs * 2];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 2] = c_0;
      D[1 + bs * 2] = c_1;
      D[2 + bs * 2] = c_2;
      D[3 + bs * 2] = c_3;
      b_0 = B[0 + bs * 3];
      b_1 = B[1 + bs * 3];
      b_2 = B[2 + bs * 3];
      b_3 = B[3 + bs * 3];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 3] = c_0;
      D[1 + bs * 3] = c_1;
      D[2 + bs * 3] = c_2;
      D[3 + bs * 3] = c_3;
      B += 16;
      D += 16;
    }
    for (; k < kmax; k++) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      B += 4;
      D += 4;
    }
  } else {
    for (k = 0; k < kmax - 3; k += 4) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = C[0 + bs * 0] + a_0 * b_0;
      c_1 = C[1 + bs * 0] + a_1 * b_1;
      c_2 = C[2 + bs * 0] + a_2 * b_2;
      c_3 = C[3 + bs * 0] + a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      b_0 = B[0 + bs * 1];
      b_1 = B[1 + bs * 1];
      b_2 = B[2 + bs * 1];
      b_3 = B[3 + bs * 1];
      c_0 = C[0 + bs * 1] + a_0 * b_0;
      c_1 = C[1 + bs * 1] + a_1 * b_1;
      c_2 = C[2 + bs * 1] + a_2 * b_2;
      c_3 = C[3 + bs * 1] + a_3 * b_3;
      D[0 + bs * 1] = c_0;
      D[1 + bs * 1] = c_1;
      D[2 + bs * 1] = c_2;
      D[3 + bs * 1] = c_3;
      b_0 = B[0 + bs * 2];
      b_1 = B[1 + bs * 2];
      b_2 = B[2 + bs * 2];
      b_3 = B[3 + bs * 2];
      c_0 = C[0 + bs * 2] + a_0 * b_0;
      c_1 = C[1 + bs * 2] + a_1 * b_1;
      c_2 = C[2 + bs * 2] + a_2 * b_2;
      c_3 = C[3 + bs * 2] + a_3 * b_3;
      D[0 + bs * 2] = c_0;
      D[1 + bs * 2] = c_1;
      D[2 + bs * 2] = c_2;
      D[3 + bs * 2] = c_3;
      b_0 = B[0 + bs * 3];
      b_1 = B[1 + bs * 3];
      b_2 = B[2 + bs * 3];
      b_3 = B[3 + bs * 3];
      c_0 = C[0 + bs * 3] + a_0 * b_0;
      c_1 = C[1 + bs * 3] + a_1 * b_1;
      c_2 = C[2 + bs * 3] + a_2 * b_2;
      c_3 = C[3 + bs * 3] + a_3 * b_3;
      D[0 + bs * 3] = c_0;
      D[1 + bs * 3] = c_1;
      D[2 + bs * 3] = c_2;
      D[3 + bs * 3] = c_3;
      B += 16;
      C += 16;
      D += 16;
    }
    for (; k < kmax; k++) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = C[0 + bs * 0] + a_0 * b_0;
      c_1 = C[1 + bs * 0] + a_1 * b_1;
      c_2 = C[2 + bs * 0] + a_2 * b_2;
      c_3 = C[3 + bs * 0] + a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      B += 4;
      C += 4;
      D += 4;
    }
  }
}


x86 assembly (clang, -O0):
<kernel_dgemm_diag_left_4_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     112e <kernel_dgemm_diag_left_4_lib4+0x2e>
jmp    1be4 <kernel_dgemm_diag_left_4_lib4+0xae4>
movl   $0x4,-0x30(%rbp)
cmpl   $0xffffffff,-0x2c(%rbp)
jne    11d7 <kernel_dgemm_diag_left_4_lib4+0xd7>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    120e <kernel_dgemm_diag_left_4_lib4+0x10e>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jne    1648 <kernel_dgemm_diag_left_4_lib4+0x548>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1550 <kernel_dgemm_diag_left_4_lib4+0x450>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    121f <kernel_dgemm_diag_left_4_lib4+0x11f>
jmp    1555 <kernel_dgemm_diag_left_4_lib4+0x455>
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1643 <kernel_dgemm_diag_left_4_lib4+0x543>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1555 <kernel_dgemm_diag_left_4_lib4+0x455>
jmp    1be4 <kernel_dgemm_diag_left_4_lib4+0xae4>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1a9d <kernel_dgemm_diag_left_4_lib4+0x99d>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x58(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x78(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    164f <kernel_dgemm_diag_left_4_lib4+0x54f>
jmp    1aa2 <kernel_dgemm_diag_left_4_lib4+0x9a2>
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1bdf <kernel_dgemm_diag_left_4_lib4+0xadf>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1aa2 <kernel_dgemm_diag_left_4_lib4+0x9a2>
jmp    1be4 <kernel_dgemm_diag_left_4_lib4+0xae4>
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemm_diag_left_4_lib4>:
push   %r15
push   %r14
push   %rbx
test   %edi,%edi
jle    172b <kernel_dgemm_diag_left_4_lib4+0x62b>
movsd  (%rsi),%xmm11
cmp    $0xffffffff,%r9d
je     122f <kernel_dgemm_diag_left_4_lib4+0x12f>
movsd  0x8(%rsi),%xmm8
movupd 0x10(%rsi),%xmm12
movapd %xmm11,%xmm13
unpcklpd %xmm8,%xmm13
test   %r9d,%r9d
jne    1252 <kernel_dgemm_diag_left_4_lib4+0x152>
xor    %r10d,%r10d
cmp    $0x4,%edi
jb     11e8 <kernel_dgemm_diag_left_4_lib4+0xe8>
lea    -0x3(%rdi),%eax
xor    %ecx,%ecx
nopl   0x0(%rax)
movupd (%rdx),%xmm2
movupd 0x10(%rdx),%xmm3
mulpd  %xmm13,%xmm2
mulpd  %xmm12,%xmm3
movupd %xmm2,(%r8)
movupd %xmm3,0x10(%r8)
movupd 0x20(%rdx),%xmm2
movupd 0x30(%rdx),%xmm3
mulpd  %xmm13,%xmm2
mulpd  %xmm12,%xmm3
movupd %xmm2,0x20(%r8)
movupd %xmm3,0x30(%r8)
movupd 0x40(%rdx),%xmm2
movupd 0x50(%rdx),%xmm3
mulpd  %xmm13,%xmm2
mulpd  %xmm12,%xmm3
movupd %xmm2,0x40(%r8)
movupd %xmm3,0x50(%r8)
movupd 0x60(%rdx),%xmm2
movupd 0x70(%rdx),%xmm3
mulpd  %xmm13,%xmm2
mulpd  %xmm12,%xmm3
movupd %xmm2,0x60(%r8)
movupd %xmm3,0x70(%r8)
sub    $0xffffffffffffff80,%rdx
sub    $0xffffffffffffff80,%r8
add    $0x4,%ecx
cmp    %eax,%ecx
jl     1150 <kernel_dgemm_diag_left_4_lib4+0x50>
mov    %edi,%r10d
and    $0xfffffffc,%r10d
cmp    %edi,%r10d
jge    172b <kernel_dgemm_diag_left_4_lib4+0x62b>
mov    %r10d,%r11d
not    %r11d
add    %edi,%r11d
je     1224 <kernel_dgemm_diag_left_4_lib4+0x124>
mov    %r11,%rax
shl    $0x5,%rax
lea    (%rdx,%rax,1),%rcx
add    $0x20,%rcx
cmp    %rcx,%r8
jae    15cf <kernel_dgemm_diag_left_4_lib4+0x4cf>
add    %r8,%rax
add    $0x20,%rax
cmp    %rax,%rdx
jae    15cf <kernel_dgemm_diag_left_4_lib4+0x4cf>
mov    %rdx,%rcx
mov    %r8,%rsi
jmp    1695 <kernel_dgemm_diag_left_4_lib4+0x595>
movhpd 0x8(%rsi),%xmm11
movapd 0xdc3(%rip),%xmm1
xorpd  %xmm1,%xmm11
movupd 0x10(%rsi),%xmm12
xorpd  %xmm1,%xmm12
movapd %xmm11,%xmm13
xor    %r9d,%r9d
cmp    $0x4,%edi
jb     1353 <kernel_dgemm_diag_left_4_lib4+0x253>
lea    -0x3(%rdi),%eax
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd (%rdx),%xmm0
movupd 0x10(%rdx),%xmm1
mulpd  %xmm13,%xmm0
movupd (%rcx),%xmm2
addpd  %xmm0,%xmm2
movupd 0x10(%rcx),%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm2,(%r8)
movupd %xmm1,0x10(%r8)
movupd 0x20(%rdx),%xmm0
movupd 0x30(%rdx),%xmm1
mulpd  %xmm13,%xmm0
movupd 0x20(%rcx),%xmm2
addpd  %xmm0,%xmm2
movupd 0x30(%rcx),%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm2,0x20(%r8)
movupd %xmm1,0x30(%r8)
movupd 0x40(%rdx),%xmm0
movupd 0x50(%rdx),%xmm1
mulpd  %xmm13,%xmm0
movupd 0x40(%rcx),%xmm2
addpd  %xmm0,%xmm2
movupd 0x50(%rcx),%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm2,0x40(%r8)
movupd %xmm1,0x50(%r8)
movupd 0x60(%rdx),%xmm0
movupd 0x70(%rdx),%xmm1
mulpd  %xmm13,%xmm0
movupd 0x60(%rcx),%xmm2
addpd  %xmm0,%xmm2
movupd 0x70(%rcx),%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm2,0x60(%r8)
movupd %xmm1,0x70(%r8)
sub    $0xffffffffffffff80,%rdx
sub    $0xffffffffffffff80,%rcx
sub    $0xffffffffffffff80,%r8
add    $0x4,%esi
cmp    %eax,%esi
jl     1270 <kernel_dgemm_diag_left_4_lib4+0x170>
mov    %edi,%r9d
and    $0xfffffffc,%r9d
cmp    %edi,%r9d
jge    172b <kernel_dgemm_diag_left_4_lib4+0x62b>
mov    %r9d,%r11d
not    %r11d
add    %edi,%r11d
je     14dc <kernel_dgemm_diag_left_4_lib4+0x3dc>
mov    %r11,%rax
shl    $0x5,%rax
lea    (%r8,%rax,1),%rsi
add    $0x20,%rsi
lea    (%rdx,%rax,1),%rbx
add    $0x20,%rbx
add    %rcx,%rax
add    $0x20,%rax
cmp    %rbx,%r8
setb   %r10b
cmp    %rsi,%rdx
setb   %bl
cmp    %rax,%r8
setb   %al
cmp    %rsi,%rcx
setb   %sil
test   %bl,%r10b
jne    14dc <kernel_dgemm_diag_left_4_lib4+0x3dc>
and    %sil,%al
jne    14dc <kernel_dgemm_diag_left_4_lib4+0x3dc>
add    $0x1,%r11
mov    %r11,%r14
and    $0xfffffffffffffffe,%r14
add    %r14d,%r9d
mov    %r14,%rsi
shl    $0x5,%rsi
lea    (%rdx,%rsi,1),%r10
lea    (%rcx,%rsi,1),%r15
add    %r8,%rsi
movapd %xmm13,%xmm8
unpcklpd %xmm13,%xmm8
movapd %xmm13,%xmm9
unpckhpd %xmm13,%xmm9
movapd %xmm12,%xmm10
unpcklpd %xmm12,%xmm10
movapd %xmm12,%xmm11
unpckhpd %xmm12,%xmm11
xor    %ebx,%ebx
mov    %r14,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movupd (%rdx,%rbx,1),%xmm7
movupd 0x10(%rdx,%rbx,1),%xmm6
movupd 0x20(%rdx,%rbx,1),%xmm2
movupd 0x30(%rdx,%rbx,1),%xmm3
movapd %xmm7,%xmm4
unpcklpd %xmm2,%xmm4
mulpd  %xmm8,%xmm4
unpckhpd %xmm2,%xmm7
mulpd  %xmm9,%xmm7
movapd %xmm6,%xmm2
unpcklpd %xmm3,%xmm2
mulpd  %xmm10,%xmm2
unpckhpd %xmm3,%xmm6
mulpd  %xmm11,%xmm6
movupd (%rcx,%rbx,1),%xmm3
movupd 0x10(%rcx,%rbx,1),%xmm5
movupd 0x20(%rcx,%rbx,1),%xmm0
movupd 0x30(%rcx,%rbx,1),%xmm14
movapd %xmm3,%xmm1
unpcklpd %xmm0,%xmm1
addpd  %xmm4,%xmm1
unpckhpd %xmm0,%xmm3
addpd  %xmm7,%xmm3
movapd %xmm5,%xmm0
unpcklpd %xmm14,%xmm0
addpd  %xmm2,%xmm0
unpckhpd %xmm14,%xmm5
addpd  %xmm6,%xmm5
movapd %xmm0,%xmm2
unpcklpd %xmm5,%xmm2
movapd %xmm1,%xmm4
unpcklpd %xmm3,%xmm4
movhlps %xmm0,%xmm5
movhlps %xmm1,%xmm3
movups %xmm3,0x20(%r8,%rbx,1)
movups %xmm5,0x30(%r8,%rbx,1)
movupd %xmm4,(%r8,%rbx,1)
movupd %xmm2,0x10(%r8,%rbx,1)
add    $0x40,%rbx
add    $0xfffffffffffffffe,%rax
jne    1410 <kernel_dgemm_diag_left_4_lib4+0x310>
cmp    %r14,%r11
jne    14e5 <kernel_dgemm_diag_left_4_lib4+0x3e5>
jmp    172b <kernel_dgemm_diag_left_4_lib4+0x62b>
mov    %rdx,%r10
mov    %rcx,%r15
mov    %r8,%rsi
mov    %edi,%ecx
sub    %r9d,%ecx
mov    %r9d,%eax
not    %eax
test   $0x1,%cl
je     1535 <kernel_dgemm_diag_left_4_lib4+0x435>
movupd (%r10),%xmm0
movupd 0x10(%r10),%xmm1
mulpd  %xmm13,%xmm0
movupd (%r15),%xmm2
addpd  %xmm0,%xmm2
movupd 0x10(%r15),%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm2,(%rsi)
movupd %xmm1,0x10(%rsi)
add    $0x20,%r10
add    $0x20,%r15
add    $0x20,%rsi
add    $0x1,%r9d
add    %edi,%eax
je     172b <kernel_dgemm_diag_left_4_lib4+0x62b>
sub    %r9d,%edi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movupd (%r10,%rax,1),%xmm0
movupd 0x10(%r10,%rax,1),%xmm1
mulpd  %xmm13,%xmm0
movupd (%r15,%rax,1),%xmm2
addpd  %xmm0,%xmm2
movupd 0x10(%r15,%rax,1),%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm2,(%rsi,%rax,1)
movupd %xmm1,0x10(%rsi,%rax,1)
movupd 0x20(%r10,%rax,1),%xmm0
movupd 0x30(%r10,%rax,1),%xmm1
mulpd  %xmm13,%xmm0
movupd 0x20(%r15,%rax,1),%xmm2
addpd  %xmm0,%xmm2
movupd 0x30(%r15,%rax,1),%xmm0
mulpd  %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm2,0x20(%rsi,%rax,1)
movupd %xmm1,0x30(%rsi,%rax,1)
add    $0x40,%rax
add    $0xfffffffe,%edi
jne    1550 <kernel_dgemm_diag_left_4_lib4+0x450>
jmp    172b <kernel_dgemm_diag_left_4_lib4+0x62b>
add    $0x1,%r11
mov    %r11,%r9
and    $0xfffffffffffffffe,%r9
add    %r9d,%r10d
mov    %r9,%rsi
shl    $0x5,%rsi
lea    (%rdx,%rsi,1),%rcx
add    %r8,%rsi
unpcklpd %xmm11,%xmm11
unpcklpd %xmm8,%xmm8
movapd %xmm12,%xmm9
unpcklpd %xmm12,%xmm9
movapd %xmm12,%xmm10
unpckhpd %xmm12,%xmm10
xor    %eax,%eax
mov    %r9,%rbx
xchg   %ax,%ax
movupd (%rdx,%rax,1),%xmm6
movupd 0x10(%rdx,%rax,1),%xmm7
movupd 0x20(%rdx,%rax,1),%xmm3
movupd 0x30(%rdx,%rax,1),%xmm4
movapd %xmm6,%xmm5
unpcklpd %xmm3,%xmm5
mulpd  %xmm11,%xmm5
unpckhpd %xmm3,%xmm6
mulpd  %xmm8,%xmm6
movapd %xmm7,%xmm3
unpcklpd %xmm4,%xmm3
mulpd  %xmm9,%xmm3
unpckhpd %xmm4,%xmm7
mulpd  %xmm10,%xmm7
movapd %xmm3,%xmm4
unpcklpd %xmm7,%xmm4
movapd %xmm5,%xmm2
unpcklpd %xmm6,%xmm2
movhlps %xmm3,%xmm7
movhlps %xmm5,%xmm6
movups %xmm6,0x20(%r8,%rax,1)
movups %xmm7,0x30(%r8,%rax,1)
movupd %xmm2,(%r8,%rax,1)
movupd %xmm4,0x10(%r8,%rax,1)
add    $0x40,%rax
add    $0xfffffffffffffffe,%rbx
jne    1610 <kernel_dgemm_diag_left_4_lib4+0x510>
cmp    %r9,%r11
je     172b <kernel_dgemm_diag_left_4_lib4+0x62b>
mov    %edi,%edx
sub    %r10d,%edx
mov    %r10d,%eax
not    %eax
test   $0x1,%dl
je     16cc <kernel_dgemm_diag_left_4_lib4+0x5cc>
movupd (%rcx),%xmm2
movupd 0x10(%rcx),%xmm3
mulpd  %xmm13,%xmm2
mulpd  %xmm12,%xmm3
movupd %xmm2,(%rsi)
movupd %xmm3,0x10(%rsi)
add    $0x20,%rcx
add    $0x20,%rsi
add    $0x1,%r10d
add    %edi,%eax
je     172b <kernel_dgemm_diag_left_4_lib4+0x62b>
sub    %r10d,%edi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movupd (%rcx,%rax,1),%xmm2
movupd 0x10(%rcx,%rax,1),%xmm3
mulpd  %xmm13,%xmm2
mulpd  %xmm12,%xmm3
movupd %xmm2,(%rsi,%rax,1)
movupd %xmm3,0x10(%rsi,%rax,1)
movupd 0x20(%rcx,%rax,1),%xmm2
movupd 0x30(%rcx,%rax,1),%xmm3
mulpd  %xmm13,%xmm2
mulpd  %xmm12,%xmm3
movupd %xmm2,0x20(%rsi,%rax,1)
movupd %xmm3,0x30(%rsi,%rax,1)
add    $0x40,%rax
add    $0xfffffffe,%edi
jne    16e0 <kernel_dgemm_diag_left_4_lib4+0x5e0>
pop    %rbx
pop    %r14
pop    %r15
ret

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

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