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;
  for (; k < kmax - 7; k += 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;
    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) {
    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    1cdc <kernel_dtrsv_t_4_lib4+0xbdc>
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    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x7,%ecx
cmp    %ecx,%eax
jge    1666 <kernel_dtrsv_t_4_lib4+0x566>
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    -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    1193 <kernel_dtrsv_t_4_lib4+0x93>
jmp    166b <kernel_dtrsv_t_4_lib4+0x56b>
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    18e4 <kernel_dtrsv_t_4_lib4+0x7e4>
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    166b <kernel_dtrsv_t_4_lib4+0x56b>
jmp    18e9 <kernel_dtrsv_t_4_lib4+0x7e9>
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    19a7 <kernel_dtrsv_t_4_lib4+0x8a7>
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    18e9 <kernel_dtrsv_t_4_lib4+0x7e9>
mov    -0x38(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x20(%rbp)
cmpl   $0x0,-0x8(%rbp)
je     1b49 <kernel_dtrsv_t_4_lib4+0xa49>
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    1cdc <kernel_dtrsv_t_4_lib4+0xbdc>
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    1659 <kernel_dtrsv_t_4_lib4+0x559>
push   %rbp
push   %r15
push   %r14
push   %rbx
shl    $0x2,%ecx
movslq %ecx,%r10
lea    (%rdx,%r10,8),%rax
lea    0x20(%r8),%r15
cmp    $0xc,%edi
jb     130c <kernel_dtrsv_t_4_lib4+0x20c>
lea    -0x7(%rdi),%r11d
lea    -0xc(%rdi),%r9d
and    $0xfffffff8,%r9d
mov    %r10,%r14
shl    $0x4,%r14
lea    0x0(,%r10,8),%rbx
xorpd  %xmm6,%xmm6
mov    $0x4,%ebp
xorpd  %xmm4,%xmm4
nopl   (%rax)
mov    %rax,%rcx
movsd  0x40(%rax),%xmm10
movhpd 0x60(%rax),%xmm10
movsd  (%rax),%xmm7
movsd  0x8(%rax),%xmm9
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm8
movhpd 0x20(%rax),%xmm7
movsd  (%r15),%xmm2
movsd  0x8(%r15),%xmm5
movsd  0x10(%r15),%xmm3
movsd  0x18(%r15),%xmm0
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm7
addpd  %xmm6,%xmm7
mulpd  %xmm10,%xmm2
addpd  %xmm4,%xmm2
movhpd 0x28(%rax),%xmm9
movsd  0x48(%rax),%xmm4
movhpd 0x68(%rax),%xmm4
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm4
addpd  %xmm2,%xmm4
mulpd  %xmm9,%xmm5
addpd  %xmm7,%xmm5
movsd  0x50(%rax),%xmm2
movhpd 0x70(%rax),%xmm2
movhpd 0x30(%rax),%xmm1
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm1
addpd  %xmm5,%xmm1
mulpd  %xmm2,%xmm3
addpd  %xmm4,%xmm3
movhpd 0x38(%rax),%xmm8
movsd  0x58(%rax),%xmm4
movhpd 0x78(%rax),%xmm4
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm4
addpd  %xmm3,%xmm4
mulpd  %xmm8,%xmm0
addpd  %xmm1,%xmm0
lea    (%rax,%rbx,1),%rax
movsd  0x40(%rcx,%rbx,1),%xmm5
movhpd 0x60(%rcx,%rbx,1),%xmm5
movsd  (%rcx,%rbx,1),%xmm1
movsd  0x8(%rcx,%rbx,1),%xmm6
movsd  0x10(%rcx,%rbx,1),%xmm2
movhpd 0x20(%rcx,%rbx,1),%xmm1
movsd  0x18(%rcx,%rbx,1),%xmm3
movsd  0x20(%r15),%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm1
addpd  %xmm0,%xmm1
mulpd  %xmm5,%xmm7
movhpd 0x28(%rcx,%rbx,1),%xmm6
addpd  %xmm4,%xmm7
movsd  0x48(%rcx,%rbx,1),%xmm0
movhpd 0x68(%rcx,%rbx,1),%xmm0
movsd  0x28(%r15),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm0
addpd  %xmm7,%xmm0
mulpd  %xmm6,%xmm4
movsd  0x50(%rcx,%rbx,1),%xmm6
movhpd 0x70(%rcx,%rbx,1),%xmm6
addpd  %xmm1,%xmm4
movhpd 0x30(%rcx,%rbx,1),%xmm2
movsd  0x30(%r15),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm2
addpd  %xmm4,%xmm2
mulpd  %xmm6,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x38(%rcx,%rbx,1),%xmm3
movsd  0x58(%rcx,%rbx,1),%xmm0
movhpd 0x78(%rcx,%rbx,1),%xmm0
movsd  0x38(%r15),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm0,%xmm4
addpd  %xmm5,%xmm4
mulpd  %xmm3,%xmm1
movapd %xmm1,%xmm6
addpd  %xmm2,%xmm6
add    $0x8,%ebp
add    $0x40,%r15
add    %rbx,%rax
cmp    %r11d,%ebp
jl     1150 <kernel_dtrsv_t_4_lib4+0x50>
add    %r14,%rcx
addpd  %xmm2,%xmm1
addpd  %xmm5,%xmm0
add    $0xc,%r9d
mov    %rcx,%rax
jmp    131a <kernel_dtrsv_t_4_lib4+0x21a>
xorpd  %xmm1,%xmm1
mov    $0x4,%r9d
xorpd  %xmm0,%xmm0
lea    -0x3(%rdi),%ecx
cmp    %ecx,%r9d
jge    141b <kernel_dtrsv_t_4_lib4+0x31b>
shl    $0x3,%r10
nopw   0x0(%rax,%rax,1)
movsd  0x40(%rax),%xmm10
movhpd 0x60(%rax),%xmm10
movsd  (%rax),%xmm6
movsd  0x8(%rax),%xmm9
movsd  0x10(%rax),%xmm2
movhpd 0x20(%rax),%xmm6
movsd  0x18(%rax),%xmm8
movsd  (%r15),%xmm5
movsd  0x8(%r15),%xmm7
movsd  0x10(%r15),%xmm4
movsd  0x18(%r15),%xmm3
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm6
addpd  %xmm1,%xmm6
mulpd  %xmm10,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x28(%rax),%xmm9
movsd  0x48(%rax),%xmm0
movhpd 0x68(%rax),%xmm0
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm9,%xmm7
movsd  0x50(%rax),%xmm1
movhpd 0x70(%rax),%xmm1
movhpd 0x30(%rax),%xmm2
addpd  %xmm6,%xmm7
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm2
addpd  %xmm7,%xmm2
mulpd  %xmm1,%xmm4
addpd  %xmm0,%xmm4
movhpd 0x38(%rax),%xmm8
movsd  0x58(%rax),%xmm6
movhpd 0x78(%rax),%xmm6
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm6
movapd %xmm6,%xmm0
addpd  %xmm4,%xmm0
mulpd  %xmm8,%xmm3
movapd %xmm3,%xmm1
addpd  %xmm2,%xmm1
add    $0x20,%r15
add    $0x4,%r9d
add    %r10,%rax
cmp    %ecx,%r9d
jl     1330 <kernel_dtrsv_t_4_lib4+0x230>
addpd  %xmm2,%xmm3
addpd  %xmm4,%xmm6
movapd %xmm3,%xmm1
movapd %xmm6,%xmm0
cmp    %edi,%r9d
jge    1439 <kernel_dtrsv_t_4_lib4+0x339>
mov    %edi,%ebp
sub    %r9d,%ebp
mov    %r9d,%ecx
not    %ecx
test   $0x1,%bpl
jne    1446 <kernel_dtrsv_t_4_lib4+0x346>
add    %edi,%ecx
jne    148e <kernel_dtrsv_t_4_lib4+0x38e>
jmp    151c <kernel_dtrsv_t_4_lib4+0x41c>
movapd %xmm1,%xmm2
movapd %xmm0,%xmm3
jmp    151c <kernel_dtrsv_t_4_lib4+0x41c>
movsd  (%rax),%xmm4
movhpd 0x20(%rax),%xmm4
movsd  0x40(%rax),%xmm3
movhpd 0x60(%rax),%xmm3
movsd  (%r15),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm3
addpd  %xmm0,%xmm3
mulpd  %xmm4,%xmm2
addpd  %xmm1,%xmm2
add    $0x8,%rax
add    $0x8,%r15
add    $0x1,%r9d
movapd %xmm2,%xmm1
movapd %xmm3,%xmm0
add    %edi,%ecx
je     151c <kernel_dtrsv_t_4_lib4+0x41c>
sub    %r9d,%edi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%rax,%rcx,8),%xmm4
movsd  0x8(%rax,%rcx,8),%xmm6
movsd  0x40(%rax,%rcx,8),%xmm7
movsd  0x48(%rax,%rcx,8),%xmm3
movhpd 0x60(%rax,%rcx,8),%xmm7
movhpd 0x20(%rax,%rcx,8),%xmm4
movsd  (%r15,%rcx,8),%xmm5
movsd  0x8(%r15,%rcx,8),%xmm2
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm4
addpd  %xmm1,%xmm4
mulpd  %xmm7,%xmm5
movhpd 0x28(%rax,%rcx,8),%xmm6
movhpd 0x68(%rax,%rcx,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,%rcx
cmp    %ecx,%edi
jne    14a0 <kernel_dtrsv_t_4_lib4+0x3a0>
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     15c7 <kernel_dtrsv_t_4_lib4+0x4c7>
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    164e <kernel_dtrsv_t_4_lib4+0x54e>
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    %r15
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 %626
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
br label %39
39: ; preds = %275, %27
%40 = load i32, i32* %13
%41 = load i32, i32* %6
%42 = sub nsw i32 %41, 7
%43 = icmp slt i32 %40, %42
br i1 %43, label %44, label %278
44: ; preds = %39
%45 = load double*, double** %10
%46 = getelementptr inbounds double, double* %45, i64 0
%47 = load double, double* %46
store double %47, double* %16
%48 = load double*, double** %10
%49 = getelementptr inbounds double, double* %48, i64 1
%50 = load double, double* %49
store double %50, double* %17
%51 = load double*, double** %10
%52 = getelementptr inbounds double, double* %51, i64 2
%53 = load double, double* %52
store double %53, double* %18
%54 = load double*, double** %10
%55 = getelementptr inbounds double, double* %54, i64 3
%56 = load double, double* %55
store double %56, double* %19
%57 = load double*, double** %8
%58 = getelementptr inbounds double, double* %57, i64 0
%59 = load double, double* %58
%60 = load double, double* %16
%61 = load double, double* %20
%62 = call double @llvm.fmuladd.f64(double %59, double %60, double %61)
store double %62, double* %20
%63 = load double*, double** %8
%64 = getelementptr inbounds double, double* %63, i64 4
%65 = load double, double* %64
%66 = load double, double* %16
%67 = load double, double* %21
%68 = call double @llvm.fmuladd.f64(double %65, double %66, double %67)
store double %68, double* %21
%69 = load double*, double** %8
%70 = getelementptr inbounds double, double* %69, i64 8
%71 = load double, double* %70
%72 = load double, double* %16
%73 = load double, double* %22
%74 = call double @llvm.fmuladd.f64(double %71, double %72, double %73)
store double %74, double* %22
%75 = load double*, double** %8
%76 = getelementptr inbounds double, double* %75, i64 12
%77 = load double, double* %76
%78 = load double, double* %16
%79 = load double, double* %23
%80 = call double @llvm.fmuladd.f64(double %77, double %78, double %79)
store double %80, double* %23
%81 = load double*, double** %8
%82 = getelementptr inbounds double, double* %81, i64 1
%83 = load double, double* %82
%84 = load double, double* %17
%85 = load double, double* %20
%86 = call double @llvm.fmuladd.f64(double %83, double %84, double %85)
store double %86, double* %20
%87 = load double*, double** %8
%88 = getelementptr inbounds double, double* %87, i64 5
%89 = load double, double* %88
%90 = load double, double* %17
%91 = load double, double* %21
%92 = call double @llvm.fmuladd.f64(double %89, double %90, double %91)
store double %92, double* %21
%93 = load double*, double** %8
%94 = getelementptr inbounds double, double* %93, i64 9
%95 = load double, double* %94
%96 = load double, double* %17
%97 = load double, double* %22
%98 = call double @llvm.fmuladd.f64(double %95, double %96, double %97)
store double %98, double* %22
%99 = load double*, double** %8
%100 = getelementptr inbounds double, double* %99, i64 13
%101 = load double, double* %100
%102 = load double, double* %17
%103 = load double, double* %23
%104 = call double @llvm.fmuladd.f64(double %101, double %102, double %103)
store double %104, double* %23
%105 = load double*, double** %8
%106 = getelementptr inbounds double, double* %105, i64 2
%107 = load double, double* %106
%108 = load double, double* %18
%109 = load double, double* %20
%110 = call double @llvm.fmuladd.f64(double %107, double %108, double %109)
store double %110, double* %20
%111 = load double*, double** %8
%112 = getelementptr inbounds double, double* %111, i64 6
%113 = load double, double* %112
%114 = load double, double* %18
%115 = load double, double* %21
%116 = call double @llvm.fmuladd.f64(double %113, double %114, double %115)
store double %116, double* %21
%117 = load double*, double** %8
%118 = getelementptr inbounds double, double* %117, i64 10
%119 = load double, double* %118
%120 = load double, double* %18
%121 = load double, double* %22
%122 = call double @llvm.fmuladd.f64(double %119, double %120, double %121)
store double %122, double* %22
%123 = load double*, double** %8
%124 = getelementptr inbounds double, double* %123, i64 14
%125 = load double, double* %124
%126 = load double, double* %18
%127 = load double, double* %23
%128 = call double @llvm.fmuladd.f64(double %125, double %126, double %127)
store double %128, double* %23
%129 = load double*, double** %8
%130 = getelementptr inbounds double, double* %129, i64 3
%131 = load double, double* %130
%132 = load double, double* %19
%133 = load double, double* %20
%134 = call double @llvm.fmuladd.f64(double %131, double %132, double %133)
store double %134, double* %20
%135 = load double*, double** %8
%136 = getelementptr inbounds double, double* %135, i64 7
%137 = load double, double* %136
%138 = load double, double* %19
%139 = load double, double* %21
%140 = call double @llvm.fmuladd.f64(double %137, double %138, double %139)
store double %140, double* %21
%141 = load double*, double** %8
%142 = getelementptr inbounds double, double* %141, i64 11
%143 = load double, double* %142
%144 = load double, double* %19
%145 = load double, double* %22
%146 = call double @llvm.fmuladd.f64(double %143, double %144, double %145)
store double %146, double* %22
%147 = load double*, double** %8
%148 = getelementptr inbounds double, double* %147, i64 15
%149 = load double, double* %148
%150 = load double, double* %19
%151 = load double, double* %23
%152 = call double @llvm.fmuladd.f64(double %149, double %150, double %151)
store double %152, double* %23
%153 = load i32, i32* %9
%154 = mul nsw i32 %153, 4
%155 = load double*, double** %8
%156 = sext i32 %154 to i64
%157 = getelementptr inbounds double, double* %155, i64 %156
store double* %157, double** %8
%158 = load double*, double** %10
%159 = getelementptr inbounds double, double* %158, i64 4
store double* %159, double** %10
%160 = load double*, double** %10
%161 = getelementptr inbounds double, double* %160, i64 0
%162 = load double, double* %161
store double %162, double* %16
%163 = load double*, double** %10
%164 = getelementptr inbounds double, double* %163, i64 1
%165 = load double, double* %164
store double %165, double* %17
%166 = load double*, double** %10
%167 = getelementptr inbounds double, double* %166, i64 2
%168 = load double, double* %167
store double %168, double* %18
%169 = load double*, double** %10
%170 = getelementptr inbounds double, double* %169, i64 3
%171 = load double, double* %170
store double %171, double* %19
%172 = load double*, double** %8
%173 = getelementptr inbounds double, double* %172, i64 0
%174 = load double, double* %173
%175 = load double, double* %16
%176 = load double, double* %20
%177 = call double @llvm.fmuladd.f64(double %174, double %175, double %176)
store double %177, double* %20
%178 = load double*, double** %8
%179 = getelementptr inbounds double, double* %178, i64 4
%180 = load double, double* %179
%181 = load double, double* %16
%182 = load double, double* %21
%183 = call double @llvm.fmuladd.f64(double %180, double %181, double %182)
store double %183, double* %21
%184 = load double*, double** %8
%185 = getelementptr inbounds double, double* %184, i64 8
%186 = load double, double* %185
%187 = load double, double* %16
%188 = load double, double* %22
%189 = call double @llvm.fmuladd.f64(double %186, double %187, double %188)
store double %189, double* %22
%190 = load double*, double** %8
%191 = getelementptr inbounds double, double* %190, i64 12
%192 = load double, double* %191
%193 = load double, double* %16
%194 = load double, double* %23
%195 = call double @llvm.fmuladd.f64(double %192, double %193, double %194)
store double %195, double* %23
%196 = load double*, double** %8
%197 = getelementptr inbounds double, double* %196, i64 1
%198 = load double, double* %197
%199 = load double, double* %17
%200 = load double, double* %20
%201 = call double @llvm.fmuladd.f64(double %198, double %199, double %200)
store double %201, double* %20
%202 = load double*, double** %8
%203 = getelementptr inbounds double, double* %202, i64 5
%204 = load double, double* %203
%205 = load double, double* %17
%206 = load double, double* %21
%207 = call double @llvm.fmuladd.f64(double %204, double %205, double %206)
store double %207, double* %21
%208 = load double*, double** %8
%209 = getelementptr inbounds double, double* %208, i64 9
%210 = load double, double* %209
%211 = load double, double* %17
%212 = load double, double* %22
%213 = call double @llvm.fmuladd.f64(double %210, double %211, double %212)
store double %213, double* %22
%214 = load double*, double** %8
%215 = getelementptr inbounds double, double* %214, i64 13
%216 = load double, double* %215
%217 = load double, double* %17
%218 = load double, double* %23
%219 = call double @llvm.fmuladd.f64(double %216, double %217, double %218)
store double %219, double* %23
%220 = load double*, double** %8
%221 = getelementptr inbounds double, double* %220, i64 2
%222 = load double, double* %221
%223 = load double, double* %18
%224 = load double, double* %20
%225 = call double @llvm.fmuladd.f64(double %222, double %223, double %224)
store double %225, double* %20
%226 = load double*, double** %8
%227 = getelementptr inbounds double, double* %226, i64 6
%228 = load double, double* %227
%229 = load double, double* %18
%230 = load double, double* %21
%231 = call double @llvm.fmuladd.f64(double %228, double %229, double %230)
store double %231, double* %21
%232 = load double*, double** %8
%233 = getelementptr inbounds double, double* %232, i64 10
%234 = load double, double* %233
%235 = load double, double* %18
%236 = load double, double* %22
%237 = call double @llvm.fmuladd.f64(double %234, double %235, double %236)
store double %237, double* %22
%238 = load double*, double** %8
%239 = getelementptr inbounds double, double* %238, i64 14
%240 = load double, double* %239
%241 = load double, double* %18
%242 = load double, double* %23
%243 = call double @llvm.fmuladd.f64(double %240, double %241, double %242)
store double %243, double* %23
%244 = load double*, double** %8
%245 = getelementptr inbounds double, double* %244, i64 3
%246 = load double, double* %245
%247 = load double, double* %19
%248 = load double, double* %20
%249 = call double @llvm.fmuladd.f64(double %246, double %247, double %248)
store double %249, double* %20
%250 = load double*, double** %8
%251 = getelementptr inbounds double, double* %250, i64 7
%252 = load double, double* %251
%253 = load double, double* %19
%254 = load double, double* %21
%255 = call double @llvm.fmuladd.f64(double %252, double %253, double %254)
store double %255, double* %21
%256 = load double*, double** %8
%257 = getelementptr inbounds double, double* %256, i64 11
%258 = load double, double* %257
%259 = load double, double* %19
%260 = load double, double* %22
%261 = call double @llvm.fmuladd.f64(double %258, double %259, double %260)
store double %261, double* %22
%262 = load double*, double** %8
%263 = getelementptr inbounds double, double* %262, i64 15
%264 = load double, double* %263
%265 = load double, double* %19
%266 = load double, double* %23
%267 = call double @llvm.fmuladd.f64(double %264, double %265, double %266)
store double %267, double* %23
%268 = load i32, i32* %9
%269 = mul nsw i32 %268, 4
%270 = load double*, double** %8
%271 = sext i32 %269 to i64
%272 = getelementptr inbounds double, double* %270, i64 %271
store double* %272, double** %8
%273 = load double*, double** %10
%274 = getelementptr inbounds double, double* %273, i64 4
store double* %274, double** %10
br label %275
275: ; preds = %44
%276 = load i32, i32* %13
%277 = add nsw i32 %276, 8
store i32 %277, i32* %13
br label %39
278: ; preds = %39
br label %279
279: ; preds = %400, %278
%280 = load i32, i32* %13
%281 = load i32, i32* %6
%282 = sub nsw i32 %281, 3
%283 = icmp slt i32 %280, %282
br i1 %283, label %284, label %403
284: ; preds = %279
%285 = load double*, double** %10
%286 = getelementptr inbounds double, double* %285, i64 0
%287 = load double, double* %286
store double %287, double* %16
%288 = load double*, double** %10
%289 = getelementptr inbounds double, double* %288, i64 1
%290 = load double, double* %289
store double %290, double* %17
%291 = load double*, double** %10
%292 = getelementptr inbounds double, double* %291, i64 2
%293 = load double, double* %292
store double %293, double* %18
%294 = load double*, double** %10
%295 = getelementptr inbounds double, double* %294, i64 3
%296 = load double, double* %295
store double %296, double* %19
%297 = load double*, double** %8
%298 = getelementptr inbounds double, double* %297, i64 0
%299 = load double, double* %298
%300 = load double, double* %16
%301 = load double, double* %20
%302 = call double @llvm.fmuladd.f64(double %299, double %300, double %301)
store double %302, double* %20
%303 = load double*, double** %8
%304 = getelementptr inbounds double, double* %303, i64 4
%305 = load double, double* %304
%306 = load double, double* %16
%307 = load double, double* %21
%308 = call double @llvm.fmuladd.f64(double %305, double %306, double %307)
store double %308, double* %21
%309 = load double*, double** %8
%310 = getelementptr inbounds double, double* %309, i64 8
%311 = load double, double* %310
%312 = load double, double* %16
%313 = load double, double* %22
%314 = call double @llvm.fmuladd.f64(double %311, double %312, double %313)
store double %314, double* %22
%315 = load double*, double** %8
%316 = getelementptr inbounds double, double* %315, i64 12
%317 = load double, double* %316
%318 = load double, double* %16
%319 = load double, double* %23
%320 = call double @llvm.fmuladd.f64(double %317, double %318, double %319)
store double %320, double* %23
%321 = load double*, double** %8
%322 = getelementptr inbounds double, double* %321, i64 1
%323 = load double, double* %322
%324 = load double, double* %17
%325 = load double, double* %20
%326 = call double @llvm.fmuladd.f64(double %323, double %324, double %325)
store double %326, double* %20
%327 = load double*, double** %8
%328 = getelementptr inbounds double, double* %327, i64 5
%329 = load double, double* %328
%330 = load double, double* %17
%331 = load double, double* %21
%332 = call double @llvm.fmuladd.f64(double %329, double %330, double %331)
store double %332, double* %21
%333 = load double*, double** %8
%334 = getelementptr inbounds double, double* %333, i64 9
%335 = load double, double* %334
%336 = load double, double* %17
%337 = load double, double* %22
%338 = call double @llvm.fmuladd.f64(double %335, double %336, double %337)
store double %338, double* %22
%339 = load double*, double** %8
%340 = getelementptr inbounds double, double* %339, i64 13
%341 = load double, double* %340
%342 = load double, double* %17
%343 = load double, double* %23
%344 = call double @llvm.fmuladd.f64(double %341, double %342, double %343)
store double %344, double* %23
%345 = load double*, double** %8
%346 = getelementptr inbounds double, double* %345, i64 2
%347 = load double, double* %346
%348 = load double, double* %18
%349 = load double, double* %20
%350 = call double @llvm.fmuladd.f64(double %347, double %348, double %349)
store double %350, double* %20
%351 = load double*, double** %8
%352 = getelementptr inbounds double, double* %351, i64 6
%353 = load double, double* %352
%354 = load double, double* %18
%355 = load double, double* %21
%356 = call double @llvm.fmuladd.f64(double %353, double %354, double %355)
store double %356, double* %21
%357 = load double*, double** %8
%358 = getelementptr inbounds double, double* %357, i64 10
%359 = load double, double* %358
%360 = load double, double* %18
%361 = load double, double* %22
%362 = call double @llvm.fmuladd.f64(double %359, double %360, double %361)
store double %362, double* %22
%363 = load double*, double** %8
%364 = getelementptr inbounds double, double* %363, i64 14
%365 = load double, double* %364
%366 = load double, double* %18
%367 = load double, double* %23
%368 = call double @llvm.fmuladd.f64(double %365, double %366, double %367)
store double %368, double* %23
%369 = load double*, double** %8
%370 = getelementptr inbounds double, double* %369, i64 3
%371 = load double, double* %370
%372 = load double, double* %19
%373 = load double, double* %20
%374 = call double @llvm.fmuladd.f64(double %371, double %372, double %373)
store double %374, double* %20
%375 = load double*, double** %8
%376 = getelementptr inbounds double, double* %375, i64 7
%377 = load double, double* %376
%378 = load double, double* %19
%379 = load double, double* %21
%380 = call double @llvm.fmuladd.f64(double %377, double %378, double %379)
store double %380, double* %21
%381 = load double*, double** %8
%382 = getelementptr inbounds double, double* %381, i64 11
%383 = load double, double* %382
%384 = load double, double* %19
%385 = load double, double* %22
%386 = call double @llvm.fmuladd.f64(double %383, double %384, double %385)
store double %386, double* %22
%387 = load double*, double** %8
%388 = getelementptr inbounds double, double* %387, i64 15
%389 = load double, double* %388
%390 = load double, double* %19
%391 = load double, double* %23
%392 = call double @llvm.fmuladd.f64(double %389, double %390, double %391)
store double %392, double* %23
%393 = load i32, i32* %9
%394 = mul nsw i32 %393, 4
%395 = load double*, double** %8
%396 = sext i32 %394 to i64
%397 = getelementptr inbounds double, double* %395, i64 %396
store double* %397, double** %8
%398 = load double*, double** %10
%399 = getelementptr inbounds double, double* %398, i64 4
store double* %399, double** %10
br label %400
400: ; preds = %284
%401 = load i32, i32* %13
%402 = add nsw i32 %401, 4
store i32 %402, i32* %13
br label %279
403: ; preds = %279
br label %404
404: ; preds = %440, %403
%405 = load i32, i32* %13
%406 = load i32, i32* %6
%407 = icmp slt i32 %405, %406
br i1 %407, label %408, label %443
408: ; preds = %404
%409 = load double*, double** %10
%410 = getelementptr inbounds double, double* %409, i64 0
%411 = load double, double* %410
store double %411, double* %16
%412 = load double*, double** %8
%413 = getelementptr inbounds double, double* %412, i64 0
%414 = load double, double* %413
%415 = load double, double* %16
%416 = load double, double* %20
%417 = call double @llvm.fmuladd.f64(double %414, double %415, double %416)
store double %417, double* %20
%418 = load double*, double** %8
%419 = getelementptr inbounds double, double* %418, i64 4
%420 = load double, double* %419
%421 = load double, double* %16
%422 = load double, double* %21
%423 = call double @llvm.fmuladd.f64(double %420, double %421, double %422)
store double %423, double* %21
%424 = load double*, double** %8
%425 = getelementptr inbounds double, double* %424, i64 8
%426 = load double, double* %425
%427 = load double, double* %16
%428 = load double, double* %22
%429 = call double @llvm.fmuladd.f64(double %426, double %427, double %428)
store double %429, double* %22
%430 = load double*, double** %8
%431 = getelementptr inbounds double, double* %430, i64 12
%432 = load double, double* %431
%433 = load double, double* %16
%434 = load double, double* %23
%435 = call double @llvm.fmuladd.f64(double %432, double %433, double %434)
store double %435, double* %23
%436 = load double*, double** %8
%437 = getelementptr inbounds double, double* %436, i64 1
store double* %437, double** %8
%438 = load double*, double** %10
%439 = getelementptr inbounds double, double* %438, i64 1
store double* %439, double** %10
br label %440
440: ; preds = %408
%441 = load i32, i32* %13
%442 = add nsw i32 %441, 1
store i32 %442, i32* %13
br label %404
443: ; preds = %404
%444 = load double*, double** %14
store double* %444, double** %8
%445 = load double*, double** %15
store double* %445, double** %10
%446 = load i32, i32* %7
%447 = icmp ne i32 %446, 0
br i1 %447, label %448, label %537
448: ; preds = %443
%449 = load double*, double** %10
%450 = getelementptr inbounds double, double* %449, i64 3
%451 = load double, double* %450
%452 = load double, double* %23
%453 = fsub double %451, %452
store double %453, double* %23
%454 = load double*, double** %8
%455 = getelementptr inbounds double, double* %454, i64 15
%456 = load double, double* %455
%457 = load double, double* %23
%458 = fmul double %457, %456
store double %458, double* %23
%459 = load double, double* %23
%460 = load double*, double** %10
%461 = getelementptr inbounds double, double* %460, i64 3
store double %459, double* %461
%462 = load double*, double** %10
%463 = getelementptr inbounds double, double* %462, i64 2
%464 = load double, double* %463
%465 = load double*, double** %8
%466 = getelementptr inbounds double, double* %465, i64 11
%467 = load double, double* %466
%468 = load double, double* %23
%469 = fneg double %467
%470 = call double @llvm.fmuladd.f64(double %469, double %468, double %464)
%471 = load double, double* %22
%472 = fsub double %470, %471
store double %472, double* %22
%473 = load double*, double** %8
%474 = getelementptr inbounds double, double* %473, i64 10
%475 = load double, double* %474
%476 = load double, double* %22
%477 = fmul double %476, %475
store double %477, double* %22
%478 = load double, double* %22
%479 = load double*, double** %10
%480 = getelementptr inbounds double, double* %479, i64 2
store double %478, double* %480
%481 = load double*, double** %8
%482 = getelementptr inbounds double, double* %481, i64 2
%483 = load double, double* %482
%484 = load double, double* %22
%485 = load double*, double** %8
%486 = getelementptr inbounds double, double* %485, i64 3
%487 = load double, double* %486
%488 = load double, double* %23
%489 = fmul double %487, %488
%490 = call double @llvm.fmuladd.f64(double %483, double %484, double %489)
%491 = load double, double* %20
%492 = fadd double %491, %490
store double %492, double* %20
%493 = load double*, double** %8
%494 = getelementptr inbounds double, double* %493, i64 6
%495 = load double, double* %494
%496 = load double, double* %22
%497 = load double*, double** %8
%498 = getelementptr inbounds double, double* %497, i64 7
%499 = load double, double* %498
%500 = load double, double* %23
%501 = fmul double %499, %500
%502 = call double @llvm.fmuladd.f64(double %495, double %496, double %501)
%503 = load double, double* %21
%504 = fadd double %503, %502
store double %504, double* %21
%505 = load double*, double** %10
%506 = getelementptr inbounds double, double* %505, i64 1
%507 = load double, double* %506
%508 = load double, double* %21
%509 = fsub double %507, %508
store double %509, double* %21
%510 = load double*, double** %8
%511 = getelementptr inbounds double, double* %510, i64 5
%512 = load double, double* %511
%513 = load double, double* %21
%514 = fmul double %513, %512
store double %514, double* %21
%515 = load double, double* %21
%516 = load double*, double** %10
%517 = getelementptr inbounds double, double* %516, i64 1
store double %515, double* %517
%518 = load double*, double** %10
%519 = getelementptr inbounds double, double* %518, i64 0
%520 = load double, double* %519
%521 = load double*, double** %8
%522 = getelementptr inbounds double, double* %521, i64 1
%523 = load double, double* %522
%524 = load double, double* %21
%525 = fneg double %523
%526 = call double @llvm.fmuladd.f64(double %525, double %524, double %520)
%527 = load double, double* %20
%528 = fsub double %526, %527
store double %528, double* %20
%529 = load double*, double** %8
%530 = getelementptr inbounds double, double* %529, i64 0
%531 = load double, double* %530
%532 = load double, double* %20
%533 = fmul double %532, %531
store double %533, double* %20
%534 = load double, double* %20
%535 = load double*, double** %10
%536 = getelementptr inbounds double, double* %535, i64 0
store double %534, double* %536
br label %626
537: ; preds = %443
%538 = load double*, double** %10
%539 = getelementptr inbounds double, double* %538, i64 3
%540 = load double, double* %539
%541 = load double, double* %23
%542 = fsub double %540, %541
store double %542, double* %23
%543 = load double*, double** %8
%544 = getelementptr inbounds double, double* %543, i64 15
%545 = load double, double* %544
%546 = load double, double* %23
%547 = fdiv double %546, %545
store double %547, double* %23
%548 = load double, double* %23
%549 = load double*, double** %10
%550 = getelementptr inbounds double, double* %549, i64 3
store double %548, double* %550
%551 = load double*, double** %10
%552 = getelementptr inbounds double, double* %551, i64 2
%553 = load double, double* %552
%554 = load double*, double** %8
%555 = getelementptr inbounds double, double* %554, i64 11
%556 = load double, double* %555
%557 = load double, double* %23
%558 = fneg double %556
%559 = call double @llvm.fmuladd.f64(double %558, double %557, double %553)
%560 = load double, double* %22
%561 = fsub double %559, %560
store double %561, double* %22
%562 = load double*, double** %8
%563 = getelementptr inbounds double, double* %562, i64 10
%564 = load double, double* %563
%565 = load double, double* %22
%566 = fdiv double %565, %564
store double %566, double* %22
%567 = load double, double* %22
%568 = load double*, double** %10
%569 = getelementptr inbounds double, double* %568, i64 2
store double %567, double* %569
%570 = load double*, double** %8
%571 = getelementptr inbounds double, double* %570, i64 2
%572 = load double, double* %571
%573 = load double, double* %22
%574 = load double*, double** %8
%575 = getelementptr inbounds double, double* %574, i64 3
%576 = load double, double* %575
%577 = load double, double* %23
%578 = fmul double %576, %577
%579 = call double @llvm.fmuladd.f64(double %572, double %573, double %578)
%580 = load double, double* %20
%581 = fadd double %580, %579
store double %581, double* %20
%582 = load double*, double** %8
%583 = getelementptr inbounds double, double* %582, i64 6
%584 = load double, double* %583
%585 = load double, double* %22
%586 = load double*, double** %8
%587 = getelementptr inbounds double, double* %586, i64 7
%588 = load double, double* %587
%589 = load double, double* %23
%590 = fmul double %588, %589
%591 = call double @llvm.fmuladd.f64(double %584, double %585, double %590)
%592 = load double, double* %21
%593 = fadd double %592, %591
store double %593, double* %21
%594 = load double*, double** %10
%595 = getelementptr inbounds double, double* %594, i64 1
%596 = load double, double* %595
%597 = load double, double* %21
%598 = fsub double %596, %597
store double %598, double* %21
%599 = load double*, double** %8
%600 = getelementptr inbounds double, double* %599, i64 5
%601 = load double, double* %600
%602 = load double, double* %21
%603 = fdiv double %602, %601
store double %603, double* %21
%604 = load double, double* %21
%605 = load double*, double** %10
%606 = getelementptr inbounds double, double* %605, i64 1
store double %604, double* %606
%607 = load double*, double** %10
%608 = getelementptr inbounds double, double* %607, i64 0
%609 = load double, double* %608
%610 = load double*, double** %8
%611 = getelementptr inbounds double, double* %610, i64 1
%612 = load double, double* %611
%613 = load double, double* %21
%614 = fneg double %612
%615 = call double @llvm.fmuladd.f64(double %614, double %613, double %609)
%616 = load double, double* %20
%617 = fsub double %615, %616
store double %617, double* %20
%618 = load double*, double** %8
%619 = getelementptr inbounds double, double* %618, i64 0
%620 = load double, double* %619
%621 = load double, double* %20
%622 = fdiv double %621, %620
store double %622, double* %20
%623 = load double, double* %20
%624 = load double*, double** %10
%625 = getelementptr inbounds double, double* %624, i64 0
store double %623, double* %625
br label %626
626: ; preds = %26, %537, %448
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 %437, label %7
7: ; preds = %5
%8 = shl i32 %3, 2
%9 = sext i32 %8 to i64
%10 = add nsw i32 %0, -7
%11 = getelementptr inbounds double, double* %2, i64 %9
%12 = getelementptr inbounds double, double* %4, i64 4
%13 = icmp ugt i32 %0, 11
br i1 %13, label %14, label %27
14: ; preds = %7
%15 = add nsw i32 %0, -12
%16 = and i32 %15, -8
br label %34
17: ; preds = %34
%18 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %57, <4 x double> %59, <4 x double> %39)
%19 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %72, <4 x double> %74, <4 x double> %18)
%20 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %87, <4 x double> %89, <4 x double> %19)
%21 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %102, <4 x double> %104, <4 x double> %20)
%22 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %125, <4 x double> %127, <4 x double> %21)
%23 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %140, <4 x double> %142, <4 x double> %22)
%24 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %155, <4 x double> %157, <4 x double> %23)
%25 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %170, <4 x double> %172, <4 x double> %24)
%26 = add i32 %16, 12
br label %27
27: ; preds = %17, %7
%28 = phi i32 [ 4, %7 ], [ %26, %17 ]
%29 = phi double* [ %11, %7 ], [ %175, %17 ]
%30 = phi double* [ %12, %7 ], [ %176, %17 ]
%31 = phi <4 x double> [ zeroinitializer, %7 ], [ %25, %17 ]
%32 = add nsw i32 %0, -3
%33 = icmp slt i32 %28, %32
br i1 %33, label %222, label %183
34: ; preds = %14, %34
%35 = phi double* [ %176, %34 ], [ %12, %14 ]
%36 = phi double* [ %175, %34 ], [ %11, %14 ]
%37 = phi double* [ %107, %34 ], [ %4, %14 ]
%38 = phi i32 [ %174, %34 ], [ 4, %14 ]
%39 = phi <4 x double> [ %173, %34 ], [ zeroinitializer, %14 ]
%40 = load double, double* %35
%41 = getelementptr inbounds double, double* %37, i64 5
%42 = load double, double* %41
%43 = getelementptr inbounds double, double* %37, i64 6
%44 = load double, double* %43
%45 = getelementptr inbounds double, double* %37, i64 7
%46 = load double, double* %45
%47 = load double, double* %36
%48 = getelementptr inbounds double, double* %36, i64 4
%49 = load double, double* %48
%50 = getelementptr inbounds double, double* %36, i64 8
%51 = load double, double* %50
%52 = getelementptr inbounds double, double* %36, i64 12
%53 = load double, double* %52
%54 = insertelement <4 x double> poison, double %47, i64 0
%55 = insertelement <4 x double> %54, double %49, i64 1
%56 = insertelement <4 x double> %55, double %51, i64 2
%57 = insertelement <4 x double> %56, double %53, i64 3
%58 = insertelement <4 x double> poison, double %40, i64 0
%59 = shufflevector <4 x double> %58, <4 x double> poison, <4 x i32> zeroinitializer
%60 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %57, <4 x double> %59, <4 x double> %39)
%61 = getelementptr inbounds double, double* %36, i64 1
%62 = load double, double* %61
%63 = getelementptr inbounds double, double* %36, i64 5
%64 = load double, double* %63
%65 = getelementptr inbounds double, double* %36, i64 9
%66 = load double, double* %65
%67 = getelementptr inbounds double, double* %36, i64 13
%68 = load double, double* %67
%69 = insertelement <4 x double> poison, double %62, i64 0
%70 = insertelement <4 x double> %69, double %64, i64 1
%71 = insertelement <4 x double> %70, double %66, i64 2
%72 = insertelement <4 x double> %71, double %68, i64 3
%73 = insertelement <4 x double> poison, double %42, i64 0
%74 = shufflevector <4 x double> %73, <4 x double> poison, <4 x i32> zeroinitializer
%75 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %72, <4 x double> %74, <4 x double> %60)
%76 = getelementptr inbounds double, double* %36, i64 2
%77 = load double, double* %76
%78 = getelementptr inbounds double, double* %36, i64 6
%79 = load double, double* %78
%80 = getelementptr inbounds double, double* %36, i64 10
%81 = load double, double* %80
%82 = getelementptr inbounds double, double* %36, i64 14
%83 = load double, double* %82
%84 = insertelement <4 x double> poison, double %77, i64 0
%85 = insertelement <4 x double> %84, double %79, i64 1
%86 = insertelement <4 x double> %85, double %81, i64 2
%87 = insertelement <4 x double> %86, double %83, i64 3
%88 = insertelement <4 x double> poison, double %44, i64 0
%89 = shufflevector <4 x double> %88, <4 x double> poison, <4 x i32> zeroinitializer
%90 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %87, <4 x double> %89, <4 x double> %75)
%91 = getelementptr inbounds double, double* %36, i64 3
%92 = load double, double* %91
%93 = getelementptr inbounds double, double* %36, i64 7
%94 = load double, double* %93
%95 = getelementptr inbounds double, double* %36, i64 11
%96 = load double, double* %95
%97 = getelementptr inbounds double, double* %36, i64 15
%98 = load double, double* %97
%99 = insertelement <4 x double> poison, double %92, i64 0
%100 = insertelement <4 x double> %99, double %94, i64 1
%101 = insertelement <4 x double> %100, double %96, i64 2
%102 = insertelement <4 x double> %101, double %98, i64 3
%103 = insertelement <4 x double> poison, double %46, i64 0
%104 = shufflevector <4 x double> %103, <4 x double> poison, <4 x i32> zeroinitializer
%105 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %102, <4 x double> %104, <4 x double> %90)
%106 = getelementptr inbounds double, double* %36, i64 %9
%107 = getelementptr inbounds double, double* %37, i64 8
%108 = load double, double* %107
%109 = getelementptr inbounds double, double* %37, i64 9
%110 = load double, double* %109
%111 = getelementptr inbounds double, double* %37, i64 10
%112 = load double, double* %111
%113 = getelementptr inbounds double, double* %37, i64 11
%114 = load double, double* %113
%115 = load double, double* %106
%116 = getelementptr inbounds double, double* %106, i64 4
%117 = load double, double* %116
%118 = getelementptr inbounds double, double* %106, i64 8
%119 = load double, double* %118
%120 = getelementptr inbounds double, double* %106, i64 12
%121 = load double, double* %120
%122 = insertelement <4 x double> poison, double %115, i64 0
%123 = insertelement <4 x double> %122, double %117, i64 1
%124 = insertelement <4 x double> %123, double %119, i64 2
%125 = insertelement <4 x double> %124, double %121, i64 3
%126 = insertelement <4 x double> poison, double %108, i64 0
%127 = shufflevector <4 x double> %126, <4 x double> poison, <4 x i32> zeroinitializer
%128 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %125, <4 x double> %127, <4 x double> %105)
%129 = getelementptr inbounds double, double* %106, i64 1
%130 = load double, double* %129
%131 = getelementptr inbounds double, double* %106, i64 5
%132 = load double, double* %131
%133 = getelementptr inbounds double, double* %106, i64 9
%134 = load double, double* %133
%135 = getelementptr inbounds double, double* %106, i64 13
%136 = load double, double* %135
%137 = insertelement <4 x double> poison, double %130, i64 0
%138 = insertelement <4 x double> %137, double %132, i64 1
%139 = insertelement <4 x double> %138, double %134, i64 2
%140 = insertelement <4 x double> %139, double %136, i64 3
%141 = insertelement <4 x double> poison, double %110, i64 0
%142 = shufflevector <4 x double> %141, <4 x double> poison, <4 x i32> zeroinitializer
%143 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %140, <4 x double> %142, <4 x double> %128)
%144 = getelementptr inbounds double, double* %106, i64 2
%145 = load double, double* %144
%146 = getelementptr inbounds double, double* %106, i64 6
%147 = load double, double* %146
%148 = getelementptr inbounds double, double* %106, i64 10
%149 = load double, double* %148
%150 = getelementptr inbounds double, double* %106, i64 14
%151 = load double, double* %150
%152 = insertelement <4 x double> poison, double %145, i64 0
%153 = insertelement <4 x double> %152, double %147, i64 1
%154 = insertelement <4 x double> %153, double %149, i64 2
%155 = insertelement <4 x double> %154, double %151, i64 3
%156 = insertelement <4 x double> poison, double %112, i64 0
%157 = shufflevector <4 x double> %156, <4 x double> poison, <4 x i32> zeroinitializer
%158 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %155, <4 x double> %157, <4 x double> %143)
%159 = getelementptr inbounds double, double* %106, i64 3
%160 = load double, double* %159
%161 = getelementptr inbounds double, double* %106, i64 7
%162 = load double, double* %161
%163 = getelementptr inbounds double, double* %106, i64 11
%164 = load double, double* %163
%165 = getelementptr inbounds double, double* %106, i64 15
%166 = load double, double* %165
%167 = insertelement <4 x double> poison, double %160, i64 0
%168 = insertelement <4 x double> %167, double %162, i64 1
%169 = insertelement <4 x double> %168, double %164, i64 2
%170 = insertelement <4 x double> %169, double %166, i64 3
%171 = insertelement <4 x double> poison, double %114, i64 0
%172 = shufflevector <4 x double> %171, <4 x double> poison, <4 x i32> zeroinitializer
%173 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %170, <4 x double> %172, <4 x double> %158)
%174 = add nuw nsw i32 %38, 8
%175 = getelementptr inbounds double, double* %106, i64 %9
%176 = getelementptr inbounds double, double* %37, i64 12
%177 = icmp slt i32 %174, %10
br i1 %177, label %34, label %17
178: ; preds = %222
%179 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %244, <4 x double> %246, <4 x double> %226)
%180 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %259, <4 x double> %261, <4 x double> %179)
%181 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %274, <4 x double> %276, <4 x double> %180)
%182 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %289, <4 x double> %291, <4 x double> %181)
br label %183
183: ; preds = %178, %27
%184 = phi i32 [ %28, %27 ], [ %295, %178 ]
%185 = phi double* [ %30, %27 ], [ %294, %178 ]
%186 = phi double* [ %29, %27 ], [ %293, %178 ]
%187 = phi <4 x double> [ %31, %27 ], [ %182, %178 ]
%188 = icmp slt i32 %184, %0
br i1 %188, label %189, label %340
189: ; preds = %183
%190 = sub i32 %0, %184
%191 = xor i32 %184, -1
%192 = and i32 %190, 1
%193 = icmp eq i32 %192, 0
br i1 %193, label %214, label %194
194: ; preds = %189
%195 = load double, double* %185
%196 = load double, double* %186
%197 = getelementptr inbounds double, double* %186, i64 4
%198 = load double, double* %197
%199 = getelementptr inbounds double, double* %186, i64 8
%200 = load double, double* %199
%201 = getelementptr inbounds double, double* %186, i64 12
%202 = load double, double* %201
%203 = insertelement <4 x double> poison, double %196, i64 0
%204 = insertelement <4 x double> %203, double %198, i64 1
%205 = insertelement <4 x double> %204, double %200, i64 2
%206 = insertelement <4 x double> %205, double %202, i64 3
%207 = insertelement <4 x double> poison, double %195, i64 0
%208 = shufflevector <4 x double> %207, <4 x double> poison, <4 x i32> zeroinitializer
%209 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %206, <4 x double> %208, <4 x double> %187)
%210 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %206, <4 x double> %208, <4 x double> %187)
%211 = getelementptr inbounds double, double* %186, i64 1
%212 = getelementptr inbounds double, double* %185, i64 1
%213 = add nuw nsw i32 %184, 1
br label %214
214: ; preds = %194, %189
%215 = phi <4 x double> [ undef, %189 ], [ %210, %194 ]
%216 = phi double* [ %186, %189 ], [ %211, %194 ]
%217 = phi double* [ %185, %189 ], [ %212, %194 ]
%218 = phi i32 [ %184, %189 ], [ %213, %194 ]
%219 = phi <4 x double> [ %187, %189 ], [ %209, %194 ]
%220 = sub i32 0, %0
%221 = icmp eq i32 %191, %220
br i1 %221, label %340, label %297
222: ; preds = %27, %222
%223 = phi double* [ %293, %222 ], [ %29, %27 ]
%224 = phi double* [ %294, %222 ], [ %30, %27 ]
%225 = phi i32 [ %295, %222 ], [ %28, %27 ]
%226 = phi <4 x double> [ %292, %222 ], [ %31, %27 ]
%227 = load double, double* %224
%228 = getelementptr inbounds double, double* %224, i64 1
%229 = load double, double* %228
%230 = getelementptr inbounds double, double* %224, i64 2
%231 = load double, double* %230
%232 = getelementptr inbounds double, double* %224, i64 3
%233 = load double, double* %232
%234 = load double, double* %223
%235 = getelementptr inbounds double, double* %223, i64 4
%236 = load double, double* %235
%237 = getelementptr inbounds double, double* %223, i64 8
%238 = load double, double* %237
%239 = getelementptr inbounds double, double* %223, i64 12
%240 = load double, double* %239
%241 = insertelement <4 x double> poison, double %234, i64 0
%242 = insertelement <4 x double> %241, double %236, i64 1
%243 = insertelement <4 x double> %242, double %238, i64 2
%244 = insertelement <4 x double> %243, double %240, i64 3
%245 = insertelement <4 x double> poison, double %227, i64 0
%246 = shufflevector <4 x double> %245, <4 x double> poison, <4 x i32> zeroinitializer
%247 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %244, <4 x double> %246, <4 x double> %226)
%248 = getelementptr inbounds double, double* %223, i64 1
%249 = load double, double* %248
%250 = getelementptr inbounds double, double* %223, i64 5
%251 = load double, double* %250
%252 = getelementptr inbounds double, double* %223, i64 9
%253 = load double, double* %252
%254 = getelementptr inbounds double, double* %223, i64 13
%255 = load double, double* %254
%256 = insertelement <4 x double> poison, double %249, i64 0
%257 = insertelement <4 x double> %256, double %251, i64 1
%258 = insertelement <4 x double> %257, double %253, i64 2
%259 = insertelement <4 x double> %258, double %255, i64 3
%260 = insertelement <4 x double> poison, double %229, i64 0
%261 = shufflevector <4 x double> %260, <4 x double> poison, <4 x i32> zeroinitializer
%262 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %259, <4 x double> %261, <4 x double> %247)
%263 = getelementptr inbounds double, double* %223, i64 2
%264 = load double, double* %263
%265 = getelementptr inbounds double, double* %223, i64 6
%266 = load double, double* %265
%267 = getelementptr inbounds double, double* %223, i64 10
%268 = load double, double* %267
%269 = getelementptr inbounds double, double* %223, i64 14
%270 = load double, double* %269
%271 = insertelement <4 x double> poison, double %264, i64 0
%272 = insertelement <4 x double> %271, double %266, i64 1
%273 = insertelement <4 x double> %272, double %268, i64 2
%274 = insertelement <4 x double> %273, double %270, i64 3
%275 = insertelement <4 x double> poison, double %231, i64 0
%276 = shufflevector <4 x double> %275, <4 x double> poison, <4 x i32> zeroinitializer
%277 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %274, <4 x double> %276, <4 x double> %262)
%278 = getelementptr inbounds double, double* %223, i64 3
%279 = load double, double* %278
%280 = getelementptr inbounds double, double* %223, i64 7
%281 = load double, double* %280
%282 = getelementptr inbounds double, double* %223, i64 11
%283 = load double, double* %282
%284 = getelementptr inbounds double, double* %223, i64 15
%285 = load double, double* %284
%286 = insertelement <4 x double> poison, double %279, i64 0
%287 = insertelement <4 x double> %286, double %281, i64 1
%288 = insertelement <4 x double> %287, double %283, i64 2
%289 = insertelement <4 x double> %288, double %285, i64 3
%290 = insertelement <4 x double> poison, double %233, i64 0
%291 = shufflevector <4 x double> %290, <4 x double> poison, <4 x i32> zeroinitializer
%292 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %289, <4 x double> %291, <4 x double> %277)
%293 = getelementptr inbounds double, double* %223, i64 %9
%294 = getelementptr inbounds double, double* %224, i64 4
%295 = add nuw nsw i32 %225, 4
%296 = icmp slt i32 %295, %32
br i1 %296, label %222, label %178
297: ; preds = %214, %297
%298 = phi double* [ %334, %297 ], [ %216, %214 ]
%299 = phi double* [ %335, %297 ], [ %217, %214 ]
%300 = phi i32 [ %336, %297 ], [ %218, %214 ]
%301 = phi <4 x double> [ %333, %297 ], [ %219, %214 ]
%302 = load double, double* %299
%303 = load double, double* %298
%304 = getelementptr inbounds double, double* %298, i64 4
%305 = load double, double* %304
%306 = getelementptr inbounds double, double* %298, i64 8
%307 = load double, double* %306
%308 = getelementptr inbounds double, double* %298, i64 12
%309 = load double, double* %308
%310 = insertelement <4 x double> poison, double %303, i64 0
%311 = insertelement <4 x double> %310, double %305, i64 1
%312 = insertelement <4 x double> %311, double %307, i64 2
%313 = insertelement <4 x double> %312, double %309, i64 3
%314 = insertelement <4 x double> poison, double %302, i64 0
%315 = shufflevector <4 x double> %314, <4 x double> poison, <4 x i32> zeroinitializer
%316 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %313, <4 x double> %315, <4 x double> %301)
%317 = getelementptr inbounds double, double* %298, i64 1
%318 = getelementptr inbounds double, double* %299, i64 1
%319 = load double, double* %318
%320 = load double, double* %317
%321 = getelementptr inbounds double, double* %298, i64 5
%322 = load double, double* %321
%323 = getelementptr inbounds double, double* %298, i64 9
%324 = load double, double* %323
%325 = getelementptr inbounds double, double* %298, i64 13
%326 = load double, double* %325
%327 = insertelement <4 x double> poison, double %320, i64 0
%328 = insertelement <4 x double> %327, double %322, i64 1
%329 = insertelement <4 x double> %328, double %324, i64 2
%330 = insertelement <4 x double> %329, double %326, i64 3
%331 = insertelement <4 x double> poison, double %319, i64 0
%332 = shufflevector <4 x double> %331, <4 x double> poison, <4 x i32> zeroinitializer
%333 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %330, <4 x double> %332, <4 x double> %316)
%334 = getelementptr inbounds double, double* %298, i64 2
%335 = getelementptr inbounds double, double* %299, i64 2
%336 = add nuw nsw i32 %300, 2
%337 = icmp eq i32 %336, %0
br i1 %337, label %338, label %297
338: ; preds = %297
%339 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %330, <4 x double> %332, <4 x double> %316)
br label %340
340: ; preds = %338, %214, %183
%341 = phi <4 x double> [ %187, %183 ], [ %215, %214 ], [ %339, %338 ]
%342 = icmp eq i32 %1, 0
%343 = getelementptr inbounds double, double* %4, i64 3
%344 = load double, double* %343
%345 = extractelement <4 x double> %341, i64 3
%346 = fsub double %344, %345
%347 = getelementptr inbounds double, double* %2, i64 15
%348 = load double, double* %347
br i1 %342, label %392, label %349
349: ; preds = %340
%350 = fmul double %346, %348
store double %350, double* %343
%351 = getelementptr inbounds double, double* %4, i64 2
%352 = load double, double* %351
%353 = getelementptr inbounds double, double* %2, i64 11
%354 = load double, double* %353
%355 = fneg double %354
%356 = tail call double @llvm.fmuladd.f64(double %355, double %350, double %352)
%357 = extractelement <4 x double> %341, i64 2
%358 = fsub double %356, %357
%359 = getelementptr inbounds double, double* %2, i64 10
%360 = load double, double* %359
%361 = fmul double %360, %358
store double %361, double* %351
%362 = getelementptr inbounds double, double* %2, i64 2
%363 = load double, double* %362
%364 = getelementptr inbounds double, double* %2, i64 3
%365 = load double, double* %364
%366 = fmul double %350, %365
%367 = tail call double @llvm.fmuladd.f64(double %363, double %361, double %366)
%368 = extractelement <4 x double> %341, i64 0
%369 = fadd double %368, %367
%370 = getelementptr inbounds double, double* %2, i64 6
%371 = load double, double* %370
%372 = getelementptr inbounds double, double* %2, i64 7
%373 = load double, double* %372
%374 = fmul double %350, %373
%375 = tail call double @llvm.fmuladd.f64(double %371, double %361, double %374)
%376 = extractelement <4 x double> %341, i64 1
%377 = fadd double %376, %375
%378 = getelementptr inbounds double, double* %4, i64 1
%379 = load double, double* %378
%380 = fsub double %379, %377
%381 = getelementptr inbounds double, double* %2, i64 5
%382 = load double, double* %381
%383 = fmul double %382, %380
store double %383, double* %378
%384 = load double, double* %4
%385 = getelementptr inbounds double, double* %2, i64 1
%386 = load double, double* %385
%387 = fneg double %386
%388 = tail call double @llvm.fmuladd.f64(double %387, double %383, double %384)
%389 = fsub double %388, %369
%390 = load double, double* %2
%391 = fmul double %390, %389
br label %435
392: ; preds = %340
%393 = fdiv double %346, %348
store double %393, double* %343
%394 = getelementptr inbounds double, double* %4, i64 2
%395 = load double, double* %394
%396 = getelementptr inbounds double, double* %2, i64 11
%397 = load double, double* %396
%398 = fneg double %397
%399 = tail call double @llvm.fmuladd.f64(double %398, double %393, double %395)
%400 = extractelement <4 x double> %341, i64 2
%401 = fsub double %399, %400
%402 = getelementptr inbounds double, double* %2, i64 10
%403 = load double, double* %402
%404 = fdiv double %401, %403
store double %404, double* %394
%405 = getelementptr inbounds double, double* %2, i64 2
%406 = load double, double* %405
%407 = getelementptr inbounds double, double* %2, i64 3
%408 = load double, double* %407
%409 = fmul double %393, %408
%410 = tail call double @llvm.fmuladd.f64(double %406, double %404, double %409)
%411 = extractelement <4 x double> %341, i64 0
%412 = fadd double %411, %410
%413 = getelementptr inbounds double, double* %2, i64 6
%414 = load double, double* %413
%415 = getelementptr inbounds double, double* %2, i64 7
%416 = load double, double* %415
%417 = fmul double %393, %416
%418 = tail call double @llvm.fmuladd.f64(double %414, double %404, double %417)
%419 = extractelement <4 x double> %341, i64 1
%420 = fadd double %419, %418
%421 = getelementptr inbounds double, double* %4, i64 1
%422 = load double, double* %421
%423 = fsub double %422, %420
%424 = getelementptr inbounds double, double* %2, i64 5
%425 = load double, double* %424
%426 = fdiv double %423, %425
store double %426, double* %421
%427 = load double, double* %4
%428 = getelementptr inbounds double, double* %2, i64 1
%429 = load double, double* %428
%430 = fneg double %429
%431 = tail call double @llvm.fmuladd.f64(double %430, double %426, double %427)
%432 = fsub double %431, %412
%433 = load double, double* %2
%434 = fdiv double %432, %433
br label %435
435: ; preds = %392, %349
%436 = phi double [ %434, %392 ], [ %391, %349 ]
store double %436, double* %4
br label %437
437: ; preds = %5, %435
ret void
}