void kernel_dtrsv_t_4_lib4_new(int kmax, double *A, int sda, int use_inv_diag_A,
                               double *inv_diag_A, double *x) {
  if (kmax <= 0)
    return;
  const int lda = 4;
  const int bs = 4;
  int k;
  double *tA, *tx;
  tA = A;
  tx = x;
  double x_0, x_1, x_2, x_3, y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0;
  k = 4;
  A += 4 + (sda - 1) * lda;
  x += 4;
  __builtin_prefetch(A);
  __builtin_prefetch(A + 8);
  for (; k < kmax - 7; k += 8) {
    __builtin_prefetch(A + sda * bs);
    __builtin_prefetch(A + sda * bs + 8);
    x_0 = x[0];
    x_1 = x[1];
    x_2 = x[2];
    x_3 = x[3];
    y_0 += A[0 + lda * 0] * x_0;
    y_1 += A[0 + lda * 1] * x_0;
    y_2 += A[0 + lda * 2] * x_0;
    y_3 += A[0 + lda * 3] * x_0;
    y_0 += A[1 + lda * 0] * x_1;
    y_1 += A[1 + lda * 1] * x_1;
    y_2 += A[1 + lda * 2] * x_1;
    y_3 += A[1 + lda * 3] * x_1;
    y_0 += A[2 + lda * 0] * x_2;
    y_1 += A[2 + lda * 1] * x_2;
    y_2 += A[2 + lda * 2] * x_2;
    y_3 += A[2 + lda * 3] * x_2;
    y_0 += A[3 + lda * 0] * x_3;
    y_1 += A[3 + lda * 1] * x_3;
    y_2 += A[3 + lda * 2] * x_3;
    y_3 += A[3 + lda * 3] * x_3;
    A += sda * bs;
    x += 4;
    __builtin_prefetch(A + sda * bs);
    __builtin_prefetch(A + sda * bs + 8);
    x_0 = x[0];
    x_1 = x[1];
    x_2 = x[2];
    x_3 = x[3];
    y_0 += A[0 + lda * 0] * x_0;
    y_1 += A[0 + lda * 1] * x_0;
    y_2 += A[0 + lda * 2] * x_0;
    y_3 += A[0 + lda * 3] * x_0;
    y_0 += A[1 + lda * 0] * x_1;
    y_1 += A[1 + lda * 1] * x_1;
    y_2 += A[1 + lda * 2] * x_1;
    y_3 += A[1 + lda * 3] * x_1;
    y_0 += A[2 + lda * 0] * x_2;
    y_1 += A[2 + lda * 1] * x_2;
    y_2 += A[2 + lda * 2] * x_2;
    y_3 += A[2 + lda * 3] * x_2;
    y_0 += A[3 + lda * 0] * x_3;
    y_1 += A[3 + lda * 1] * x_3;
    y_2 += A[3 + lda * 2] * x_3;
    y_3 += A[3 + lda * 3] * x_3;
    A += sda * bs;
    x += 4;
  }
  for (; k < kmax - 3; k += 4) {
    __builtin_prefetch(A + sda * bs);
    __builtin_prefetch(A + sda * bs + 8);
    x_0 = x[0];
    x_1 = x[1];
    x_2 = x[2];
    x_3 = x[3];
    y_0 += A[0 + lda * 0] * x_0;
    y_1 += A[0 + lda * 1] * x_0;
    y_2 += A[0 + lda * 2] * x_0;
    y_3 += A[0 + lda * 3] * x_0;
    y_0 += A[1 + lda * 0] * x_1;
    y_1 += A[1 + lda * 1] * x_1;
    y_2 += A[1 + lda * 2] * x_1;
    y_3 += A[1 + lda * 3] * x_1;
    y_0 += A[2 + lda * 0] * x_2;
    y_1 += A[2 + lda * 1] * x_2;
    y_2 += A[2 + lda * 2] * x_2;
    y_3 += A[2 + lda * 3] * x_2;
    y_0 += A[3 + lda * 0] * x_3;
    y_1 += A[3 + lda * 1] * x_3;
    y_2 += A[3 + lda * 2] * x_3;
    y_3 += A[3 + lda * 3] * x_3;
    A += sda * bs;
    x += 4;
  }
  for (; k < kmax; k++) {
    x_0 = x[0];
    y_0 += A[0 + lda * 0] * x_0;
    y_1 += A[0 + lda * 1] * x_0;
    y_2 += A[0 + lda * 2] * x_0;
    y_3 += A[0 + lda * 3] * x_0;
    A += 1;
    x += 1;
  }
  A = tA;
  x = tx;
  if (use_inv_diag_A) {
    y_3 = x[3] - y_3;
    y_3 *= inv_diag_A[3];
    x[3] = y_3;
    y_2 = x[2] - A[3 + lda * 2] * y_3 - y_2;
    y_2 *= inv_diag_A[2];
    x[2] = y_2;
    y_0 += A[2 + lda * 0] * y_2 + A[3 + lda * 0] * y_3;
    y_1 += A[2 + lda * 1] * y_2 + A[3 + lda * 1] * y_3;
    y_1 = x[1] - y_1;
    y_1 *= inv_diag_A[1];
    x[1] = y_1;
    y_0 = x[0] - A[1 + lda * 0] * y_1 - y_0;
    y_0 *= inv_diag_A[0];
    x[0] = y_0;
  } else {
    y_3 = x[3] - y_3;
    y_3 /= A[3 + lda * 3];
    x[3] = y_3;
    y_2 = x[2] - A[3 + lda * 2] * y_3 - y_2;
    y_2 /= A[2 + lda * 2];
    x[2] = y_2;
    y_0 += A[2 + lda * 0] * y_2 + A[3 + lda * 0] * y_3;
    y_1 += A[2 + lda * 1] * y_2 + A[3 + lda * 1] * y_3;
    y_1 = x[1] - y_1;
    y_1 /= A[1 + lda * 1];
    x[1] = y_1;
    y_0 = x[0] - A[1 + lda * 0] * y_1 - y_0;
    y_0 /= A[0 + lda * 0];
    x[0] = y_0;
  }
}


x86 assembly (clang, -O0):
<kernel_dtrsv_t_4_lib4_new>:
push   %rbp
mov    %rsp,%rbp
push   %rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1129 <kernel_dtrsv_t_4_lib4_new+0x29>
jmp    1e0a <kernel_dtrsv_t_4_lib4_new+0xd0a>
movl   $0x4,-0x2c(%rbp)
movl   $0x4,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x48(%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
movl   $0x4,-0x34(%rbp)
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
add    $0x4,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x7,%ecx
cmp    %ecx,%eax
jge    1714 <kernel_dtrsv_t_4_lib4_new+0x614>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
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    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
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    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x34(%rbp)
jmp    11ad <kernel_dtrsv_t_4_lib4_new+0xad>
jmp    1719 <kernel_dtrsv_t_4_lib4_new+0x619>
mov    -0x34(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    19dc <kernel_dtrsv_t_4_lib4_new+0x8dc>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
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    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    1719 <kernel_dtrsv_t_4_lib4_new+0x619>
jmp    19e1 <kernel_dtrsv_t_4_lib4_new+0x8e1>
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1aa5 <kernel_dtrsv_t_4_lib4_new+0x9a5>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    19e1 <kernel_dtrsv_t_4_lib4_new+0x8e1>
mov    -0x40(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     1c5f <kernel_dtrsv_t_4_lib4_new+0xb5f>
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1e0a <kernel_dtrsv_t_4_lib4_new+0xd0a>
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0x80(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x70(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrsv_t_4_lib4_new>:
test   %edi,%edi
jle    16a8 <kernel_dtrsv_t_4_lib4_new+0x5a8>
push   %rbp
push   %r15
push   %r14
push   %rbx
shl    $0x2,%edx
movslq %edx,%r11
prefetcht0 (%rsi,%r11,8)
prefetcht0 0x40(%rsi,%r11,8)
lea    0x20(%r9),%rax
cmp    $0xc,%edi
jb     134b <kernel_dtrsv_t_4_lib4_new+0x24b>
lea    -0x7(%rdi),%r14d
lea    -0xc(%rdi),%r10d
and    $0xfffffff8,%r10d
mov    %r11,%rbx
shl    $0x4,%rbx
lea    (%r11,%r11,2),%rdx
lea    0x40(,%rdx,8),%r15
xorpd  %xmm5,%xmm5
mov    $0x4,%ebp
mov    %rsi,%rdx
xorpd  %xmm3,%xmm3
nopl   0x0(%rax,%rax,1)
prefetcht0 (%rdx,%rbx,1)
prefetcht0 0x40(%rdx,%rbx,1)
movsd  0x40(%rdx,%r11,8),%xmm0
movhpd 0x60(%rdx,%r11,8),%xmm0
movsd  (%rdx,%r11,8),%xmm7
movsd  0x8(%rdx,%r11,8),%xmm1
movsd  0x10(%rdx,%r11,8),%xmm10
movsd  0x18(%rdx,%r11,8),%xmm8
movhpd 0x20(%rdx,%r11,8),%xmm7
movsd  (%rax),%xmm2
movsd  0x8(%rax),%xmm6
movsd  0x10(%rax),%xmm4
movsd  0x18(%rax),%xmm11
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm7
addpd  %xmm5,%xmm7
movhpd 0x28(%rdx,%r11,8),%xmm1
mulpd  %xmm0,%xmm2
movsd  0x48(%rdx,%r11,8),%xmm0
movhpd 0x68(%rdx,%r11,8),%xmm0
addpd  %xmm3,%xmm2
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm0
addpd  %xmm2,%xmm0
mulpd  %xmm1,%xmm6
movsd  0x50(%rdx,%r11,8),%xmm1
movhpd 0x70(%rdx,%r11,8),%xmm1
addpd  %xmm7,%xmm6
movhpd 0x30(%rdx,%r11,8),%xmm10
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm10
addpd  %xmm6,%xmm10
movhpd 0x38(%rdx,%r11,8),%xmm8
mulpd  %xmm1,%xmm4
movsd  0x58(%rdx,%r11,8),%xmm1
movhpd 0x78(%rdx,%r11,8),%xmm1
addpd  %xmm0,%xmm4
unpcklpd %xmm11,%xmm11
mulpd  %xmm11,%xmm1
addpd  %xmm4,%xmm1
mulpd  %xmm8,%xmm11
prefetcht0 -0x40(%rdx,%r15,1)
prefetcht0 (%rdx,%r15,1)
movsd  0x40(%rdx,%rbx,1),%xmm8
movhpd 0x60(%rdx,%rbx,1),%xmm8
movsd  (%rdx,%rbx,1),%xmm4
movsd  0x8(%rdx,%rbx,1),%xmm9
movhpd 0x20(%rdx,%rbx,1),%xmm4
movhpd 0x28(%rdx,%rbx,1),%xmm9
movsd  0x10(%rdx,%rbx,1),%xmm7
movsd  0x48(%rdx,%rbx,1),%xmm6
movhpd 0x68(%rdx,%rbx,1),%xmm6
movsd  0x18(%rdx,%rbx,1),%xmm12
movsd  0x50(%rdx,%rbx,1),%xmm13
movhpd 0x70(%rdx,%rbx,1),%xmm13
movhpd 0x30(%rdx,%rbx,1),%xmm7
movhpd 0x38(%rdx,%rbx,1),%xmm12
movsd  0x58(%rdx,%rbx,1),%xmm0
movhpd 0x78(%rdx,%rbx,1),%xmm0
lea    (%rdx,%rbx,1),%rdx
addpd  %xmm10,%xmm11
movsd  0x20(%rax),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm4
addpd  %xmm11,%xmm4
movsd  0x28(%rax),%xmm3
mulpd  %xmm8,%xmm5
movsd  0x30(%rax),%xmm2
addpd  %xmm1,%xmm5
movsd  0x38(%rax),%xmm1
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm6
addpd  %xmm5,%xmm6
mulpd  %xmm9,%xmm3
addpd  %xmm4,%xmm3
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm7
addpd  %xmm3,%xmm7
mulpd  %xmm13,%xmm2
addpd  %xmm6,%xmm2
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm0,%xmm3
addpd  %xmm2,%xmm3
mulpd  %xmm12,%xmm1
movapd %xmm1,%xmm5
addpd  %xmm7,%xmm5
add    $0x8,%ebp
add    $0x40,%rax
cmp    %r14d,%ebp
jl     1160 <kernel_dtrsv_t_4_lib4_new+0x60>
addpd  %xmm7,%xmm1
addpd  %xmm2,%xmm0
add    $0xc,%r10d
lea    (%rdx,%r11,8),%rdx
jmp    135d <kernel_dtrsv_t_4_lib4_new+0x25d>
lea    (%rsi,%r11,8),%rdx
xorpd  %xmm1,%xmm1
mov    $0x4,%r10d
xorpd  %xmm0,%xmm0
lea    -0x3(%rdi),%ebx
cmp    %ebx,%r10d
jge    1470 <kernel_dtrsv_t_4_lib4_new+0x370>
lea    0x40(,%r11,8),%rbp
shl    $0x3,%r11
cs nopw 0x0(%rax,%rax,1)
nop
prefetcht0 -0x40(%rdx,%rbp,1)
prefetcht0 (%rdx,%rbp,1)
movsd  0x40(%rdx),%xmm10
movhpd 0x60(%rdx),%xmm10
movsd  (%rdx),%xmm6
movsd  0x8(%rdx),%xmm9
movsd  0x10(%rdx),%xmm2
movhpd 0x20(%rdx),%xmm6
movsd  0x18(%rdx),%xmm8
movsd  (%rax),%xmm5
movsd  0x8(%rax),%xmm7
movsd  0x10(%rax),%xmm4
movsd  0x18(%rax),%xmm3
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm6
addpd  %xmm1,%xmm6
mulpd  %xmm10,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x28(%rdx),%xmm9
movsd  0x48(%rdx),%xmm0
movhpd 0x68(%rdx),%xmm0
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm9,%xmm7
movsd  0x50(%rdx),%xmm1
movhpd 0x70(%rdx),%xmm1
movhpd 0x30(%rdx),%xmm2
addpd  %xmm6,%xmm7
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm2
addpd  %xmm7,%xmm2
mulpd  %xmm1,%xmm4
addpd  %xmm0,%xmm4
movhpd 0x38(%rdx),%xmm8
movsd  0x58(%rdx),%xmm6
movhpd 0x78(%rdx),%xmm6
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm6
movapd %xmm6,%xmm0
addpd  %xmm4,%xmm0
mulpd  %xmm8,%xmm3
movapd %xmm3,%xmm1
addpd  %xmm2,%xmm1
add    $0x20,%rax
add    $0x4,%r10d
add    %r11,%rdx
cmp    %ebx,%r10d
jl     1380 <kernel_dtrsv_t_4_lib4_new+0x280>
addpd  %xmm2,%xmm3
addpd  %xmm4,%xmm6
movapd %xmm3,%xmm1
movapd %xmm6,%xmm0
cmp    %edi,%r10d
jge    148d <kernel_dtrsv_t_4_lib4_new+0x38d>
mov    %edi,%ebx
sub    %r10d,%ebx
mov    %r10d,%ebp
not    %ebp
test   $0x1,%bl
jne    149a <kernel_dtrsv_t_4_lib4_new+0x39a>
add    %edi,%ebp
jne    14e1 <kernel_dtrsv_t_4_lib4_new+0x3e1>
jmp    156a <kernel_dtrsv_t_4_lib4_new+0x46a>
movapd %xmm1,%xmm2
movapd %xmm0,%xmm3
jmp    156a <kernel_dtrsv_t_4_lib4_new+0x46a>
movsd  (%rdx),%xmm4
movhpd 0x20(%rdx),%xmm4
movsd  0x40(%rdx),%xmm3
movhpd 0x60(%rdx),%xmm3
movsd  (%rax),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm3
addpd  %xmm0,%xmm3
mulpd  %xmm4,%xmm2
addpd  %xmm1,%xmm2
add    $0x8,%rdx
add    $0x8,%rax
add    $0x1,%r10d
movapd %xmm2,%xmm1
movapd %xmm3,%xmm0
add    %edi,%ebp
je     156a <kernel_dtrsv_t_4_lib4_new+0x46a>
sub    %r10d,%edi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
movsd  (%rdx,%rbp,8),%xmm4
movsd  0x8(%rdx,%rbp,8),%xmm6
movsd  0x40(%rdx,%rbp,8),%xmm7
movsd  0x48(%rdx,%rbp,8),%xmm3
movhpd 0x60(%rdx,%rbp,8),%xmm7
movhpd 0x20(%rdx,%rbp,8),%xmm4
movsd  (%rax,%rbp,8),%xmm5
movsd  0x8(%rax,%rbp,8),%xmm2
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm4
addpd  %xmm1,%xmm4
mulpd  %xmm7,%xmm5
movhpd 0x28(%rdx,%rbp,8),%xmm6
movhpd 0x68(%rdx,%rbp,8),%xmm3
addpd  %xmm0,%xmm5
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm3
movapd %xmm3,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm6,%xmm2
movapd %xmm2,%xmm1
addpd  %xmm4,%xmm1
add    $0x2,%rbp
cmp    %ebp,%edi
jne    14f0 <kernel_dtrsv_t_4_lib4_new+0x3f0>
addpd  %xmm4,%xmm2
addpd  %xmm5,%xmm3
movsd  0x18(%r9),%xmm0
movapd %xmm3,%xmm1
unpckhpd %xmm3,%xmm1
subsd  %xmm1,%xmm0
test   %ecx,%ecx
je     1615 <kernel_dtrsv_t_4_lib4_new+0x515>
mulsd  0x18(%r8),%xmm0
movsd  %xmm0,0x18(%r9)
movsd  0x10(%r9),%xmm1
movsd  0x58(%rsi),%xmm4
mulsd  %xmm0,%xmm4
subsd  %xmm4,%xmm1
subsd  %xmm3,%xmm1
mulsd  0x10(%r8),%xmm1
movsd  %xmm1,0x10(%r9)
movsd  0x18(%rsi),%xmm3
mulsd  %xmm0,%xmm3
movsd  0x10(%rsi),%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
mulsd  0x38(%rsi),%xmm0
mulsd  0x30(%rsi),%xmm1
addsd  %xmm2,%xmm4
addsd  %xmm0,%xmm1
unpckhpd %xmm2,%xmm2
addsd  %xmm1,%xmm2
movsd  0x8(%r9),%xmm1
subsd  %xmm2,%xmm1
mulsd  0x8(%r8),%xmm1
movsd  (%r9),%xmm0
movsd  %xmm1,0x8(%r9)
mulsd  0x8(%rsi),%xmm1
subsd  %xmm1,%xmm0
subsd  %xmm4,%xmm0
mulsd  (%r8),%xmm0
jmp    169d <kernel_dtrsv_t_4_lib4_new+0x59d>
divsd  0x78(%rsi),%xmm0
movsd  %xmm0,0x18(%r9)
movsd  0x10(%r9),%xmm1
movsd  0x58(%rsi),%xmm4
mulsd  %xmm0,%xmm4
subsd  %xmm4,%xmm1
subsd  %xmm3,%xmm1
divsd  0x50(%rsi),%xmm1
movsd  %xmm1,0x10(%r9)
movsd  0x18(%rsi),%xmm3
mulsd  %xmm0,%xmm3
movsd  0x10(%rsi),%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
mulsd  0x38(%rsi),%xmm0
mulsd  0x30(%rsi),%xmm1
addsd  %xmm2,%xmm4
addsd  %xmm0,%xmm1
unpckhpd %xmm2,%xmm2
addsd  %xmm1,%xmm2
movsd  0x8(%r9),%xmm1
subsd  %xmm2,%xmm1
divsd  0x28(%rsi),%xmm1
movsd  (%r9),%xmm0
movsd  %xmm1,0x8(%r9)
mulsd  0x8(%rsi),%xmm1
subsd  %xmm1,%xmm0
subsd  %xmm4,%xmm0
divsd  (%rsi),%xmm0
movsd  %xmm0,(%r9)
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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