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


x86 assembly (clang, -O0):
<kernel_dtrsv_t_4_lib4_new>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1128 <kernel_dtrsv_t_4_lib4_new+0x28>
jmp    1cd9 <kernel_dtrsv_t_4_lib4_new+0xbd9>
movl   $0x4,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%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,-0x30(%rbp)
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
add    $0x4,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x7,%ecx
cmp    %ecx,%eax
jge    1663 <kernel_dtrsv_t_4_lib4_new+0x563>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%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    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%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    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x30(%rbp)
jmp    1190 <kernel_dtrsv_t_4_lib4_new+0x90>
jmp    1668 <kernel_dtrsv_t_4_lib4_new+0x568>
mov    -0x30(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    18e1 <kernel_dtrsv_t_4_lib4_new+0x7e1>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%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    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x30(%rbp)
jmp    1668 <kernel_dtrsv_t_4_lib4_new+0x568>
jmp    18e6 <kernel_dtrsv_t_4_lib4_new+0x7e6>
mov    -0x30(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    19a4 <kernel_dtrsv_t_4_lib4_new+0x8a4>
mov    -0x28(%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    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    18e6 <kernel_dtrsv_t_4_lib4_new+0x7e6>
mov    -0x38(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     1b46 <kernel_dtrsv_t_4_lib4_new+0xa46>
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -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    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%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    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -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    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1cd9 <kernel_dtrsv_t_4_lib4_new+0xbd9>
mov    -0x28(%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    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x28(%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    -0x28(%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    -0x28(%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    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%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    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrsv_t_4_lib4_new>:
test   %edi,%edi
jle    164b <kernel_dtrsv_t_4_lib4_new+0x54b>
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
shl    $0x2,%edx
movslq %edx,%r11
lea    (%rsi,%r11,8),%rbp
lea    0x20(%r9),%rax
cmp    $0xc,%edi
jb     1307 <kernel_dtrsv_t_4_lib4_new+0x207>
lea    -0x7(%rdi),%r15d
lea    -0xc(%rdi),%r10d
and    $0xfffffff8,%r10d
mov    %r11,%r14
shl    $0x4,%r14
lea    0x0(,%r11,8),%rbx
xorpd  %xmm6,%xmm6
mov    $0x4,%r12d
xorpd  %xmm4,%xmm4
mov    %rbp,%rdx
movsd  0x40(%rbp),%xmm10
movhpd 0x60(%rbp),%xmm10
movsd  0x0(%rbp),%xmm7
movsd  0x8(%rbp),%xmm9
movsd  0x10(%rbp),%xmm1
movsd  0x18(%rbp),%xmm8
movhpd 0x20(%rbp),%xmm7
movsd  (%rax),%xmm2
movsd  0x8(%rax),%xmm5
movsd  0x10(%rax),%xmm3
movsd  0x18(%rax),%xmm0
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm7
addpd  %xmm6,%xmm7
mulpd  %xmm10,%xmm2
addpd  %xmm4,%xmm2
movhpd 0x28(%rbp),%xmm9
movsd  0x48(%rbp),%xmm4
movhpd 0x68(%rbp),%xmm4
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm4
addpd  %xmm2,%xmm4
mulpd  %xmm9,%xmm5
addpd  %xmm7,%xmm5
movsd  0x50(%rbp),%xmm2
movhpd 0x70(%rbp),%xmm2
movhpd 0x30(%rbp),%xmm1
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm1
addpd  %xmm5,%xmm1
mulpd  %xmm2,%xmm3
addpd  %xmm4,%xmm3
movhpd 0x38(%rbp),%xmm8
movsd  0x58(%rbp),%xmm4
movhpd 0x78(%rbp),%xmm4
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm4
addpd  %xmm3,%xmm4
mulpd  %xmm8,%xmm0
addpd  %xmm1,%xmm0
lea    0x0(%rbp,%rbx,1),%rbp
movsd  0x40(%rdx,%rbx,1),%xmm5
movhpd 0x60(%rdx,%rbx,1),%xmm5
movsd  (%rdx,%rbx,1),%xmm1
movsd  0x8(%rdx,%rbx,1),%xmm6
movsd  0x10(%rdx,%rbx,1),%xmm2
movhpd 0x20(%rdx,%rbx,1),%xmm1
movsd  0x18(%rdx,%rbx,1),%xmm3
movsd  0x20(%rax),%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm1
addpd  %xmm0,%xmm1
mulpd  %xmm5,%xmm7
movhpd 0x28(%rdx,%rbx,1),%xmm6
addpd  %xmm4,%xmm7
movsd  0x48(%rdx,%rbx,1),%xmm0
movhpd 0x68(%rdx,%rbx,1),%xmm0
movsd  0x28(%rax),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm0
addpd  %xmm7,%xmm0
mulpd  %xmm6,%xmm4
movsd  0x50(%rdx,%rbx,1),%xmm6
movhpd 0x70(%rdx,%rbx,1),%xmm6
addpd  %xmm1,%xmm4
movhpd 0x30(%rdx,%rbx,1),%xmm2
movsd  0x30(%rax),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm2
addpd  %xmm4,%xmm2
mulpd  %xmm6,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x38(%rdx,%rbx,1),%xmm3
movsd  0x58(%rdx,%rbx,1),%xmm0
movhpd 0x78(%rdx,%rbx,1),%xmm0
movsd  0x38(%rax),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm0,%xmm4
addpd  %xmm5,%xmm4
mulpd  %xmm3,%xmm1
movapd %xmm1,%xmm6
addpd  %xmm2,%xmm6
add    $0x8,%r12d
add    $0x40,%rax
add    %rbx,%rbp
cmp    %r15d,%r12d
jl     1150 <kernel_dtrsv_t_4_lib4_new+0x50>
add    %r14,%rdx
addpd  %xmm2,%xmm1
addpd  %xmm5,%xmm0
add    $0xc,%r10d
mov    %rdx,%rbp
jmp    1315 <kernel_dtrsv_t_4_lib4_new+0x215>
xorpd  %xmm1,%xmm1
mov    $0x4,%r10d
xorpd  %xmm0,%xmm0
lea    -0x3(%rdi),%edx
cmp    %edx,%r10d
jge    1418 <kernel_dtrsv_t_4_lib4_new+0x318>
shl    $0x3,%r11
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0x40(%rbp),%xmm10
movhpd 0x60(%rbp),%xmm10
movsd  0x0(%rbp),%xmm6
movsd  0x8(%rbp),%xmm9
movsd  0x10(%rbp),%xmm2
movhpd 0x20(%rbp),%xmm6
movsd  0x18(%rbp),%xmm8
movsd  (%rax),%xmm5
movsd  0x8(%rax),%xmm7
movsd  0x10(%rax),%xmm4
movsd  0x18(%rax),%xmm3
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm6
addpd  %xmm1,%xmm6
mulpd  %xmm10,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x28(%rbp),%xmm9
movsd  0x48(%rbp),%xmm0
movhpd 0x68(%rbp),%xmm0
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm9,%xmm7
movsd  0x50(%rbp),%xmm1
movhpd 0x70(%rbp),%xmm1
movhpd 0x30(%rbp),%xmm2
addpd  %xmm6,%xmm7
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm2
addpd  %xmm7,%xmm2
mulpd  %xmm1,%xmm4
addpd  %xmm0,%xmm4
movhpd 0x38(%rbp),%xmm8
movsd  0x58(%rbp),%xmm6
movhpd 0x78(%rbp),%xmm6
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm6
movapd %xmm6,%xmm0
addpd  %xmm4,%xmm0
mulpd  %xmm8,%xmm3
movapd %xmm3,%xmm1
addpd  %xmm2,%xmm1
add    $0x20,%rax
add    $0x4,%r10d
add    %r11,%rbp
cmp    %edx,%r10d
jl     1330 <kernel_dtrsv_t_4_lib4_new+0x230>
addpd  %xmm2,%xmm3
addpd  %xmm4,%xmm6
movapd %xmm3,%xmm1
movapd %xmm6,%xmm0
cmp    %edi,%r10d
jge    1435 <kernel_dtrsv_t_4_lib4_new+0x335>
mov    %edi,%ebx
sub    %r10d,%ebx
mov    %r10d,%edx
not    %edx
test   $0x1,%bl
jne    1442 <kernel_dtrsv_t_4_lib4_new+0x342>
add    %edi,%edx
jne    148a <kernel_dtrsv_t_4_lib4_new+0x38a>
jmp    150b <kernel_dtrsv_t_4_lib4_new+0x40b>
movapd %xmm1,%xmm2
movapd %xmm0,%xmm3
jmp    150b <kernel_dtrsv_t_4_lib4_new+0x40b>
movsd  0x0(%rbp),%xmm4
movhpd 0x20(%rbp),%xmm4
movsd  0x40(%rbp),%xmm3
movhpd 0x60(%rbp),%xmm3
movsd  (%rax),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm3
addpd  %xmm0,%xmm3
mulpd  %xmm4,%xmm2
addpd  %xmm1,%xmm2
add    $0x8,%rbp
add    $0x8,%rax
add    $0x1,%r10d
movapd %xmm2,%xmm1
movapd %xmm3,%xmm0
add    %edi,%edx
je     150b <kernel_dtrsv_t_4_lib4_new+0x40b>
sub    %r10d,%edi
xor    %edx,%edx
nop
movsd  0x0(%rbp,%rdx,8),%xmm4
movsd  0x8(%rbp,%rdx,8),%xmm6
movsd  0x40(%rbp,%rdx,8),%xmm7
movsd  0x48(%rbp,%rdx,8),%xmm3
movhpd 0x60(%rbp,%rdx,8),%xmm7
movhpd 0x20(%rbp,%rdx,8),%xmm4
movsd  (%rax,%rdx,8),%xmm5
movsd  0x8(%rax,%rdx,8),%xmm2
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm4
addpd  %xmm1,%xmm4
mulpd  %xmm7,%xmm5
movhpd 0x28(%rbp,%rdx,8),%xmm6
movhpd 0x68(%rbp,%rdx,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,%rdx
cmp    %edx,%edi
jne    1490 <kernel_dtrsv_t_4_lib4_new+0x390>
addpd  %xmm4,%xmm2
addpd  %xmm5,%xmm3
movsd  0x18(%r9),%xmm0
movapd %xmm3,%xmm1
unpckhpd %xmm3,%xmm1
subsd  %xmm1,%xmm0
test   %ecx,%ecx
je     15b6 <kernel_dtrsv_t_4_lib4_new+0x4b6>
mulsd  0x18(%r8),%xmm0
movsd  %xmm0,0x18(%r9)
movsd  0x10(%r9),%xmm1
movsd  0x58(%rsi),%xmm4
mulsd  %xmm0,%xmm4
subsd  %xmm4,%xmm1
subsd  %xmm3,%xmm1
mulsd  0x10(%r8),%xmm1
movsd  %xmm1,0x10(%r9)
movsd  0x18(%rsi),%xmm3
mulsd  %xmm0,%xmm3
movsd  0x10(%rsi),%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
mulsd  0x38(%rsi),%xmm0
mulsd  0x30(%rsi),%xmm1
addsd  %xmm2,%xmm4
addsd  %xmm0,%xmm1
unpckhpd %xmm2,%xmm2
addsd  %xmm1,%xmm2
movsd  0x8(%r9),%xmm1
subsd  %xmm2,%xmm1
mulsd  0x8(%r8),%xmm1
movsd  (%r9),%xmm0
movsd  %xmm1,0x8(%r9)
mulsd  0x8(%rsi),%xmm1
subsd  %xmm1,%xmm0
subsd  %xmm4,%xmm0
mulsd  (%r8),%xmm0
jmp    163e <kernel_dtrsv_t_4_lib4_new+0x53e>
divsd  0x78(%rsi),%xmm0
movsd  %xmm0,0x18(%r9)
movsd  0x10(%r9),%xmm1
movsd  0x58(%rsi),%xmm4
mulsd  %xmm0,%xmm4
subsd  %xmm4,%xmm1
subsd  %xmm3,%xmm1
divsd  0x50(%rsi),%xmm1
movsd  %xmm1,0x10(%r9)
movsd  0x18(%rsi),%xmm3
mulsd  %xmm0,%xmm3
movsd  0x10(%rsi),%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
mulsd  0x38(%rsi),%xmm0
mulsd  0x30(%rsi),%xmm1
addsd  %xmm2,%xmm4
addsd  %xmm0,%xmm1
unpckhpd %xmm2,%xmm2
addsd  %xmm1,%xmm2
movsd  0x8(%r9),%xmm1
subsd  %xmm2,%xmm1
divsd  0x28(%rsi),%xmm1
movsd  (%r9),%xmm0
movsd  %xmm1,0x8(%r9)
mulsd  0x8(%rsi),%xmm1
subsd  %xmm1,%xmm0
subsd  %xmm4,%xmm0
divsd  (%rsi),%xmm0
movsd  %xmm0,(%r9)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

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