void kernel_dtrinv_4x2_lib4(int kmax, double *A, double *B, double *C,
                            double *fact) {
  const int bs = 4;
  int k;
  double a_0, a_1, a_2, a_3, b_0, b_1, c_00 = 0, c_01 = 0, c_10 = 0, c_11 = 0,
                                       c_20 = 0, c_21 = 0, c_30 = 0, c_31 = 0;
  a_0 = A[0 + bs * 0];
  b_0 = B[0 + bs * 0];
  b_1 = B[1 + bs * 0];
  c_00 -= a_0 * b_0;
  c_01 -= a_0 * b_1;
  a_0 = A[0 + bs * 1];
  a_1 = A[1 + bs * 1];
  b_0 = B[0 + bs * 1];
  b_1 = B[1 + bs * 1];
  c_00 -= a_0 * b_0;
  c_10 -= a_1 * b_0;
  c_01 -= a_0 * b_1;
  c_11 -= a_1 * b_1;
  a_0 = A[0 + bs * 2];
  a_1 = A[1 + bs * 2];
  a_2 = A[2 + bs * 2];
  b_0 = B[0 + bs * 2];
  b_1 = B[1 + bs * 2];
  c_00 -= a_0 * b_0;
  c_10 -= a_1 * b_0;
  c_20 -= a_2 * b_0;
  c_01 -= a_0 * b_1;
  c_11 -= a_1 * b_1;
  c_21 -= a_2 * b_1;
  a_0 = A[0 + bs * 3];
  a_1 = A[1 + bs * 3];
  a_2 = A[2 + bs * 3];
  a_3 = A[3 + bs * 3];
  b_0 = B[0 + bs * 3];
  b_1 = B[1 + bs * 3];
  c_00 -= a_0 * b_0;
  c_10 -= a_1 * b_0;
  c_20 -= a_2 * b_0;
  c_30 -= a_3 * b_0;
  c_01 -= a_0 * b_1;
  c_11 -= a_1 * b_1;
  c_21 -= a_2 * b_1;
  c_31 -= a_3 * b_1;
  A += 16;
  B += 16;
  k = 4;
  for (; 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];
    b_0 = B[0 + bs * 0];
    b_1 = B[1 + bs * 0];
    c_00 -= a_0 * b_0;
    c_10 -= a_1 * b_0;
    c_20 -= a_2 * b_0;
    c_30 -= a_3 * b_0;
    c_01 -= a_0 * b_1;
    c_11 -= a_1 * b_1;
    c_21 -= a_2 * b_1;
    c_31 -= a_3 * b_1;
    a_0 = A[0 + bs * 1];
    a_1 = A[1 + bs * 1];
    a_2 = A[2 + bs * 1];
    a_3 = A[3 + bs * 1];
    b_0 = B[0 + bs * 1];
    b_1 = B[1 + bs * 1];
    c_00 -= a_0 * b_0;
    c_10 -= a_1 * b_0;
    c_20 -= a_2 * b_0;
    c_30 -= a_3 * b_0;
    c_01 -= a_0 * b_1;
    c_11 -= a_1 * b_1;
    c_21 -= a_2 * b_1;
    c_31 -= a_3 * b_1;
    a_0 = A[0 + bs * 2];
    a_1 = A[1 + bs * 2];
    a_2 = A[2 + bs * 2];
    a_3 = A[3 + bs * 2];
    b_0 = B[0 + bs * 2];
    b_1 = B[1 + bs * 2];
    c_00 -= a_0 * b_0;
    c_10 -= a_1 * b_0;
    c_20 -= a_2 * b_0;
    c_30 -= a_3 * b_0;
    c_01 -= a_0 * b_1;
    c_11 -= a_1 * b_1;
    c_21 -= a_2 * b_1;
    c_31 -= a_3 * b_1;
    a_0 = A[0 + bs * 3];
    a_1 = A[1 + bs * 3];
    a_2 = A[2 + bs * 3];
    a_3 = A[3 + bs * 3];
    b_0 = B[0 + bs * 3];
    b_1 = B[1 + bs * 3];
    c_00 -= a_0 * b_0;
    c_10 -= a_1 * b_0;
    c_20 -= a_2 * b_0;
    c_30 -= a_3 * b_0;
    c_01 -= a_0 * b_1;
    c_11 -= a_1 * b_1;
    c_21 -= a_2 * b_1;
    c_31 -= a_3 * b_1;
    A += 16;
    B += 16;
  }
  double a_00, a_10, a_11;
  a_00 = fact[0];
  c_00 *= a_00;
  c_10 *= a_00;
  c_20 *= a_00;
  c_30 *= a_00;
  C[0 + bs * 0] = c_00;
  C[1 + bs * 0] = c_10;
  C[2 + bs * 0] = c_20;
  C[3 + bs * 0] = c_30;
  a_10 = fact[1];
  a_11 = fact[2];
  c_01 -= c_00 * a_10;
  c_11 -= c_10 * a_10;
  c_21 -= c_20 * a_10;
  c_31 -= c_30 * a_10;
  c_01 *= a_11;
  c_11 *= a_11;
  c_21 *= a_11;
  c_31 *= a_11;
  C[0 + bs * 1] = c_01;
  C[1 + bs * 1] = c_11;
  C[2 + bs * 1] = c_21;
  C[3 + bs * 1] = c_31;
}


x86 assembly (clang, -O0):
<kernel_dtrinv_4x2_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x38,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movl   $0x4,-0x2c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
movl   $0x4,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1ef4 <kernel_dtrinv_4x2_lib4+0xdf4>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x30(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x30(%rbp)
jmp    16ab <kernel_dtrinv_4x2_lib4+0x5ab>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x38(%rax)
add    $0x38,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrinv_4x2_lib4>:
sub    $0x18,%rsp
movsd  (%rsi),%xmm1
movsd  (%rdx),%xmm2
mulsd  %xmm1,%xmm2
xorpd  %xmm0,%xmm0
xorpd  %xmm3,%xmm3
subsd  %xmm2,%xmm3
mulsd  0x8(%rdx),%xmm1
xorpd  %xmm4,%xmm4
subsd  %xmm1,%xmm4
movupd 0x20(%rsi),%xmm5
movsd  0x20(%rdx),%xmm1
movsd  0x28(%rdx),%xmm6
unpcklpd %xmm1,%xmm1
movq   %xmm3,%xmm2
mulpd  %xmm5,%xmm1
subpd  %xmm1,%xmm2
unpcklpd %xmm6,%xmm6
movq   %xmm4,%xmm1
mulpd  %xmm5,%xmm6
subpd  %xmm6,%xmm1
movupd 0x40(%rsi),%xmm3
movsd  0x50(%rsi),%xmm4
movsd  0x40(%rdx),%xmm5
movsd  0x48(%rdx),%xmm6
movapd %xmm4,%xmm7
mulsd  %xmm5,%xmm7
unpcklpd %xmm5,%xmm5
mulpd  %xmm3,%xmm5
subpd  %xmm5,%xmm2
xorpd  %xmm5,%xmm5
subsd  %xmm7,%xmm5
mulsd  %xmm6,%xmm4
unpcklpd %xmm6,%xmm6
mulpd  %xmm3,%xmm6
subpd  %xmm6,%xmm1
subsd  %xmm4,%xmm0
movupd 0x60(%rsi),%xmm3
movupd 0x70(%rsi),%xmm4
movsd  0x60(%rdx),%xmm6
unpcklpd %xmm6,%xmm6
movapd %xmm3,%xmm7
mulpd  %xmm6,%xmm7
subpd  %xmm7,%xmm2
movq   %xmm5,%xmm5
mulpd  %xmm4,%xmm6
subpd  %xmm6,%xmm5
movsd  0x68(%rdx),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm3
subpd  %xmm3,%xmm1
movq   %xmm0,%xmm0
mulpd  %xmm4,%xmm6
subpd  %xmm6,%xmm0
cmp    $0x8,%edi
jl     150c <kernel_dtrinv_4x2_lib4+0x40c>
add    $0xfffffffd,%edi
mov    $0x4,%r9d
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movapd %xmm0,-0x50(%rsp)
movapd %xmm1,-0x40(%rsp)
movapd %xmm5,-0x20(%rsp)
movapd %xmm2,(%rsp)
movupd 0x80(%rsi,%rax,1),%xmm7
movupd 0x90(%rsi,%rax,1),%xmm3
movupd 0xa0(%rsi,%rax,1),%xmm8
movupd 0xb0(%rsi,%rax,1),%xmm9
movsd  0x80(%rdx,%rax,1),%xmm12
movsd  0x88(%rdx,%rax,1),%xmm4
movsd  0xa0(%rdx,%rax,1),%xmm15
movsd  0xa8(%rdx,%rax,1),%xmm11
unpcklpd %xmm12,%xmm12
movapd %xmm7,%xmm6
mulpd  %xmm12,%xmm6
subpd  %xmm6,%xmm2
movapd %xmm3,%xmm6
mulpd  %xmm12,%xmm6
subpd  %xmm6,%xmm5
unpcklpd %xmm4,%xmm4
movapd %xmm7,-0x60(%rsp)
movapd %xmm7,%xmm6
mulpd  %xmm4,%xmm6
subpd  %xmm6,%xmm1
movapd %xmm3,-0x30(%rsp)
movapd %xmm3,%xmm6
mulpd  %xmm4,%xmm6
subpd  %xmm6,%xmm0
unpcklpd %xmm15,%xmm15
movapd %xmm8,%xmm6
mulpd  %xmm15,%xmm6
subpd  %xmm6,%xmm2
movapd %xmm9,%xmm6
mulpd  %xmm15,%xmm6
subpd  %xmm6,%xmm5
unpcklpd %xmm11,%xmm11
movapd %xmm8,-0x80(%rsp)
movapd %xmm8,%xmm6
mulpd  %xmm11,%xmm6
subpd  %xmm6,%xmm1
movapd %xmm9,-0x10(%rsp)
movapd %xmm9,%xmm6
mulpd  %xmm11,%xmm6
subpd  %xmm6,%xmm0
movupd 0xc0(%rsi,%rax,1),%xmm3
movupd 0xd0(%rsi,%rax,1),%xmm7
movsd  0xc0(%rdx,%rax,1),%xmm10
unpcklpd %xmm10,%xmm10
movapd %xmm3,%xmm6
mulpd  %xmm10,%xmm6
subpd  %xmm6,%xmm2
movapd %xmm7,%xmm6
mulpd  %xmm10,%xmm6
subpd  %xmm6,%xmm5
movsd  0xc8(%rdx,%rax,1),%xmm14
unpcklpd %xmm14,%xmm14
movapd %xmm3,-0x70(%rsp)
movapd %xmm3,%xmm6
mulpd  %xmm14,%xmm6
subpd  %xmm6,%xmm1
movapd %xmm7,%xmm8
movapd %xmm7,%xmm6
mulpd  %xmm14,%xmm6
subpd  %xmm6,%xmm0
movsd  0xe0(%rdx,%rax,1),%xmm9
unpcklpd %xmm9,%xmm9
movupd 0xe0(%rsi,%rax,1),%xmm7
movapd %xmm7,%xmm6
mulpd  %xmm9,%xmm6
subpd  %xmm6,%xmm2
movupd 0xf0(%rsi,%rax,1),%xmm3
movapd %xmm3,%xmm6
mulpd  %xmm9,%xmm6
subpd  %xmm6,%xmm5
movsd  0xe8(%rdx,%rax,1),%xmm13
unpcklpd %xmm13,%xmm13
movapd %xmm7,%xmm6
mulpd  %xmm13,%xmm6
subpd  %xmm6,%xmm1
movapd %xmm3,%xmm6
mulpd  %xmm13,%xmm6
subpd  %xmm6,%xmm0
add    $0x4,%r9d
sub    $0xffffffffffffff80,%rax
cmp    %edi,%r9d
jl     1200 <kernel_dtrinv_4x2_lib4+0x100>
movapd 0xc19(%rip),%xmm0
movapd -0x60(%rsp),%xmm1
xorpd  %xmm0,%xmm1
movapd %xmm1,-0x60(%rsp)
movapd -0x30(%rsp),%xmm6
xorpd  %xmm0,%xmm6
movapd -0x80(%rsp),%xmm1
xorpd  %xmm0,%xmm1
movapd %xmm1,-0x80(%rsp)
movapd -0x10(%rsp),%xmm5
xorpd  %xmm0,%xmm5
movapd -0x70(%rsp),%xmm1
xorpd  %xmm0,%xmm1
movapd %xmm1,-0x70(%rsp)
xorpd  %xmm0,%xmm8
xorpd  %xmm0,%xmm7
xorpd  %xmm0,%xmm3
movapd %xmm6,%xmm0
mulpd  %xmm4,%xmm0
addpd  -0x50(%rsp),%xmm0
movapd %xmm5,%xmm1
mulpd  %xmm11,%xmm1
addpd  %xmm0,%xmm1
movapd %xmm8,%xmm2
mulpd  %xmm14,%xmm2
addpd  %xmm1,%xmm2
movapd %xmm3,%xmm0
mulpd  %xmm13,%xmm0
addpd  %xmm2,%xmm0
movapd -0x60(%rsp),%xmm1
mulpd  %xmm1,%xmm4
addpd  -0x40(%rsp),%xmm4
mulpd  -0x80(%rsp),%xmm11
addpd  %xmm4,%xmm11
movapd -0x70(%rsp),%xmm4
mulpd  %xmm4,%xmm14
addpd  %xmm11,%xmm14
mulpd  %xmm7,%xmm13
addpd  %xmm14,%xmm13
mulpd  %xmm12,%xmm6
addpd  -0x20(%rsp),%xmm6
mulpd  %xmm15,%xmm5
addpd  %xmm6,%xmm5
mulpd  %xmm10,%xmm8
addpd  %xmm5,%xmm8
mulpd  %xmm9,%xmm3
addpd  %xmm8,%xmm3
mulpd  %xmm12,%xmm1
addpd  (%rsp),%xmm1
movapd %xmm1,%xmm2
movapd -0x80(%rsp),%xmm1
mulpd  %xmm15,%xmm1
addpd  %xmm2,%xmm1
movapd %xmm4,%xmm2
mulpd  %xmm10,%xmm2
addpd  %xmm1,%xmm2
mulpd  %xmm9,%xmm7
addpd  %xmm2,%xmm7
movapd %xmm7,%xmm2
movapd %xmm3,%xmm5
movapd %xmm13,%xmm1
movsd  (%r8),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm2
mulpd  %xmm5,%xmm3
movupd %xmm2,(%rcx)
movupd %xmm3,0x10(%rcx)
movsd  0x8(%r8),%xmm4
movsd  0x10(%r8),%xmm5
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm2
subpd  %xmm2,%xmm1
mulpd  %xmm3,%xmm4
subpd  %xmm4,%xmm0
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm1
mulpd  %xmm0,%xmm5
movupd %xmm1,0x20(%rcx)
movupd %xmm5,0x30(%rcx)
add    $0x18,%rsp
ret

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

LLVM IR (-O2):
define void @kernel_dtrinv_4x2_lib4(i32 %0, double* nocapture %1, double* nocapture %2, double* nocapture writeonly %3, double* nocapture %4) {
%6 = load double, double* %1
%7 = load double, double* %2
%8 = getelementptr inbounds double, double* %2, i64 1
%9 = load double, double* %8
%10 = fneg double %6
%11 = tail call double @llvm.fmuladd.f64(double %10, double %7, double 0.000000e+00)
%12 = tail call double @llvm.fmuladd.f64(double %10, double %9, double 0.000000e+00)
%13 = getelementptr inbounds double, double* %1, i64 4
%14 = bitcast double* %13 to <2 x double>*
%15 = load <2 x double>, <2 x double>* %14
%16 = getelementptr inbounds double, double* %2, i64 4
%17 = load double, double* %16
%18 = getelementptr inbounds double, double* %2, i64 5
%19 = load double, double* %18
%20 = fneg <2 x double> %15
%21 = insertelement <2 x double> poison, double %17, i64 0
%22 = shufflevector <2 x double> %21, <2 x double> poison, <2 x i32> zeroinitializer
%23 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %11, i64 0
%24 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %20, <2 x double> %22, <2 x double> %23)
%25 = insertelement <2 x double> poison, double %19, i64 0
%26 = shufflevector <2 x double> %25, <2 x double> poison, <2 x i32> zeroinitializer
%27 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %12, i64 0
%28 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %20, <2 x double> %26, <2 x double> %27)
%29 = getelementptr inbounds double, double* %1, i64 8
%30 = bitcast double* %29 to <2 x double>*
%31 = load <2 x double>, <2 x double>* %30
%32 = getelementptr inbounds double, double* %1, i64 10
%33 = load double, double* %32
%34 = getelementptr inbounds double, double* %2, i64 8
%35 = load double, double* %34
%36 = getelementptr inbounds double, double* %2, i64 9
%37 = load double, double* %36
%38 = fneg <2 x double> %31
%39 = insertelement <2 x double> poison, double %35, i64 0
%40 = shufflevector <2 x double> %39, <2 x double> poison, <2 x i32> zeroinitializer
%41 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %38, <2 x double> %40, <2 x double> %24)
%42 = fneg double %33
%43 = tail call double @llvm.fmuladd.f64(double %42, double %35, double 0.000000e+00)
%44 = insertelement <2 x double> poison, double %37, i64 0
%45 = shufflevector <2 x double> %44, <2 x double> poison, <2 x i32> zeroinitializer
%46 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %38, <2 x double> %45, <2 x double> %28)
%47 = tail call double @llvm.fmuladd.f64(double %42, double %37, double 0.000000e+00)
%48 = getelementptr inbounds double, double* %1, i64 12
%49 = bitcast double* %48 to <2 x double>*
%50 = load <2 x double>, <2 x double>* %49
%51 = getelementptr inbounds double, double* %1, i64 14
%52 = bitcast double* %51 to <2 x double>*
%53 = load <2 x double>, <2 x double>* %52
%54 = getelementptr inbounds double, double* %2, i64 12
%55 = load double, double* %54
%56 = getelementptr inbounds double, double* %2, i64 13
%57 = load double, double* %56
%58 = fneg <2 x double> %50
%59 = insertelement <2 x double> poison, double %55, i64 0
%60 = shufflevector <2 x double> %59, <2 x double> poison, <2 x i32> zeroinitializer
%61 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %58, <2 x double> %60, <2 x double> %41)
%62 = fneg <2 x double> %53
%63 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %43, i64 0
%64 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %62, <2 x double> %60, <2 x double> %63)
%65 = insertelement <2 x double> poison, double %57, i64 0
%66 = shufflevector <2 x double> %65, <2 x double> poison, <2 x i32> zeroinitializer
%67 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %58, <2 x double> %66, <2 x double> %46)
%68 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %47, i64 0
%69 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %62, <2 x double> %66, <2 x double> %68)
%70 = add nsw i32 %0, -3
%71 = icmp sgt i32 %0, 7
br i1 %71, label %72, label %179
72: ; preds = %5, %72
%73 = phi double* [ %80, %72 ], [ %1, %5 ]
%74 = phi double* [ %81, %72 ], [ %2, %5 ]
%75 = phi i32 [ %160, %72 ], [ 4, %5 ]
%76 = phi <2 x double> [ %153, %72 ], [ %61, %5 ]
%77 = phi <2 x double> [ %155, %72 ], [ %64, %5 ]
%78 = phi <2 x double> [ %158, %72 ], [ %67, %5 ]
%79 = phi <2 x double> [ %159, %72 ], [ %69, %5 ]
%80 = getelementptr inbounds double, double* %73, i64 16
%81 = getelementptr inbounds double, double* %74, i64 16
%82 = bitcast double* %80 to <2 x double>*
%83 = load <2 x double>, <2 x double>* %82
%84 = getelementptr inbounds double, double* %73, i64 18
%85 = bitcast double* %84 to <2 x double>*
%86 = load <2 x double>, <2 x double>* %85
%87 = load double, double* %81
%88 = getelementptr inbounds double, double* %74, i64 17
%89 = load double, double* %88
%90 = fneg <2 x double> %83
%91 = insertelement <2 x double> poison, double %87, i64 0
%92 = shufflevector <2 x double> %91, <2 x double> poison, <2 x i32> zeroinitializer
%93 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %90, <2 x double> %92, <2 x double> %76)
%94 = fneg <2 x double> %86
%95 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %94, <2 x double> %92, <2 x double> %77)
%96 = insertelement <2 x double> poison, double %89, i64 0
%97 = shufflevector <2 x double> %96, <2 x double> poison, <2 x i32> zeroinitializer
%98 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %90, <2 x double> %97, <2 x double> %78)
%99 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %94, <2 x double> %97, <2 x double> %79)
%100 = getelementptr inbounds double, double* %73, i64 20
%101 = bitcast double* %100 to <2 x double>*
%102 = load <2 x double>, <2 x double>* %101
%103 = getelementptr inbounds double, double* %73, i64 22
%104 = bitcast double* %103 to <2 x double>*
%105 = load <2 x double>, <2 x double>* %104
%106 = getelementptr inbounds double, double* %74, i64 20
%107 = load double, double* %106
%108 = getelementptr inbounds double, double* %74, i64 21
%109 = load double, double* %108
%110 = fneg <2 x double> %102
%111 = insertelement <2 x double> poison, double %107, i64 0
%112 = shufflevector <2 x double> %111, <2 x double> poison, <2 x i32> zeroinitializer
%113 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %110, <2 x double> %112, <2 x double> %93)
%114 = fneg <2 x double> %105
%115 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %114, <2 x double> %112, <2 x double> %95)
%116 = insertelement <2 x double> poison, double %109, i64 0
%117 = shufflevector <2 x double> %116, <2 x double> poison, <2 x i32> zeroinitializer
%118 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %110, <2 x double> %117, <2 x double> %98)
%119 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %114, <2 x double> %117, <2 x double> %99)
%120 = getelementptr inbounds double, double* %73, i64 24
%121 = bitcast double* %120 to <2 x double>*
%122 = load <2 x double>, <2 x double>* %121
%123 = getelementptr inbounds double, double* %73, i64 26
%124 = bitcast double* %123 to <2 x double>*
%125 = load <2 x double>, <2 x double>* %124
%126 = getelementptr inbounds double, double* %74, i64 24
%127 = load double, double* %126
%128 = getelementptr inbounds double, double* %74, i64 25
%129 = load double, double* %128
%130 = fneg <2 x double> %122
%131 = insertelement <2 x double> poison, double %127, i64 0
%132 = shufflevector <2 x double> %131, <2 x double> poison, <2 x i32> zeroinitializer
%133 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %130, <2 x double> %132, <2 x double> %113)
%134 = fneg <2 x double> %125
%135 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %134, <2 x double> %132, <2 x double> %115)
%136 = insertelement <2 x double> poison, double %129, i64 0
%137 = shufflevector <2 x double> %136, <2 x double> poison, <2 x i32> zeroinitializer
%138 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %130, <2 x double> %137, <2 x double> %118)
%139 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %134, <2 x double> %137, <2 x double> %119)
%140 = getelementptr inbounds double, double* %73, i64 28
%141 = bitcast double* %140 to <2 x double>*
%142 = load <2 x double>, <2 x double>* %141
%143 = getelementptr inbounds double, double* %73, i64 30
%144 = bitcast double* %143 to <2 x double>*
%145 = load <2 x double>, <2 x double>* %144
%146 = getelementptr inbounds double, double* %74, i64 28
%147 = load double, double* %146
%148 = getelementptr inbounds double, double* %74, i64 29
%149 = load double, double* %148
%150 = fneg <2 x double> %142
%151 = insertelement <2 x double> poison, double %147, i64 0
%152 = shufflevector <2 x double> %151, <2 x double> poison, <2 x i32> zeroinitializer
%153 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %150, <2 x double> %152, <2 x double> %133)
%154 = fneg <2 x double> %145
%155 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %152, <2 x double> %135)
%156 = insertelement <2 x double> poison, double %149, i64 0
%157 = shufflevector <2 x double> %156, <2 x double> poison, <2 x i32> zeroinitializer
%158 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %150, <2 x double> %157, <2 x double> %138)
%159 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %157, <2 x double> %139)
%160 = add nuw nsw i32 %75, 4
%161 = icmp slt i32 %160, %70
br i1 %161, label %72, label %162
162: ; preds = %72
%163 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %94, <2 x double> %97, <2 x double> %79)
%164 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %114, <2 x double> %117, <2 x double> %163)
%165 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %134, <2 x double> %137, <2 x double> %164)
%166 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %157, <2 x double> %165)
%167 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %90, <2 x double> %97, <2 x double> %78)
%168 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %110, <2 x double> %117, <2 x double> %167)
%169 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %130, <2 x double> %137, <2 x double> %168)
%170 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %150, <2 x double> %157, <2 x double> %169)
%171 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %94, <2 x double> %92, <2 x double> %77)
%172 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %114, <2 x double> %112, <2 x double> %171)
%173 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %134, <2 x double> %132, <2 x double> %172)
%174 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %152, <2 x double> %173)
%175 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %90, <2 x double> %92, <2 x double> %76)
%176 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %110, <2 x double> %112, <2 x double> %175)
%177 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %130, <2 x double> %132, <2 x double> %176)
%178 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %150, <2 x double> %152, <2 x double> %177)
br label %179
179: ; preds = %162, %5
%180 = phi <2 x double> [ %61, %5 ], [ %178, %162 ]
%181 = phi <2 x double> [ %64, %5 ], [ %174, %162 ]
%182 = phi <2 x double> [ %67, %5 ], [ %170, %162 ]
%183 = phi <2 x double> [ %69, %5 ], [ %166, %162 ]
%184 = load double, double* %4
%185 = insertelement <2 x double> poison, double %184, i64 0
%186 = shufflevector <2 x double> %185, <2 x double> poison, <2 x i32> zeroinitializer
%187 = fmul <2 x double> %180, %186
%188 = fmul <2 x double> %181, %186
%189 = bitcast double* %3 to <2 x double>*
store <2 x double> %187, <2 x double>* %189
%190 = getelementptr inbounds double, double* %3, i64 2
%191 = bitcast double* %190 to <2 x double>*
store <2 x double> %188, <2 x double>* %191
%192 = getelementptr inbounds double, double* %4, i64 1
%193 = load double, double* %192
%194 = getelementptr inbounds double, double* %4, i64 2
%195 = load double, double* %194
%196 = fneg <2 x double> %187
%197 = insertelement <2 x double> poison, double %193, i64 0
%198 = shufflevector <2 x double> %197, <2 x double> poison, <2 x i32> zeroinitializer
%199 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %196, <2 x double> %198, <2 x double> %182)
%200 = fneg <2 x double> %188
%201 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %200, <2 x double> %198, <2 x double> %183)
%202 = insertelement <2 x double> poison, double %195, i64 0
%203 = shufflevector <2 x double> %202, <2 x double> poison, <2 x i32> zeroinitializer
%204 = fmul <2 x double> %199, %203
%205 = fmul <2 x double> %201, %203
%206 = getelementptr inbounds double, double* %3, i64 4
%207 = bitcast double* %206 to <2 x double>*
store <2 x double> %204, <2 x double>* %207
%208 = getelementptr inbounds double, double* %3, i64 6
%209 = bitcast double* %208 to <2 x double>*
store <2 x double> %205, <2 x double>* %209
ret void
}