void downmix_to_mono_from_interleaved_stereo(const short *src, short *dst,
                                             unsigned n) {
  unsigned i;
  unsigned offset = 8;
  for (i = 0; i < n; i += 16) {
    unsigned i1 = 0, i2 = 0;
    while (i2 < 8) {
      int sum;
      sum = *(src + i + i1);
      i1++;
      sum += *(src + i + i1);
      i1++;
      *(dst + i2) = (short)(((sum) > (0x7FFF))
                                ? (0x7FFF)
                                : (((sum) < (-0x8000)) ? (-0x8000) : (sum)));
      i2++;
    }
    dst += offset;
  }
}


x86 assembly (clang, -O0):
<downmix_to_mono_from_interleaved_stereo>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x8,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jae    1207 <downmix_to_mono_from_interleaved_stereo+0x107>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x8,-0x24(%rbp)
jae    11e5 <downmix_to_mono_from_interleaved_stereo+0xe5>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%rcx
add    %rcx,%rax
mov    -0x20(%rbp),%ecx
movswl (%rax,%rcx,2),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%rcx
add    %rcx,%rax
mov    -0x20(%rbp),%ecx
movswl (%rax,%rcx,2),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x7fff,-0x28(%rbp)
jle    11a0 <downmix_to_mono_from_interleaved_stereo+0xa0>
mov    $0x7fff,%eax
mov    %eax,-0x2c(%rbp)
jmp    11c6 <downmix_to_mono_from_interleaved_stereo+0xc6>
cmpl   $0xffff8000,-0x28(%rbp)
jge    11ba <downmix_to_mono_from_interleaved_stereo+0xba>
mov    $0xffff8000,%eax
mov    %eax,-0x30(%rbp)
jmp    11c0 <downmix_to_mono_from_interleaved_stereo+0xc0>
mov    -0x28(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1137 <downmix_to_mono_from_interleaved_stereo+0x37>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,%ecx
shl    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x18(%rbp)
jmp    111d <downmix_to_mono_from_interleaved_stereo+0x1d>
pop    %rbp
ret

x86 assembly (clang, -O2):
<downmix_to_mono_from_interleaved_stereo>:
push   %rbp
push   %rbx
test   %edx,%edx
je     127f <downmix_to_mono_from_interleaved_stereo+0x17f>
mov    %edx,%r10d
lea    -0x1(%r10),%r8
cmp    $0x70,%r8
jb     1143 <downmix_to_mono_from_interleaved_stereo+0x43>
lea    0xf(%r10),%rax
and    $0xfffffffffffffff0,%rax
lea    (%rdi,%rax,2),%rax
cmp    %rsi,%rax
jbe    1282 <downmix_to_mono_from_interleaved_stereo+0x182>
mov    %r8,%rax
and    $0xfffffffffffffff0,%rax
add    %rsi,%rax
add    $0x10,%rax
cmp    %rdi,%rax
jbe    1282 <downmix_to_mono_from_interleaved_stereo+0x182>
xor    %ecx,%ecx
mov    %rsi,%r11
nopl   0x0(%rax,%rax,1)
movzwl (%rdi,%rcx,2),%eax
movzwl 0x2(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,(%r11)
movzwl 0x4(%rdi,%rcx,2),%eax
movzwl 0x6(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,0x2(%r11)
movzwl 0x8(%rdi,%rcx,2),%eax
movzwl 0xa(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,0x4(%r11)
movzwl 0xc(%rdi,%rcx,2),%eax
movzwl 0xe(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,0x6(%r11)
movzwl 0x10(%rdi,%rcx,2),%eax
movzwl 0x12(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,0x8(%r11)
movzwl 0x14(%rdi,%rcx,2),%eax
movzwl 0x16(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,0xa(%r11)
movzwl 0x18(%rdi,%rcx,2),%eax
movzwl 0x1a(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,0xc(%r11)
movzwl 0x1c(%rdi,%rcx,2),%eax
movzwl 0x1e(%rdi,%rcx,2),%edx
lea    (%rax,%rdx,1),%esi
movswl %si,%esi
sar    $0xf,%esi
xor    $0xffff8000,%esi
add    %dx,%ax
cmovo  %esi,%eax
mov    %ax,0xe(%r11)
add    $0x10,%rcx
add    $0x10,%r11
cmp    %r10,%rcx
jb     1150 <downmix_to_mono_from_interleaved_stereo+0x50>
pop    %rbx
pop    %rbp
ret
shr    $0x4,%r8
add    $0x1,%r8
mov    %r8,%r9
and    $0xfffffffffffffff8,%r9
mov    %r9,%rcx
shl    $0x4,%rcx
lea    (%rsi,%rcx,1),%r11
lea    0xfe(%rdi),%rax
xor    %edx,%edx
mov    %r9,%rbx
nopl   0x0(%rax,%rax,1)
movzwl -0x1e(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x3e(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x5e(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x7e(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x9e(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xbe(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xde(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xfe(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x1c(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x3c(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x5c(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x7c(%rax,%rdx,2),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x9c(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xbc(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xdc(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xfc(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm9
punpcklwd %xmm1,%xmm9
punpckldq %xmm2,%xmm9
punpcklqdq %xmm3,%xmm9
paddsw %xmm0,%xmm9
movzwl -0x1a(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x3a(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x5a(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x7a(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x9a(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xba(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xda(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xfa(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x18(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x38(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x58(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x78(%rax,%rdx,2),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x98(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xb8(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xd8(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xf8(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm8
punpcklwd %xmm1,%xmm8
punpckldq %xmm2,%xmm8
punpcklqdq %xmm3,%xmm8
paddsw %xmm0,%xmm8
movzwl -0x16(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x36(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x56(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x76(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x96(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xb6(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xd6(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xf6(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x14(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x34(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x54(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x74(%rax,%rdx,2),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x94(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xb4(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xd4(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xf4(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm11
punpcklwd %xmm1,%xmm11
punpckldq %xmm2,%xmm11
punpcklqdq %xmm3,%xmm11
paddsw %xmm0,%xmm11
movzwl -0x12(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x32(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x52(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x72(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x92(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xb2(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xd2(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xf2(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x10(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x30(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x50(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x70(%rax,%rdx,2),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x90(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xb0(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xd0(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xf0(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm10
punpcklwd %xmm1,%xmm10
punpckldq %xmm2,%xmm10
punpcklqdq %xmm3,%xmm10
paddsw %xmm0,%xmm10
movzwl -0xe(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x2e(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x4e(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x6e(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x8e(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xae(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xce(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xee(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0xc(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x2c(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x4c(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x6c(%rax,%rdx,2),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x8c(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xac(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xcc(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xec(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm14
punpcklwd %xmm1,%xmm14
punpckldq %xmm2,%xmm14
punpcklqdq %xmm3,%xmm14
paddsw %xmm0,%xmm14
movzwl -0xa(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x2a(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x4a(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x6a(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x8a(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xaa(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xca(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xea(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x8(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x28(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x48(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x68(%rax,%rdx,2),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x88(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xa8(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xc8(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0xe8(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm12
punpcklwd %xmm1,%xmm12
punpckldq %xmm2,%xmm12
punpcklqdq %xmm3,%xmm12
paddsw %xmm0,%xmm12
movzwl -0x6(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x26(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x46(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x66(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x86(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xa6(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xc6(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xe6(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x4(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x24(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x44(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x64(%rax,%rdx,2),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x84(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xa4(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xc4(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xe4(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm4
punpcklwd %xmm1,%xmm4
punpckldq %xmm2,%xmm4
punpcklqdq %xmm3,%xmm4
paddsw %xmm0,%xmm4
movzwl -0x2(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x22(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x42(%rax,%rdx,2),%ebp
movd   %ebp,%xmm0
movzwl -0x62(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x82(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
movzwl -0xa2(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0xc2(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
movzwl -0xe2(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl (%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x20(%rax,%rdx,2),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x40(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0x60(%rax,%rdx,2),%ebp
movd   %ebp,%xmm5
punpcklwd %xmm1,%xmm5
punpckldq %xmm2,%xmm5
movzwl -0x80(%rax,%rdx,2),%ebp
movd   %ebp,%xmm1
movzwl -0xa0(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0xc0(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm1
movzwl -0xe0(%rax,%rdx,2),%ebp
ff
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
punpcklqdq %xmm5,%xmm3
paddsw %xmm0,%xmm3
movdqa %xmm11,%xmm5
punpcklwd %xmm10,%xmm5
movdqa %xmm9,%xmm7
punpcklwd %xmm8,%xmm7
movdqa %xmm7,%xmm0
punpckldq %xmm5,%xmm0
movdqa %xmm4,%xmm6
punpcklwd %xmm3,%xmm6
pshufd $0x0,%xmm6,%xmm2
movdqa %xmm14,%xmm1
punpcklwd %xmm12,%xmm1
pshufd $0x0,%xmm1,%xmm13
punpckhdq %xmm2,%xmm13
movsd  %xmm0,%xmm13
movdqa %xmm1,%xmm0
punpckldq %xmm6,%xmm0
pshufd $0x55,%xmm5,%xmm2
pshufd $0x55,%xmm7,%xmm15
punpckldq %xmm2,%xmm15
shufps $0xe4,%xmm0,%xmm15
pshufd $0xaa,%xmm6,%xmm2
pshufd $0xaa,%xmm1,%xmm0
punpckhdq %xmm2,%xmm0
pshufd $0xff,%xmm7,%xmm2
punpckhdq %xmm5,%xmm7
movsd  %xmm7,%xmm0
punpckhdq %xmm6,%xmm1
pshufd $0xff,%xmm5,%xmm5
punpckldq %xmm5,%xmm2
shufps $0xe4,%xmm1,%xmm2
punpckhwd %xmm10,%xmm11
punpckhwd %xmm8,%xmm9
movdqa %xmm9,%xmm1
punpckldq %xmm11,%xmm1
punpckhwd %xmm3,%xmm4
pshufd $0x0,%xmm4,%xmm3
punpckhwd %xmm12,%xmm14
pshufd $0x0,%xmm14,%xmm5
punpckhdq %xmm3,%xmm5
movsd  %xmm1,%xmm5
movdqa %xmm14,%xmm1
punpckldq %xmm4,%xmm1
pshufd $0x55,%xmm11,%xmm3
pshufd $0x55,%xmm9,%xmm6
punpckldq %xmm3,%xmm6
shufps $0xe4,%xmm1,%xmm6
pshufd $0xaa,%xmm4,%xmm1
pshufd $0xaa,%xmm14,%xmm3
punpckhdq %xmm1,%xmm3
pshufd $0xff,%xmm9,%xmm1
punpckhdq %xmm11,%xmm9
movsd  %xmm9,%xmm3
punpckhdq %xmm4,%xmm14
pshufd $0xff,%xmm11,%xmm4
punpckldq %xmm4,%xmm1
shufps $0xe4,%xmm14,%xmm1
movups %xmm1,0x70(%rsi,%rdx,1)
movupd %xmm3,0x60(%rsi,%rdx,1)
movups %xmm6,0x50(%rsi,%rdx,1)
movupd %xmm5,0x40(%rsi,%rdx,1)
movups %xmm2,0x30(%rsi,%rdx,1)
movupd %xmm0,0x20(%rsi,%rdx,1)
movups %xmm15,0x10(%rsi,%rdx,1)
movupd %xmm13,(%rsi,%rdx,1)
sub    $0xffffffffffffff80,%rdx
add    $0xfffffffffffffff8,%rbx
jne    12b0 <downmix_to_mono_from_interleaved_stereo+0x1b0>
cmp    %r9,%r8
jne    1150 <downmix_to_mono_from_interleaved_stereo+0x50>
jmp    127f <downmix_to_mono_from_interleaved_stereo+0x17f>

LLVM IR (-O0):
define void @downmix_to_mono_from_interleaved_stereo(i16* %0, i16* %1, i32 %2) {
%4 = alloca i16*
%5 = alloca i16*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
store i16* %0, i16** %4
store i16* %1, i16** %5
store i32 %2, i32* %6
store i32 8, i32* %8
store i32 0, i32* %7
br label %12
12: ; preds = %70, %3
%13 = load i32, i32* %7
%14 = load i32, i32* %6
%15 = icmp ult i32 %13, %14
br i1 %15, label %16, label %73
16: ; preds = %12
store i32 0, i32* %9
store i32 0, i32* %10
br label %17
17: ; preds = %56, %16
%18 = load i32, i32* %10
%19 = icmp ult i32 %18, 8
br i1 %19, label %20, label %65
20: ; preds = %17
%21 = load i16*, i16** %4
%22 = load i32, i32* %7
%23 = zext i32 %22 to i64
%24 = getelementptr inbounds i16, i16* %21, i64 %23
%25 = load i32, i32* %9
%26 = zext i32 %25 to i64
%27 = getelementptr inbounds i16, i16* %24, i64 %26
%28 = load i16, i16* %27
%29 = sext i16 %28 to i32
store i32 %29, i32* %11
%30 = load i32, i32* %9
%31 = add i32 %30, 1
store i32 %31, i32* %9
%32 = load i16*, i16** %4
%33 = load i32, i32* %7
%34 = zext i32 %33 to i64
%35 = getelementptr inbounds i16, i16* %32, i64 %34
%36 = load i32, i32* %9
%37 = zext i32 %36 to i64
%38 = getelementptr inbounds i16, i16* %35, i64 %37
%39 = load i16, i16* %38
%40 = sext i16 %39 to i32
%41 = load i32, i32* %11
%42 = add nsw i32 %41, %40
store i32 %42, i32* %11
%43 = load i32, i32* %9
%44 = add i32 %43, 1
store i32 %44, i32* %9
%45 = load i32, i32* %11
%46 = icmp sgt i32 %45, 32767
br i1 %46, label %47, label %48
47: ; preds = %20
br label %56
48: ; preds = %20
%49 = load i32, i32* %11
%50 = icmp slt i32 %49, -32768
br i1 %50, label %51, label %52
51: ; preds = %48
br label %54
52: ; preds = %48
%53 = load i32, i32* %11
br label %54
54: ; preds = %52, %51
%55 = phi i32 [ -32768, %51 ], [ %53, %52 ]
br label %56
56: ; preds = %54, %47
%57 = phi i32 [ 32767, %47 ], [ %55, %54 ]
%58 = trunc i32 %57 to i16
%59 = load i16*, i16** %5
%60 = load i32, i32* %10
%61 = zext i32 %60 to i64
%62 = getelementptr inbounds i16, i16* %59, i64 %61
store i16 %58, i16* %62
%63 = load i32, i32* %10
%64 = add i32 %63, 1
store i32 %64, i32* %10
br label %17
65: ; preds = %17
%66 = load i32, i32* %8
%67 = load i16*, i16** %5
%68 = zext i32 %66 to i64
%69 = getelementptr inbounds i16, i16* %67, i64 %68
store i16* %69, i16** %5
br label %70
70: ; preds = %65
%71 = load i32, i32* %7
%72 = add i32 %71, 16
store i32 %72, i32* %7
br label %12
73: ; preds = %12
ret void
}

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