void kernel_dgemm_diag_right_2_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, c_0, c_1, c_2, c_3;
  if (alg == -1) {
    b_0 = -B[0];
    b_1 = -B[1];
  } else {
    b_0 = B[0];
    b_1 = B[1];
  }
  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 += 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 += 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 += 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 += 1;
      C += 1;
      D += 1;
    }
  }
}


x86 assembly (clang, -O0):
<kernel_dgemm_diag_right_2_lib4>:
push   %rbp
mov    %rsp,%rbp
push   %rax
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     1134 <kernel_dgemm_diag_right_2_lib4+0x34>
jmp    1714 <kernel_dgemm_diag_right_2_lib4+0x614>
movl   $0x4,-0x30(%rbp)
cmpl   $0xffffffff,0x20(%rbp)
jne    1193 <kernel_dgemm_diag_right_2_lib4+0x93>
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)
jmp    11ae <kernel_dgemm_diag_right_2_lib4+0xae>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
cmpl   $0x0,0x20(%rbp)
jne    1400 <kernel_dgemm_diag_right_2_lib4+0x300>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1370 <kernel_dgemm_diag_right_2_lib4+0x270>
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,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x88(%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,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%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    11bf <kernel_dgemm_diag_right_2_lib4+0xbf>
jmp    1375 <kernel_dgemm_diag_right_2_lib4+0x275>
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    13fb <kernel_dgemm_diag_right_2_lib4+0x2fb>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%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,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%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    1375 <kernel_dgemm_diag_right_2_lib4+0x275>
jmp    1714 <kernel_dgemm_diag_right_2_lib4+0x614>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1657 <kernel_dgemm_diag_right_2_lib4+0x557>
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,-0x70(%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,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x88(%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,-0x70(%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,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%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    1407 <kernel_dgemm_diag_right_2_lib4+0x307>
jmp    165c <kernel_dgemm_diag_right_2_lib4+0x55c>
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    170f <kernel_dgemm_diag_right_2_lib4+0x60f>
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,-0x70(%rbp)
movsd  -0x70(%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,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%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    165c <kernel_dgemm_diag_right_2_lib4+0x55c>
jmp    1714 <kernel_dgemm_diag_right_2_lib4+0x614>
add    $0x8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemm_diag_right_2_lib4>:
push   %rbp
push   %rbx
test   %edi,%edi
jle    1646 <kernel_dgemm_diag_right_2_lib4+0x546>
mov    0x28(%rsp),%ebx
mov    0x20(%rsp),%ebp
mov    0x18(%rsp),%rax
movsd  (%rcx),%xmm0
cmp    $0xffffffff,%ebx
je     127d <kernel_dgemm_diag_right_2_lib4+0x17d>
movsd  0x8(%rcx),%xmm1
test   %ebx,%ebx
jne    1292 <kernel_dgemm_diag_right_2_lib4+0x192>
xor    %r10d,%r10d
cmp    $0x4,%edi
jb     11bb <kernel_dgemm_diag_right_2_lib4+0xbb>
lea    -0x3(%rdi),%r8d
shl    $0x2,%edx
movslq %edx,%rdx
shl    $0x2,%ebp
movslq %ebp,%rbx
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
movapd %xmm1,%xmm3
unpcklpd %xmm1,%xmm3
shl    $0x3,%rdx
shl    $0x3,%rbx
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
movupd (%rsi),%xmm4
movupd 0x10(%rsi),%xmm5
mulpd  %xmm2,%xmm4
mulpd  %xmm2,%xmm5
movupd %xmm4,(%rax)
movupd %xmm5,0x10(%rax)
movupd 0x20(%rsi),%xmm4
movupd 0x30(%rsi),%xmm5
mulpd  %xmm3,%xmm4
mulpd  %xmm3,%xmm5
movupd %xmm4,0x20(%rax)
movupd %xmm5,0x30(%rax)
add    $0x4,%ecx
add    %rdx,%rsi
add    %rbx,%rax
cmp    %r8d,%ecx
jl     1170 <kernel_dgemm_diag_right_2_lib4+0x70>
mov    %edi,%r10d
and    $0xfffffffc,%r10d
cmp    %edi,%r10d
jge    1646 <kernel_dgemm_diag_right_2_lib4+0x546>
mov    %r10d,%edx
not    %edx
add    %edi,%edx
je     15c1 <kernel_dgemm_diag_right_2_lib4+0x4c1>
lea    (%rsi,%rdx,8),%rcx
add    $0x28,%rcx
cmp    %rcx,%rax
jae    11ef <kernel_dgemm_diag_right_2_lib4+0xef>
lea    (%rax,%rdx,8),%rcx
add    $0x28,%rcx
cmp    %rcx,%rsi
jb     15c1 <kernel_dgemm_diag_right_2_lib4+0x4c1>
add    $0x1,%rdx
mov    %rdx,%r8
and    $0xfffffffffffffffe,%r8
movapd %xmm0,%xmm3
unpcklpd %xmm0,%xmm3
movapd %xmm1,%xmm2
unpcklpd %xmm1,%xmm2
lea    -0x2(%r8),%rcx
mov    %rcx,%r9
shr    %r9
add    $0x1,%r9
test   %rcx,%rcx
je     1587 <kernel_dgemm_diag_right_2_lib4+0x487>
mov    %r9,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
movupd (%rsi,%rbx,8),%xmm4
mulpd  %xmm3,%xmm4
movupd %xmm4,(%rax,%rbx,8)
movupd 0x20(%rsi,%rbx,8),%xmm4
mulpd  %xmm2,%xmm4
movupd %xmm4,0x20(%rax,%rbx,8)
movupd 0x10(%rsi,%rbx,8),%xmm4
mulpd  %xmm3,%xmm4
movupd %xmm4,0x10(%rax,%rbx,8)
movupd 0x30(%rsi,%rbx,8),%xmm4
mulpd  %xmm2,%xmm4
movupd %xmm4,0x30(%rax,%rbx,8)
add    $0x4,%rbx
add    $0xfffffffffffffffe,%rcx
jne    1230 <kernel_dgemm_diag_right_2_lib4+0x130>
jmp    1589 <kernel_dgemm_diag_right_2_lib4+0x489>
movapd 0xd7b(%rip),%xmm2
xorpd  %xmm2,%xmm0
movsd  0x8(%rcx),%xmm1
xorpd  %xmm2,%xmm1
xor    %r10d,%r10d
cmp    $0x4,%edi
jb     1355 <kernel_dgemm_diag_right_2_lib4+0x255>
lea    -0x3(%rdi),%r10d
shl    $0x2,%edx
movslq %edx,%r11
shl    $0x2,%r9d
movslq %r9d,%rcx
shl    $0x2,%ebp
movslq %ebp,%rdx
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
movapd %xmm1,%xmm3
unpcklpd %xmm1,%xmm3
shl    $0x3,%r11
shl    $0x3,%rcx
shl    $0x3,%rdx
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd (%rsi),%xmm4
movupd 0x10(%rsi),%xmm5
mulpd  %xmm2,%xmm4
movupd (%r8),%xmm6
addpd  %xmm4,%xmm6
movupd 0x10(%r8),%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm4,%xmm5
movupd %xmm6,(%rax)
movupd %xmm5,0x10(%rax)
movupd 0x20(%rsi),%xmm4
movupd 0x30(%rsi),%xmm5
mulpd  %xmm3,%xmm4
movupd 0x20(%r8),%xmm6
addpd  %xmm4,%xmm6
movupd 0x30(%r8),%xmm4
mulpd  %xmm3,%xmm5
addpd  %xmm4,%xmm5
movupd %xmm6,0x20(%rax)
movupd %xmm5,0x30(%rax)
add    $0x4,%ebx
add    %r11,%rsi
add    %rcx,%r8
add    %rdx,%rax
cmp    %r10d,%ebx
jl     12e0 <kernel_dgemm_diag_right_2_lib4+0x1e0>
mov    %edi,%r10d
and    $0xfffffffc,%r10d
cmp    %edi,%r10d
jge    1646 <kernel_dgemm_diag_right_2_lib4+0x546>
mov    %r10d,%edx
not    %edx
add    %edi,%edx
je     14b4 <kernel_dgemm_diag_right_2_lib4+0x3b4>
lea    (%rax,%rdx,8),%rbp
add    $0x28,%rbp
lea    (%rsi,%rdx,8),%rcx
add    $0x28,%rcx
lea    (%r8,%rdx,8),%rbx
add    $0x28,%rbx
cmp    %rcx,%rax
setb   %r9b
cmp    %rbp,%rsi
setb   %r11b
cmp    %rbx,%rax
setb   %cl
cmp    %rbp,%r8
setb   %bl
test   %r11b,%r9b
jne    14b4 <kernel_dgemm_diag_right_2_lib4+0x3b4>
and    %bl,%cl
jne    14b4 <kernel_dgemm_diag_right_2_lib4+0x3b4>
add    $0x1,%rdx
mov    %rdx,%r9
and    $0xfffffffffffffffe,%r9
movapd %xmm0,%xmm3
unpcklpd %xmm0,%xmm3
movapd %xmm1,%xmm2
unpcklpd %xmm1,%xmm2
lea    -0x2(%r9),%rcx
mov    %rcx,%r11
shr    %r11
add    $0x1,%r11
test   %rcx,%rcx
je     1576 <kernel_dgemm_diag_right_2_lib4+0x476>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %ecx,%ecx
nopl   0x0(%rax)
movupd (%rsi,%rcx,8),%xmm4
movupd (%r8,%rcx,8),%xmm5
mulpd  %xmm3,%xmm4
addpd  %xmm5,%xmm4
movupd %xmm4,(%rax,%rcx,8)
movupd 0x20(%rsi,%rcx,8),%xmm4
movupd 0x20(%r8,%rcx,8),%xmm5
mulpd  %xmm2,%xmm4
addpd  %xmm5,%xmm4
movupd %xmm4,0x20(%rax,%rcx,8)
movupd 0x10(%rsi,%rcx,8),%xmm4
movupd 0x10(%r8,%rcx,8),%xmm5
mulpd  %xmm3,%xmm4
addpd  %xmm5,%xmm4
movupd %xmm4,0x10(%rax,%rcx,8)
movupd 0x30(%rsi,%rcx,8),%xmm4
movupd 0x30(%r8,%rcx,8),%xmm5
mulpd  %xmm2,%xmm4
addpd  %xmm5,%xmm4
movupd %xmm4,0x30(%rax,%rcx,8)
add    $0x4,%rcx
add    $0xfffffffffffffffe,%rbx
jne    13f0 <kernel_dgemm_diag_right_2_lib4+0x2f0>
test   $0x1,%r11b
je     149c <kernel_dgemm_diag_right_2_lib4+0x39c>
movupd (%rsi,%rcx,8),%xmm4
movupd (%r8,%rcx,8),%xmm5
mulpd  %xmm3,%xmm4
addpd  %xmm5,%xmm4
movupd %xmm4,(%rax,%rcx,8)
movupd 0x20(%rsi,%rcx,8),%xmm3
movupd 0x20(%r8,%rcx,8),%xmm4
mulpd  %xmm2,%xmm3
addpd  %xmm4,%xmm3
movupd %xmm3,0x20(%rax,%rcx,8)
cmp    %r9,%rdx
je     1646 <kernel_dgemm_diag_right_2_lib4+0x546>
add    %r9d,%r10d
lea    (%rsi,%r9,8),%rsi
lea    (%r8,%r9,8),%r8
lea    (%rax,%r9,8),%rax
mov    %edi,%edx
sub    %r10d,%edx
mov    %r10d,%ecx
not    %ecx
test   $0x1,%dl
je     14f8 <kernel_dgemm_diag_right_2_lib4+0x3f8>
movsd  (%rsi),%xmm2
mulsd  %xmm0,%xmm2
addsd  (%r8),%xmm2
movsd  %xmm2,(%rax)
movsd  0x20(%rsi),%xmm2
mulsd  %xmm1,%xmm2
addsd  0x20(%r8),%xmm2
movsd  %xmm2,0x20(%rax)
add    $0x8,%rsi
add    $0x8,%r8
add    $0x8,%rax
add    $0x1,%r10d
add    %edi,%ecx
je     1646 <kernel_dgemm_diag_right_2_lib4+0x546>
sub    %r10d,%edi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rsi,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
addsd  (%r8,%rcx,8),%xmm2
movsd  %xmm2,(%rax,%rcx,8)
movsd  0x20(%rsi,%rcx,8),%xmm2
mulsd  %xmm1,%xmm2
addsd  0x20(%r8,%rcx,8),%xmm2
movsd  %xmm2,0x20(%rax,%rcx,8)
movsd  0x8(%rsi,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
addsd  0x8(%r8,%rcx,8),%xmm2
movsd  %xmm2,0x8(%rax,%rcx,8)
movsd  0x28(%rsi,%rcx,8),%xmm2
mulsd  %xmm1,%xmm2
addsd  0x28(%r8,%rcx,8),%xmm2
movsd  %xmm2,0x28(%rax,%rcx,8)
add    $0x2,%rcx
cmp    %ecx,%edi
jne    1510 <kernel_dgemm_diag_right_2_lib4+0x410>
jmp    1646 <kernel_dgemm_diag_right_2_lib4+0x546>
xor    %ecx,%ecx
test   $0x1,%r11b
jne    1469 <kernel_dgemm_diag_right_2_lib4+0x369>
jmp    149c <kernel_dgemm_diag_right_2_lib4+0x39c>
xor    %ebx,%ebx
test   $0x1,%r9b
je     15ad <kernel_dgemm_diag_right_2_lib4+0x4ad>
movupd (%rsi,%rbx,8),%xmm4
mulpd  %xmm4,%xmm3
movupd %xmm3,(%rax,%rbx,8)
movupd 0x20(%rsi,%rbx,8),%xmm3
mulpd  %xmm3,%xmm2
movupd %xmm2,0x20(%rax,%rbx,8)
cmp    %r8,%rdx
je     1646 <kernel_dgemm_diag_right_2_lib4+0x546>
add    %r8d,%r10d
lea    (%rsi,%r8,8),%rsi
lea    (%rax,%r8,8),%rax
mov    %edi,%edx
sub    %r10d,%edx
mov    %r10d,%ecx
not    %ecx
test   $0x1,%dl
je     15f6 <kernel_dgemm_diag_right_2_lib4+0x4f6>
movsd  (%rsi),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%rax)
movsd  0x20(%rsi),%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rax)
add    $0x8,%rsi
add    $0x8,%rax
add    $0x1,%r10d
add    %edi,%ecx
je     1646 <kernel_dgemm_diag_right_2_lib4+0x546>
sub    %r10d,%edi
xor    %ecx,%ecx
nop
movsd  (%rsi,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%rax,%rcx,8)
movsd  0x20(%rsi,%rcx,8),%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rax,%rcx,8)
movsd  0x8(%rsi,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x8(%rax,%rcx,8)
movsd  0x28(%rsi,%rcx,8),%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x28(%rax,%rcx,8)
add    $0x2,%rcx
cmp    %ecx,%edi
jne    1600 <kernel_dgemm_diag_right_2_lib4+0x500>
pop    %rbx
pop    %rbp
ret

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

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