void kernel_dtrsv_n_4_lib4_new(int kmax, double *A, int use_inv_diag_A,
                               double *inv_diag_A, double *x, double *y) {
  __builtin_prefetch(A);
  __builtin_prefetch(A + 8);
  const int lda = 4;
  int k;
  double x_0, x_1, x_2, x_3, y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0;
  k = 0;
  for (; k < kmax - 3; k += 4) {
    __builtin_prefetch(A + 4 * lda);
    __builtin_prefetch(A + 4 * lda + 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[1 + lda * 0] * x_0;
    y_2 += A[2 + lda * 0] * x_0;
    y_3 += A[3 + lda * 0] * x_0;
    y_0 += A[0 + lda * 1] * x_1;
    y_1 += A[1 + lda * 1] * x_1;
    y_2 += A[2 + lda * 1] * x_1;
    y_3 += A[3 + lda * 1] * x_1;
    y_0 += A[0 + lda * 2] * x_2;
    y_1 += A[1 + lda * 2] * x_2;
    y_2 += A[2 + lda * 2] * x_2;
    y_3 += A[3 + lda * 2] * x_2;
    y_0 += A[0 + lda * 3] * x_3;
    y_1 += A[1 + lda * 3] * x_3;
    y_2 += A[2 + lda * 3] * x_3;
    y_3 += A[3 + lda * 3] * x_3;
    A += 4 * lda;
    x += 4;
  }
  y_0 = y[0] - y_0;
  y_1 = y[1] - y_1;
  y_2 = y[2] - y_2;
  y_3 = y[3] - y_3;
  double a_00, a_10, a_20, a_30, a_11, a_21, a_31;
  if (use_inv_diag_A) {
    a_00 = inv_diag_A[0];
    a_10 = A[1 + lda * 0];
    a_20 = A[2 + lda * 0];
    a_30 = A[3 + lda * 0];
    y_0 *= a_00;
    y[0] = y_0;
    y_1 -= a_10 * y_0;
    y_2 -= a_20 * y_0;
    y_3 -= a_30 * y_0;
    a_11 = inv_diag_A[1];
    a_21 = A[2 + lda * 1];
    a_31 = A[3 + lda * 1];
    y_1 *= a_11;
    y[1] = y_1;
    y_2 -= a_21 * y_1;
    y_3 -= a_31 * y_1;
    a_00 = inv_diag_A[2];
    a_10 = A[3 + lda * 2];
    y_2 *= a_00;
    y[2] = y_2;
    y_3 -= a_10 * y_2;
    a_11 = inv_diag_A[3];
    y_3 *= a_11;
    y[3] = y_3;
  } else {
    a_00 = 1.0 / A[0 + lda * 0];
    a_10 = A[1 + lda * 0];
    a_20 = A[2 + lda * 0];
    a_30 = A[3 + lda * 0];
    y_0 *= a_00;
    y[0] = y_0;
    y_1 -= a_10 * y_0;
    y_2 -= a_20 * y_0;
    y_3 -= a_30 * y_0;
    a_11 = 1.0 / A[1 + lda * 1];
    a_21 = A[2 + lda * 1];
    a_31 = A[3 + lda * 1];
    y_1 *= a_11;
    y[1] = y_1;
    y_2 -= a_21 * y_1;
    y_3 -= a_31 * y_1;
    a_00 = 1.0 / A[2 + lda * 2];
    a_10 = A[3 + lda * 2];
    y_2 *= a_00;
    y[2] = y_2;
    y_3 -= a_10 * y_2;
    a_11 = 1.0 / A[3 + lda * 3];
    y_3 *= a_11;
    y[3] = y_3;
  }
}


x86 assembly (clang, -O0):
<kernel_dtrsv_n_4_lib4_new>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x10(%rbp),%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
movl   $0x4,-0x34(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    13eb <kernel_dtrsv_n_4_lib4_new+0x2eb>
mov    -0x10(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%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  0x30(%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  0x38(%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  0x40(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%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  0x50(%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  0x58(%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  0x60(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%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  0x70(%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  0x78(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x38(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x38(%rbp)
jmp    115e <kernel_dtrsv_n_4_lib4_new+0x5e>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     16a5 <kernel_dtrsv_n_4_lib4_new+0x5a5>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
jmp    1925 <kernel_dtrsv_n_4_lib4_new+0x825>
mov    -0x10(%rbp),%rax
movsd  0x94f(%rip),%xmm0
divsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x849(%rip),%xmm0
divsd  0x28(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x782(%rip),%xmm0
divsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x708(%rip),%xmm0
divsd  0x78(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrsv_n_4_lib4_new>:
prefetcht0 (%rsi)
prefetcht0 0x40(%rsi)
xorpd  %xmm5,%xmm5
cmp    $0x4,%edi
jl     11ff <kernel_dtrsv_n_4_lib4_new+0xff>
add    $0xfffffffd,%edi
xorpd  %xmm7,%xmm7
xor    %eax,%eax
xorpd  %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
prefetcht0 0x80(%rsi)
prefetcht0 0xc0(%rsi)
movupd (%rsi),%xmm9
movupd 0x10(%rsi),%xmm5
movupd 0x20(%rsi),%xmm8
movupd 0x30(%rsi),%xmm2
movsd  (%r8,%rax,8),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm9
addpd  %xmm7,%xmm9
movupd 0x50(%rsi),%xmm10
movupd 0x40(%rsi),%xmm4
movupd 0x60(%rsi),%xmm11
movupd 0x70(%rsi),%xmm3
lea    0x80(%rsi),%rsi
mulpd  %xmm5,%xmm6
movsd  0x8(%r8,%rax,8),%xmm7
addpd  %xmm0,%xmm6
movsd  0x10(%r8,%rax,8),%xmm1
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm2
addpd  %xmm6,%xmm2
movsd  0x18(%r8,%rax,8),%xmm5
mulpd  %xmm8,%xmm7
addpd  %xmm9,%xmm7
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm4
addpd  %xmm7,%xmm4
mulpd  %xmm10,%xmm1
addpd  %xmm2,%xmm1
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm3
movapd %xmm3,%xmm0
addpd  %xmm1,%xmm0
mulpd  %xmm11,%xmm5
movapd %xmm5,%xmm7
addpd  %xmm4,%xmm7
add    $0x4,%rax
cmp    %edi,%eax
jl     1130 <kernel_dtrsv_n_4_lib4_new+0x30>
addpd  %xmm4,%xmm5
addpd  %xmm1,%xmm3
jmp    1203 <kernel_dtrsv_n_4_lib4_new+0x103>
xorpd  %xmm3,%xmm3
movsd  (%r9),%xmm4
movsd  0x8(%r9),%xmm2
subsd  %xmm5,%xmm4
unpckhpd %xmm5,%xmm5
subsd  %xmm5,%xmm2
movsd  0x10(%r9),%xmm1
subsd  %xmm3,%xmm1
movsd  0x18(%r9),%xmm0
unpckhpd %xmm3,%xmm3
subsd  %xmm3,%xmm0
test   %edx,%edx
je     12af <kernel_dtrsv_n_4_lib4_new+0x1af>
mulsd  (%rcx),%xmm4
movsd  0x8(%rsi),%xmm3
mulsd  %xmm4,%xmm3
movsd  0x10(%rsi),%xmm5
mulsd  %xmm4,%xmm5
movsd  0x18(%rsi),%xmm6
mulsd  %xmm4,%xmm6
movsd  %xmm4,(%r9)
subsd  %xmm3,%xmm2
subsd  %xmm5,%xmm1
mulsd  0x8(%rcx),%xmm2
subsd  %xmm6,%xmm0
movsd  0x30(%rsi),%xmm3
mulsd  %xmm2,%xmm3
subsd  %xmm3,%xmm1
movsd  0x38(%rsi),%xmm3
mulsd  %xmm2,%xmm3
subsd  %xmm3,%xmm0
movsd  %xmm2,0x8(%r9)
mulsd  0x10(%rcx),%xmm1
movsd  0x58(%rsi),%xmm2
mulsd  %xmm1,%xmm2
subsd  %xmm2,%xmm0
movsd  %xmm1,0x10(%r9)
mulsd  0x18(%rcx),%xmm0
movsd  %xmm0,0x18(%r9)
ret
movsd  0xd49(%rip),%xmm3
movapd %xmm3,%xmm5
divsd  (%rsi),%xmm5
mulsd  %xmm5,%xmm4
movsd  0x8(%rsi),%xmm5
mulsd  %xmm4,%xmm5
movsd  0x10(%rsi),%xmm6
mulsd  %xmm4,%xmm6
movsd  0x18(%rsi),%xmm7
mulsd  %xmm4,%xmm7
movsd  %xmm4,(%r9)
subsd  %xmm5,%xmm2
subsd  %xmm6,%xmm1
subsd  %xmm7,%xmm0
movapd %xmm3,%xmm4
divsd  0x28(%rsi),%xmm4
mulsd  %xmm2,%xmm4
movsd  0x30(%rsi),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm2,%xmm1
movsd  0x38(%rsi),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm2,%xmm0
movsd  %xmm4,0x8(%r9)
movapd %xmm3,%xmm2
divsd  0x50(%rsi),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x58(%rsi),%xmm1
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm2,0x10(%r9)
divsd  0x78(%rsi),%xmm3
mulsd  %xmm3,%xmm0
movsd  %xmm0,0x18(%r9)
ret

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

LLVM IR (-O2):
define void @kernel_dtrsv_n_4_lib4_new(i32 %0, double* %1, i32 %2, double* nocapture %3, double* nocapture %4, double* nocapture %5) {
%7 = bitcast double* %1 to i8*
tail call void @llvm.prefetch.p0i8(i8* %7, i32 0, i32 3, i32 1)
%8 = getelementptr inbounds double, double* %1, i64 8
%9 = bitcast double* %8 to i8*
tail call void @llvm.prefetch.p0i8(i8* %9, i32 0, i32 3, i32 1)
%10 = add nsw i32 %0, -3
%11 = icmp sgt i32 %0, 3
br i1 %11, label %12, label %59
12: ; preds = %6, %12
%13 = phi double* [ %17, %12 ], [ %1, %6 ]
%14 = phi double* [ %51, %12 ], [ %4, %6 ]
%15 = phi i32 [ %52, %12 ], [ 0, %6 ]
%16 = phi <4 x double> [ %50, %12 ], [ zeroinitializer, %6 ]
%17 = getelementptr inbounds double, double* %13, i64 16
%18 = bitcast double* %17 to i8*
tail call void @llvm.prefetch.p0i8(i8* %18, i32 0, i32 3, i32 1)
%19 = getelementptr inbounds double, double* %13, i64 24
%20 = bitcast double* %19 to i8*
tail call void @llvm.prefetch.p0i8(i8* %20, i32 0, i32 3, i32 1)
%21 = load double, double* %14
%22 = getelementptr inbounds double, double* %14, i64 1
%23 = load double, double* %22
%24 = getelementptr inbounds double, double* %14, i64 2
%25 = load double, double* %24
%26 = getelementptr inbounds double, double* %14, i64 3
%27 = load double, double* %26
%28 = bitcast double* %13 to <4 x double>*
%29 = load <4 x double>, <4 x double>* %28
%30 = insertelement <4 x double> poison, double %21, i64 0
%31 = shufflevector <4 x double> %30, <4 x double> poison, <4 x i32> zeroinitializer
%32 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %29, <4 x double> %31, <4 x double> %16)
%33 = getelementptr inbounds double, double* %13, i64 4
%34 = bitcast double* %33 to <4 x double>*
%35 = load <4 x double>, <4 x double>* %34
%36 = insertelement <4 x double> poison, double %23, i64 0
%37 = shufflevector <4 x double> %36, <4 x double> poison, <4 x i32> zeroinitializer
%38 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %35, <4 x double> %37, <4 x double> %32)
%39 = getelementptr inbounds double, double* %13, i64 8
%40 = bitcast double* %39 to <4 x double>*
%41 = load <4 x double>, <4 x double>* %40
%42 = insertelement <4 x double> poison, double %25, i64 0
%43 = shufflevector <4 x double> %42, <4 x double> poison, <4 x i32> zeroinitializer
%44 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %41, <4 x double> %43, <4 x double> %38)
%45 = getelementptr inbounds double, double* %13, i64 12
%46 = bitcast double* %45 to <4 x double>*
%47 = load <4 x double>, <4 x double>* %46
%48 = insertelement <4 x double> poison, double %27, i64 0
%49 = shufflevector <4 x double> %48, <4 x double> poison, <4 x i32> zeroinitializer
%50 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %47, <4 x double> %49, <4 x double> %44)
%51 = getelementptr inbounds double, double* %14, i64 4
%52 = add nuw nsw i32 %15, 4
%53 = icmp slt i32 %52, %10
br i1 %53, label %12, label %54
54: ; preds = %12
%55 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %29, <4 x double> %31, <4 x double> %16)
%56 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %35, <4 x double> %37, <4 x double> %55)
%57 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %41, <4 x double> %43, <4 x double> %56)
%58 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %47, <4 x double> %49, <4 x double> %57)
br label %59
59: ; preds = %54, %6
%60 = phi double* [ %1, %6 ], [ %17, %54 ]
%61 = phi <4 x double> [ zeroinitializer, %6 ], [ %58, %54 ]
%62 = load double, double* %5
%63 = extractelement <4 x double> %61, i64 0
%64 = fsub double %62, %63
%65 = getelementptr inbounds double, double* %5, i64 1
%66 = load double, double* %65
%67 = extractelement <4 x double> %61, i64 1
%68 = fsub double %66, %67
%69 = getelementptr inbounds double, double* %5, i64 2
%70 = load double, double* %69
%71 = extractelement <4 x double> %61, i64 2
%72 = fsub double %70, %71
%73 = getelementptr inbounds double, double* %5, i64 3
%74 = load double, double* %73
%75 = extractelement <4 x double> %61, i64 3
%76 = fsub double %74, %75
%77 = icmp eq i32 %2, 0
br i1 %77, label %114, label %78
78: ; preds = %59
%79 = load double, double* %3
%80 = getelementptr inbounds double, double* %60, i64 1
%81 = load double, double* %80
%82 = getelementptr inbounds double, double* %60, i64 2
%83 = load double, double* %82
%84 = getelementptr inbounds double, double* %60, i64 3
%85 = load double, double* %84
%86 = fmul double %64, %79
store double %86, double* %5
%87 = fneg double %81
%88 = tail call double @llvm.fmuladd.f64(double %87, double %86, double %68)
%89 = fneg double %83
%90 = tail call double @llvm.fmuladd.f64(double %89, double %86, double %72)
%91 = fneg double %85
%92 = tail call double @llvm.fmuladd.f64(double %91, double %86, double %76)
%93 = getelementptr inbounds double, double* %3, i64 1
%94 = load double, double* %93
%95 = getelementptr inbounds double, double* %60, i64 6
%96 = load double, double* %95
%97 = getelementptr inbounds double, double* %60, i64 7
%98 = load double, double* %97
%99 = fmul double %88, %94
store double %99, double* %65
%100 = fneg double %96
%101 = tail call double @llvm.fmuladd.f64(double %100, double %99, double %90)
%102 = fneg double %98
%103 = tail call double @llvm.fmuladd.f64(double %102, double %99, double %92)
%104 = getelementptr inbounds double, double* %3, i64 2
%105 = load double, double* %104
%106 = getelementptr inbounds double, double* %60, i64 11
%107 = load double, double* %106
%108 = fmul double %101, %105
store double %108, double* %69
%109 = fneg double %107
%110 = tail call double @llvm.fmuladd.f64(double %109, double %108, double %103)
%111 = getelementptr inbounds double, double* %3, i64 3
%112 = load double, double* %111
%113 = fmul double %110, %112
br label %154
114: ; preds = %59
%115 = load double, double* %60
%116 = fdiv double 1.000000e+00, %115
%117 = getelementptr inbounds double, double* %60, i64 1
%118 = load double, double* %117
%119 = getelementptr inbounds double, double* %60, i64 2
%120 = load double, double* %119
%121 = getelementptr inbounds double, double* %60, i64 3
%122 = load double, double* %121
%123 = fmul double %64, %116
store double %123, double* %5
%124 = fneg double %118
%125 = tail call double @llvm.fmuladd.f64(double %124, double %123, double %68)
%126 = fneg double %120
%127 = tail call double @llvm.fmuladd.f64(double %126, double %123, double %72)
%128 = fneg double %122
%129 = tail call double @llvm.fmuladd.f64(double %128, double %123, double %76)
%130 = getelementptr inbounds double, double* %60, i64 5
%131 = load double, double* %130
%132 = fdiv double 1.000000e+00, %131
%133 = getelementptr inbounds double, double* %60, i64 6
%134 = load double, double* %133
%135 = getelementptr inbounds double, double* %60, i64 7
%136 = load double, double* %135
%137 = fmul double %125, %132
store double %137, double* %65
%138 = fneg double %134
%139 = tail call double @llvm.fmuladd.f64(double %138, double %137, double %127)
%140 = fneg double %136
%141 = tail call double @llvm.fmuladd.f64(double %140, double %137, double %129)
%142 = getelementptr inbounds double, double* %60, i64 10
%143 = load double, double* %142
%144 = fdiv double 1.000000e+00, %143
%145 = getelementptr inbounds double, double* %60, i64 11
%146 = load double, double* %145
%147 = fmul double %139, %144
store double %147, double* %69
%148 = fneg double %146
%149 = tail call double @llvm.fmuladd.f64(double %148, double %147, double %141)
%150 = getelementptr inbounds double, double* %60, i64 15
%151 = load double, double* %150
%152 = fdiv double 1.000000e+00, %151
%153 = fmul double %149, %152
br label %154
154: ; preds = %114, %78
%155 = phi double [ %153, %114 ], [ %113, %78 ]
store double %155, double* %73
ret void
}