void kernel_dsymv_1_lib4(int kmax, double *A, int sda, double *x_n, double *y_n,
                         double *z_n, double *x_t, double *y_t, double *z_t,
                         int tri, int alg_n, int alg_t) {
  if (kmax <= 0)
    return;
  const int bs = 4;
  int k;
  double a_00, x_n_0, y_n_0, x_t_0, y_t_0;
  if (alg_n == 1) {
    x_n_0 = x_n[0];
  } else {
    x_n_0 = -x_n[0];
  }
  y_t_0 = 0;
  k = 0;
  if (tri == 1) {
    x_t_0 = x_t[0];
    a_00 = A[0 + bs * 0];
    y_t_0 += a_00 * x_t_0;
    if (kmax == 1)
      goto STORE_1;
    y_n_0 = y_n[1];
    x_t_0 = x_t[1];
    a_00 = A[1 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[1] = y_n_0;
    if (kmax == 2)
      goto STORE_1;
    y_n_0 = y_n[2];
    x_t_0 = x_t[2];
    a_00 = A[2 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[2] = y_n_0;
    if (kmax == 3)
      goto STORE_1;
    y_n_0 = y_n[3];
    x_t_0 = x_t[3];
    a_00 = A[3 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[3] = y_n_0;
    if (kmax == 4)
      goto STORE_1;
    A += 4;
    y_n += 4;
    z_n += 4;
    x_t += 4;
    k += 4;
    A += (sda - 1) * bs;
  }
  for (; k < kmax - 3; k += bs) {
    y_n_0 = y_n[0];
    x_t_0 = x_t[0];
    a_00 = A[0 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[0] = y_n_0;
    y_n_0 = y_n[1];
    x_t_0 = x_t[1];
    a_00 = A[1 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[1] = y_n_0;
    y_n_0 = y_n[2];
    x_t_0 = x_t[2];
    a_00 = A[2 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[2] = y_n_0;
    y_n_0 = y_n[3];
    x_t_0 = x_t[3];
    a_00 = A[3 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[3] = y_n_0;
    A += sda * bs;
    y_n += 4;
    z_n += 4;
    x_t += 4;
  }
  for (; k < kmax; k++) {
    y_n_0 = y_n[0];
    x_t_0 = x_t[0];
    a_00 = A[0 + bs * 0];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    z_n[0] = y_n_0;
    A += 1;
    y_n += 1;
    z_n += 1;
    x_t += 1;
  }
STORE_1:
  if (alg_t == 1) {
    z_t[0] = y_t[0] + y_t_0;
  } else {
    z_t[0] = y_t[0] - y_t_0;
  }
}


x86 assembly (clang, -O0):
<kernel_dsymv_1_lib4>:
push   %rbp
mov    %rsp,%rbp
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     113e <kernel_dsymv_1_lib4+0x3e>
jmp    16c9 <kernel_dsymv_1_lib4+0x5c9>
movl   $0x4,-0x34(%rbp)
cmpl   $0x1,0x30(%rbp)
jne    1161 <kernel_dsymv_1_lib4+0x61>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1185 <kernel_dsymv_1_lib4+0x85>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x38(%rbp)
cmpl   $0x1,0x28(%rbp)
jne    13b4 <kernel_dsymv_1_lib4+0x2b4>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
cmpl   $0x1,-0x4(%rbp)
jne    11e3 <kernel_dsymv_1_lib4+0xe3>
jmp    1690 <kernel_dsymv_1_lib4+0x590>
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
cmpl   $0x2,-0x4(%rbp)
jne    1262 <kernel_dsymv_1_lib4+0x162>
jmp    1690 <kernel_dsymv_1_lib4+0x590>
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
cmpl   $0x3,-0x4(%rbp)
jne    12e1 <kernel_dsymv_1_lib4+0x1e1>
jmp    1690 <kernel_dsymv_1_lib4+0x590>
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
cmpl   $0x4,-0x4(%rbp)
jne    1360 <kernel_dsymv_1_lib4+0x260>
jmp    1690 <kernel_dsymv_1_lib4+0x590>
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x30(%rbp)
mov    0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,0x10(%rbp)
mov    -0x38(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x38(%rbp)
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
jmp    13b9 <kernel_dsymv_1_lib4+0x2b9>
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    15d0 <kernel_dsymv_1_lib4+0x4d0>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
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),%rax
add    $0x20,%rax
mov    %rax,-0x30(%rbp)
mov    0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,0x10(%rbp)
mov    -0x38(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x38(%rbp)
jmp    13b9 <kernel_dsymv_1_lib4+0x2b9>
jmp    15d5 <kernel_dsymv_1_lib4+0x4d5>
mov    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    168b <kernel_dsymv_1_lib4+0x58b>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
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),%rax
add    $0x8,%rax
mov    %rax,-0x30(%rbp)
mov    0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,0x10(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    15d5 <kernel_dsymv_1_lib4+0x4d5>
jmp    1690 <kernel_dsymv_1_lib4+0x590>
cmpl   $0x1,0x38(%rbp)
jne    16b4 <kernel_dsymv_1_lib4+0x5b4>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x60(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    16c9 <kernel_dsymv_1_lib4+0x5c9>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dsymv_1_lib4>:
test   %edi,%edi
jle    1390 <kernel_dsymv_1_lib4+0x290>
mov    0x20(%rsp),%eax
cmpl   $0x1,0x28(%rsp)
movsd  (%rcx),%xmm0
je     111f <kernel_dsymv_1_lib4+0x1f>
xorpd  0xee1(%rip),%xmm0
mov    0x30(%rsp),%r10d
mov    0x8(%rsp),%rcx
cmp    $0x1,%eax
jne    11f0 <kernel_dsymv_1_lib4+0xf0>
movsd  (%rsi),%xmm1
mulsd  (%rcx),%xmm1
xorpd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
cmp    $0x1,%edi
je     1370 <kernel_dsymv_1_lib4+0x270>
movsd  0x8(%rsi),%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm3
addsd  0x8(%r8),%xmm3
mulsd  0x8(%rcx),%xmm1
addsd  %xmm1,%xmm2
movsd  %xmm3,0x8(%r9)
cmp    $0x2,%edi
je     1370 <kernel_dsymv_1_lib4+0x270>
movsd  0x10(%rsi),%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm3
addsd  0x10(%r8),%xmm3
mulsd  0x10(%rcx),%xmm1
addsd  %xmm1,%xmm2
movsd  %xmm3,0x10(%r9)
cmp    $0x3,%edi
je     1370 <kernel_dsymv_1_lib4+0x270>
movsd  0x18(%rsi),%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm3
addsd  0x18(%r8),%xmm3
mulsd  0x18(%rcx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm3,0x18(%r9)
cmp    $0x4,%edi
je     12cc <kernel_dsymv_1_lib4+0x1cc>
add    $0x20,%r8
add    $0x20,%r9
add    $0x20,%rcx
lea    -0x4(,%rdx,4),%eax
cltq
lea    (%rsi,%rax,8),%rsi
add    $0x20,%rsi
mov    $0x4,%eax
jmp    11f6 <kernel_dsymv_1_lib4+0xf6>
xorpd  %xmm1,%xmm1
xor    %eax,%eax
lea    -0x3(%rdi),%r11d
cmp    %r11d,%eax
jge    12af <kernel_dsymv_1_lib4+0x1af>
shl    $0x2,%edx
movslq %edx,%rdx
shl    $0x3,%rdx
nopl   (%rax)
movsd  (%rsi),%xmm2
movapd %xmm2,%xmm3
mulsd  %xmm0,%xmm3
addsd  (%r8),%xmm3
mulsd  (%rcx),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm3,(%r9)
movsd  0x8(%rsi),%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm3
addsd  0x8(%r8),%xmm3
mulsd  0x8(%rcx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm3,0x8(%r9)
movsd  0x10(%rsi),%xmm2
movapd %xmm2,%xmm3
mulsd  %xmm0,%xmm3
addsd  0x10(%r8),%xmm3
mulsd  0x10(%rcx),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm3,0x10(%r9)
movsd  0x18(%rsi),%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm3
addsd  0x18(%r8),%xmm3
mulsd  0x18(%rcx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm3,0x18(%r9)
add    $0x20,%r8
add    $0x20,%r9
add    $0x20,%rcx
add    $0x4,%eax
add    %rdx,%rsi
cmp    %r11d,%eax
jl     1210 <kernel_dsymv_1_lib4+0x110>
cmp    %edi,%eax
jge    12cc <kernel_dsymv_1_lib4+0x1cc>
mov    %edi,%edx
sub    %eax,%edx
mov    %eax,%r11d
not    %r11d
test   $0x1,%dl
jne    12d5 <kernel_dsymv_1_lib4+0x1d5>
add    %edi,%r11d
jne    130f <kernel_dsymv_1_lib4+0x20f>
jmp    1370 <kernel_dsymv_1_lib4+0x270>
movapd %xmm1,%xmm2
jmp    1370 <kernel_dsymv_1_lib4+0x270>
movsd  (%rsi),%xmm2
movapd %xmm2,%xmm3
mulsd  %xmm0,%xmm3
addsd  (%r8),%xmm3
mulsd  (%rcx),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm3,(%r9)
add    $0x8,%rsi
add    $0x8,%r8
add    $0x8,%r9
add    $0x8,%rcx
add    $0x1,%eax
movapd %xmm2,%xmm1
add    %edi,%r11d
je     1370 <kernel_dsymv_1_lib4+0x270>
sub    %eax,%edi
xor    %eax,%eax
movapd %xmm1,%xmm2
nopw   0x0(%rax,%rax,1)
movsd  (%rsi,%rax,8),%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm3
addsd  (%r8,%rax,8),%xmm3
mulsd  (%rcx,%rax,8),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm3,(%r9,%rax,8)
movsd  0x8(%rsi,%rax,8),%xmm2
movapd %xmm2,%xmm3
mulsd  %xmm0,%xmm3
addsd  0x8(%r8,%rax,8),%xmm3
mulsd  0x8(%rcx,%rax,8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm3,0x8(%r9,%rax,8)
add    $0x2,%rax
cmp    %eax,%edi
jne    1320 <kernel_dsymv_1_lib4+0x220>
mov    0x18(%rsp),%rax
mov    0x10(%rsp),%rcx
cmp    $0x1,%r10d
je     1388 <kernel_dsymv_1_lib4+0x288>
xorpd  0xc78(%rip),%xmm2
addsd  (%rcx),%xmm2
movsd  %xmm2,(%rax)
ret

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

LLVM IR (-O2):
define void @kernel_dsymv_1_lib4(i32 %0, double* nocapture %1, i32 %2, double* nocapture %3, double* nocapture %4, double* nocapture writeonly %5, double* nocapture %6, double* nocapture %7, double* nocapture writeonly %8, i32 %9, i32 %10, i32 %11) {
%13 = icmp slt i32 %0, 1
br i1 %13, label %192, label %14
14: ; preds = %12
%15 = icmp eq i32 %10, 1
%16 = load double, double* %3
%17 = fneg double %16
%18 = select i1 %15, double %16, double %17
%19 = icmp eq i32 %9, 1
br i1 %19, label %20, label %67
20: ; preds = %14
%21 = load double, double* %6
%22 = load double, double* %1
%23 = tail call double @llvm.fmuladd.f64(double %22, double %21, double 0.000000e+00)
%24 = icmp eq i32 %0, 1
br i1 %24, label %185, label %25
25: ; preds = %20
%26 = getelementptr inbounds double, double* %4, i64 1
%27 = load double, double* %26
%28 = getelementptr inbounds double, double* %6, i64 1
%29 = load double, double* %28
%30 = getelementptr inbounds double, double* %1, i64 1
%31 = load double, double* %30
%32 = tail call double @llvm.fmuladd.f64(double %31, double %18, double %27)
%33 = tail call double @llvm.fmuladd.f64(double %31, double %29, double %23)
%34 = getelementptr inbounds double, double* %5, i64 1
store double %32, double* %34
%35 = icmp eq i32 %0, 2
br i1 %35, label %185, label %36
36: ; preds = %25
%37 = getelementptr inbounds double, double* %4, i64 2
%38 = load double, double* %37
%39 = getelementptr inbounds double, double* %6, i64 2
%40 = load double, double* %39
%41 = getelementptr inbounds double, double* %1, i64 2
%42 = load double, double* %41
%43 = tail call double @llvm.fmuladd.f64(double %42, double %18, double %38)
%44 = tail call double @llvm.fmuladd.f64(double %42, double %40, double %33)
%45 = getelementptr inbounds double, double* %5, i64 2
store double %43, double* %45
%46 = icmp eq i32 %0, 3
br i1 %46, label %185, label %47
47: ; preds = %36
%48 = getelementptr inbounds double, double* %4, i64 3
%49 = load double, double* %48
%50 = getelementptr inbounds double, double* %6, i64 3
%51 = load double, double* %50
%52 = getelementptr inbounds double, double* %1, i64 3
%53 = load double, double* %52
%54 = tail call double @llvm.fmuladd.f64(double %53, double %18, double %49)
%55 = tail call double @llvm.fmuladd.f64(double %53, double %51, double %44)
%56 = getelementptr inbounds double, double* %5, i64 3
store double %54, double* %56
%57 = icmp eq i32 %0, 4
br i1 %57, label %185, label %58
58: ; preds = %47
%59 = getelementptr inbounds double, double* %1, i64 4
%60 = getelementptr inbounds double, double* %4, i64 4
%61 = getelementptr inbounds double, double* %5, i64 4
%62 = getelementptr inbounds double, double* %6, i64 4
%63 = shl i32 %2, 2
%64 = add i32 %63, -4
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds double, double* %59, i64 %65
br label %67
67: ; preds = %58, %14
%68 = phi double* [ %62, %58 ], [ %6, %14 ]
%69 = phi double* [ %61, %58 ], [ %5, %14 ]
%70 = phi double* [ %60, %58 ], [ %4, %14 ]
%71 = phi double* [ %66, %58 ], [ %1, %14 ]
%72 = phi i32 [ 4, %58 ], [ 0, %14 ]
%73 = phi double [ %55, %58 ], [ 0.000000e+00, %14 ]
%74 = add nsw i32 %0, -3
%75 = icmp slt i32 %72, %74
br i1 %75, label %76, label %79
76: ; preds = %67
%77 = shl nsw i32 %2, 2
%78 = sext i32 %77 to i64
br label %113
79: ; preds = %113, %67
%80 = phi double* [ %68, %67 ], [ %155, %113 ]
%81 = phi double* [ %69, %67 ], [ %154, %113 ]
%82 = phi double* [ %70, %67 ], [ %153, %113 ]
%83 = phi double* [ %71, %67 ], [ %152, %113 ]
%84 = phi i32 [ %72, %67 ], [ %156, %113 ]
%85 = phi double [ %73, %67 ], [ %150, %113 ]
%86 = icmp slt i32 %84, %0
br i1 %86, label %87, label %185
87: ; preds = %79
%88 = sub i32 %0, %84
%89 = xor i32 %84, -1
%90 = and i32 %88, 1
%91 = icmp eq i32 %90, 0
br i1 %91, label %103, label %92
92: ; preds = %87
%93 = load double, double* %82
%94 = load double, double* %80
%95 = load double, double* %83
%96 = tail call double @llvm.fmuladd.f64(double %95, double %18, double %93)
%97 = tail call double @llvm.fmuladd.f64(double %95, double %94, double %85)
store double %96, double* %81
%98 = getelementptr inbounds double, double* %83, i64 1
%99 = getelementptr inbounds double, double* %82, i64 1
%100 = getelementptr inbounds double, double* %81, i64 1
%101 = getelementptr inbounds double, double* %80, i64 1
%102 = add nuw nsw i32 %84, 1
br label %103
103: ; preds = %92, %87
%104 = phi double [ undef, %87 ], [ %97, %92 ]
%105 = phi double [ %85, %87 ], [ %97, %92 ]
%106 = phi i32 [ %84, %87 ], [ %102, %92 ]
%107 = phi double* [ %83, %87 ], [ %98, %92 ]
%108 = phi double* [ %82, %87 ], [ %99, %92 ]
%109 = phi double* [ %81, %87 ], [ %100, %92 ]
%110 = phi double* [ %80, %87 ], [ %101, %92 ]
%111 = sub i32 0, %0
%112 = icmp eq i32 %89, %111
br i1 %112, label %185, label %158
113: ; preds = %76, %113
%114 = phi double [ %73, %76 ], [ %150, %113 ]
%115 = phi i32 [ %72, %76 ], [ %156, %113 ]
%116 = phi double* [ %71, %76 ], [ %152, %113 ]
%117 = phi double* [ %70, %76 ], [ %153, %113 ]
%118 = phi double* [ %69, %76 ], [ %154, %113 ]
%119 = phi double* [ %68, %76 ], [ %155, %113 ]
%120 = load double, double* %117
%121 = load double, double* %119
%122 = load double, double* %116
%123 = tail call double @llvm.fmuladd.f64(double %122, double %18, double %120)
%124 = tail call double @llvm.fmuladd.f64(double %122, double %121, double %114)
store double %123, double* %118
%125 = getelementptr inbounds double, double* %117, i64 1
%126 = load double, double* %125
%127 = getelementptr inbounds double, double* %119, i64 1
%128 = load double, double* %127
%129 = getelementptr inbounds double, double* %116, i64 1
%130 = load double, double* %129
%131 = tail call double @llvm.fmuladd.f64(double %130, double %18, double %126)
%132 = tail call double @llvm.fmuladd.f64(double %130, double %128, double %124)
%133 = getelementptr inbounds double, double* %118, i64 1
store double %131, double* %133
%134 = getelementptr inbounds double, double* %117, i64 2
%135 = load double, double* %134
%136 = getelementptr inbounds double, double* %119, i64 2
%137 = load double, double* %136
%138 = getelementptr inbounds double, double* %116, i64 2
%139 = load double, double* %138
%140 = tail call double @llvm.fmuladd.f64(double %139, double %18, double %135)
%141 = tail call double @llvm.fmuladd.f64(double %139, double %137, double %132)
%142 = getelementptr inbounds double, double* %118, i64 2
store double %140, double* %142
%143 = getelementptr inbounds double, double* %117, i64 3
%144 = load double, double* %143
%145 = getelementptr inbounds double, double* %119, i64 3
%146 = load double, double* %145
%147 = getelementptr inbounds double, double* %116, i64 3
%148 = load double, double* %147
%149 = tail call double @llvm.fmuladd.f64(double %148, double %18, double %144)
%150 = tail call double @llvm.fmuladd.f64(double %148, double %146, double %141)
%151 = getelementptr inbounds double, double* %118, i64 3
store double %149, double* %151
%152 = getelementptr inbounds double, double* %116, i64 %78
%153 = getelementptr inbounds double, double* %117, i64 4
%154 = getelementptr inbounds double, double* %118, i64 4
%155 = getelementptr inbounds double, double* %119, i64 4
%156 = add nuw nsw i32 %115, 4
%157 = icmp slt i32 %156, %74
br i1 %157, label %113, label %79
158: ; preds = %103, %158
%159 = phi double [ %178, %158 ], [ %105, %103 ]
%160 = phi i32 [ %183, %158 ], [ %106, %103 ]
%161 = phi double* [ %179, %158 ], [ %107, %103 ]
%162 = phi double* [ %180, %158 ], [ %108, %103 ]
%163 = phi double* [ %181, %158 ], [ %109, %103 ]
%164 = phi double* [ %182, %158 ], [ %110, %103 ]
%165 = load double, double* %162
%166 = load double, double* %164
%167 = load double, double* %161
%168 = tail call double @llvm.fmuladd.f64(double %167, double %18, double %165)
%169 = tail call double @llvm.fmuladd.f64(double %167, double %166, double %159)
store double %168, double* %163
%170 = getelementptr inbounds double, double* %161, i64 1
%171 = getelementptr inbounds double, double* %162, i64 1
%172 = getelementptr inbounds double, double* %163, i64 1
%173 = getelementptr inbounds double, double* %164, i64 1
%174 = load double, double* %171
%175 = load double, double* %173
%176 = load double, double* %170
%177 = tail call double @llvm.fmuladd.f64(double %176, double %18, double %174)
%178 = tail call double @llvm.fmuladd.f64(double %176, double %175, double %169)
store double %177, double* %172
%179 = getelementptr inbounds double, double* %161, i64 2
%180 = getelementptr inbounds double, double* %162, i64 2
%181 = getelementptr inbounds double, double* %163, i64 2
%182 = getelementptr inbounds double, double* %164, i64 2
%183 = add nuw nsw i32 %160, 2
%184 = icmp eq i32 %183, %0
br i1 %184, label %185, label %158
185: ; preds = %103, %158, %79, %47, %36, %25, %20
%186 = phi double [ %23, %20 ], [ %33, %25 ], [ %44, %36 ], [ %55, %47 ], [ %85, %79 ], [ %104, %103 ], [ %178, %158 ]
%187 = icmp eq i32 %11, 1
%188 = load double, double* %7
%189 = fneg double %186
%190 = select i1 %187, double %186, double %189
%191 = fadd double %188, %190
store double %191, double* %8
br label %192
192: ; preds = %12, %185
ret void
}