void fir_stereo(int *inp, int *coep, int firlen, int *out1p, int *out2p) {
  register int akku1 = 0, akku2 = 0, *endp;
  int n1 = (firlen / 8) * 8, n0 = firlen % 8;
  endp = coep + n1;
  while (coep != endp) {
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
  }
  endp = coep + n0;
  while (coep != endp) {
    akku1 += *inp++ * *coep;
    akku2 += *inp++ * *coep++;
  }
  *out1p = akku1;
  *out2p = akku2;
}


x86 assembly (clang, -O0):
<fir_stereo>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
shl    $0x3,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x38(%rbp),%rax
je     13a2 <fir_stereo+0x2a2>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    1157 <fir_stereo+0x57>
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x38(%rbp),%rax
je     140f <fir_stereo+0x30f>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
imul   (%rcx),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
imul   (%rcx),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    13b5 <fir_stereo+0x2b5>
mov    -0x2c(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<fir_stereo>:
push   %rbp
push   %r14
push   %rbx
lea    0x7(%rdx),%ebx
test   %edx,%edx
mov    %edx,%eax
cmovs  %ebx,%eax
and    $0xfffffff8,%eax
sub    %eax,%edx
xor    %r11d,%r11d
cmp    $0xf,%ebx
jae    1125 <fir_stereo+0x25>
xor    %eax,%eax
mov    %rsi,%r10
jmp    11d8 <fir_stereo+0xd8>
cltq
lea    (%rsi,%rax,4),%r10
xor    %eax,%eax
xor    %r11d,%r11d
mov    (%rsi),%ebx
mov    0x4(%rsi),%r9d
mov    (%rdi),%ebp
imul   %ebx,%ebp
add    %r11d,%ebp
imul   0x4(%rdi),%ebx
add    %eax,%ebx
mov    0x8(%rdi),%eax
imul   %r9d,%eax
add    %ebp,%eax
imul   0xc(%rdi),%r9d
add    %ebx,%r9d
mov    0x8(%rsi),%ebp
mov    0x10(%rdi),%ebx
imul   %ebp,%ebx
imul   0x14(%rdi),%ebp
add    %eax,%ebx
add    %r9d,%ebp
mov    0xc(%rsi),%eax
mov    0x18(%rdi),%r9d
imul   %eax,%r9d
add    %ebx,%r9d
imul   0x1c(%rdi),%eax
add    %ebp,%eax
mov    0x10(%rsi),%ebp
mov    0x20(%rdi),%ebx
imul   %ebp,%ebx
add    %r9d,%ebx
imul   0x24(%rdi),%ebp
add    %eax,%ebp
mov    0x14(%rsi),%eax
mov    0x28(%rdi),%r9d
imul   %eax,%r9d
add    %ebx,%r9d
imul   0x2c(%rdi),%eax
add    %ebp,%eax
mov    0x18(%rsi),%ebx
mov    0x30(%rdi),%ebp
imul   %ebx,%ebp
imul   0x34(%rdi),%ebx
add    %r9d,%ebp
add    %eax,%ebx
mov    0x1c(%rsi),%eax
mov    0x38(%rdi),%r11d
imul   %eax,%r11d
add    %ebp,%r11d
imul   0x3c(%rdi),%eax
add    $0x40,%rdi
add    %ebx,%eax
add    $0x20,%rsi
cmp    %r10,%rsi
jne    1130 <fir_stereo+0x30>
test   %edx,%edx
je     137d <fir_stereo+0x27d>
movslq %edx,%r9
lea    -0x1(%r9),%rdx
movabs $0x3fffffffffffffff,%r14
ff ff 3f
and    %rdx,%r14
cmp    $0x7,%r14
jae    1205 <fir_stereo+0x105>
mov    %rdi,%rdx
mov    %r10,%rsi
jmp    1350 <fir_stereo+0x250>
add    $0x1,%r14
mov    %r14,%rbx
and    $0xfffffffffffffff8,%rbx
lea    (%rdi,%rbx,8),%rdx
lea    (%r10,%rbx,4),%rsi
movd   %eax,%xmm8
movd   %r11d,%xmm10
pxor   %xmm9,%xmm9
xor    %eax,%eax
pxor   %xmm11,%xmm11
xchg   %ax,%ax
movups (%rdi,%rax,8),%xmm7
movups 0x10(%rdi,%rax,8),%xmm0
movups 0x20(%rdi,%rax,8),%xmm4
movups 0x30(%rdi,%rax,8),%xmm13
movaps %xmm7,%xmm1
movlhps %xmm0,%xmm1
movaps %xmm4,%xmm5
movlhps %xmm13,%xmm5
movaps %xmm7,%xmm3
shufps $0xdd,%xmm0,%xmm3
movaps %xmm4,%xmm6
shufps $0xdd,%xmm13,%xmm6
movdqu (%r10,%rax,4),%xmm14
movdqu 0x10(%r10,%rax,4),%xmm12
movaps %xmm7,%xmm2
unpckhpd %xmm0,%xmm2
pshufd $0xf5,%xmm14,%xmm15
pmuludq %xmm15,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm14,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm2,%xmm1
paddd  %xmm1,%xmm10
movaps %xmm4,%xmm1
unpckhpd %xmm13,%xmm1
pshufd $0xf5,%xmm12,%xmm2
pmuludq %xmm2,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm12,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm1,%xmm5
paddd  %xmm5,%xmm11
shufps $0xff,%xmm0,%xmm7
pmuludq %xmm15,%xmm7
pshufd $0xe8,%xmm7,%xmm0
pmuludq %xmm14,%xmm3
pshufd $0xe8,%xmm3,%xmm1
punpckldq %xmm0,%xmm1
paddd  %xmm1,%xmm8
shufps $0xff,%xmm13,%xmm4
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm0
pmuludq %xmm12,%xmm6
pshufd $0xe8,%xmm6,%xmm1
punpckldq %xmm0,%xmm1
paddd  %xmm1,%xmm9
add    $0x8,%rax
cmp    %rax,%rbx
jne    1230 <fir_stereo+0x130>
paddd  %xmm10,%xmm11
pshufd $0xee,%xmm11,%xmm0
paddd  %xmm11,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%r11d
paddd  %xmm8,%xmm9
pshufd $0xee,%xmm9,%xmm0
paddd  %xmm9,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
cmp    %rbx,%r14
je     137d <fir_stereo+0x27d>
lea    (%r10,%r9,4),%rdi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rsi),%ebp
mov    (%rdx),%ebx
imul   %ebp,%ebx
add    %ebx,%r11d
imul   0x4(%rdx),%ebp
add    $0x4,%rsi
add    %ebp,%eax
add    $0x8,%rdx
cmp    %rdi,%rsi
jne    1360 <fir_stereo+0x260>
mov    %r11d,(%rcx)
mov    %eax,(%r8)
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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