void SKP_Silk_biquad_alt(const short *in, const int *B_Q28, const int *A_Q28,
                         int *S, short *out, const int len) {
  int k;
  int inval, A0_U_Q28, A0_L_Q28, A1_U_Q28, A1_L_Q28, out32_Q14;
  A0_L_Q28 = (-A_Q28[0]) & 0x00003FFF;
  A0_U_Q28 = ((-A_Q28[0]) >> (14));
  A1_L_Q28 = (-A_Q28[1]) & 0x00003FFF;
  A1_U_Q28 = ((-A_Q28[1]) >> (14));
  for (k = 0; k < len; k++) {
    inval = in[k];
    out32_Q14 =
        ((((S[0]) +
           ((((B_Q28[0]) >> 16) * (int)((short)(inval))) +
            ((((B_Q28[0]) & 0x0000FFFF) * (int)((short)(inval))) >> 16))))
         << (2));
    S[0] =
        S[1] +
        ((14) == 1
             ? ((((((out32_Q14) >> 16) * (int)((short)(A0_L_Q28))) +
                  ((((out32_Q14)&0x0000FFFF) * (int)((short)(A0_L_Q28))) >>
                   16))) >>
                1) +
                   ((((((out32_Q14) >> 16) * (int)((short)(A0_L_Q28))) +
                      ((((out32_Q14)&0x0000FFFF) * (int)((short)(A0_L_Q28))) >>
                       16))) &
                    1)
             : (((((((out32_Q14) >> 16) * (int)((short)(A0_L_Q28))) +
                   ((((out32_Q14)&0x0000FFFF) * (int)((short)(A0_L_Q28))) >>
                    16))) >>
                 ((14) - 1)) +
                1) >>
                   1);
    S[0] = ((S[0]) +
            ((((out32_Q14) >> 16) * (int)((short)(A0_U_Q28))) +
             ((((out32_Q14)&0x0000FFFF) * (int)((short)(A0_U_Q28))) >> 16)));
    S[0] = ((S[0]) +
            ((((B_Q28[1]) >> 16) * (int)((short)(inval))) +
             ((((B_Q28[1]) & 0x0000FFFF) * (int)((short)(inval))) >> 16)));
    S[1] =
        ((14) == 1
             ? ((((((out32_Q14) >> 16) * (int)((short)(A1_L_Q28))) +
                  ((((out32_Q14)&0x0000FFFF) * (int)((short)(A1_L_Q28))) >>
                   16))) >>
                1) +
                   ((((((out32_Q14) >> 16) * (int)((short)(A1_L_Q28))) +
                      ((((out32_Q14)&0x0000FFFF) * (int)((short)(A1_L_Q28))) >>
                       16))) &
                    1)
             : (((((((out32_Q14) >> 16) * (int)((short)(A1_L_Q28))) +
                   ((((out32_Q14)&0x0000FFFF) * (int)((short)(A1_L_Q28))) >>
                    16))) >>
                 ((14) - 1)) +
                1) >>
                   1);
    S[1] = ((S[1]) +
            ((((out32_Q14) >> 16) * (int)((short)(A1_U_Q28))) +
             ((((out32_Q14)&0x0000FFFF) * (int)((short)(A1_U_Q28))) >> 16)));
    S[1] = ((S[1]) +
            ((((B_Q28[2]) >> 16) * (int)((short)(inval))) +
             ((((B_Q28[2]) & 0x0000FFFF) * (int)((short)(inval))) >> 16)));
    out[k] =
        (short)((((out32_Q14 + (1 << 14) - 1) >> (14))) > 0x7FFF
                    ? 0x7FFF
                    : ((((out32_Q14 + (1 << 14) - 1) >> (14))) < ((short)0x8000)
                           ? ((short)0x8000)
                           : (((out32_Q14 + (1 << 14) - 1) >> (14)))));
  }
}


x86 assembly (clang, -O0):
<SKP_Silk_biquad_alt>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    -0x18(%rbp),%rcx
xor    %eax,%eax
sub    (%rcx),%eax
and    $0x3fff,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rcx
xor    %eax,%eax
sub    (%rcx),%eax
sar    $0xe,%eax
mov    %eax,-0x38(%rbp)
mov    -0x18(%rbp),%rcx
xor    %eax,%eax
sub    0x4(%rcx),%eax
and    $0x3fff,%eax
mov    %eax,-0x44(%rbp)
mov    -0x18(%rbp),%rcx
xor    %eax,%eax
sub    0x4(%rcx),%eax
sar    $0xe,%eax
mov    %eax,-0x40(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    138e <SKP_Silk_biquad_alt+0x28e>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%ecx
sar    $0x10,%ecx
mov    -0x34(%rbp),%edx
movswl %dx,%edx
imul   %edx,%ecx
mov    -0x10(%rbp),%rdx
mov    (%rdx),%edx
and    $0xffff,%edx
mov    -0x34(%rbp),%esi
movswl %si,%esi
imul   %esi,%edx
sar    $0x10,%edx
add    %edx,%ecx
add    %ecx,%eax
shl    $0x2,%eax
mov    %eax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x48(%rbp),%eax
sar    $0x10,%eax
mov    -0x3c(%rbp),%edx
movswl %dx,%edx
imul   %edx,%eax
mov    -0x48(%rbp),%edx
and    $0xffff,%edx
mov    -0x3c(%rbp),%esi
movswl %si,%esi
imul   %esi,%edx
sar    $0x10,%edx
add    %edx,%eax
sar    $0xd,%eax
add    $0x1,%eax
sar    $0x1,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
mov    -0x48(%rbp),%eax
sar    $0x10,%eax
mov    -0x38(%rbp),%edx
movswl %dx,%edx
imul   %edx,%eax
mov    -0x48(%rbp),%edx
and    $0xffff,%edx
mov    -0x38(%rbp),%esi
movswl %si,%esi
imul   %esi,%edx
sar    $0x10,%edx
add    %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
sar    $0x10,%eax
mov    -0x34(%rbp),%edx
movswl %dx,%edx
imul   %edx,%eax
mov    -0x10(%rbp),%rdx
mov    0x4(%rdx),%edx
and    $0xffff,%edx
mov    -0x34(%rbp),%esi
movswl %si,%esi
imul   %esi,%edx
sar    $0x10,%edx
add    %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%ecx
sar    $0x10,%ecx
mov    -0x44(%rbp),%eax
cwtl
imul   %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0xffff,%eax
mov    -0x44(%rbp),%edx
movswl %dx,%edx
imul   %edx,%eax
sar    $0x10,%eax
add    %eax,%ecx
sar    $0xd,%ecx
add    $0x1,%ecx
sar    $0x1,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x48(%rbp),%eax
sar    $0x10,%eax
mov    -0x40(%rbp),%edx
movswl %dx,%edx
imul   %edx,%eax
mov    -0x48(%rbp),%edx
and    $0xffff,%edx
mov    -0x40(%rbp),%esi
movswl %si,%esi
imul   %esi,%edx
sar    $0x10,%edx
add    %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%eax
sar    $0x10,%eax
mov    -0x34(%rbp),%edx
movswl %dx,%edx
imul   %edx,%eax
mov    -0x10(%rbp),%rdx
mov    0x8(%rdx),%edx
and    $0xffff,%edx
mov    -0x34(%rbp),%esi
movswl %si,%esi
imul   %esi,%edx
sar    $0x10,%edx
add    %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x48(%rbp),%eax
add    $0x4000,%eax
sub    $0x1,%eax
sar    $0xe,%eax
cmp    $0x7fff,%eax
jle    1331 <SKP_Silk_biquad_alt+0x231>
mov    $0x7fff,%eax
mov    %eax,-0x4c(%rbp)
jmp    136e <SKP_Silk_biquad_alt+0x26e>
mov    -0x48(%rbp),%eax
add    $0x4000,%eax
sub    $0x1,%eax
sar    $0xe,%eax
cmp    $0xffff8000,%eax
jge    1357 <SKP_Silk_biquad_alt+0x257>
mov    $0xffff8000,%eax
mov    %eax,-0x50(%rbp)
jmp    1368 <SKP_Silk_biquad_alt+0x268>
mov    -0x48(%rbp),%eax
add    $0x4000,%eax
sub    $0x1,%eax
sar    $0xe,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %ax,%dx
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1161 <SKP_Silk_biquad_alt+0x61>
pop    %rbp
ret

x86 assembly (clang, -O2):
<SKP_Silk_biquad_alt>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %r9d,%r9d
jle    1280 <SKP_Silk_biquad_alt+0x180>
mov    %rdi,%r12
xor    %eax,%eax
xor    %edi,%edi
sub    (%rdx),%edi
sub    0x4(%rdx),%eax
mov    %edi,%edx
and    $0x3fff,%edx
mov    %edx,-0xc(%rsp)
shr    $0xe,%edi
movswl %di,%edx
mov    %edx,-0x10(%rsp)
mov    %eax,%edx
and    $0x3fff,%edx
mov    %edx,-0x14(%rsp)
shr    $0xe,%eax
cwtl
mov    %eax,-0x18(%rsp)
mov    %r9d,%eax
mov    %rax,-0x8(%rsp)
mov    (%rcx),%r14d
mov    0x4(%rcx),%r15d
xor    %r10d,%r10d
mov    -0x10(%rsp),%r13d
movswl (%r12,%r10,2),%ebp
mov    (%rsi),%edx
movzwl %dx,%eax
sar    $0x10,%edx
imul   %ebp,%edx
add    %r14d,%edx
imul   %ebp,%eax
sar    $0x10,%eax
add    %edx,%eax
lea    0x0(,%rax,4),%edx
mov    %eax,%edi
shr    $0xe,%edi
mov    %r8,%r11
movswl %di,%r8d
mov    %r8d,%edi
mov    -0xc(%rsp),%r14d
imul   %r14d,%edi
movzwl %dx,%r9d
mov    %r9d,%ebx
imul   %r14d,%ebx
shr    $0x10,%ebx
add    %edi,%ebx
sar    $0xd,%ebx
add    $0x1,%ebx
sar    %ebx
mov    %r8d,%r14d
imul   %r13d,%r14d
add    %r15d,%r14d
mov    %r9d,%edi
imul   %r13d,%edi
sar    $0x10,%edi
add    %r14d,%edi
add    %ebx,%edi
mov    %edi,(%rcx)
mov    0x4(%rsi),%ebx
movzwl %bx,%r14d
sar    $0x10,%ebx
imul   %ebp,%ebx
imul   %ebp,%r14d
sar    $0x10,%r14d
add    %ebx,%r14d
add    %edi,%r14d
mov    %r8d,%edi
mov    -0x14(%rsp),%r15d
imul   %r15d,%edi
mov    %r9d,%ebx
imul   %r15d,%ebx
shr    $0x10,%ebx
add    %edi,%ebx
mov    %r14d,(%rcx)
sar    $0xd,%ebx
add    $0x1,%ebx
sar    %ebx
mov    -0x18(%rsp),%edi
imul   %edi,%r8d
imul   %edi,%r9d
sar    $0x10,%r9d
add    %r8d,%r9d
mov    %r11,%r8
add    %ebx,%r9d
mov    %r9d,0x4(%rcx)
mov    0x8(%rsi),%edi
movzwl %di,%r15d
sar    $0x10,%edi
imul   %ebp,%edi
imul   %ebp,%r15d
sar    $0x10,%r15d
add    %edi,%r15d
add    %r9d,%r15d
lea    0x3fff(,%rax,4),%eax
sar    $0xe,%eax
cmp    $0xffff8001,%eax
mov    $0x8000,%edi
cmovl  %edi,%eax
cmp    $0x1fffc001,%edx
mov    $0x7fff,%edx
cmovge %edx,%eax
mov    %r15d,0x4(%rcx)
mov    %ax,(%r11,%r10,2)
add    $0x1,%r10
cmp    %r10,-0x8(%rsp)
jne    1160 <SKP_Silk_biquad_alt+0x60>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @SKP_Silk_biquad_alt(i16* nocapture %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3, i16* nocapture writeonly %4, i32 %5) {
%7 = load i32, i32* %2
%8 = sub nsw i32 0, %7
%9 = getelementptr inbounds i32, i32* %2, i64 1
%10 = load i32, i32* %9
%11 = sub nsw i32 0, %10
%12 = icmp sgt i32 %5, 0
br i1 %12, label %13, label %95
13: ; preds = %6
%14 = getelementptr inbounds i32, i32* %3, i64 1
%15 = and i32 %8, 16383
%16 = shl i32 %8, 2
%17 = ashr i32 %16, 16
%18 = getelementptr inbounds i32, i32* %1, i64 1
%19 = and i32 %11, 16383
%20 = shl i32 %11, 2
%21 = ashr i32 %20, 16
%22 = getelementptr inbounds i32, i32* %1, i64 2
%23 = zext i32 %5 to i64
%24 = load i32, i32* %3
%25 = load i32, i32* %14
br label %26
26: ; preds = %13, %26
%27 = phi i32 [ %25, %13 ], [ %84, %26 ]
%28 = phi i32 [ %24, %13 ], [ %64, %26 ]
%29 = phi i64 [ 0, %13 ], [ %93, %26 ]
%30 = getelementptr inbounds i16, i16* %0, i64 %29
%31 = load i16, i16* %30
%32 = sext i16 %31 to i32
%33 = load i32, i32* %1
%34 = ashr i32 %33, 16
%35 = mul nsw i32 %34, %32
%36 = and i32 %33, 65535
%37 = mul nsw i32 %36, %32
%38 = ashr i32 %37, 16
%39 = add i32 %35, %28
%40 = add i32 %39, %38
%41 = shl i32 %40, 2
%42 = ashr i32 %41, 16
%43 = mul nsw i32 %42, %15
%44 = and i32 %41, 65532
%45 = mul nuw nsw i32 %44, %15
%46 = lshr i32 %45, 16
%47 = add nsw i32 %46, %43
%48 = ashr i32 %47, 13
%49 = add nsw i32 %48, 1
%50 = ashr i32 %49, 1
%51 = mul nsw i32 %42, %17
%52 = mul nsw i32 %44, %17
%53 = ashr i32 %52, 16
%54 = add i32 %51, %27
%55 = add i32 %54, %53
%56 = add i32 %55, %50
store i32 %56, i32* %3
%57 = load i32, i32* %18
%58 = ashr i32 %57, 16
%59 = mul nsw i32 %58, %32
%60 = and i32 %57, 65535
%61 = mul nsw i32 %60, %32
%62 = ashr i32 %61, 16
%63 = add nsw i32 %62, %59
%64 = add nsw i32 %63, %56
store i32 %64, i32* %3
%65 = mul nsw i32 %42, %19
%66 = mul nuw nsw i32 %44, %19
%67 = lshr i32 %66, 16
%68 = add nsw i32 %67, %65
%69 = ashr i32 %68, 13
%70 = add nsw i32 %69, 1
%71 = ashr i32 %70, 1
%72 = mul nsw i32 %42, %21
%73 = mul nsw i32 %44, %21
%74 = ashr i32 %73, 16
%75 = add nsw i32 %74, %72
%76 = add nsw i32 %75, %71
store i32 %76, i32* %14
%77 = load i32, i32* %22
%78 = ashr i32 %77, 16
%79 = mul nsw i32 %78, %32
%80 = and i32 %77, 65535
%81 = mul nsw i32 %80, %32
%82 = ashr i32 %81, 16
%83 = add nsw i32 %82, %79
%84 = add nsw i32 %83, %76
store i32 %84, i32* %14
%85 = add nsw i32 %41, 16383
%86 = ashr i32 %85, 14
%87 = icmp sgt i32 %41, 536854528
%88 = icmp sgt i32 %86, -32768
%89 = select i1 %88, i32 %86, i32 -32768
%90 = trunc i32 %89 to i16
%91 = select i1 %87, i16 32767, i16 %90
%92 = getelementptr inbounds i16, i16* %4, i64 %29
store i16 %91, i16* %92
%93 = add nuw nsw i64 %29, 1
%94 = icmp eq i64 %93, %23
br i1 %94, label %95, label %26
95: ; preds = %26, %6
ret void
}