void kernel_dtrsv_n_4_lib4(int kmax, int inverted_diag, double *A, double *x,
                           double *y) {
  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) {
    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 (inverted_diag) {
    a_00 = 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 = 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 = 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 = A[3 + lda * 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>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
movl   $0x4,-0x24(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    13b7 <kernel_dtrsv_n_4_lib4+0x2b7>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x30(%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  -0x38(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%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  0x58(%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  0x60(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%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  0x78(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
jmp    1148 <kernel_dtrsv_n_4_lib4+0x48>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
cmpl   $0x0,-0x8(%rbp)
je     165f <kernel_dtrsv_n_4_lib4+0x55f>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x50(%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)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x78(%rbp),%xmm0
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)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
jmp    18cd <kernel_dtrsv_n_4_lib4+0x7cd>
mov    -0x10(%rbp),%rax
movsd  0x995(%rip),%xmm0
divsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x50(%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)
mov    -0x10(%rbp),%rax
movsd  0x89b(%rip),%xmm0
divsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x7d4(%rip),%xmm0
divsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x78(%rbp),%xmm0
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)
mov    -0x10(%rbp),%rax
movsd  0x760(%rip),%xmm0
divsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrsv_n_4_lib4>:
xorpd  %xmm0,%xmm0
cmp    $0x4,%edi
jl     11d4 <kernel_dtrsv_n_4_lib4+0xd4>
add    $0xfffffffd,%edi
xorpd  %xmm4,%xmm4
xor    %eax,%eax
xorpd  %xmm2,%xmm2
nopw   0x0(%rax,%rax,1)
movupd (%rdx),%xmm5
movupd 0x10(%rdx),%xmm9
movupd 0x20(%rdx),%xmm8
movupd 0x30(%rdx),%xmm3
movsd  (%rcx,%rax,8),%xmm7
movsd  0x8(%rcx,%rax,8),%xmm6
movsd  0x10(%rcx,%rax,8),%xmm1
movsd  0x18(%rcx,%rax,8),%xmm0
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm5
addpd  %xmm4,%xmm5
mulpd  %xmm9,%xmm7
addpd  %xmm2,%xmm7
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm3
addpd  %xmm7,%xmm3
mulpd  %xmm8,%xmm6
addpd  %xmm5,%xmm6
movupd 0x50(%rdx),%xmm2
movupd 0x40(%rdx),%xmm5
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm5
addpd  %xmm6,%xmm5
mulpd  %xmm2,%xmm1
addpd  %xmm3,%xmm1
movupd 0x60(%rdx),%xmm4
movupd 0x70(%rdx),%xmm3
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm3
movapd %xmm3,%xmm2
addpd  %xmm1,%xmm2
mulpd  %xmm4,%xmm0
movapd %xmm0,%xmm4
addpd  %xmm5,%xmm4
sub    $0xffffffffffffff80,%rdx
add    $0x4,%rax
cmp    %edi,%eax
jl     1120 <kernel_dtrsv_n_4_lib4+0x20>
addpd  %xmm5,%xmm0
addpd  %xmm1,%xmm3
jmp    11d8 <kernel_dtrsv_n_4_lib4+0xd8>
xorpd  %xmm3,%xmm3
movsd  (%r8),%xmm4
movsd  0x8(%r8),%xmm2
subsd  %xmm0,%xmm4
unpckhpd %xmm0,%xmm0
subsd  %xmm0,%xmm2
movsd  0x10(%r8),%xmm1
subsd  %xmm3,%xmm1
movsd  0x18(%r8),%xmm0
unpckhpd %xmm3,%xmm3
subsd  %xmm3,%xmm0
movsd  (%rdx),%xmm5
test   %esi,%esi
je     1288 <kernel_dtrsv_n_4_lib4+0x188>
mulsd  %xmm5,%xmm4
movsd  0x8(%rdx),%xmm3
mulsd  %xmm4,%xmm3
movsd  0x10(%rdx),%xmm5
mulsd  %xmm4,%xmm5
movsd  0x18(%rdx),%xmm6
mulsd  %xmm4,%xmm6
movsd  %xmm4,(%r8)
subsd  %xmm3,%xmm2
subsd  %xmm5,%xmm1
mulsd  0x28(%rdx),%xmm2
subsd  %xmm6,%xmm0
movsd  0x30(%rdx),%xmm3
mulsd  %xmm2,%xmm3
subsd  %xmm3,%xmm1
movsd  0x38(%rdx),%xmm3
mulsd  %xmm2,%xmm3
subsd  %xmm3,%xmm0
movsd  %xmm2,0x8(%r8)
mulsd  0x50(%rdx),%xmm1
movsd  0x58(%rdx),%xmm2
mulsd  %xmm1,%xmm2
subsd  %xmm2,%xmm0
movsd  %xmm1,0x10(%r8)
mulsd  0x78(%rdx),%xmm0
movsd  %xmm0,0x18(%r8)
ret
movsd  0xd70(%rip),%xmm3
movapd %xmm3,%xmm6
divsd  %xmm5,%xmm6
mulsd  %xmm6,%xmm4
movsd  0x8(%rdx),%xmm5
mulsd  %xmm4,%xmm5
movsd  0x10(%rdx),%xmm6
mulsd  %xmm4,%xmm6
movsd  0x18(%rdx),%xmm7
mulsd  %xmm4,%xmm7
movsd  %xmm4,(%r8)
subsd  %xmm5,%xmm2
subsd  %xmm6,%xmm1
subsd  %xmm7,%xmm0
movapd %xmm3,%xmm4
divsd  0x28(%rdx),%xmm4
mulsd  %xmm2,%xmm4
movsd  0x30(%rdx),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm2,%xmm1
movsd  0x38(%rdx),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm2,%xmm0
movsd  %xmm4,0x8(%r8)
movapd %xmm3,%xmm2
divsd  0x50(%rdx),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x58(%rdx),%xmm1
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm2,0x10(%r8)
divsd  0x78(%rdx),%xmm3
mulsd  %xmm3,%xmm0
movsd  %xmm0,0x18(%r8)
ret

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

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