extern void PyramidFilterSplinel2(double g[], long *ng, double *h, long *nh,
                                  long Order) {
  switch (Order) {
  case 0L:
    *ng = 1L;
    *nh = 1L;
    break;
  case 1L:
    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 = 9L;
    h[0] = 1.;
    h[1] = 0.5;
    *nh = 2L;
    break;
  case 2L:
    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 = 16L;
    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 = 10L;
    break;
  case 3L:
    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 = 20L;
    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 = 12L;
    break;
  default:
    *ng = -1L;
    *nh = -1L;
    break;
  }
}


x86 assembly (clang, -O0):
<PyramidFilterSplinel2>:
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    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
sub    $0x3,%rax
ja     1618 <PyramidFilterSplinel2+0x518>
mov    -0x30(%rbp),%rax
lea    0x109b(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
movq   $0x1,(%rax)
mov    -0x20(%rbp),%rax
movq   $0x1,(%rax)
jmp    162e <PyramidFilterSplinel2+0x52e>
mov    -0x8(%rbp),%rax
movsd  0x1063(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0x104b(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x1032(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0x1019(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  0x1000(%rip),%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0xfe7(%rip),%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0xfce(%rip),%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movsd  0xfb5(%rip),%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
movsd  0xf9c(%rip),%xmm0
movsd  %xmm0,0x40(%rax)
mov    -0x10(%rbp),%rax
movq   $0x9,(%rax)
mov    -0x18(%rbp),%rax
movsd  0xe28(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0xf68(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
movq   $0x2,(%rax)
jmp    162e <PyramidFilterSplinel2+0x52e>
mov    -0x8(%rbp),%rax
movsd  0xf3f(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0xf27(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0xf0e(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0xef5(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  0xedc(%rip),%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0xec3(%rip),%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0xeaa(%rip),%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movsd  0xe91(%rip),%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
movsd  0xe78(%rip),%xmm0
movsd  %xmm0,0x40(%rax)
mov    -0x8(%rbp),%rax
movsd  0xe5f(%rip),%xmm0
movsd  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rax
movsd  0xe46(%rip),%xmm0
movsd  %xmm0,0x50(%rax)
mov    -0x8(%rbp),%rax
movsd  0xe2d(%rip),%xmm0
movsd  %xmm0,0x58(%rax)
mov    -0x8(%rbp),%rax
movsd  0xe14(%rip),%xmm0
movsd  %xmm0,0x60(%rax)
mov    -0x8(%rbp),%rax
movsd  0xdfb(%rip),%xmm0
movsd  %xmm0,0x68(%rax)
mov    -0x8(%rbp),%rax
movsd  0xde2(%rip),%xmm0
movsd  %xmm0,0x70(%rax)
mov    -0x8(%rbp),%rax
movsd  0xdc9(%rip),%xmm0
movsd  %xmm0,0x78(%rax)
mov    -0x10(%rbp),%rax
movq   $0x10,(%rax)
mov    -0x18(%rbp),%rax
movsd  0xcdd(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0xd95(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movsd  0xd70(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0xd4b(%rip),%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x18(%rbp),%rax
movsd  0xd26(%rip),%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0xd01(%rip),%xmm0
movsd  %xmm0,0x48(%rax)
mov    -0x20(%rbp),%rax
movq   $0xa,(%rax)
jmp    162e <PyramidFilterSplinel2+0x52e>
mov    -0x8(%rbp),%rax
movsd  0xcd8(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0xcc0(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0xca7(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0xc8e(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  0xc75(%rip),%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0xc5c(%rip),%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0xc43(%rip),%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movsd  0xc2a(%rip),%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
movsd  0xc11(%rip),%xmm0
movsd  %xmm0,0x40(%rax)
mov    -0x8(%rbp),%rax
movsd  0xbf8(%rip),%xmm0
movsd  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rax
movsd  0xbdf(%rip),%xmm0
movsd  %xmm0,0x50(%rax)
mov    -0x8(%rbp),%rax
movsd  0xbc6(%rip),%xmm0
movsd  %xmm0,0x58(%rax)
mov    -0x8(%rbp),%rax
movsd  0xbad(%rip),%xmm0
movsd  %xmm0,0x60(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb94(%rip),%xmm0
movsd  %xmm0,0x68(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb7b(%rip),%xmm0
movsd  %xmm0,0x70(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb62(%rip),%xmm0
movsd  %xmm0,0x78(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb49(%rip),%xmm0
movsd  %xmm0,0x80(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb2d(%rip),%xmm0
movsd  %xmm0,0x88(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb11(%rip),%xmm0
movsd  %xmm0,0x90(%rax)
mov    -0x8(%rbp),%rax
movsd  0xaf5(%rip),%xmm0
movsd  %xmm0,0x98(%rax)
mov    -0x10(%rbp),%rax
movq   $0x14,(%rax)
mov    -0x18(%rbp),%rax
movsd  0xace(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0xab6(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movsd  0xa91(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x18(%rbp),%rax
movsd  0xa6c(%rip),%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x18(%rbp),%rax
movsd  0xa47(%rip),%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x40(%rax)
mov    -0x18(%rbp),%rax
movsd  0xa22(%rip),%xmm0
movsd  %xmm0,0x48(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x50(%rax)
mov    -0x18(%rbp),%rax
movsd  0x9fd(%rip),%xmm0
movsd  %xmm0,0x58(%rax)
mov    -0x20(%rbp),%rax
movq   $0xc,(%rax)
jmp    162e <PyramidFilterSplinel2+0x52e>
mov    -0x10(%rbp),%rax
movq   $0xffffffffffffffff,(%rax)
mov    -0x20(%rbp),%rax
movq   $0xffffffffffffffff,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<PyramidFilterSplinel2>:
cmp    $0x3,%r8
ja     1126 <PyramidFilterSplinel2+0x26>
lea    0x10cb(%rip),%r9
movslq (%r9,%r8,4),%rax
add    %r9,%rax
jmp    *%rax
movq   $0x1,(%rsi)
mov    $0x1,%eax
mov    %rax,(%rcx)
ret
movq   $0xffffffffffffffff,(%rsi)
mov    $0xffffffffffffffff,%rax
mov    %rax,(%rcx)
ret
movaps 0x1001(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0x1007(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0x100c(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0x1011(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movabs $0x3f441413de2e4914,%rax
14 44 3f
mov    %rax,0x40(%rdi)
movq   $0x9,(%rsi)
movaps 0x1001(%rip),%xmm0
movups %xmm0,(%rdx)
mov    $0x2,%eax
mov    %rax,(%rcx)
ret
movaps 0xf1e(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xf24(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xf29(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xf2e(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movaps 0xf33(%rip),%xmm0
movups %xmm0,0x40(%rdi)
movaps 0xf38(%rip),%xmm0
movups %xmm0,0x50(%rdi)
movaps 0xf3d(%rip),%xmm0
movups %xmm0,0x60(%rdi)
movaps 0xf42(%rip),%xmm0
movups %xmm0,0x70(%rdi)
movq   $0x10,(%rsi)
movaps 0xf40(%rip),%xmm0
movups %xmm0,(%rdx)
xorps  %xmm0,%xmm0
xorps  %xmm1,%xmm1
movhps 0xfb8(%rip),%xmm1
movups %xmm1,0x10(%rdx)
xorps  %xmm1,%xmm1
movhps 0xfb2(%rip),%xmm1
movups %xmm1,0x20(%rdx)
xorps  %xmm1,%xmm1
movhps 0xfac(%rip),%xmm1
movups %xmm1,0x30(%rdx)
movhps 0xfa9(%rip),%xmm0
movups %xmm0,0x40(%rdx)
mov    $0xa,%eax
mov    %rax,(%rcx)
ret
movaps 0xdc5(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xdcb(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xdd0(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xdd5(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movaps 0xdda(%rip),%xmm0
movups %xmm0,0x40(%rdi)
movaps 0xddf(%rip),%xmm0
movups %xmm0,0x50(%rdi)
movaps 0xde4(%rip),%xmm0
movups %xmm0,0x60(%rdi)
movaps 0xde9(%rip),%xmm0
movups %xmm0,0x70(%rdi)
movaps 0xdee(%rip),%xmm0
movups %xmm0,0x80(%rdi)
movaps 0xdf0(%rip),%xmm0
movups %xmm0,0x90(%rdi)
movq   $0x14,(%rsi)
movaps 0xdeb(%rip),%xmm0
movups %xmm0,(%rdx)
xorps  %xmm0,%xmm0
xorps  %xmm1,%xmm1
movhps 0xecb(%rip),%xmm1
movups %xmm1,0x10(%rdx)
xorps  %xmm1,%xmm1
movhps 0xec5(%rip),%xmm1
movups %xmm1,0x20(%rdx)
xorps  %xmm1,%xmm1
movhps 0xebf(%rip),%xmm1
movups %xmm1,0x30(%rdx)
xorps  %xmm1,%xmm1
movhps 0xeb9(%rip),%xmm1
movups %xmm1,0x40(%rdx)
movhps 0xeb6(%rip),%xmm0
movups %xmm0,0x50(%rdx)
mov    $0xc,%eax
mov    %rax,(%rcx)
ret

LLVM IR (-O0):
define void @PyramidFilterSplinel2(double* %0, i64* %1, double* %2, i64* %3, i64 %4) {
%6 = alloca double*
%7 = alloca i64*
%8 = alloca double*
%9 = alloca i64*
%10 = alloca i64
store double* %0, double** %6
store i64* %1, i64** %7
store double* %2, double** %8
store i64* %3, i64** %9
store i64 %4, i64* %10
%11 = load i64, i64* %10
switch i64 %11, label %162 [
i64 0, label %12
i64 1, label %15
i64 2, label %40
i64 3, label %95
]
12: ; preds = %5
%13 = load i64*, i64** %7
store i64 1, i64* %13
%14 = load i64*, i64** %9
store i64 1, i64* %14
br label %165
15: ; preds = %5
%16 = load double*, double** %6
%17 = getelementptr inbounds double, double* %16, i64 0
store double 7.071070e-01, double* %17
%18 = load double*, double** %6
%19 = getelementptr inbounds double, double* %18, i64 1
store double 2.928930e-01, double* %19
%20 = load double*, double** %6
%21 = getelementptr inbounds double, double* %20, i64 2
store double -1.213200e-01, double* %21
%22 = load double*, double** %6
%23 = getelementptr inbounds double, double* %22, i64 3
store double -5.025250e-02, double* %23
%24 = load double*, double** %6
%25 = getelementptr inbounds double, double* %24, i64 4
store double 2.081530e-02, double* %25
%26 = load double*, double** %6
%27 = getelementptr inbounds double, double* %26, i64 5
store double 0x3F81A865396AAFCC, double* %27
%28 = load double*, double** %6
%29 = getelementptr inbounds double, double* %28, i64 6
store double -3.571340e-03, double* %29
%30 = load double*, double** %6
%31 = getelementptr inbounds double, double* %30, i64 7
store double -1.479300e-03, double* %31
%32 = load double*, double** %6
%33 = getelementptr inbounds double, double* %32, i64 8
store double 6.127450e-04, double* %33
%34 = load i64*, i64** %7
store i64 9, i64* %34
%35 = load double*, double** %8
%36 = getelementptr inbounds double, double* %35, i64 0
store double 1.000000e+00, double* %36
%37 = load double*, double** %8
%38 = getelementptr inbounds double, double* %37, i64 1
store double 5.000000e-01, double* %38
%39 = load i64*, i64** %9
store i64 2, i64* %39
br label %165
40: ; preds = %5
%41 = load double*, double** %6
%42 = getelementptr inbounds double, double* %41, i64 0
store double 6.173170e-01, double* %42
%43 = load double*, double** %6
%44 = getelementptr inbounds double, double* %43, i64 1
store double 3.107540e-01, double* %44
%45 = load double*, double** %6
%46 = getelementptr inbounds double, double* %45, i64 2
store double 0xBFB84F9137CB4868, double* %46
%47 = load double*, double** %6
%48 = getelementptr inbounds double, double* %47, i64 3
store double 0xBFB5FB465CDBA329, double* %48
%49 = load double*, double** %6
%50 = getelementptr inbounds double, double* %49, i64 4
store double 5.291530e-02, double* %50
%51 = load double*, double** %6
%52 = getelementptr inbounds double, double* %51, i64 5
store double 3.624370e-02, double* %52
%53 = load double*, double** %6
%54 = getelementptr inbounds double, double* %53, i64 6
store double -2.404080e-02, double* %54
%55 = load double*, double** %6
%56 = getelementptr inbounds double, double* %55, i64 7
store double -1.609870e-02, double* %56
%57 = load double*, double** %6
%58 = getelementptr inbounds double, double* %57, i64 8
store double 1.074980e-02, double* %58
%59 = load double*, double** %6
%60 = getelementptr inbounds double, double* %59, i64 9
store double 7.184180e-03, double* %60
%61 = load double*, double** %6
%62 = getelementptr inbounds double, double* %61, i64 10
store double -4.800040e-03, double* %62
%63 = load double*, double** %6
%64 = getelementptr inbounds double, double* %63, i64 11
store double -3.207340e-03, double* %64
%65 = load double*, double** %6
%66 = getelementptr inbounds double, double* %65, i64 12
store double 2.143060e-03, double* %66
%67 = load double*, double** %6
%68 = getelementptr inbounds double, double* %67, i64 13
store double 1.431950e-03, double* %68
%69 = load double*, double** %6
%70 = getelementptr inbounds double, double* %69, i64 14
store double 0xBF4F5A385ABA60B9, double* %70
%71 = load double*, double** %6
%72 = getelementptr inbounds double, double* %71, i64 15
store double 0xBF44F2F010E36BE4, double* %72
%73 = load i64*, i64** %7
store i64 16, i64* %73
%74 = load double*, double** %8
%75 = getelementptr inbounds double, double* %74, i64 0
store double 1.000000e+00, double* %75
%76 = load double*, double** %8
%77 = getelementptr inbounds double, double* %76, i64 1
store double 5.857860e-01, double* %77
%78 = load double*, double** %8
%79 = getelementptr inbounds double, double* %78, i64 2
store double 0.000000e+00, double* %79
%80 = load double*, double** %8
%81 = getelementptr inbounds double, double* %80, i64 3
store double -1.005050e-01, double* %81
%82 = load double*, double** %8
%83 = getelementptr inbounds double, double* %82, i64 4
store double 0.000000e+00, double* %83
%84 = load double*, double** %8
%85 = getelementptr inbounds double, double* %84, i64 5
store double 1.724390e-02, double* %85
%86 = load double*, double** %8
%87 = getelementptr inbounds double, double* %86, i64 6
store double 0.000000e+00, double* %87
%88 = load double*, double** %8
%89 = getelementptr inbounds double, double* %88, i64 7
store double -2.958590e-03, double* %89
%90 = load double*, double** %8
%91 = getelementptr inbounds double, double* %90, i64 8
store double 0.000000e+00, double* %91
%92 = load double*, double** %8
%93 = getelementptr inbounds double, double* %92, i64 9
store double 5.076140e-04, double* %93
%94 = load i64*, i64** %9
store i64 10, i64* %94
br label %165
95: ; preds = %5
%96 = load double*, double** %6
%97 = getelementptr inbounds double, double* %96, i64 0
store double 5.967970e-01, double* %97
%98 = load double*, double** %6
%99 = getelementptr inbounds double, double* %98, i64 1
store double 3.132870e-01, double* %99
%100 = load double*, double** %6
%101 = getelementptr inbounds double, double* %100, i64 2
store double 0xBFB5305B119E8DF5, double* %101
%102 = load double*, double** %6
%103 = getelementptr inbounds double, double* %102, i64 3
store double 0xBFB79A5F9236CEC9, double* %103
%104 = load double*, double** %6
%105 = getelementptr inbounds double, double* %104, i64 4
store double 5.402880e-02, double* %105
%106 = load double*, double** %6
%107 = getelementptr inbounds double, double* %106, i64 5
store double 4.369960e-02, double* %107
%108 = load double*, double** %6
%109 = getelementptr inbounds double, double* %108, i64 6
store double -3.025080e-02, double* %109
%110 = load double*, double** %6
%111 = getelementptr inbounds double, double* %110, i64 7
store double -2.255520e-02, double* %111
%112 = load double*, double** %6
%113 = getelementptr inbounds double, double* %112, i64 8
store double 1.622510e-02, double* %113
%114 = load double*, double** %6
%115 = getelementptr inbounds double, double* %114, i64 9
store double 1.187380e-02, double* %115
%116 = load double*, double** %6
%117 = getelementptr inbounds double, double* %116, i64 10
store double 0xBF81A640461639D3, double* %117
%118 = load double*, double** %6
%119 = getelementptr inbounds double, double* %118, i64 11
store double -6.279640e-03, double* %119
%120 = load double*, double** %6
%121 = getelementptr inbounds double, double* %120, i64 12
store double 4.567130e-03, double* %121
%122 = load double*, double** %6
%123 = getelementptr inbounds double, double* %122, i64 13
store double 3.324640e-03, double* %123
%124 = load double*, double** %6
%125 = getelementptr inbounds double, double* %124, i64 14
store double -2.419160e-03, double* %125
%126 = load double*, double** %6
%127 = getelementptr inbounds double, double* %126, i64 15
store double -1.760590e-03, double* %127
%128 = load double*, double** %6
%129 = getelementptr inbounds double, double* %128, i64 16
store double 1.281280e-03, double* %129
%130 = load double*, double** %6
%131 = getelementptr inbounds double, double* %130, i64 17
store double 0x3F4E8D1C3B529A09, double* %131
%132 = load double*, double** %6
%133 = getelementptr inbounds double, double* %132, i64 18
store double -6.786430e-04, double* %133
%134 = load double*, double** %6
%135 = getelementptr inbounds double, double* %134, i64 19
store double -4.936820e-04, double* %135
%136 = load i64*, i64** %7
store i64 20, i64* %136
%137 = load double*, double** %8
%138 = getelementptr inbounds double, double* %137, i64 0
store double 1.000000e+00, double* %138
%139 = load double*, double** %8
%140 = getelementptr inbounds double, double* %139, i64 1
store double 6.004810e-01, double* %140
%141 = load double*, double** %8
%142 = getelementptr inbounds double, double* %141, i64 2
store double 0.000000e+00, double* %142
%143 = load double*, double** %8
%144 = getelementptr inbounds double, double* %143, i64 3
store double -1.274050e-01, double* %144
%145 = load double*, double** %8
%146 = getelementptr inbounds double, double* %145, i64 4
store double 0.000000e+00, double* %146
%147 = load double*, double** %8
%148 = getelementptr inbounds double, double* %147, i64 5
store double 3.413800e-02, double* %148
%149 = load double*, double** %8
%150 = getelementptr inbounds double, double* %149, i64 6
store double 0.000000e+00, double* %150
%151 = load double*, double** %8
%152 = getelementptr inbounds double, double* %151, i64 7
store double -9.147250e-03, double* %152
%153 = load double*, double** %8
%154 = getelementptr inbounds double, double* %153, i64 8
store double 0.000000e+00, double* %154
%155 = load double*, double** %8
%156 = getelementptr inbounds double, double* %155, i64 9
store double 2.451000e-03, double* %156
%157 = load double*, double** %8
%158 = getelementptr inbounds double, double* %157, i64 10
store double 0.000000e+00, double* %158
%159 = load double*, double** %8
%160 = getelementptr inbounds double, double* %159, i64 11
store double 0xBF458528DA7AF174, double* %160
%161 = load i64*, i64** %9
store i64 12, i64* %161
br label %165
162: ; preds = %5
%163 = load i64*, i64** %7
store i64 -1, i64* %163
%164 = load i64*, i64** %9
store i64 -1, i64* %164
br label %165
165: ; preds = %162, %95, %40, %15, %12
ret void
}

LLVM IR (-O2):
define void @PyramidFilterSplinel2(double* writeonly %0, i64* nocapture writeonly %1, double* writeonly %2, i64* nocapture writeonly %3, i64 %4) {
switch i64 %4, label %73 [
i64 0, label %6
i64 1, label %7
i64 2, label %17
i64 3, label %42
]
6: ; preds = %5
store i64 1, i64* %1
br label %74
7: ; preds = %5
%8 = bitcast double* %0 to <2 x double>*
store <2 x double> <double 7.071070e-01, double 2.928930e-01>, <2 x double>* %8
%9 = getelementptr inbounds double, double* %0, i64 2
%10 = bitcast double* %9 to <2 x double>*
store <2 x double> <double -1.213200e-01, double -5.025250e-02>, <2 x double>* %10
%11 = getelementptr inbounds double, double* %0, i64 4
%12 = bitcast double* %11 to <2 x double>*
store <2 x double> <double 2.081530e-02, double 0x3F81A865396AAFCC>, <2 x double>* %12
%13 = getelementptr inbounds double, double* %0, i64 6
%14 = bitcast double* %13 to <2 x double>*
store <2 x double> <double -3.571340e-03, double -1.479300e-03>, <2 x double>* %14
%15 = getelementptr inbounds double, double* %0, i64 8
store double 6.127450e-04, double* %15
store i64 9, i64* %1
%16 = bitcast double* %2 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 5.000000e-01>, <2 x double>* %16
br label %74
17: ; preds = %5
%18 = bitcast double* %0 to <2 x double>*
store <2 x double> <double 6.173170e-01, double 3.107540e-01>, <2 x double>* %18
%19 = getelementptr inbounds double, double* %0, i64 2
%20 = bitcast double* %19 to <2 x double>*
store <2 x double> <double 0xBFB84F9137CB4868, double 0xBFB5FB465CDBA329>, <2 x double>* %20
%21 = getelementptr inbounds double, double* %0, i64 4
%22 = bitcast double* %21 to <2 x double>*
store <2 x double> <double 5.291530e-02, double 3.624370e-02>, <2 x double>* %22
%23 = getelementptr inbounds double, double* %0, i64 6
%24 = bitcast double* %23 to <2 x double>*
store <2 x double> <double -2.404080e-02, double -1.609870e-02>, <2 x double>* %24
%25 = getelementptr inbounds double, double* %0, i64 8
%26 = bitcast double* %25 to <2 x double>*
store <2 x double> <double 1.074980e-02, double 7.184180e-03>, <2 x double>* %26
%27 = getelementptr inbounds double, double* %0, i64 10
%28 = bitcast double* %27 to <2 x double>*
store <2 x double> <double -4.800040e-03, double -3.207340e-03>, <2 x double>* %28
%29 = getelementptr inbounds double, double* %0, i64 12
%30 = bitcast double* %29 to <2 x double>*
store <2 x double> <double 2.143060e-03, double 1.431950e-03>, <2 x double>* %30
%31 = getelementptr inbounds double, double* %0, i64 14
%32 = bitcast double* %31 to <2 x double>*
store <2 x double> <double 0xBF4F5A385ABA60B9, double 0xBF44F2F010E36BE4>, <2 x double>* %32
store i64 16, i64* %1
%33 = bitcast double* %2 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 5.857860e-01>, <2 x double>* %33
%34 = getelementptr inbounds double, double* %2, i64 2
%35 = bitcast double* %34 to <2 x double>*
store <2 x double> <double 0.000000e+00, double -1.005050e-01>, <2 x double>* %35
%36 = getelementptr inbounds double, double* %2, i64 4
%37 = bitcast double* %36 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 1.724390e-02>, <2 x double>* %37
%38 = getelementptr inbounds double, double* %2, i64 6
%39 = bitcast double* %38 to <2 x double>*
store <2 x double> <double 0.000000e+00, double -2.958590e-03>, <2 x double>* %39
%40 = getelementptr inbounds double, double* %2, i64 8
%41 = bitcast double* %40 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 5.076140e-04>, <2 x double>* %41
br label %74
42: ; preds = %5
%43 = bitcast double* %0 to <2 x double>*
store <2 x double> <double 5.967970e-01, double 3.132870e-01>, <2 x double>* %43
%44 = getelementptr inbounds double, double* %0, i64 2
%45 = bitcast double* %44 to <2 x double>*
store <2 x double> <double 0xBFB5305B119E8DF5, double 0xBFB79A5F9236CEC9>, <2 x double>* %45
%46 = getelementptr inbounds double, double* %0, i64 4
%47 = bitcast double* %46 to <2 x double>*
store <2 x double> <double 5.402880e-02, double 4.369960e-02>, <2 x double>* %47
%48 = getelementptr inbounds double, double* %0, i64 6
%49 = bitcast double* %48 to <2 x double>*
store <2 x double> <double -3.025080e-02, double -2.255520e-02>, <2 x double>* %49
%50 = getelementptr inbounds double, double* %0, i64 8
%51 = bitcast double* %50 to <2 x double>*
store <2 x double> <double 1.622510e-02, double 1.187380e-02>, <2 x double>* %51
%52 = getelementptr inbounds double, double* %0, i64 10
%53 = bitcast double* %52 to <2 x double>*
store <2 x double> <double 0xBF81A640461639D3, double -6.279640e-03>, <2 x double>* %53
%54 = getelementptr inbounds double, double* %0, i64 12
%55 = bitcast double* %54 to <2 x double>*
store <2 x double> <double 4.567130e-03, double 3.324640e-03>, <2 x double>* %55
%56 = getelementptr inbounds double, double* %0, i64 14
%57 = bitcast double* %56 to <2 x double>*
store <2 x double> <double -2.419160e-03, double -1.760590e-03>, <2 x double>* %57
%58 = getelementptr inbounds double, double* %0, i64 16
%59 = bitcast double* %58 to <2 x double>*
store <2 x double> <double 1.281280e-03, double 0x3F4E8D1C3B529A09>, <2 x double>* %59
%60 = getelementptr inbounds double, double* %0, i64 18
%61 = bitcast double* %60 to <2 x double>*
store <2 x double> <double -6.786430e-04, double -4.936820e-04>, <2 x double>* %61
store i64 20, i64* %1
%62 = bitcast double* %2 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 6.004810e-01>, <2 x double>* %62
%63 = getelementptr inbounds double, double* %2, i64 2
%64 = bitcast double* %63 to <2 x double>*
store <2 x double> <double 0.000000e+00, double -1.274050e-01>, <2 x double>* %64
%65 = getelementptr inbounds double, double* %2, i64 4
%66 = bitcast double* %65 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 3.413800e-02>, <2 x double>* %66
%67 = getelementptr inbounds double, double* %2, i64 6
%68 = bitcast double* %67 to <2 x double>*
store <2 x double> <double 0.000000e+00, double -9.147250e-03>, <2 x double>* %68
%69 = getelementptr inbounds double, double* %2, i64 8
%70 = bitcast double* %69 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 2.451000e-03>, <2 x double>* %70
%71 = getelementptr inbounds double, double* %2, i64 10
%72 = bitcast double* %71 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 0xBF458528DA7AF174>, <2 x double>* %72
br label %74
73: ; preds = %5
store i64 -1, i64* %1
br label %74
74: ; preds = %73, %42, %17, %7, %6
%75 = phi i64 [ -1, %73 ], [ 12, %42 ], [ 10, %17 ], [ 2, %7 ], [ 1, %6 ]
store i64 %75, i64* %3
ret void
}