void kernel_dgemm_diag_right_4_lib4(int kmax, double *A, int sda, double *B,
                                    double *C, int sdc, double *D, int sdd,
                                    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) {
    b_0 = -B[0];
    b_1 = -B[1];
    b_2 = -B[2];
    b_3 = -B[3];
  } else {
    b_0 = B[0];
    b_1 = B[1];
    b_2 = B[2];
    b_3 = B[3];
  }
  if (alg == 0) {
    for (k = 0; k < kmax - 3; k += 4) {
      a_0 = A[0 + bs * 0];
      a_1 = A[1 + bs * 0];
      a_2 = A[2 + bs * 0];
      a_3 = A[3 + bs * 0];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_0;
      c_2 = a_2 * b_0;
      c_3 = a_3 * b_0;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      a_0 = A[0 + bs * 1];
      a_1 = A[1 + bs * 1];
      a_2 = A[2 + bs * 1];
      a_3 = A[3 + bs * 1];
      c_0 = a_0 * b_1;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_1;
      c_3 = a_3 * b_1;
      D[0 + bs * 1] = c_0;
      D[1 + bs * 1] = c_1;
      D[2 + bs * 1] = c_2;
      D[3 + bs * 1] = c_3;
      a_0 = A[0 + bs * 2];
      a_1 = A[1 + bs * 2];
      a_2 = A[2 + bs * 2];
      a_3 = A[3 + bs * 2];
      c_0 = a_0 * b_2;
      c_1 = a_1 * b_2;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_2;
      D[0 + bs * 2] = c_0;
      D[1 + bs * 2] = c_1;
      D[2 + bs * 2] = c_2;
      D[3 + bs * 2] = c_3;
      a_0 = A[0 + bs * 3];
      a_1 = A[1 + bs * 3];
      a_2 = A[2 + bs * 3];
      a_3 = A[3 + bs * 3];
      c_0 = a_0 * b_3;
      c_1 = a_1 * b_3;
      c_2 = a_2 * b_3;
      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;
      A += 4 * sda;
      D += 4 * sdd;
    }
    for (; k < kmax; k++) {
      a_0 = A[0 + bs * 0];
      c_0 = a_0 * b_0;
      D[0 + bs * 0] = c_0;
      a_0 = A[0 + bs * 1];
      c_0 = a_0 * b_1;
      D[0 + bs * 1] = c_0;
      a_0 = A[0 + bs * 2];
      c_0 = a_0 * b_2;
      D[0 + bs * 2] = c_0;
      a_0 = A[0 + bs * 3];
      c_0 = a_0 * b_3;
      D[0 + bs * 3] = c_0;
      A += 1;
      D += 1;
    }
  } else {
    for (k = 0; k < kmax - 3; k += 4) {
      a_0 = A[0 + bs * 0];
      a_1 = A[1 + bs * 0];
      a_2 = A[2 + bs * 0];
      a_3 = A[3 + bs * 0];
      c_0 = C[0 + bs * 0] + a_0 * b_0;
      c_1 = C[1 + bs * 0] + a_1 * b_0;
      c_2 = C[2 + bs * 0] + a_2 * b_0;
      c_3 = C[3 + bs * 0] + a_3 * b_0;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      a_0 = A[0 + bs * 1];
      a_1 = A[1 + bs * 1];
      a_2 = A[2 + bs * 1];
      a_3 = A[3 + bs * 1];
      c_0 = C[0 + bs * 1] + a_0 * b_1;
      c_1 = C[1 + bs * 1] + a_1 * b_1;
      c_2 = C[2 + bs * 1] + a_2 * b_1;
      c_3 = C[3 + bs * 1] + a_3 * b_1;
      D[0 + bs * 1] = c_0;
      D[1 + bs * 1] = c_1;
      D[2 + bs * 1] = c_2;
      D[3 + bs * 1] = c_3;
      a_0 = A[0 + bs * 2];
      a_1 = A[1 + bs * 2];
      a_2 = A[2 + bs * 2];
      a_3 = A[3 + bs * 2];
      c_0 = C[0 + bs * 2] + a_0 * b_2;
      c_1 = C[1 + bs * 2] + a_1 * b_2;
      c_2 = C[2 + bs * 2] + a_2 * b_2;
      c_3 = C[3 + bs * 2] + a_3 * b_2;
      D[0 + bs * 2] = c_0;
      D[1 + bs * 2] = c_1;
      D[2 + bs * 2] = c_2;
      D[3 + bs * 2] = c_3;
      a_0 = A[0 + bs * 3];
      a_1 = A[1 + bs * 3];
      a_2 = A[2 + bs * 3];
      a_3 = A[3 + bs * 3];
      c_0 = C[0 + bs * 3] + a_0 * b_3;
      c_1 = C[1 + bs * 3] + a_1 * b_3;
      c_2 = C[2 + bs * 3] + a_2 * b_3;
      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;
      A += 4 * sda;
      C += 4 * sdc;
      D += 4 * sdd;
    }
    for (; k < kmax; k++) {
      a_0 = A[0 + bs * 0];
      c_0 = C[0 + bs * 0] + a_0 * b_0;
      D[0 + bs * 0] = c_0;
      a_0 = A[0 + bs * 1];
      c_0 = C[0 + bs * 1] + a_0 * b_1;
      D[0 + bs * 1] = c_0;
      a_0 = A[0 + bs * 2];
      c_0 = C[0 + bs * 2] + a_0 * b_2;
      D[0 + bs * 2] = c_0;
      a_0 = A[0 + bs * 3];
      c_0 = C[0 + bs * 3] + a_0 * b_3;
      D[0 + bs * 3] = c_0;
      A += 1;
      C += 1;
      D += 1;
    }
  }
}


x86 assembly (clang, -O0):
<kernel_dgemm_diag_right_4_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1137 <kernel_dgemm_diag_right_4_lib4+0x37>
jmp    1bfb <kernel_dgemm_diag_right_4_lib4+0xafb>
movl   $0x4,-0x30(%rbp)
cmpl   $0xffffffff,0x20(%rbp)
jne    11e0 <kernel_dgemm_diag_right_4_lib4+0xe0>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1217 <kernel_dgemm_diag_right_4_lib4+0x117>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x0,0x20(%rbp)
jne    1653 <kernel_dgemm_diag_right_4_lib4+0x553>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    156d <kernel_dgemm_diag_right_4_lib4+0x46d>
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)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x70(%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  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x78(%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    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    0x18(%rbp),%ecx
shl    $0x2,%ecx
mov    0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x10(%rbp)
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    1228 <kernel_dgemm_diag_right_4_lib4+0x128>
jmp    1572 <kernel_dgemm_diag_right_4_lib4+0x472>
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    164e <kernel_dgemm_diag_right_4_lib4+0x54e>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,0x10(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1572 <kernel_dgemm_diag_right_4_lib4+0x472>
jmp    1bfb <kernel_dgemm_diag_right_4_lib4+0xafb>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1ac6 <kernel_dgemm_diag_right_4_lib4+0x9c6>
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)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%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    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x48(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x28(%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    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x60(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x68(%rax),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x28(%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    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x2c(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    0x18(%rbp),%ecx
shl    $0x2,%ecx
mov    0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x10(%rbp)
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    165a <kernel_dgemm_diag_right_4_lib4+0x55a>
jmp    1acb <kernel_dgemm_diag_right_4_lib4+0x9cb>
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1bf6 <kernel_dgemm_diag_right_4_lib4+0xaf6>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x60(%rax),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,0x10(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1acb <kernel_dgemm_diag_right_4_lib4+0x9cb>
jmp    1bfb <kernel_dgemm_diag_right_4_lib4+0xafb>
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemm_diag_right_4_lib4>:
push   %rbp
push   %r14
push   %rbx
test   %edi,%edi
jle    16b8 <kernel_dgemm_diag_right_4_lib4+0x5b8>
mov    0x30(%rsp),%ebx
mov    0x28(%rsp),%ebp
mov    0x20(%rsp),%rax
movsd  (%rcx),%xmm8
cmp    $0xffffffff,%ebx
je     1321 <kernel_dgemm_diag_right_4_lib4+0x221>
movsd  0x8(%rcx),%xmm9
movupd 0x10(%rcx),%xmm2
test   %ebx,%ebx
jne    1342 <kernel_dgemm_diag_right_4_lib4+0x242>
xor    %r9d,%r9d
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
cmp    $0x4,%edi
jb     1213 <kernel_dgemm_diag_right_4_lib4+0x113>
lea    -0x3(%rdi),%r8d
shl    $0x2,%edx
movslq %edx,%rdx
shl    $0x2,%ebp
movslq %ebp,%rbx
movapd %xmm8,%xmm4
unpcklpd %xmm8,%xmm4
movapd %xmm9,%xmm5
unpcklpd %xmm9,%xmm5
movapd %xmm2,%xmm6
unpcklpd %xmm2,%xmm6
shl    $0x3,%rdx
shl    $0x3,%rbx
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd (%rsi),%xmm7
movupd 0x10(%rsi),%xmm0
mulpd  %xmm4,%xmm7
mulpd  %xmm4,%xmm0
movupd %xmm7,(%rax)
movupd %xmm0,0x10(%rax)
movupd 0x20(%rsi),%xmm0
movupd 0x30(%rsi),%xmm7
mulpd  %xmm5,%xmm0
mulpd  %xmm5,%xmm7
movupd %xmm0,0x20(%rax)
movupd %xmm7,0x30(%rax)
movupd 0x40(%rsi),%xmm0
movupd 0x50(%rsi),%xmm7
mulpd  %xmm6,%xmm0
mulpd  %xmm6,%xmm7
movupd %xmm0,0x40(%rax)
movupd %xmm7,0x50(%rax)
movupd 0x60(%rsi),%xmm0
movupd 0x70(%rsi),%xmm7
mulpd  %xmm3,%xmm0
mulpd  %xmm3,%xmm7
movupd %xmm0,0x60(%rax)
movupd %xmm7,0x70(%rax)
add    $0x4,%ecx
add    %rdx,%rsi
add    %rbx,%rax
cmp    %r8d,%ecx
jl     1190 <kernel_dgemm_diag_right_4_lib4+0x90>
mov    %edi,%r9d
and    $0xfffffffc,%r9d
cmp    %edi,%r9d
jge    16b8 <kernel_dgemm_diag_right_4_lib4+0x5b8>
mov    %r9d,%edx
not    %edx
add    %edi,%edx
je     165e <kernel_dgemm_diag_right_4_lib4+0x55e>
lea    (%rsi,%rdx,8),%rcx
add    $0x68,%rcx
cmp    %rcx,%rax
jae    1247 <kernel_dgemm_diag_right_4_lib4+0x147>
lea    (%rax,%rdx,8),%rcx
add    $0x68,%rcx
cmp    %rcx,%rsi
jb     165e <kernel_dgemm_diag_right_4_lib4+0x55e>
add    $0x1,%rdx
mov    %rdx,%r8
and    $0xfffffffffffffffe,%r8
movapd %xmm8,%xmm6
unpcklpd %xmm8,%xmm6
movapd %xmm9,%xmm5
unpcklpd %xmm9,%xmm5
movapd %xmm2,%xmm4
unpcklpd %xmm2,%xmm4
lea    -0x2(%r8),%rcx
mov    %rcx,%r10
shr    %r10
add    $0x1,%r10
test   %rcx,%rcx
je     1608 <kernel_dgemm_diag_right_4_lib4+0x508>
mov    %r10,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %ecx,%ecx
xchg   %ax,%ax
movupd (%rsi,%rcx,8),%xmm7
mulpd  %xmm6,%xmm7
movupd %xmm7,(%rax,%rcx,8)
movupd 0x20(%rsi,%rcx,8),%xmm7
mulpd  %xmm5,%xmm7
movupd %xmm7,0x20(%rax,%rcx,8)
movupd 0x40(%rsi,%rcx,8),%xmm7
mulpd  %xmm4,%xmm7
movupd %xmm7,0x40(%rax,%rcx,8)
movupd 0x60(%rsi,%rcx,8),%xmm7
mulpd  %xmm3,%xmm7
movupd %xmm7,0x60(%rax,%rcx,8)
movupd 0x10(%rsi,%rcx,8),%xmm7
mulpd  %xmm6,%xmm7
movupd %xmm7,0x10(%rax,%rcx,8)
movupd 0x30(%rsi,%rcx,8),%xmm7
mulpd  %xmm5,%xmm7
movupd %xmm7,0x30(%rax,%rcx,8)
movupd 0x50(%rsi,%rcx,8),%xmm7
mulpd  %xmm4,%xmm7
movupd %xmm7,0x50(%rax,%rcx,8)
movupd 0x70(%rsi,%rcx,8),%xmm7
mulpd  %xmm3,%xmm7
movupd %xmm7,0x70(%rax,%rcx,8)
add    $0x4,%rcx
add    $0xfffffffffffffffe,%rbx
jne    1290 <kernel_dgemm_diag_right_4_lib4+0x190>
jmp    160a <kernel_dgemm_diag_right_4_lib4+0x50a>
movapd 0xcd7(%rip),%xmm3
xorpd  %xmm3,%xmm8
movsd  0x8(%rcx),%xmm9
xorpd  %xmm3,%xmm9
movupd 0x10(%rcx),%xmm2
xorpd  %xmm3,%xmm2
xor    %r10d,%r10d
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
cmp    $0x4,%edi
jb     1479 <kernel_dgemm_diag_right_4_lib4+0x379>
lea    -0x3(%rdi),%r10d
shl    $0x2,%edx
movslq %edx,%r11
shl    $0x2,%r9d
movslq %r9d,%r9
shl    $0x2,%ebp
movslq %ebp,%rdx
movapd %xmm8,%xmm4
unpcklpd %xmm8,%xmm4
movapd %xmm9,%xmm5
unpcklpd %xmm9,%xmm5
movapd %xmm2,%xmm6
unpcklpd %xmm2,%xmm6
shl    $0x3,%r11
shl    $0x3,%r9
shl    $0x3,%rdx
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
movupd (%rsi),%xmm0
movupd 0x10(%rsi),%xmm7
mulpd  %xmm4,%xmm0
movupd (%r8),%xmm1
addpd  %xmm0,%xmm1
movupd 0x10(%r8),%xmm0
mulpd  %xmm4,%xmm7
addpd  %xmm0,%xmm7
movupd %xmm1,(%rax)
movupd %xmm7,0x10(%rax)
movupd 0x20(%rsi),%xmm0
movupd 0x30(%rsi),%xmm1
mulpd  %xmm5,%xmm0
movupd 0x20(%r8),%xmm7
addpd  %xmm0,%xmm7
movupd 0x30(%r8),%xmm0
mulpd  %xmm5,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm7,0x20(%rax)
movupd %xmm1,0x30(%rax)
movupd 0x40(%rsi),%xmm0
movupd 0x50(%rsi),%xmm1
mulpd  %xmm6,%xmm0
movupd 0x40(%r8),%xmm7
addpd  %xmm0,%xmm7
movupd 0x50(%r8),%xmm0
mulpd  %xmm6,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm7,0x40(%rax)
movupd %xmm1,0x50(%rax)
movupd 0x60(%rsi),%xmm0
movupd 0x70(%rsi),%xmm1
mulpd  %xmm3,%xmm0
movupd 0x60(%r8),%xmm7
addpd  %xmm0,%xmm7
movupd 0x70(%r8),%xmm0
mulpd  %xmm3,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm7,0x60(%rax)
movupd %xmm1,0x70(%rax)
add    $0x4,%ecx
add    %r11,%rsi
add    %r9,%r8
add    %rdx,%rax
cmp    %r10d,%ecx
jl     13a0 <kernel_dgemm_diag_right_4_lib4+0x2a0>
mov    %edi,%r10d
and    $0xfffffffc,%r10d
cmp    %edi,%r10d
jge    16b8 <kernel_dgemm_diag_right_4_lib4+0x5b8>
mov    %r10d,%r11d
not    %r11d
add    %edi,%r11d
je     158c <kernel_dgemm_diag_right_4_lib4+0x48c>
lea    (%rax,%r11,8),%rdx
add    $0x68,%rdx
lea    (%rsi,%r11,8),%rcx
add    $0x68,%rcx
lea    (%r8,%r11,8),%rbp
add    $0x68,%rbp
cmp    %rcx,%rax
setb   %r9b
cmp    %rdx,%rsi
setb   %bl
cmp    %rbp,%rax
setb   %cl
cmp    %rdx,%r8
setb   %dl
test   %bl,%r9b
jne    158c <kernel_dgemm_diag_right_4_lib4+0x48c>
and    %dl,%cl
jne    158c <kernel_dgemm_diag_right_4_lib4+0x48c>
add    $0x1,%r11
mov    %r11,%r14
and    $0xfffffffffffffffe,%r14
add    %r14d,%r10d
lea    (%rsi,%r14,8),%r9
lea    (%r8,%r14,8),%rcx
lea    (%rax,%r14,8),%rdx
movapd %xmm8,%xmm4
unpcklpd %xmm8,%xmm4
movapd %xmm9,%xmm5
unpcklpd %xmm9,%xmm5
movapd %xmm2,%xmm6
unpcklpd %xmm2,%xmm6
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movupd (%rsi,%rbx,8),%xmm0
mulpd  %xmm4,%xmm0
movupd (%r8,%rbx,8),%xmm7
addpd  %xmm0,%xmm7
movupd %xmm7,(%rax,%rbx,8)
movupd 0x20(%rsi,%rbx,8),%xmm0
mulpd  %xmm5,%xmm0
movupd 0x20(%r8,%rbx,8),%xmm7
addpd  %xmm0,%xmm7
movupd %xmm7,0x20(%rax,%rbx,8)
movupd 0x40(%rsi,%rbx,8),%xmm0
mulpd  %xmm6,%xmm0
movupd 0x40(%r8,%rbx,8),%xmm7
addpd  %xmm0,%xmm7
movupd %xmm7,0x40(%rax,%rbx,8)
movupd 0x60(%rsi,%rbx,8),%xmm0
movupd 0x60(%r8,%rbx,8),%xmm7
mulpd  %xmm3,%xmm0
addpd  %xmm7,%xmm0
movupd %xmm0,0x60(%rax,%rbx,8)
add    $0x2,%rbx
cmp    %rbx,%r14
jne    1510 <kernel_dgemm_diag_right_4_lib4+0x410>
cmp    %r14,%r11
jne    1595 <kernel_dgemm_diag_right_4_lib4+0x495>
jmp    16b8 <kernel_dgemm_diag_right_4_lib4+0x5b8>
mov    %rsi,%r9
mov    %r8,%rcx
mov    %rax,%rdx
sub    %r10d,%edi
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movsd  (%r9,%rax,8),%xmm0
mulsd  %xmm8,%xmm0
addsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,(%rdx,%rax,8)
movsd  0x20(%r9,%rax,8),%xmm0
mulsd  %xmm9,%xmm0
addsd  0x20(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x20(%rdx,%rax,8)
movsd  0x40(%r9,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x40(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x40(%rdx,%rax,8)
movsd  0x60(%r9,%rax,8),%xmm0
mulsd  %xmm3,%xmm0
addsd  0x60(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x60(%rdx,%rax,8)
add    $0x1,%rax
cmp    %eax,%edi
jne    15a0 <kernel_dgemm_diag_right_4_lib4+0x4a0>
jmp    16b8 <kernel_dgemm_diag_right_4_lib4+0x5b8>
xor    %ecx,%ecx
test   $0x1,%r10b
je     164e <kernel_dgemm_diag_right_4_lib4+0x54e>
movupd (%rsi,%rcx,8),%xmm7
mulpd  %xmm7,%xmm6
movupd %xmm6,(%rax,%rcx,8)
movupd 0x20(%rsi,%rcx,8),%xmm6
mulpd  %xmm6,%xmm5
movupd %xmm5,0x20(%rax,%rcx,8)
movupd 0x40(%rsi,%rcx,8),%xmm5
mulpd  %xmm5,%xmm4
movupd %xmm4,0x40(%rax,%rcx,8)
movupd 0x60(%rsi,%rcx,8),%xmm4
mulpd  %xmm3,%xmm4
movupd %xmm4,0x60(%rax,%rcx,8)
cmp    %r8,%rdx
je     16b8 <kernel_dgemm_diag_right_4_lib4+0x5b8>
add    %r8d,%r9d
lea    (%rsi,%r8,8),%rsi
lea    (%rax,%r8,8),%rax
sub    %r9d,%edi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%rsi,%rcx,8),%xmm0
mulsd  %xmm8,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x20(%rsi,%rcx,8),%xmm0
mulsd  %xmm9,%xmm0
movsd  %xmm0,0x20(%rax,%rcx,8)
movsd  0x40(%rsi,%rcx,8),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x40(%rax,%rcx,8)
movsd  0x60(%rsi,%rcx,8),%xmm0
mulsd  %xmm3,%xmm0
movsd  %xmm0,0x60(%rax,%rcx,8)
add    $0x1,%rcx
cmp    %ecx,%edi
jne    1670 <kernel_dgemm_diag_right_4_lib4+0x570>
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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