int add_DTD(double *lhsbnd, int nk, double lam, int pord) {
  int k;
  if (lam > 0.) {
    if (pord == 0) {
      for (k = 0; k < nk; ++k)
        lhsbnd[k] += lam;
    }
    if (pord == 1) {
      lhsbnd[0] += lam;
      for (k = 1; k < nk - 1; ++k)
        lhsbnd[k] += 2 * lam;
      lhsbnd[k] += lam;
      for (k = 0; k < nk - 1; ++k)
        lhsbnd[k + 1 * nk] -= lam;
    }
    if (pord == 2) {
      lhsbnd[0] += lam;
      lhsbnd[1] += 5 * lam;
      for (k = 2; k < nk - 2; ++k)
        lhsbnd[k] += 6 * lam;
      lhsbnd[k] += 5 * lam;
      lhsbnd[++k] += lam;
      lhsbnd[1 * nk] += -2 * lam;
      for (k = 1; k < nk - 2; ++k)
        lhsbnd[k + 1 * nk] += -4 * lam;
      lhsbnd[k + 1 * nk] += -2 * lam;
      for (k = 0; k < nk - 2; ++k)
        lhsbnd[k + 2 * nk] += lam;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<add_DTD>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movsd  %xmm0,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    13f9 <add_DTD+0x2f9>
cmpl   $0x0,-0x1c(%rbp)
jne    116c <add_DTD+0x6c>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1167 <add_DTD+0x67>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1136 <add_DTD+0x36>
jmp    116c <add_DTD+0x6c>
cmpl   $0x1,-0x1c(%rbp)
jne    1233 <add_DTD+0x133>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    11cc <add_DTD+0xcc>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    118e <add_DTD+0x8e>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    122e <add_DTD+0x12e>
movsd  -0x18(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    -0xc(%rbp),%edx
shl    $0x0,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11ea <add_DTD+0xea>
jmp    1233 <add_DTD+0x133>
cmpl   $0x2,-0x1c(%rbp)
jne    13f4 <add_DTD+0x2f4>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm1
movsd  0xd9c(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
movl   $0x2,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jge    12be <add_DTD+0x1be>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0xd6d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1278 <add_DTD+0x178>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0xd28(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0x20(%rbp)
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x18(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jge    137f <add_DTD+0x27f>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    -0xc(%rbp),%edx
shl    $0x0,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0xca4(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    132f <add_DTD+0x22f>
movsd  -0x18(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    -0xc(%rbp),%edx
shl    $0x0,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jge    13ef <add_DTD+0x2ef>
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    -0xc(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    13af <add_DTD+0x2af>
jmp    13f4 <add_DTD+0x2f4>
jmp    13f9 <add_DTD+0x2f9>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<add_DTD>:
push   %r14
push   %rbx
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    17d7 <add_DTD+0x6d7>
cmp    $0x2,%edx
je     1430 <add_DTD+0x330>
cmp    $0x1,%edx
je     1141 <add_DTD+0x41>
test   %edx,%edx
jne    17d7 <add_DTD+0x6d7>
test   %esi,%esi
jle    17d7 <add_DTD+0x6d7>
mov    %esi,%eax
cmp    $0x4,%esi
jae    11ff <add_DTD+0xff>
xor    %ecx,%ecx
jmp    12b0 <add_DTD+0x1b0>
movsd  (%rdi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rdi)
lea    -0x1(%rsi),%r8d
mov    $0x1,%r10d
cmp    $0x3,%esi
jl     1327 <add_DTD+0x227>
mov    %r8d,%r10d
lea    -0x1(%r10),%r9
mov    $0x1,%eax
cmp    $0x4,%r9
jb     1307 <add_DTD+0x207>
mov    %r9,%rax
and    $0xfffffffffffffffc,%rax
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rax),%rcx
mov    %rcx,%r11
shr    $0x2,%r11
add    $0x1,%r11
test   %rcx,%rcx
je     12cc <add_DTD+0x1cc>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %ecx,%ecx
movapd %xmm1,%xmm2
addpd  %xmm1,%xmm2
xchg   %ax,%ax
movupd 0x8(%rdi,%rcx,8),%xmm3
movupd 0x18(%rdi,%rcx,8),%xmm4
movupd 0x28(%rdi,%rcx,8),%xmm5
movupd 0x38(%rdi,%rcx,8),%xmm6
addpd  %xmm2,%xmm3
addpd  %xmm2,%xmm4
movupd %xmm3,0x8(%rdi,%rcx,8)
movupd %xmm4,0x18(%rdi,%rcx,8)
addpd  %xmm2,%xmm5
addpd  %xmm2,%xmm6
movupd %xmm5,0x28(%rdi,%rcx,8)
movupd %xmm6,0x38(%rdi,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rbx
jne    11b0 <add_DTD+0xb0>
jmp    12ce <add_DTD+0x1ce>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rcx),%rdx
mov    %rdx,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
test   %rdx,%rdx
je     127a <add_DTD+0x17a>
mov    %rbx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %edx,%edx
nopl   0x0(%rax)
movupd (%rdi,%rdx,8),%xmm2
movupd 0x10(%rdi,%rdx,8),%xmm3
movupd 0x20(%rdi,%rdx,8),%xmm4
movupd 0x30(%rdi,%rdx,8),%xmm5
addpd  %xmm1,%xmm2
addpd  %xmm1,%xmm3
movupd %xmm2,(%rdi,%rdx,8)
movupd %xmm3,0x10(%rdi,%rdx,8)
addpd  %xmm1,%xmm4
addpd  %xmm1,%xmm5
movupd %xmm4,0x20(%rdi,%rdx,8)
movupd %xmm5,0x30(%rdi,%rdx,8)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%rsi
jne    1230 <add_DTD+0x130>
jmp    127c <add_DTD+0x17c>
xor    %edx,%edx
test   $0x1,%bl
je     129f <add_DTD+0x19f>
movupd (%rdi,%rdx,8),%xmm2
movupd 0x10(%rdi,%rdx,8),%xmm3
addpd  %xmm1,%xmm2
addpd  %xmm1,%xmm3
movupd %xmm2,(%rdi,%rdx,8)
movupd %xmm3,0x10(%rdi,%rdx,8)
cmp    %rax,%rcx
je     17d7 <add_DTD+0x6d7>
nopl   0x0(%rax,%rax,1)
movsd  (%rdi,%rcx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rdi,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    12b0 <add_DTD+0x1b0>
jmp    17d7 <add_DTD+0x6d7>
xor    %ecx,%ecx
test   $0x1,%r11b
je     12fe <add_DTD+0x1fe>
shl    $0x3,%rcx
or     $0x8,%rcx
movupd (%rdi,%rcx,1),%xmm2
movupd 0x10(%rdi,%rcx,1),%xmm3
addpd  %xmm1,%xmm1
addpd  %xmm1,%xmm2
addpd  %xmm3,%xmm1
movupd %xmm2,(%rdi,%rcx,1)
movupd %xmm1,0x10(%rdi,%rcx,1)
cmp    %rax,%r9
je     1327 <add_DTD+0x227>
or     $0x1,%rax
movapd %xmm0,%xmm1
addsd  %xmm0,%xmm1
nop
movsd  (%rdi,%rax,8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%rdi,%rax,8)
add    $0x1,%rax
cmp    %rax,%r10
jne    1310 <add_DTD+0x210>
movsd  (%rdi,%r10,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rdi,%r10,8)
cmp    $0x2,%esi
jl     1427 <add_DTD+0x327>
mov    %esi,%r9d
mov    %r8d,%r10d
cmp    $0x4,%r8d
jae    1353 <add_DTD+0x253>
xor    %ecx,%ecx
jmp    1408 <add_DTD+0x308>
mov    %r10d,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rcx),%rax
mov    %rax,%r8
shr    $0x2,%r8
add    $0x1,%r8
test   %rax,%rax
je     13da <add_DTD+0x2da>
mov    %r8,%r11
and    $0xfffffffffffffffe,%r11
lea    (%rdi,%r9,8),%rbx
add    $0x30,%rbx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
movupd -0x30(%rbx,%rax,8),%xmm2
movupd -0x20(%rbx,%rax,8),%xmm3
movupd -0x10(%rbx,%rax,8),%xmm4
movupd (%rbx,%rax,8),%xmm5
subpd  %xmm1,%xmm2
subpd  %xmm1,%xmm3
movupd %xmm2,-0x30(%rbx,%rax,8)
movupd %xmm3,-0x20(%rbx,%rax,8)
subpd  %xmm1,%xmm4
subpd  %xmm1,%xmm5
movupd %xmm4,-0x10(%rbx,%rax,8)
movupd %xmm5,(%rbx,%rax,8)
add    $0x8,%rax
add    $0xfffffffffffffffe,%r11
jne    1390 <add_DTD+0x290>
jmp    13dc <add_DTD+0x2dc>
xor    %eax,%eax
test   $0x1,%r8b
je     1403 <add_DTD+0x303>
add    %r9,%rax
movupd (%rdi,%rax,8),%xmm2
movupd 0x10(%rdi,%rax,8),%xmm3
subpd  %xmm1,%xmm2
subpd  %xmm1,%xmm3
movupd %xmm2,(%rdi,%rax,8)
movupd %xmm3,0x10(%rdi,%rax,8)
cmp    %r10,%rcx
je     1427 <add_DTD+0x327>
lea    (%rdi,%r9,8),%rax
nopl   0x0(%rax)
movsd  (%rax,%rcx,8),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rax,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%r10
jne    1410 <add_DTD+0x310>
cmp    $0x2,%edx
jne    17d7 <add_DTD+0x6d7>
movsd  (%rdi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rdi)
movsd  0xbbc(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x8(%rdi),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rdi)
lea    -0x2(%rsi),%r8d
mov    $0x2,%eax
cmp    $0x5,%esi
jl     157a <add_DTD+0x47a>
mov    %r8d,%r11d
lea    -0x2(%r11),%r9
mov    $0x2,%edx
cmp    $0x4,%r9
jb     154e <add_DTD+0x44e>
mov    %r9,%rdx
and    $0xfffffffffffffffc,%rdx
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
lea    -0x4(%rdx),%rax
mov    %rax,%r10
shr    $0x2,%r10
add    $0x1,%r10
test   %rax,%rax
je     150c <add_DTD+0x40c>
mov    %r10,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %eax,%eax
movapd 0xb6e(%rip),%xmm3
mulpd  %xmm2,%xmm3
cs nopw 0x0(%rax,%rax,1)
movupd 0x10(%rdi,%rax,8),%xmm4
movupd 0x20(%rdi,%rax,8),%xmm5
movupd 0x30(%rdi,%rax,8),%xmm6
movupd 0x40(%rdi,%rax,8),%xmm7
addpd  %xmm3,%xmm4
addpd  %xmm3,%xmm5
movupd %xmm4,0x10(%rdi,%rax,8)
movupd %xmm5,0x20(%rdi,%rax,8)
addpd  %xmm3,%xmm6
addpd  %xmm3,%xmm7
movupd %xmm6,0x30(%rdi,%rax,8)
movupd %xmm7,0x40(%rdi,%rax,8)
add    $0x8,%rax
add    $0xfffffffffffffffe,%rcx
jne    14c0 <add_DTD+0x3c0>
jmp    150e <add_DTD+0x40e>
xor    %eax,%eax
test   $0x1,%r10b
je     1542 <add_DTD+0x442>
shl    $0x3,%rax
or     $0x10,%rax
movupd (%rdi,%rax,1),%xmm3
movupd 0x10(%rdi,%rax,1),%xmm4
mulpd  0xaf1(%rip),%xmm2
addpd  %xmm2,%xmm3
addpd  %xmm4,%xmm2
movupd %xmm3,(%rdi,%rax,1)
movupd %xmm2,0x10(%rdi,%rax,1)
mov    %r8d,%eax
cmp    %rdx,%r9
je     157a <add_DTD+0x47a>
or     $0x2,%rdx
movsd  0xab2(%rip),%xmm2
mulsd  %xmm0,%xmm2
nopw   0x0(%rax,%rax,1)
movsd  (%rdi,%rdx,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rdi,%rdx,8)
add    $0x1,%rdx
cmp    %rdx,%r11
jne    1560 <add_DTD+0x460>
mov    %r8d,%eax
mov    %eax,%eax
addsd  (%rdi,%rax,8),%xmm1
movsd  %xmm1,(%rdi,%rax,8)
movsd  0x8(%rdi,%rax,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rdi,%rax,8)
movslq %esi,%r10
movsd  (%rdi,%r10,8),%xmm2
movapd %xmm0,%xmm1
addsd  %xmm0,%xmm1
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rdi,%r10,8)
mov    $0x1,%ecx
cmp    $0x4,%esi
jl     16da <add_DTD+0x5da>
mov    %r8d,%r14d
lea    -0x1(%r14),%r9
mov    $0x1,%eax
cmp    $0x4,%r9
jb     16aa <add_DTD+0x5aa>
mov    %r9,%rax
and    $0xfffffffffffffffc,%rax
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
lea    -0x4(%rax),%rcx
mov    %rcx,%r11
shr    $0x2,%r11
add    $0x1,%r11
test   %rcx,%rcx
je     166a <add_DTD+0x56a>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
lea    (%rdi,%r10,8),%rcx
mov    $0x1,%edx
movapd 0xa20(%rip),%xmm3
mulpd  %xmm2,%xmm3
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd (%rcx,%rdx,8),%xmm4
movupd 0x10(%rcx,%rdx,8),%xmm5
movupd 0x20(%rcx,%rdx,8),%xmm6
movupd 0x30(%rcx,%rdx,8),%xmm7
addpd  %xmm3,%xmm4
addpd  %xmm3,%xmm5
movupd %xmm4,(%rcx,%rdx,8)
movupd %xmm5,0x10(%rcx,%rdx,8)
addpd  %xmm3,%xmm6
addpd  %xmm3,%xmm7
movupd %xmm6,0x20(%rcx,%rdx,8)
movupd %xmm7,0x30(%rcx,%rdx,8)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%rbx
jne    1620 <add_DTD+0x520>
jmp    166f <add_DTD+0x56f>
mov    $0x1,%edx
test   $0x1,%r11b
je     169e <add_DTD+0x59e>
add    %r10,%rdx
movupd (%rdi,%rdx,8),%xmm3
movupd 0x10(%rdi,%rdx,8),%xmm4
mulpd  0x9a5(%rip),%xmm2
addpd  %xmm2,%xmm3
addpd  %xmm4,%xmm2
movupd %xmm3,(%rdi,%rdx,8)
movupd %xmm2,0x10(%rdi,%rdx,8)
mov    %r8d,%ecx
cmp    %rax,%r9
je     16da <add_DTD+0x5da>
or     $0x1,%rax
lea    (%rdi,%r10,8),%rcx
movsd  0x95a(%rip),%xmm2
mulsd  %xmm0,%xmm2
nopw   0x0(%rax,%rax,1)
movsd  (%rcx,%rax,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rcx,%rax,8)
add    $0x1,%rax
cmp    %rax,%r14
jne    16c0 <add_DTD+0x5c0>
mov    %r8d,%ecx
add    %esi,%ecx
movslq %ecx,%rax
movsd  (%rdi,%rax,8),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rdi,%rax,8)
cmp    $0x3,%esi
jl     17d7 <add_DTD+0x6d7>
add    %esi,%esi
movslq %esi,%r9
mov    %r8d,%eax
cmp    $0x4,%r8d
jae    170b <add_DTD+0x60b>
xor    %ecx,%ecx
jmp    17b8 <add_DTD+0x6b8>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rcx),%rdx
mov    %rdx,%r8
shr    $0x2,%r8
add    $0x1,%r8
test   %rdx,%rdx
je     178a <add_DTD+0x68a>
mov    %r8,%rdx
and    $0xfffffffffffffffe,%rdx
lea    (%rdi,%r9,8),%rbx
add    $0x30,%rbx
xor    %esi,%esi
nopl   (%rax)
movupd -0x30(%rbx,%rsi,8),%xmm2
movupd -0x20(%rbx,%rsi,8),%xmm3
movupd -0x10(%rbx,%rsi,8),%xmm4
movupd (%rbx,%rsi,8),%xmm5
addpd  %xmm1,%xmm2
addpd  %xmm1,%xmm3
movupd %xmm2,-0x30(%rbx,%rsi,8)
movupd %xmm3,-0x20(%rbx,%rsi,8)
addpd  %xmm1,%xmm4
addpd  %xmm1,%xmm5
movupd %xmm4,-0x10(%rbx,%rsi,8)
movupd %xmm5,(%rbx,%rsi,8)
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rdx
jne    1740 <add_DTD+0x640>
jmp    178c <add_DTD+0x68c>
xor    %esi,%esi
test   $0x1,%r8b
je     17b3 <add_DTD+0x6b3>
add    %r9,%rsi
movupd (%rdi,%rsi,8),%xmm2
movupd 0x10(%rdi,%rsi,8),%xmm3
addpd  %xmm1,%xmm2
addpd  %xmm1,%xmm3
movupd %xmm2,(%rdi,%rsi,8)
movupd %xmm3,0x10(%rdi,%rsi,8)
cmp    %rax,%rcx
je     17d7 <add_DTD+0x6d7>
lea    (%rdi,%r9,8),%rdx
nopl   0x0(%rax)
movsd  (%rdx,%rcx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rdx,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    17c0 <add_DTD+0x6c0>
xor    %eax,%eax
pop    %rbx
pop    %r14
ret

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

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