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_0;
      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  -0x60(%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    1636 <kernel_dgemm_diag_right_2_lib4+0x536>
mov    0x28(%rsp),%ebx
mov    0x20(%rsp),%ebp
mov    0x18(%rsp),%rax
movsd  (%rcx),%xmm0
cmp    $0xffffffff,%ebx
je     126d <kernel_dgemm_diag_right_2_lib4+0x16d>
movsd  0x8(%rcx),%xmm1
test   %ebx,%ebx
jne    1282 <kernel_dgemm_diag_right_2_lib4+0x182>
xor    %r10d,%r10d
cmp    $0x4,%edi
jb     11ab <kernel_dgemm_diag_right_2_lib4+0xab>
lea    -0x3(%rdi),%r8d
shl    $0x2,%edx
movslq %edx,%rdx
shl    $0x2,%ebp
movslq %ebp,%rbx
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
unpcklpd %xmm1,%xmm1
shl    $0x3,%rdx
shl    $0x3,%rbx
xor    %ecx,%ecx
nop
movupd (%rsi),%xmm3
movupd 0x10(%rsi),%xmm4
mulpd  %xmm2,%xmm3
mulpd  %xmm2,%xmm4
movupd %xmm3,(%rax)
movupd %xmm4,0x10(%rax)
movupd 0x20(%rsi),%xmm3
movupd 0x30(%rsi),%xmm4
mulpd  %xmm1,%xmm3
mulpd  %xmm1,%xmm4
movupd %xmm3,0x20(%rax)
movupd %xmm4,0x30(%rax)
add    $0x4,%ecx
add    %rdx,%rsi
add    %rbx,%rax
cmp    %r8d,%ecx
jl     1160 <kernel_dgemm_diag_right_2_lib4+0x60>
mov    %edi,%r10d
and    $0xfffffffc,%r10d
cmp    %edi,%r10d
jge    1636 <kernel_dgemm_diag_right_2_lib4+0x536>
mov    %r10d,%edx
not    %edx
add    %edi,%edx
je     15b1 <kernel_dgemm_diag_right_2_lib4+0x4b1>
lea    (%rsi,%rdx,8),%rcx
add    $0x28,%rcx
cmp    %rcx,%rax
jae    11df <kernel_dgemm_diag_right_2_lib4+0xdf>
lea    (%rax,%rdx,8),%rcx
add    $0x28,%rcx
cmp    %rcx,%rsi
jb     15b1 <kernel_dgemm_diag_right_2_lib4+0x4b1>
add    $0x1,%rdx
mov    %rdx,%r8
and    $0xfffffffffffffffe,%r8
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x2(%r8),%rcx
mov    %rcx,%r9
shr    %r9
add    $0x1,%r9
test   %rcx,%rcx
je     1577 <kernel_dgemm_diag_right_2_lib4+0x477>
mov    %r9,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movupd (%rsi,%rbx,8),%xmm2
mulpd  %xmm1,%xmm2
movupd %xmm2,(%rax,%rbx,8)
movupd 0x20(%rsi,%rbx,8),%xmm2
mulpd  %xmm1,%xmm2
movupd %xmm2,0x20(%rax,%rbx,8)
movupd 0x10(%rsi,%rbx,8),%xmm2
mulpd  %xmm1,%xmm2
movupd %xmm2,0x10(%rax,%rbx,8)
movupd 0x30(%rsi,%rbx,8),%xmm2
mulpd  %xmm1,%xmm2
movupd %xmm2,0x30(%rax,%rbx,8)
add    $0x4,%rbx
add    $0xfffffffffffffffe,%rcx
jne    1220 <kernel_dgemm_diag_right_2_lib4+0x120>
jmp    1579 <kernel_dgemm_diag_right_2_lib4+0x479>
movapd 0xd8b(%rip),%xmm2
xorpd  %xmm2,%xmm0
movsd  0x8(%rcx),%xmm1
xorpd  %xmm2,%xmm1
xor    %r10d,%r10d
cmp    $0x4,%edi
jb     1345 <kernel_dgemm_diag_right_2_lib4+0x245>
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     12d0 <kernel_dgemm_diag_right_2_lib4+0x1d0>
mov    %edi,%r10d
and    $0xfffffffc,%r10d
cmp    %edi,%r10d
jge    1636 <kernel_dgemm_diag_right_2_lib4+0x536>
mov    %r10d,%edx
not    %edx
add    %edi,%edx
je     14a4 <kernel_dgemm_diag_right_2_lib4+0x3a4>
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    14a4 <kernel_dgemm_diag_right_2_lib4+0x3a4>
and    %bl,%cl
jne    14a4 <kernel_dgemm_diag_right_2_lib4+0x3a4>
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     1566 <kernel_dgemm_diag_right_2_lib4+0x466>
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    13e0 <kernel_dgemm_diag_right_2_lib4+0x2e0>
test   $0x1,%r11b
je     148c <kernel_dgemm_diag_right_2_lib4+0x38c>
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     1636 <kernel_dgemm_diag_right_2_lib4+0x536>
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     14e8 <kernel_dgemm_diag_right_2_lib4+0x3e8>
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     1636 <kernel_dgemm_diag_right_2_lib4+0x536>
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    1500 <kernel_dgemm_diag_right_2_lib4+0x400>
jmp    1636 <kernel_dgemm_diag_right_2_lib4+0x536>
xor    %ecx,%ecx
test   $0x1,%r11b
jne    1459 <kernel_dgemm_diag_right_2_lib4+0x359>
jmp    148c <kernel_dgemm_diag_right_2_lib4+0x38c>
xor    %ebx,%ebx
test   $0x1,%r9b
je     159d <kernel_dgemm_diag_right_2_lib4+0x49d>
movupd (%rsi,%rbx,8),%xmm2
mulpd  %xmm1,%xmm2
movupd %xmm2,(%rax,%rbx,8)
movupd 0x20(%rsi,%rbx,8),%xmm2
mulpd  %xmm1,%xmm2
movupd %xmm2,0x20(%rax,%rbx,8)
cmp    %r8,%rdx
je     1636 <kernel_dgemm_diag_right_2_lib4+0x536>
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     15e6 <kernel_dgemm_diag_right_2_lib4+0x4e6>
movsd  (%rsi),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rax)
movsd  0x20(%rsi),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rax)
add    $0x8,%rsi
add    $0x8,%rax
add    $0x1,%r10d
add    %edi,%ecx
je     1636 <kernel_dgemm_diag_right_2_lib4+0x536>
sub    %r10d,%edi
xor    %ecx,%ecx
nop
movsd  (%rsi,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rax,%rcx,8)
movsd  0x20(%rsi,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rax,%rcx,8)
movsd  0x8(%rsi,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rax,%rcx,8)
movsd  0x28(%rsi,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x28(%rax,%rcx,8)
add    $0x2,%rcx
cmp    %ecx,%edi
jne    15f0 <kernel_dgemm_diag_right_2_lib4+0x4f0>
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* %25
%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 %440, 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 %224
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 %366
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 %170
59: ; preds = %170
%60 = and i32 %0, -4
br label %61
61: ; preds = %59, %43
%62 = phi double* [ %6, %43 ], [ %197, %59 ]
%63 = phi double* [ %1, %43 ], [ %196, %59 ]
%64 = phi i32 [ 0, %43 ], [ %60, %59 ]
%65 = icmp slt i32 %64, %0
br i1 %65, label %66, label %440
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 %146, 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 %146, 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 = add nsw i64 %83, -2
%91 = lshr exact i64 %90, 1
%92 = add nuw i64 %91, 1
%93 = and i64 %92, 1
%94 = icmp eq i64 %90, 0
br i1 %94, label %128, label %95
95: ; preds = %82
%96 = and i64 %92, -2
br label %97
97: ; preds = %97, %95
%98 = phi i64 [ 0, %95 ], [ %125, %97 ]
%99 = phi i64 [ 0, %95 ], [ %126, %97 ]
%100 = getelementptr double, double* %63, i64 %98
%101 = getelementptr double, double* %62, i64 %98
%102 = bitcast double* %100 to <2 x double>*
%103 = load <2 x double>, <2 x double>* %102
%104 = fmul <2 x double> %89, %103
%105 = bitcast double* %101 to <2 x double>*
store <2 x double> %104, <2 x double>* %105
%106 = getelementptr inbounds double, double* %100, i64 4
%107 = bitcast double* %106 to <2 x double>*
%108 = load <2 x double>, <2 x double>* %107
%109 = fmul <2 x double> %89, %108
%110 = getelementptr inbounds double, double* %101, i64 4
%111 = bitcast double* %110 to <2 x double>*
store <2 x double> %109, <2 x double>* %111
%112 = or i64 %98, 2
%113 = getelementptr double, double* %63, i64 %112
%114 = getelementptr double, double* %62, i64 %112
%115 = bitcast double* %113 to <2 x double>*
%116 = load <2 x double>, <2 x double>* %115
%117 = fmul <2 x double> %89, %116
%118 = bitcast double* %114 to <2 x double>*
store <2 x double> %117, <2 x double>* %118
%119 = getelementptr inbounds double, double* %113, i64 4
%120 = bitcast double* %119 to <2 x double>*
%121 = load <2 x double>, <2 x double>* %120
%122 = fmul <2 x double> %89, %121
%123 = getelementptr inbounds double, double* %114, i64 4
%124 = bitcast double* %123 to <2 x double>*
store <2 x double> %122, <2 x double>* %124
%125 = add nuw i64 %98, 4
%126 = add nuw i64 %99, 2
%127 = icmp eq i64 %126, %96
br i1 %127, label %128, label %97
128: ; preds = %97, %82
%129 = phi i64 [ 0, %82 ], [ %125, %97 ]
%130 = icmp eq i64 %93, 0
br i1 %130, label %144, label %131
131: ; preds = %128
%132 = getelementptr double, double* %63, i64 %129
%133 = getelementptr double, double* %62, i64 %129
%134 = bitcast double* %132 to <2 x double>*
%135 = load <2 x double>, <2 x double>* %134
%136 = fmul <2 x double> %89, %135
%137 = bitcast double* %133 to <2 x double>*
store <2 x double> %136, <2 x double>* %137
%138 = getelementptr inbounds double, double* %132, i64 4
%139 = bitcast double* %138 to <2 x double>*
%140 = load <2 x double>, <2 x double>* %139
%141 = fmul <2 x double> %89, %140
%142 = getelementptr inbounds double, double* %133, i64 4
%143 = bitcast double* %142 to <2 x double>*
store <2 x double> %141, <2 x double>* %143
br label %144
144: ; preds = %128, %131
%145 = icmp eq i64 %70, %83
br i1 %145, label %440, label %146
146: ; preds = %72, %66, %144
%147 = phi i32 [ %64, %72 ], [ %64, %66 ], [ %85, %144 ]
%148 = phi double* [ %63, %72 ], [ %63, %66 ], [ %86, %144 ]
%149 = phi double* [ %62, %72 ], [ %62, %66 ], [ %87, %144 ]
%150 = sub i32 %0, %147
%151 = xor i32 %147, -1
%152 = and i32 %150, 1
%153 = icmp eq i32 %152, 0
br i1 %153, label %164, label %154
154: ; preds = %146
%155 = load double, double* %148
%156 = fmul double %13, %155
store double %156, double* %149
%157 = getelementptr inbounds double, double* %148, i64 4
%158 = load double, double* %157
%159 = fmul double %13, %158
%160 = getelementptr inbounds double, double* %149, i64 4
store double %159, double* %160
%161 = getelementptr inbounds double, double* %148, i64 1
%162 = getelementptr inbounds double, double* %149, i64 1
%163 = add nuw nsw i32 %147, 1
br label %164
164: ; preds = %154, %146
%165 = phi i32 [ %147, %146 ], [ %163, %154 ]
%166 = phi double* [ %148, %146 ], [ %161, %154 ]
%167 = phi double* [ %149, %146 ], [ %162, %154 ]
%168 = sub i32 0, %0
%169 = icmp eq i32 %151, %168
br i1 %169, label %440, label %200
170: ; preds = %46, %170
%171 = phi i32 [ 0, %46 ], [ %198, %170 ]
%172 = phi double* [ %1, %46 ], [ %196, %170 ]
%173 = phi double* [ %6, %46 ], [ %197, %170 ]
%174 = bitcast double* %172 to <2 x double>*
%175 = load <2 x double>, <2 x double>* %174
%176 = getelementptr inbounds double, double* %172, i64 2
%177 = bitcast double* %176 to <2 x double>*
%178 = load <2 x double>, <2 x double>* %177
%179 = fmul <2 x double> %52, %175
%180 = fmul <2 x double> %54, %178
%181 = bitcast double* %173 to <2 x double>*
store <2 x double> %179, <2 x double>* %181
%182 = getelementptr inbounds double, double* %173, i64 2
%183 = bitcast double* %182 to <2 x double>*
store <2 x double> %180, <2 x double>* %183
%184 = getelementptr inbounds double, double* %172, i64 4
%185 = bitcast double* %184 to <2 x double>*
%186 = load <2 x double>, <2 x double>* %185
%187 = getelementptr inbounds double, double* %172, i64 6
%188 = bitcast double* %187 to <2 x double>*
%189 = load <2 x double>, <2 x double>* %188
%190 = fmul <2 x double> %56, %186
%191 = fmul <2 x double> %58, %189
%192 = getelementptr inbounds double, double* %173, i64 4
%193 = bitcast double* %192 to <2 x double>*
store <2 x double> %190, <2 x double>* %193
%194 = getelementptr inbounds double, double* %173, i64 6
%195 = bitcast double* %194 to <2 x double>*
store <2 x double> %191, <2 x double>* %195
%196 = getelementptr inbounds double, double* %172, i64 %48
%197 = getelementptr inbounds double, double* %173, i64 %50
%198 = add nuw nsw i32 %171, 4
%199 = icmp slt i32 %198, %44
br i1 %199, label %170, label %59
200: ; preds = %164, %200
%201 = phi i32 [ %220, %200 ], [ %165, %164 ]
%202 = phi double* [ %218, %200 ], [ %166, %164 ]
%203 = phi double* [ %219, %200 ], [ %167, %164 ]
%204 = load double, double* %202
%205 = fmul double %13, %204
store double %205, double* %203
%206 = getelementptr inbounds double, double* %202, i64 4
%207 = load double, double* %206
%208 = fmul double %13, %207
%209 = getelementptr inbounds double, double* %203, i64 4
store double %208, double* %209
%210 = getelementptr inbounds double, double* %202, i64 1
%211 = getelementptr inbounds double, double* %203, i64 1
%212 = load double, double* %210
%213 = fmul double %13, %212
store double %213, double* %211
%214 = getelementptr inbounds double, double* %202, i64 5
%215 = load double, double* %214
%216 = fmul double %13, %215
%217 = getelementptr inbounds double, double* %203, i64 5
store double %216, double* %217
%218 = getelementptr inbounds double, double* %202, i64 2
%219 = getelementptr inbounds double, double* %203, i64 2
%220 = add nuw nsw i32 %201, 2
%221 = icmp eq i32 %220, %0
br i1 %221, label %440, label %200
222: ; preds = %366
%223 = and i32 %0, -4
br label %224
224: ; preds = %222, %23
%225 = phi double* [ %6, %23 ], [ %406, %222 ]
%226 = phi double* [ %4, %23 ], [ %405, %222 ]
%227 = phi double* [ %1, %23 ], [ %404, %222 ]
%228 = phi i32 [ 0, %23 ], [ %223, %222 ]
%229 = icmp slt i32 %228, %0
br i1 %229, label %230, label %440
230: ; preds = %224
%231 = xor i32 %228, -1
%232 = add i32 %231, %0
%233 = zext i32 %232 to i64
%234 = add nuw nsw i64 %233, 1
%235 = icmp eq i32 %232, 0
br i1 %235, label %336, label %236
236: ; preds = %230
%237 = xor i32 %228, -1
%238 = add i32 %237, %0
%239 = zext i32 %238 to i64
%240 = add nuw nsw i64 %239, 5
%241 = getelementptr double, double* %225, i64 %240
%242 = getelementptr double, double* %227, i64 %240
%243 = getelementptr double, double* %226, i64 %240
%244 = icmp ult double* %225, %242
%245 = icmp ult double* %227, %241
%246 = and i1 %244, %245
%247 = icmp ult double* %225, %243
%248 = icmp ult double* %226, %241
%249 = and i1 %247, %248
%250 = or i1 %246, %249
br i1 %250, label %336, label %251
251: ; preds = %236
%252 = and i64 %234, 8589934590
%253 = trunc i64 %252 to i32
%254 = add i32 %228, %253
%255 = getelementptr double, double* %227, i64 %252
%256 = getelementptr double, double* %226, i64 %252
%257 = getelementptr double, double* %225, i64 %252
%258 = insertelement <2 x double> poison, double %25, i64 0
%259 = shufflevector <2 x double> %258, <2 x double> poison, <2 x i32> zeroinitializer
%260 = insertelement <2 x double> poison, double %24, i64 0
%261 = shufflevector <2 x double> %260, <2 x double> poison, <2 x i32> zeroinitializer
%262 = add nsw i64 %252, -2
%263 = lshr exact i64 %262, 1
%264 = add nuw i64 %263, 1
%265 = and i64 %264, 1
%266 = icmp eq i64 %262, 0
br i1 %266, label %312, label %267
267: ; preds = %251
%268 = and i64 %264, -2
br label %269
269: ; preds = %269, %267
%270 = phi i64 [ 0, %267 ], [ %309, %269 ]
%271 = phi i64 [ 0, %267 ], [ %310, %269 ]
%272 = getelementptr double, double* %227, i64 %270
%273 = getelementptr double, double* %226, i64 %270
%274 = getelementptr double, double* %225, i64 %270
%275 = bitcast double* %272 to <2 x double>*
%276 = load <2 x double>, <2 x double>* %275
%277 = bitcast double* %273 to <2 x double>*
%278 = load <2 x double>, <2 x double>* %277
%279 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %276, <2 x double> %259, <2 x double> %278)
%280 = bitcast double* %274 to <2 x double>*
store <2 x double> %279, <2 x double>* %280
%281 = getelementptr inbounds double, double* %272, i64 4
%282 = bitcast double* %281 to <2 x double>*
%283 = load <2 x double>, <2 x double>* %282
%284 = getelementptr inbounds double, double* %273, i64 4
%285 = bitcast double* %284 to <2 x double>*
%286 = load <2 x double>, <2 x double>* %285
%287 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %283, <2 x double> %261, <2 x double> %286)
%288 = getelementptr inbounds double, double* %274, i64 4
%289 = bitcast double* %288 to <2 x double>*
store <2 x double> %287, <2 x double>* %289
%290 = or i64 %270, 2
%291 = getelementptr double, double* %227, i64 %290
%292 = getelementptr double, double* %226, i64 %290
%293 = getelementptr double, double* %225, i64 %290
%294 = bitcast double* %291 to <2 x double>*
%295 = load <2 x double>, <2 x double>* %294
%296 = bitcast double* %292 to <2 x double>*
%297 = load <2 x double>, <2 x double>* %296
%298 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %295, <2 x double> %259, <2 x double> %297)
%299 = bitcast double* %293 to <2 x double>*
store <2 x double> %298, <2 x double>* %299
%300 = getelementptr inbounds double, double* %291, i64 4
%301 = bitcast double* %300 to <2 x double>*
%302 = load <2 x double>, <2 x double>* %301
%303 = getelementptr inbounds double, double* %292, i64 4
%304 = bitcast double* %303 to <2 x double>*
%305 = load <2 x double>, <2 x double>* %304
%306 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %302, <2 x double> %261, <2 x double> %305)
%307 = getelementptr inbounds double, double* %293, i64 4
%308 = bitcast double* %307 to <2 x double>*
store <2 x double> %306, <2 x double>* %308
%309 = add nuw i64 %270, 4
%310 = add nuw i64 %271, 2
%311 = icmp eq i64 %310, %268
br i1 %311, label %312, label %269
312: ; preds = %269, %251
%313 = phi i64 [ 0, %251 ], [ %309, %269 ]
%314 = icmp eq i64 %265, 0
br i1 %314, label %334, label %315
315: ; preds = %312
%316 = getelementptr double, double* %227, i64 %313
%317 = getelementptr double, double* %226, i64 %313
%318 = getelementptr double, double* %225, i64 %313
%319 = bitcast double* %316 to <2 x double>*
%320 = load <2 x double>, <2 x double>* %319
%321 = bitcast double* %317 to <2 x double>*
%322 = load <2 x double>, <2 x double>* %321
%323 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %320, <2 x double> %259, <2 x double> %322)
%324 = bitcast double* %318 to <2 x double>*
store <2 x double> %323, <2 x double>* %324
%325 = getelementptr inbounds double, double* %316, i64 4
%326 = bitcast double* %325 to <2 x double>*
%327 = load <2 x double>, <2 x double>* %326
%328 = getelementptr inbounds double, double* %317, i64 4
%329 = bitcast double* %328 to <2 x double>*
%330 = load <2 x double>, <2 x double>* %329
%331 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %327, <2 x double> %261, <2 x double> %330)
%332 = getelementptr inbounds double, double* %318, i64 4
%333 = bitcast double* %332 to <2 x double>*
store <2 x double> %331, <2 x double>* %333
br label %334
334: ; preds = %312, %315
%335 = icmp eq i64 %234, %252
br i1 %335, label %440, label %336
336: ; preds = %236, %230, %334
%337 = phi i32 [ %228, %236 ], [ %228, %230 ], [ %254, %334 ]
%338 = phi double* [ %227, %236 ], [ %227, %230 ], [ %255, %334 ]
%339 = phi double* [ %226, %236 ], [ %226, %230 ], [ %256, %334 ]
%340 = phi double* [ %225, %236 ], [ %225, %230 ], [ %257, %334 ]
%341 = sub i32 %0, %337
%342 = xor i32 %337, -1
%343 = and i32 %341, 1
%344 = icmp eq i32 %343, 0
br i1 %344, label %359, label %345
345: ; preds = %336
%346 = load double, double* %338
%347 = load double, double* %339
%348 = tail call double @llvm.fmuladd.f64(double %346, double %25, double %347)
store double %348, double* %340
%349 = getelementptr inbounds double, double* %338, i64 4
%350 = load double, double* %349
%351 = getelementptr inbounds double, double* %339, i64 4
%352 = load double, double* %351
%353 = tail call double @llvm.fmuladd.f64(double %350, double %24, double %352)
%354 = getelementptr inbounds double, double* %340, i64 4
store double %353, double* %354
%355 = getelementptr inbounds double, double* %338, i64 1
%356 = getelementptr inbounds double, double* %339, i64 1
%357 = getelementptr inbounds double, double* %340, i64 1
%358 = add nuw nsw i32 %337, 1
br label %359
359: ; preds = %345, %336
%360 = phi i32 [ %337, %336 ], [ %358, %345 ]
%361 = phi double* [ %338, %336 ], [ %355, %345 ]
%362 = phi double* [ %339, %336 ], [ %356, %345 ]
%363 = phi double* [ %340, %336 ], [ %357, %345 ]
%364 = sub i32 0, %0
%365 = icmp eq i32 %342, %364
br i1 %365, label %440, label %409
366: ; preds = %28, %366
%367 = phi i32 [ 0, %28 ], [ %407, %366 ]
%368 = phi double* [ %1, %28 ], [ %404, %366 ]
%369 = phi double* [ %4, %28 ], [ %405, %366 ]
%370 = phi double* [ %6, %28 ], [ %406, %366 ]
%371 = bitcast double* %368 to <2 x double>*
%372 = load <2 x double>, <2 x double>* %371
%373 = getelementptr inbounds double, double* %368, i64 2
%374 = bitcast double* %373 to <2 x double>*
%375 = load <2 x double>, <2 x double>* %374
%376 = bitcast double* %369 to <2 x double>*
%377 = load <2 x double>, <2 x double>* %376
%378 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %372, <2 x double> %36, <2 x double> %377)
%379 = getelementptr inbounds double, double* %369, i64 2
%380 = bitcast double* %379 to <2 x double>*
%381 = load <2 x double>, <2 x double>* %380
%382 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %375, <2 x double> %38, <2 x double> %381)
%383 = bitcast double* %370 to <2 x double>*
store <2 x double> %378, <2 x double>* %383
%384 = getelementptr inbounds double, double* %370, i64 2
%385 = bitcast double* %384 to <2 x double>*
store <2 x double> %382, <2 x double>* %385
%386 = getelementptr inbounds double, double* %368, i64 4
%387 = bitcast double* %386 to <2 x double>*
%388 = load <2 x double>, <2 x double>* %387
%389 = getelementptr inbounds double, double* %368, i64 6
%390 = bitcast double* %389 to <2 x double>*
%391 = load <2 x double>, <2 x double>* %390
%392 = getelementptr inbounds double, double* %369, i64 4
%393 = bitcast double* %392 to <2 x double>*
%394 = load <2 x double>, <2 x double>* %393
%395 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %388, <2 x double> %40, <2 x double> %394)
%396 = getelementptr inbounds double, double* %369, i64 6
%397 = bitcast double* %396 to <2 x double>*
%398 = load <2 x double>, <2 x double>* %397
%399 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %391, <2 x double> %42, <2 x double> %398)
%400 = getelementptr inbounds double, double* %370, i64 4
%401 = bitcast double* %400 to <2 x double>*
store <2 x double> %395, <2 x double>* %401
%402 = getelementptr inbounds double, double* %370, i64 6
%403 = bitcast double* %402 to <2 x double>*
store <2 x double> %399, <2 x double>* %403
%404 = getelementptr inbounds double, double* %368, i64 %30
%405 = getelementptr inbounds double, double* %369, i64 %32
%406 = getelementptr inbounds double, double* %370, i64 %34
%407 = add nuw nsw i32 %367, 4
%408 = icmp slt i32 %407, %26
br i1 %408, label %366, label %222
409: ; preds = %359, %409
%410 = phi i32 [ %438, %409 ], [ %360, %359 ]
%411 = phi double* [ %435, %409 ], [ %361, %359 ]
%412 = phi double* [ %436, %409 ], [ %362, %359 ]
%413 = phi double* [ %437, %409 ], [ %363, %359 ]
%414 = load double, double* %411
%415 = load double, double* %412
%416 = tail call double @llvm.fmuladd.f64(double %414, double %25, double %415)
store double %416, double* %413
%417 = getelementptr inbounds double, double* %411, i64 4
%418 = load double, double* %417
%419 = getelementptr inbounds double, double* %412, i64 4
%420 = load double, double* %419
%421 = tail call double @llvm.fmuladd.f64(double %418, double %24, double %420)
%422 = getelementptr inbounds double, double* %413, i64 4
store double %421, double* %422
%423 = getelementptr inbounds double, double* %411, i64 1
%424 = getelementptr inbounds double, double* %412, i64 1
%425 = getelementptr inbounds double, double* %413, i64 1
%426 = load double, double* %423
%427 = load double, double* %424
%428 = tail call double @llvm.fmuladd.f64(double %426, double %25, double %427)
store double %428, double* %425
%429 = getelementptr inbounds double, double* %411, i64 5
%430 = load double, double* %429
%431 = getelementptr inbounds double, double* %412, i64 5
%432 = load double, double* %431
%433 = tail call double @llvm.fmuladd.f64(double %430, double %24, double %432)
%434 = getelementptr inbounds double, double* %413, i64 5
store double %433, double* %434
%435 = getelementptr inbounds double, double* %411, i64 2
%436 = getelementptr inbounds double, double* %412, i64 2
%437 = getelementptr inbounds double, double* %413, i64 2
%438 = add nuw nsw i32 %410, 2
%439 = icmp eq i32 %438, %0
br i1 %439, label %440, label %409
440: ; preds = %164, %200, %359, %409, %144, %334, %224, %61, %9
ret void
}