void kernel_dtrsv_t_4_lib4(int kmax, int inverted_diag, double *A, int sda,
                           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 (inverted_diag) {
    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;
  } 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>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1124 <kernel_dtrsv_t_4_lib4+0x24>
jmp    1d84 <kernel_dtrsv_t_4_lib4+0xc84>
movl   $0x4,-0x24(%rbp)
movl   $0x4,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x40(%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)
movl   $0x4,-0x2c(%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    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x7,%ecx
cmp    %ecx,%eax
jge    16dc <kernel_dtrsv_t_4_lib4+0x5dc>
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    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%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  0x48(%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  0x68(%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  0x10(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%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  0x50(%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  0x70(%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  0x18(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%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  0x58(%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  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
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    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%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    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%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  0x48(%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  0x68(%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  0x10(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%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  0x50(%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  0x70(%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  0x18(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%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  0x58(%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  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
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    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x2c(%rbp)
jmp    11a5 <kernel_dtrsv_t_4_lib4+0xa5>
jmp    16e1 <kernel_dtrsv_t_4_lib4+0x5e1>
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    198c <kernel_dtrsv_t_4_lib4+0x88c>
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    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%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  0x48(%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  0x68(%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  0x10(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%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  0x50(%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  0x70(%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  0x18(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%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  0x58(%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  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
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    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    16e1 <kernel_dtrsv_t_4_lib4+0x5e1>
jmp    1991 <kernel_dtrsv_t_4_lib4+0x891>
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1a4f <kernel_dtrsv_t_4_lib4+0x94f>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1991 <kernel_dtrsv_t_4_lib4+0x891>
mov    -0x38(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x20(%rbp)
cmpl   $0x0,-0x8(%rbp)
je     1bf1 <kernel_dtrsv_t_4_lib4+0xaf1>
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm1
mulsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x70(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1d84 <kernel_dtrsv_t_4_lib4+0xc84>
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm1
movsd  -0x80(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm1
mulsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm1
movsd  -0x70(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x70(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x68(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

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

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

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