void pyr_filters(float g[], short *ng, float h[], short *nh, short idegree) {
  switch (idegree) {
  case 0:
    *ng = 1;
    *nh = 1;
    break;
  case 1:
    g[0] = 0.707107;
    g[1] = 0.292893;
    g[2] = -0.12132;
    g[3] = -0.0502525;
    g[4] = 0.0208153;
    g[5] = 0.00862197;
    g[6] = -0.00357134;
    g[7] = -0.0014793;
    g[8] = 0.000612745;
    *ng = 9;
    h[0] = 1.;
    h[1] = 0.5;
    *nh = 2;
    break;
  case 2:
    g[0] = 0.617317;
    g[1] = 0.310754;
    g[2] = -0.0949641;
    g[3] = -0.0858654;
    g[4] = 0.0529153;
    g[5] = 0.0362437;
    g[6] = -0.0240408;
    g[7] = -0.0160987;
    g[8] = 0.0107498;
    g[9] = 0.00718418;
    g[10] = -0.00480004;
    g[11] = -0.00320734;
    g[12] = 0.00214306;
    g[13] = 0.00143195;
    g[14] = -0.0009568;
    g[15] = -0.000639312;
    *ng = 16;
    h[0] = 1.;
    h[1] = 0.585786;
    h[2] = 0;
    h[3] = -0.100505;
    h[4] = 0;
    h[5] = 0.0172439;
    h[6] = 0;
    h[7] = -0.00295859;
    h[8] = 0;
    h[9] = 0.000507614;
    *nh = 10;
    break;
  case 3:
    g[0] = 0.596797;
    g[1] = 0.313287;
    g[2] = -0.0827691;
    g[3] = -0.0921993;
    g[4] = 0.0540288;
    g[5] = 0.0436996;
    g[6] = -0.0302508;
    g[7] = -0.0225552;
    g[8] = 0.0162251;
    g[9] = 0.0118738;
    g[10] = -0.00861788;
    g[11] = -0.00627964;
    g[12] = 0.00456713;
    g[13] = 0.00332464;
    g[14] = -0.00241916;
    g[15] = -0.00176059;
    g[16] = 0.00128128;
    g[17] = 0.000932349;
    g[18] = -0.000678643;
    g[19] = -0.000493682;
    *ng = 20;
    h[0] = 1.;
    h[1] = 0.600481;
    h[2] = 0;
    h[3] = -0.127405;
    h[4] = 0;
    h[5] = 0.034138;
    h[6] = 0;
    h[7] = -0.00914725;
    h[8] = 0;
    h[9] = 0.002451;
    h[10] = 0;
    h[11] = -0.000656743;
    *nh = 12;
    break;
  default:
    *ng = 1;
    *nh = 1;
    break;
  }
}


x86 assembly (clang, -O0):
<pyr_filters>:
push   %rbp
mov    %rsp,%rbp
mov    %r8w,%ax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %ax,-0x22(%rbp)
movswl -0x22(%rbp),%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x3,%eax
ja     1601 <pyr_filters+0x501>
mov    -0x30(%rbp),%rax
lea    0xfae(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
movw   $0x1,(%rax)
mov    -0x20(%rbp),%rax
movw   $0x1,(%rax)
jmp    1613 <pyr_filters+0x513>
mov    -0x8(%rbp),%rax
movss  0xf7e(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movss  0xf6a(%rip),%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x8(%rbp),%rax
movss  0xf55(%rip),%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movss  0xf40(%rip),%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
movss  0xf2b(%rip),%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movss  0xf16(%rip),%xmm0
movss  %xmm0,0x14(%rax)
mov    -0x8(%rbp),%rax
movss  0xf01(%rip),%xmm0
movss  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movss  0xeec(%rip),%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
movss  0xed7(%rip),%xmm0
movss  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
movw   $0x9,(%rax)
mov    -0x18(%rbp),%rax
movss  0xe11(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movss  0xea9(%rip),%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x20(%rbp),%rax
movw   $0x2,(%rax)
jmp    1613 <pyr_filters+0x513>
mov    -0x8(%rbp),%rax
movss  0xe86(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movss  0xe72(%rip),%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x8(%rbp),%rax
movss  0xe5d(%rip),%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movss  0xe48(%rip),%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
movss  0xe33(%rip),%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movss  0xe1e(%rip),%xmm0
movss  %xmm0,0x14(%rax)
mov    -0x8(%rbp),%rax
movss  0xe09(%rip),%xmm0
movss  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movss  0xdf4(%rip),%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
movss  0xddf(%rip),%xmm0
movss  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movss  0xdca(%rip),%xmm0
movss  %xmm0,0x24(%rax)
mov    -0x8(%rbp),%rax
movss  0xdb5(%rip),%xmm0
movss  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movss  0xda0(%rip),%xmm0
movss  %xmm0,0x2c(%rax)
mov    -0x8(%rbp),%rax
movss  0xd8b(%rip),%xmm0
movss  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movss  0xd76(%rip),%xmm0
movss  %xmm0,0x34(%rax)
mov    -0x8(%rbp),%rax
movss  0xd61(%rip),%xmm0
movss  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
movss  0xd4c(%rip),%xmm0
movss  %xmm0,0x3c(%rax)
mov    -0x10(%rbp),%rax
movw   $0x10,(%rax)
mov    -0x18(%rbp),%rax
movss  0xcca(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movss  0xd1e(%rip),%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movss  0xcfd(%rip),%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movss  0xcdc(%rip),%xmm0
movss  %xmm0,0x14(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
movss  0xcbb(%rip),%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movss  0xc9a(%rip),%xmm0
movss  %xmm0,0x24(%rax)
mov    -0x20(%rbp),%rax
movw   $0xa,(%rax)
jmp    1613 <pyr_filters+0x513>
mov    -0x8(%rbp),%rax
movss  0xc77(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movss  0xc63(%rip),%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x8(%rbp),%rax
movss  0xc4e(%rip),%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movss  0xc39(%rip),%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
movss  0xc24(%rip),%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movss  0xc0f(%rip),%xmm0
movss  %xmm0,0x14(%rax)
mov    -0x8(%rbp),%rax
movss  0xbfa(%rip),%xmm0
movss  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movss  0xbe5(%rip),%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
movss  0xbd0(%rip),%xmm0
movss  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movss  0xbbb(%rip),%xmm0
movss  %xmm0,0x24(%rax)
mov    -0x8(%rbp),%rax
movss  0xba6(%rip),%xmm0
movss  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movss  0xb91(%rip),%xmm0
movss  %xmm0,0x2c(%rax)
mov    -0x8(%rbp),%rax
movss  0xb7c(%rip),%xmm0
movss  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movss  0xb67(%rip),%xmm0
movss  %xmm0,0x34(%rax)
mov    -0x8(%rbp),%rax
movss  0xb52(%rip),%xmm0
movss  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
movss  0xb3d(%rip),%xmm0
movss  %xmm0,0x3c(%rax)
mov    -0x8(%rbp),%rax
movss  0xb28(%rip),%xmm0
movss  %xmm0,0x40(%rax)
mov    -0x8(%rbp),%rax
movss  0xb13(%rip),%xmm0
movss  %xmm0,0x44(%rax)
mov    -0x8(%rbp),%rax
movss  0xafe(%rip),%xmm0
movss  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rax
movss  0xae9(%rip),%xmm0
movss  %xmm0,0x4c(%rax)
mov    -0x10(%rbp),%rax
movw   $0x14,(%rax)
mov    -0x18(%rbp),%rax
movss  0xacb(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movss  0xab7(%rip),%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movss  0xa96(%rip),%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movss  0xa75(%rip),%xmm0
movss  %xmm0,0x14(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
movss  0xa54(%rip),%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movss  0xa33(%rip),%xmm0
movss  %xmm0,0x24(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x28(%rax)
mov    -0x18(%rbp),%rax
movss  0xa12(%rip),%xmm0
movss  %xmm0,0x2c(%rax)
mov    -0x20(%rbp),%rax
movw   $0xc,(%rax)
jmp    1613 <pyr_filters+0x513>
mov    -0x10(%rbp),%rax
movw   $0x1,(%rax)
mov    -0x20(%rbp),%rax
movw   $0x1,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<pyr_filters>:
cmp    $0x3,%r8d
ja     1119 <pyr_filters+0x19>
mov    %r8d,%eax
lea    0xff0(%rip),%r8
movslq (%r8,%rax,4),%rax
add    %r8,%rax
jmp    *%rax
movw   $0x1,(%rsi)
mov    $0x1,%ax
mov    %ax,(%rcx)
ret
movaps 0xfb3(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xfb9(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movl   $0x3a20a09f,0x20(%rdi)
movw   $0x9,(%rsi)
movabs $0x3f0000003f800000,%rax
mov    %rax,(%rdx)
mov    $0x2,%ax
mov    %ax,(%rcx)
ret
movaps 0xf1d(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xf23(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xf28(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xf2d(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movw   $0x10,(%rsi)
movaps 0xf2d(%rip),%xmm0
movups %xmm0,(%rdx)
movaps 0xf33(%rip),%xmm0
movups %xmm0,0x10(%rdx)
movabs $0x3a05116600000000,%rax
11 05 3a
mov    %rax,0x20(%rdx)
mov    $0xa,%ax
mov    %ax,(%rcx)
ret
movaps 0xe42(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xe48(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xe4d(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xe52(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movaps 0xe57(%rip),%xmm0
movups %xmm0,0x40(%rdi)
movw   $0x14,(%rsi)
movaps 0xe57(%rip),%xmm0
movups %xmm0,(%rdx)
movaps 0xe5d(%rip),%xmm0
movups %xmm0,0x10(%rdx)
movaps 0xe62(%rip),%xmm0
movups %xmm0,0x20(%rdx)
mov    $0xc,%ax
mov    %ax,(%rcx)
ret

LLVM IR (-O0):
define void @pyr_filters(float* %0, i16* %1, float* %2, i16* %3, i16 signext %4) {
%6 = alloca float*
%7 = alloca i16*
%8 = alloca float*
%9 = alloca i16*
%10 = alloca i16
store float* %0, float** %6
store i16* %1, i16** %7
store float* %2, float** %8
store i16* %3, i16** %9
store i16 %4, i16* %10
%11 = load i16, i16* %10
%12 = sext i16 %11 to i32
switch i32 %12, label %163 [
i32 0, label %13
i32 1, label %16
i32 2, label %41
i32 3, label %96
]
13: ; preds = %5
%14 = load i16*, i16** %7
store i16 1, i16* %14
%15 = load i16*, i16** %9
store i16 1, i16* %15
br label %166
16: ; preds = %5
%17 = load float*, float** %6
%18 = getelementptr inbounds float, float* %17, i64 0
store float 0x3FE6A09EE0000000, float* %18
%19 = load float*, float** %6
%20 = getelementptr inbounds float, float* %19, i64 1
store float 0x3FD2BEC240000000, float* %20
%21 = load float*, float** %6
%22 = getelementptr inbounds float, float* %21, i64 2
store float 0xBFBF0ED3E0000000, float* %22
%23 = load float*, float** %6
%24 = getelementptr inbounds float, float* %23, i64 3
store float 0xBFA9BAB220000000, float* %24
%25 = load float*, float** %6
%26 = getelementptr inbounds float, float* %25, i64 4
store float 0x3F95509B20000000, float* %26
%27 = load float*, float** %6
%28 = getelementptr inbounds float, float* %27, i64 5
store float 0x3F81A86540000000, float* %28
%29 = load float*, float** %6
%30 = getelementptr inbounds float, float* %29, i64 6
store float 0xBF6D41A4A0000000, float* %30
%31 = load float*, float** %6
%32 = getelementptr inbounds float, float* %31, i64 7
store float 0xBF583CA240000000, float* %32
%33 = load float*, float** %6
%34 = getelementptr inbounds float, float* %33, i64 8
store float 0x3F441413E0000000, float* %34
%35 = load i16*, i16** %7
store i16 9, i16* %35
%36 = load float*, float** %8
%37 = getelementptr inbounds float, float* %36, i64 0
store float 1.000000e+00, float* %37
%38 = load float*, float** %8
%39 = getelementptr inbounds float, float* %38, i64 1
store float 5.000000e-01, float* %39
%40 = load i16*, i16** %9
store i16 2, i16* %40
br label %166
41: ; preds = %5
%42 = load float*, float** %6
%43 = getelementptr inbounds float, float* %42, i64 0
store float 0x3FE3C10FA0000000, float* %43
%44 = load float*, float** %6
%45 = getelementptr inbounds float, float* %44, i64 1
store float 0x3FD3E364C0000000, float* %45
%46 = load float*, float** %6
%47 = getelementptr inbounds float, float* %46, i64 2
store float 0xBFB84F9140000000, float* %47
%48 = load float*, float** %6
%49 = getelementptr inbounds float, float* %48, i64 3
store float 0xBFB5FB4660000000, float* %49
%50 = load float*, float** %6
%51 = getelementptr inbounds float, float* %50, i64 4
store float 0x3FAB17B6E0000000, float* %51
%52 = load float*, float** %6
%53 = getelementptr inbounds float, float* %52, i64 5
store float 0x3FA28E88C0000000, float* %53
%54 = load float*, float** %6
%55 = getelementptr inbounds float, float* %54, i64 6
store float 0xBF989E26C0000000, float* %55
%56 = load float*, float** %6
%57 = getelementptr inbounds float, float* %56, i64 7
store float 0xBF907C2D80000000, float* %57
%58 = load float*, float** %6
%59 = getelementptr inbounds float, float* %58, i64 8
store float 0x3F8603FDC0000000, float* %59
%60 = load float*, float** %6
%61 = getelementptr inbounds float, float* %60, i64 9
store float 0x3F7D6D28A0000000, float* %61
%62 = load float*, float** %6
%63 = getelementptr inbounds float, float* %62, i64 10
store float 0xBF73A934E0000000, float* %63
%64 = load float*, float** %6
%65 = getelementptr inbounds float, float* %64, i64 11
store float 0xBF6A464780000000, float* %65
%66 = load float*, float** %6
%67 = getelementptr inbounds float, float* %66, i64 12
store float 0x3F618E52A0000000, float* %67
%68 = load float*, float** %6
%69 = getelementptr inbounds float, float* %68, i64 13
store float 0x3F577608A0000000, float* %69
%70 = load float*, float** %6
%71 = getelementptr inbounds float, float* %70, i64 14
store float 0xBF4F5A3860000000, float* %71
%72 = load float*, float** %6
%73 = getelementptr inbounds float, float* %72, i64 15
store float 0xBF44F2F020000000, float* %73
%74 = load i16*, i16** %7
store i16 16, i16* %74
%75 = load float*, float** %8
%76 = getelementptr inbounds float, float* %75, i64 0
store float 1.000000e+00, float* %76
%77 = load float*, float** %8
%78 = getelementptr inbounds float, float* %77, i64 1
store float 0x3FE2BEC240000000, float* %78
%79 = load float*, float** %8
%80 = getelementptr inbounds float, float* %79, i64 2
store float 0.000000e+00, float* %80
%81 = load float*, float** %8
%82 = getelementptr inbounds float, float* %81, i64 3
store float 0xBFB9BAB220000000, float* %82
%83 = load float*, float** %8
%84 = getelementptr inbounds float, float* %83, i64 4
store float 0.000000e+00, float* %84
%85 = load float*, float** %8
%86 = getelementptr inbounds float, float* %85, i64 5
store float 0x3F91A86280000000, float* %86
%87 = load float*, float** %8
%88 = getelementptr inbounds float, float* %87, i64 6
store float 0.000000e+00, float* %88
%89 = load float*, float** %8
%90 = getelementptr inbounds float, float* %89, i64 7
store float 0xBF683C9CE0000000, float* %90
%91 = load float*, float** %8
%92 = getelementptr inbounds float, float* %91, i64 8
store float 0.000000e+00, float* %92
%93 = load float*, float** %8
%94 = getelementptr inbounds float, float* %93, i64 9
store float 0x3F40A22CC0000000, float* %94
%95 = load i16*, i16** %9
store i16 10, i16* %95
br label %166
96: ; preds = %5
%97 = load float*, float** %6
%98 = getelementptr inbounds float, float* %97, i64 0
store float 0x3FE318F600000000, float* %98
%99 = load float*, float** %6
%100 = getelementptr inbounds float, float* %99, i64 1
store float 0x3FD40CE4E0000000, float* %100
%101 = load float*, float** %6
%102 = getelementptr inbounds float, float* %101, i64 2
store float 0xBFB5305B20000000, float* %102
%103 = load float*, float** %6
%104 = getelementptr inbounds float, float* %103, i64 3
store float 0xBFB79A5FA0000000, float* %104
%105 = load float*, float** %6
%106 = getelementptr inbounds float, float* %105, i64 4
store float 0x3FABA9A9C0000000, float* %106
%107 = load float*, float** %6
%108 = getelementptr inbounds float, float* %107, i64 5
store float 0x3FA65FCB40000000, float* %108
%109 = load float*, float** %6
%110 = getelementptr inbounds float, float* %109, i64 6
store float 0xBF9EFA10E0000000, float* %110
%111 = load float*, float** %6
%112 = getelementptr inbounds float, float* %111, i64 7
store float 0xBF9718B5E0000000, float* %112
%113 = load float*, float** %6
%114 = getelementptr inbounds float, float* %113, i64 8
store float 0x3F909D5000000000, float* %114
%115 = load float*, float** %6
%116 = getelementptr inbounds float, float* %115, i64 9
store float 0x3F88514A80000000, float* %116
%117 = load float*, float** %6
%118 = getelementptr inbounds float, float* %117, i64 10
store float 0xBF81A64040000000, float* %118
%119 = load float*, float** %6
%120 = getelementptr inbounds float, float* %119, i64 11
store float 0xBF79B8AE00000000, float* %120
%121 = load float*, float** %6
%122 = getelementptr inbounds float, float* %121, i64 12
store float 0x3F72B4FBA0000000, float* %122
%123 = load float*, float** %6
%124 = getelementptr inbounds float, float* %123, i64 13
store float 0x3F6B3C4680000000, float* %124
%125 = load float*, float** %6
%126 = getelementptr inbounds float, float* %125, i64 14
store float 0xBF63D158A0000000, float* %126
%127 = load float*, float** %6
%128 = getelementptr inbounds float, float* %127, i64 15
store float 0xBF5CD87320000000, float* %128
%129 = load float*, float** %6
%130 = getelementptr inbounds float, float* %129, i64 16
store float 0x3F54FE13E0000000, float* %130
%131 = load float*, float** %6
%132 = getelementptr inbounds float, float* %131, i64 17
store float 0x3F4E8D1C40000000, float* %132
%133 = load float*, float** %6
%134 = getelementptr inbounds float, float* %133, i64 18
store float 0xBF463CDEC0000000, float* %134
%135 = load float*, float** %6
%136 = getelementptr inbounds float, float* %135, i64 19
store float 0xBF402D4E00000000, float* %136
%137 = load i16*, i16** %7
store i16 20, i16* %137
%138 = load float*, float** %8
%139 = getelementptr inbounds float, float* %138, i64 0
store float 1.000000e+00, float* %139
%140 = load float*, float** %8
%141 = getelementptr inbounds float, float* %140, i64 1
store float 0x3FE33723E0000000, float* %141
%142 = load float*, float** %8
%143 = getelementptr inbounds float, float* %142, i64 2
store float 0.000000e+00, float* %143
%144 = load float*, float** %8
%145 = getelementptr inbounds float, float* %144, i64 3
store float 0xBFC04ECEA0000000, float* %145
%146 = load float*, float** %8
%147 = getelementptr inbounds float, float* %146, i64 4
store float 0.000000e+00, float* %147
%148 = load float*, float** %8
%149 = getelementptr inbounds float, float* %148, i64 5
store float 0x3FA17A8940000000, float* %149
%150 = load float*, float** %8
%151 = getelementptr inbounds float, float* %150, i64 6
store float 0.000000e+00, float* %151
%152 = load float*, float** %8
%153 = getelementptr inbounds float, float* %152, i64 7
store float 0xBF82BBCB20000000, float* %153
%154 = load float*, float** %8
%155 = getelementptr inbounds float, float* %154, i64 8
store float 0.000000e+00, float* %155
%156 = load float*, float** %8
%157 = getelementptr inbounds float, float* %156, i64 9
store float 0x3F64141EA0000000, float* %157
%158 = load float*, float** %8
%159 = getelementptr inbounds float, float* %158, i64 10
store float 0.000000e+00, float* %159
%160 = load float*, float** %8
%161 = getelementptr inbounds float, float* %160, i64 11
store float 0xBF458528E0000000, float* %161
%162 = load i16*, i16** %9
store i16 12, i16* %162
br label %166
163: ; preds = %5
%164 = load i16*, i16** %7
store i16 1, i16* %164
%165 = load i16*, i16** %9
store i16 1, i16* %165
br label %166
166: ; preds = %163, %96, %41, %16, %13
ret void
}

LLVM IR (-O2):
define void @pyr_filters(float* writeonly %0, i16* nocapture writeonly %1, float* writeonly %2, i16* nocapture writeonly %3, i16 signext %4) {
%6 = sext i16 %4 to i32
switch i32 %6, label %42 [
i32 0, label %7
i32 1, label %8
i32 2, label %14
i32 3, label %27
]
7: ; preds = %5
store i16 1, i16* %1
br label %43
8: ; preds = %5
%9 = bitcast float* %0 to <4 x float>*
store <4 x float> <float 0x3FE6A09EE0000000, float 0x3FD2BEC240000000, float 0xBFBF0ED3E0000000, float 0xBFA9BAB220000000>, <4 x float>* %9
%10 = getelementptr inbounds float, float* %0, i64 4
%11 = bitcast float* %10 to <4 x float>*
store <4 x float> <float 0x3F95509B20000000, float 0x3F81A86540000000, float 0xBF6D41A4A0000000, float 0xBF583CA240000000>, <4 x float>* %11
%12 = getelementptr inbounds float, float* %0, i64 8
store float 0x3F441413E0000000, float* %12
store i16 9, i16* %1
store float 1.000000e+00, float* %2
%13 = getelementptr inbounds float, float* %2, i64 1
store float 5.000000e-01, float* %13
br label %43
14: ; preds = %5
%15 = bitcast float* %0 to <4 x float>*
store <4 x float> <float 0x3FE3C10FA0000000, float 0x3FD3E364C0000000, float 0xBFB84F9140000000, float 0xBFB5FB4660000000>, <4 x float>* %15
%16 = getelementptr inbounds float, float* %0, i64 4
%17 = bitcast float* %16 to <4 x float>*
store <4 x float> <float 0x3FAB17B6E0000000, float 0x3FA28E88C0000000, float 0xBF989E26C0000000, float 0xBF907C2D80000000>, <4 x float>* %17
%18 = getelementptr inbounds float, float* %0, i64 8
%19 = bitcast float* %18 to <4 x float>*
store <4 x float> <float 0x3F8603FDC0000000, float 0x3F7D6D28A0000000, float 0xBF73A934E0000000, float 0xBF6A464780000000>, <4 x float>* %19
%20 = getelementptr inbounds float, float* %0, i64 12
%21 = bitcast float* %20 to <4 x float>*
store <4 x float> <float 0x3F618E52A0000000, float 0x3F577608A0000000, float 0xBF4F5A3860000000, float 0xBF44F2F020000000>, <4 x float>* %21
store i16 16, i16* %1
%22 = bitcast float* %2 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 0x3FE2BEC240000000, float 0.000000e+00, float 0xBFB9BAB220000000>, <4 x float>* %22
%23 = getelementptr inbounds float, float* %2, i64 4
%24 = bitcast float* %23 to <4 x float>*
store <4 x float> <float 0.000000e+00, float 0x3F91A86280000000, float 0.000000e+00, float 0xBF683C9CE0000000>, <4 x float>* %24
%25 = getelementptr inbounds float, float* %2, i64 8
store float 0.000000e+00, float* %25
%26 = getelementptr inbounds float, float* %2, i64 9
store float 0x3F40A22CC0000000, float* %26
br label %43
27: ; preds = %5
%28 = bitcast float* %0 to <4 x float>*
store <4 x float> <float 0x3FE318F600000000, float 0x3FD40CE4E0000000, float 0xBFB5305B20000000, float 0xBFB79A5FA0000000>, <4 x float>* %28
%29 = getelementptr inbounds float, float* %0, i64 4
%30 = bitcast float* %29 to <4 x float>*
store <4 x float> <float 0x3FABA9A9C0000000, float 0x3FA65FCB40000000, float 0xBF9EFA10E0000000, float 0xBF9718B5E0000000>, <4 x float>* %30
%31 = getelementptr inbounds float, float* %0, i64 8
%32 = bitcast float* %31 to <4 x float>*
store <4 x float> <float 0x3F909D5000000000, float 0x3F88514A80000000, float 0xBF81A64040000000, float 0xBF79B8AE00000000>, <4 x float>* %32
%33 = getelementptr inbounds float, float* %0, i64 12
%34 = bitcast float* %33 to <4 x float>*
store <4 x float> <float 0x3F72B4FBA0000000, float 0x3F6B3C4680000000, float 0xBF63D158A0000000, float 0xBF5CD87320000000>, <4 x float>* %34
%35 = getelementptr inbounds float, float* %0, i64 16
%36 = bitcast float* %35 to <4 x float>*
store <4 x float> <float 0x3F54FE13E0000000, float 0x3F4E8D1C40000000, float 0xBF463CDEC0000000, float 0xBF402D4E00000000>, <4 x float>* %36
store i16 20, i16* %1
%37 = bitcast float* %2 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 0x3FE33723E0000000, float 0.000000e+00, float 0xBFC04ECEA0000000>, <4 x float>* %37
%38 = getelementptr inbounds float, float* %2, i64 4
%39 = bitcast float* %38 to <4 x float>*
store <4 x float> <float 0.000000e+00, float 0x3FA17A8940000000, float 0.000000e+00, float 0xBF82BBCB20000000>, <4 x float>* %39
%40 = getelementptr inbounds float, float* %2, i64 8
%41 = bitcast float* %40 to <4 x float>*
store <4 x float> <float 0.000000e+00, float 0x3F64141EA0000000, float 0.000000e+00, float 0xBF458528E0000000>, <4 x float>* %41
br label %43
42: ; preds = %5
store i16 1, i16* %1
br label %43
43: ; preds = %42, %27, %14, %8, %7
%44 = phi i16 [ 1, %42 ], [ 12, %27 ], [ 10, %14 ], [ 2, %8 ], [ 1, %7 ]
store i16 %44, i16* %3
ret void
}