void make_lookup_sinc(coord, q, dim, d1, table, ptpend) double coord;
double table[], **ptpend;
int q, dim, *d1;
{
  register int d2, d, fcoord;
  register double *tp, *tpend, dtmp, sm;
  static int oq = 0, k0, k1;
  coord--;
  if (fabs(coord - rint(coord)) < 0.00001) {
    *d1 = rint(coord);
    if (*d1 < 0 || *d1 >= dim)
      *ptpend = table - 1;
    else {
      table[0] = 1.0;
      *ptpend = table;
    }
  } else {
    if (q != oq) {
      oq = q;
      if (q % 2) {
        k0 = -(q - 1) / 2;
        k1 = (q - 1) / 2;
      } else {
        k0 = -(q - 2) / 2;
        k1 = q / 2;
      }
    }
    fcoord = floor(q % 2 ? coord + 0.5 : coord);
    *d1 = fcoord + k0;
    if (*d1 < 0)
      *d1 = 0;
    d2 = fcoord + k1;
    if (d2 >= dim)
      d2 = dim - 1;
    *ptpend = tpend = table + (d2 - *d1);
    d = *d1, tp = table;
    sm = 0;
    while (tp <= tpend) {
      dtmp = 3.14159265358979323846 * (coord - (d++));
      sm += (*(tp++) = sin(dtmp) / dtmp * 0.5 * (1.0 + cos(2 * dtmp / q)));
    }
    tp = table;
    while (tp <= tpend)
      *(tp++) /= sm;
  }
}


x86 assembly (clang, -O0):
<make_lookup_sinc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movsd  %xmm0,-0x8(%rbp)
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movsd  0xea1(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <rint@plt>
movsd  -0x60(%rbp),%xmm1
subsd  %xmm0,%xmm1
movaps 0xe9b(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xe5f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    120f <make_lookup_sinc+0xcf>
movsd  -0x8(%rbp),%xmm0
call   1040 <rint@plt>
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jl     11db <make_lookup_sinc+0x9b>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
cmp    -0x10(%rbp),%eax
jl     11ef <make_lookup_sinc+0xaf>
mov    -0x20(%rbp),%rcx
add    $0xfffffffffffffff8,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
jmp    120a <make_lookup_sinc+0xca>
mov    -0x20(%rbp),%rax
movsd  0xe1d(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
jmp    144d <make_lookup_sinc+0x30d>
mov    -0xc(%rbp),%eax
cmp    0x2e2c(%rip),%eax
je     129a <make_lookup_sinc+0x15a>
mov    -0xc(%rbp),%eax
mov    %eax,0x2e1d(%rip)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     126c <make_lookup_sinc+0x12c>
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,0x2df5(%rip)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,0x2de5(%rip)
jmp    1295 <make_lookup_sinc+0x155>
mov    -0xc(%rbp),%ecx
sub    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,0x2dc4(%rip)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,0x2db7(%rip)
jmp    129a <make_lookup_sinc+0x15a>
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     12c5 <make_lookup_sinc+0x185>
movsd  0xd5a(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    12cf <make_lookup_sinc+0x18f>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
call   1060 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%ecx
add    0x2d5f(%rip),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jge    1306 <make_lookup_sinc+0x1c6>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x34(%rbp),%eax
add    0x2d3d(%rip),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jl     1327 <make_lookup_sinc+0x1e7>
mov    -0x10(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%rcx
mov    -0x2c(%rbp),%eax
mov    -0x18(%rbp),%rdx
sub    (%rdx),%eax
cltq
shl    $0x3,%rax
add    %rax,%rcx
mov    %rcx,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x48(%rbp),%rax
ja     140d <make_lookup_sinc+0x2cd>
movsd  -0x8(%rbp),%xmm1
mov    -0x30(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x30(%rbp)
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0xc99(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1030 <sin@plt>
divsd  -0x50(%rbp),%xmm0
movsd  0xc61(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xc60(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1050 <cos@plt>
movaps %xmm0,%xmm2
movsd  -0x70(%rbp),%xmm0
movsd  0xc35(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1361 <make_lookup_sinc+0x221>
mov    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x48(%rbp),%rax
ja     1448 <make_lookup_sinc+0x308>
movsd  -0x58(%rbp),%xmm1
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
jmp    1415 <make_lookup_sinc+0x2d5>
jmp    144d <make_lookup_sinc+0x30d>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<make_lookup_sinc>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r8,%rbp
mov    %rcx,%r15
mov    %rdx,%rbx
mov    %esi,%r12d
mov    %edi,%r14d
addsd  0xe9b(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1040 <rint@plt>
movsd  0x8(%rsp),%xmm3
movapd %xmm3,%xmm1
subsd  %xmm0,%xmm1
andpd  0xeaa(%rip),%xmm1
movsd  0xe7a(%rip),%xmm2
ucomisd %xmm1,%xmm2
jbe    11b2 <make_lookup_sinc+0x72>
cvttsd2si %xmm0,%eax
mov    %eax,(%rbx)
test   %eax,%eax
js     11dd <make_lookup_sinc+0x9d>
cmp    %r12d,%eax
jge    11dd <make_lookup_sinc+0x9d>
movabs $0x3ff0000000000000,%rax
mov    %rax,(%r15)
jmp    11e1 <make_lookup_sinc+0xa1>
cmp    %r14d,0x2e8b(%rip)
mov    %rbp,0x10(%rsp)
jne    11ea <make_lookup_sinc+0xaa>
mov    0x2e81(%rip),%r13d
mov    %r14,%rax
mov    0x2e7b(%rip),%r14d
mov    %rax,%rbp
test   $0x1,%al
je     122a <make_lookup_sinc+0xea>
jmp    1267 <make_lookup_sinc+0x127>
add    $0xfffffffffffffff8,%r15
mov    %r15,0x0(%rbp)
jmp    143a <make_lookup_sinc+0x2fa>
mov    %r14d,0x2e53(%rip)
test   $0x1,%r14b
jne    1230 <make_lookup_sinc+0xf0>
mov    $0x2,%eax
sub    %r14d,%eax
mov    %eax,%r13d
shr    $0x1f,%r13d
add    %eax,%r13d
sar    %r13d
mov    %r13d,0x2e35(%rip)
mov    %r14,%rax
shr    $0x1f,%r14d
mov    %rax,%rbp
add    %eax,%r14d
sar    %r14d
mov    %r14d,0x2e22(%rip)
movapd %xmm3,%xmm0
jmp    1273 <make_lookup_sinc+0x133>
lea    -0x1(%r14),%eax
mov    $0x1,%ecx
sub    %r14d,%ecx
mov    %ecx,%r13d
shr    $0x1f,%r13d
add    %ecx,%r13d
sar    %r13d
mov    %r13d,0x2df8(%rip)
shr    $0x1f,%eax
mov    %r14,%rbp
add    %eax,%r14d
add    $0xffffffff,%r14d
sar    %r14d
mov    %r14d,0x2de5(%rip)
movsd  0xda1(%rip),%xmm0
addsd  %xmm3,%xmm0
call   1060 <floor@plt>
cvttsd2si %xmm0,%eax
xor    %ecx,%ecx
add    %eax,%r13d
cmovs  %ecx,%r13d
mov    %r13d,(%rbx)
add    %eax,%r14d
lea    -0x1(%r12),%edx
cmp    %r12d,%r14d
cmovl  %r14d,%edx
mov    %edx,%r14d
sub    %r13d,%r14d
movslq %r14d,%rax
lea    (%r15,%rax,8),%r12
mov    0x10(%rsp),%rcx
mov    %r12,(%rcx)
test   %eax,%eax
js     143a <make_lookup_sinc+0x2fa>
mov    %edx,0x4(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movsd  %xmm0,0x20(%rsp)
xorpd  %xmm3,%xmm3
mov    %r15,%rbx
mov    %r13d,%ebp
nop
movapd %xmm3,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %ebp,%xmm1
add    $0x1,%ebp
movsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
mulsd  0xd26(%rip),%xmm0
movsd  %xmm0,0x28(%rsp)
call   1030 <sin@plt>
movsd  0x28(%rsp),%xmm1
divsd  %xmm1,%xmm0
mulsd  0xd01(%rip),%xmm0
movsd  %xmm0,0x30(%rsp)
addsd  %xmm1,%xmm1
divsd  0x20(%rsp),%xmm1
movapd %xmm1,%xmm0
call   1050 <cos@plt>
movapd 0x10(%rsp),%xmm3
addsd  0xcea(%rip),%xmm0
mulsd  0x30(%rsp),%xmm0
movsd  %xmm0,(%rbx)
add    $0x8,%rbx
addsd  %xmm0,%xmm3
cmp    %r12,%rbx
jbe    12d0 <make_lookup_sinc+0x190>
test   %r14d,%r14d
mov    0x4(%rsp),%eax
js     143a <make_lookup_sinc+0x2fa>
cltq
lea    (%r15,%rax,8),%rcx
mov    %r13d,%eax
shl    $0x3,%rax
sub    %rax,%rcx
add    $0x1,%rcx
lea    0x8(%r15),%rax
cmp    %rax,%rcx
cmovbe %rax,%rcx
mov    %r15,%rax
not    %rax
add    %rcx,%rax
cmp    $0x8,%rax
jb     1420 <make_lookup_sinc+0x2e0>
shr    $0x3,%rax
add    $0x1,%rax
mov    %rax,%rcx
and    $0xfffffffffffffffe,%rcx
movapd %xmm3,%xmm0
unpcklpd %xmm3,%xmm0
lea    -0x2(%rcx),%rsi
mov    %rsi,%rdx
shr    %rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     1449 <make_lookup_sinc+0x309>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd (%r15,%rsi,8),%xmm1
movupd 0x10(%r15,%rsi,8),%xmm2
divpd  %xmm0,%xmm1
movupd %xmm1,(%r15,%rsi,8)
divpd  %xmm0,%xmm2
movupd %xmm2,0x10(%r15,%rsi,8)
add    $0x4,%rsi
add    $0xfffffffffffffffe,%rdi
jne    13d0 <make_lookup_sinc+0x290>
test   $0x1,%dl
je     1411 <make_lookup_sinc+0x2d1>
movupd (%r15,%rsi,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,(%r15,%rsi,8)
cmp    %rcx,%rax
je     143a <make_lookup_sinc+0x2fa>
lea    (%r15,%rcx,8),%r15
nopw   0x0(%rax,%rax,1)
movsd  (%r15),%xmm0
divsd  %xmm3,%xmm0
movsd  %xmm0,(%r15)
lea    0x8(%r15),%rax
mov    %rax,%r15
cmp    %r12,%rax
jbe    1420 <make_lookup_sinc+0x2e0>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %esi,%esi
test   $0x1,%dl
jne    1401 <make_lookup_sinc+0x2c1>
jmp    1411 <make_lookup_sinc+0x2d1>

LLVM IR (-O0):
@make_lookup_sinc.oq = internal global i32 0
@make_lookup_sinc.k0 = internal global i32 0
@make_lookup_sinc.k1 = internal global i32 0
define void @make_lookup_sinc(double %0, i32 %1, i32 %2, i32* %3, double* %4, double** %5) {
%7 = alloca double
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32*
%11 = alloca double*
%12 = alloca double**
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca double*
%17 = alloca double*
%18 = alloca double
%19 = alloca double
store double %0, double* %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32* %3, i32** %10
store double* %4, double** %11
store double** %5, double*** %12
%20 = load double, double* %7
%21 = fadd double %20, -1.000000e+00
store double %21, double* %7
%22 = load double, double* %7
%23 = load double, double* %7
%24 = call double @llvm.rint.f64(double %23)
%25 = fsub double %22, %24
%26 = call double @llvm.fabs.f64(double %25)
%27 = fcmp olt double %26, 1.000000e-05
br i1 %27, label %28, label %51
28: ; preds = %6
%29 = load double, double* %7
%30 = call double @llvm.rint.f64(double %29)
%31 = fptosi double %30 to i32
%32 = load i32*, i32** %10
store i32 %31, i32* %32
%33 = load i32*, i32** %10
%34 = load i32, i32* %33
%35 = icmp slt i32 %34, 0
br i1 %35, label %41, label %36
36: ; preds = %28
%37 = load i32*, i32** %10
%38 = load i32, i32* %37
%39 = load i32, i32* %9
%40 = icmp sge i32 %38, %39
br i1 %40, label %41, label %45
41: ; preds = %36, %28
%42 = load double*, double** %11
%43 = getelementptr inbounds double, double* %42, i64 -1
%44 = load double**, double*** %12
store double* %43, double** %44
br label %50
45: ; preds = %36
%46 = load double*, double** %11
%47 = getelementptr inbounds double, double* %46, i64 0
store double 1.000000e+00, double* %47
%48 = load double*, double** %11
%49 = load double**, double*** %12
store double* %48, double** %49
br label %50
50: ; preds = %45, %41
br label %161
51: ; preds = %6
%52 = load i32, i32* %8
%53 = load i32, i32* @make_lookup_sinc.oq
%54 = icmp ne i32 %52, %53
br i1 %54, label %55, label %76
55: ; preds = %51
%56 = load i32, i32* %8
store i32 %56, i32* @make_lookup_sinc.oq
%57 = load i32, i32* %8
%58 = srem i32 %57, 2
%59 = icmp ne i32 %58, 0
br i1 %59, label %60, label %68
60: ; preds = %55
%61 = load i32, i32* %8
%62 = sub nsw i32 %61, 1
%63 = sub nsw i32 0, %62
%64 = sdiv i32 %63, 2
store i32 %64, i32* @make_lookup_sinc.k0
%65 = load i32, i32* %8
%66 = sub nsw i32 %65, 1
%67 = sdiv i32 %66, 2
store i32 %67, i32* @make_lookup_sinc.k1
br label %75
68: ; preds = %55
%69 = load i32, i32* %8
%70 = sub nsw i32 %69, 2
%71 = sub nsw i32 0, %70
%72 = sdiv i32 %71, 2
store i32 %72, i32* @make_lookup_sinc.k0
%73 = load i32, i32* %8
%74 = sdiv i32 %73, 2
store i32 %74, i32* @make_lookup_sinc.k1
br label %75
75: ; preds = %68, %60
br label %76
76: ; preds = %75, %51
%77 = load i32, i32* %8
%78 = srem i32 %77, 2
%79 = icmp ne i32 %78, 0
br i1 %79, label %80, label %83
80: ; preds = %76
%81 = load double, double* %7
%82 = fadd double %81, 5.000000e-01
br label %85
83: ; preds = %76
%84 = load double, double* %7
br label %85
85: ; preds = %83, %80
%86 = phi double [ %82, %80 ], [ %84, %83 ]
%87 = call double @llvm.floor.f64(double %86)
%88 = fptosi double %87 to i32
store i32 %88, i32* %15
%89 = load i32, i32* %15
%90 = load i32, i32* @make_lookup_sinc.k0
%91 = add nsw i32 %89, %90
%92 = load i32*, i32** %10
store i32 %91, i32* %92
%93 = load i32*, i32** %10
%94 = load i32, i32* %93
%95 = icmp slt i32 %94, 0
br i1 %95, label %96, label %98
96: ; preds = %85
%97 = load i32*, i32** %10
store i32 0, i32* %97
br label %98
98: ; preds = %96, %85
%99 = load i32, i32* %15
%100 = load i32, i32* @make_lookup_sinc.k1
%101 = add nsw i32 %99, %100
store i32 %101, i32* %13
%102 = load i32, i32* %13
%103 = load i32, i32* %9
%104 = icmp sge i32 %102, %103
br i1 %104, label %105, label %108
105: ; preds = %98
%106 = load i32, i32* %9
%107 = sub nsw i32 %106, 1
store i32 %107, i32* %13
br label %108
108: ; preds = %105, %98
%109 = load double*, double** %11
%110 = load i32, i32* %13
%111 = load i32*, i32** %10
%112 = load i32, i32* %111
%113 = sub nsw i32 %110, %112
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double, double* %109, i64 %114
store double* %115, double** %17
%116 = load double**, double*** %12
store double* %115, double** %116
%117 = load i32*, i32** %10
%118 = load i32, i32* %117
store i32 %118, i32* %14
%119 = load double*, double** %11
store double* %119, double** %16
store double 0.000000e+00, double* %19
br label %120
120: ; preds = %124, %108
%121 = load double*, double** %16
%122 = load double*, double** %17
%123 = icmp ule double* %121, %122
br i1 %123, label %124, label %148
124: ; preds = %120
%125 = load double, double* %7
%126 = load i32, i32* %14
%127 = add nsw i32 %126, 1
store i32 %127, i32* %14
%128 = sitofp i32 %126 to double
%129 = fsub double %125, %128
%130 = fmul double 0x400921FB54442D18, %129
store double %130, double* %18
%131 = load double, double* %18
%132 = call double @sin(double %131)
%133 = load double, double* %18
%134 = fdiv double %132, %133
%135 = fmul double %134, 5.000000e-01
%136 = load double, double* %18
%137 = fmul double 2.000000e+00, %136
%138 = load i32, i32* %8
%139 = sitofp i32 %138 to double
%140 = fdiv double %137, %139
%141 = call double @cos(double %140)
%142 = fadd double 1.000000e+00, %141
%143 = fmul double %135, %142
%144 = load double*, double** %16
%145 = getelementptr inbounds double, double* %144, i32 1
store double* %145, double** %16
store double %143, double* %144
%146 = load double, double* %19
%147 = fadd double %146, %143
store double %147, double* %19
br label %120
148: ; preds = %120
%149 = load double*, double** %11
store double* %149, double** %16
br label %150
150: ; preds = %154, %148
%151 = load double*, double** %16
%152 = load double*, double** %17
%153 = icmp ule double* %151, %152
br i1 %153, label %154, label %160
154: ; preds = %150
%155 = load double, double* %19
%156 = load double*, double** %16
%157 = getelementptr inbounds double, double* %156, i32 1
store double* %157, double** %16
%158 = load double, double* %156
%159 = fdiv double %158, %155
store double %159, double* %156
br label %150
160: ; preds = %150
br label %161
161: ; preds = %160, %50
ret void
}

LLVM IR (-O2):
@make_lookup_sinc.oq = internal unnamed_addr global i32 0
@make_lookup_sinc.k0 = internal unnamed_addr global i32 0
@make_lookup_sinc.k1 = internal unnamed_addr global i32 0
define void @make_lookup_sinc(double %0, i32 %1, i32 %2, i32* nocapture %3, double* %4, double** nocapture writeonly %5) {
%7 = ptrtoint double* %4 to i64
%8 = fadd double %0, -1.000000e+00
%9 = tail call double @llvm.rint.f64(double %8)
%10 = fsub double %8, %9
%11 = tail call double @llvm.fabs.f64(double %10)
%12 = fcmp olt double %11, 1.000000e-05
br i1 %12, label %13, label %21
13: ; preds = %6
%14 = fptosi double %9 to i32
store i32 %14, i32* %3
%15 = icmp sgt i32 %14, -1
%16 = icmp slt i32 %14, %2
%17 = and i1 %15, %16
br i1 %17, label %20, label %18
18: ; preds = %13
%19 = getelementptr inbounds double, double* %4, i64 -1
br label %148
20: ; preds = %13
store double 1.000000e+00, double* %4
br label %148
21: ; preds = %6
%22 = load i32, i32* @make_lookup_sinc.oq
%23 = icmp eq i32 %22, %1
br i1 %23, label %37, label %24
24: ; preds = %21
store i32 %1, i32* @make_lookup_sinc.oq
%25 = and i32 %1, 1
%26 = icmp eq i32 %25, 0
br i1 %26, label %33, label %27
27: ; preds = %24
%28 = add nsw i32 %1, -1
%29 = sub i32 1, %1
%30 = sdiv i32 %29, 2
store i32 %30, i32* @make_lookup_sinc.k0
%31 = sdiv i32 %28, 2
store i32 %31, i32* @make_lookup_sinc.k1
%32 = fadd double %8, 5.000000e-01
br label %46
33: ; preds = %24
%34 = sub i32 2, %1
%35 = sdiv i32 %34, 2
store i32 %35, i32* @make_lookup_sinc.k0
%36 = sdiv i32 %1, 2
store i32 %36, i32* @make_lookup_sinc.k1
br label %43
37: ; preds = %21
%38 = load i32, i32* @make_lookup_sinc.k0
%39 = load i32, i32* @make_lookup_sinc.k1
%40 = and i32 %1, 1
%41 = icmp eq i32 %40, 0
%42 = fadd double %8, 5.000000e-01
br i1 %41, label %43, label %46
43: ; preds = %33, %37
%44 = phi i32 [ %35, %33 ], [ %38, %37 ]
%45 = phi i32 [ %36, %33 ], [ %39, %37 ]
br label %46
46: ; preds = %27, %37, %43
%47 = phi i32 [ %44, %43 ], [ %38, %37 ], [ %30, %27 ]
%48 = phi i32 [ %45, %43 ], [ %39, %37 ], [ %31, %27 ]
%49 = phi double [ %8, %43 ], [ %42, %37 ], [ %32, %27 ]
%50 = tail call double @llvm.floor.f64(double %49)
%51 = fptosi double %50 to i32
%52 = add nsw i32 %47, %51
%53 = icmp sgt i32 %52, 0
%54 = select i1 %53, i32 %52, i32 0
store i32 %54, i32* %3
%55 = add nsw i32 %48, %51
%56 = icmp slt i32 %55, %2
%57 = add nsw i32 %2, -1
%58 = select i1 %56, i32 %55, i32 %57
%59 = sub nsw i32 %58, %54
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds double, double* %4, i64 %60
store double* %61, double** %5
%62 = icmp slt i32 %59, 0
br i1 %62, label %150, label %63
63: ; preds = %46
%64 = sitofp i32 %1 to double
br label %123
65: ; preds = %123
br i1 %62, label %150, label %66
66: ; preds = %65
%67 = sext i32 %58 to i64
%68 = shl nsw i64 %67, 3
%69 = add i64 %68, %7
%70 = add i64 %69, 1
%71 = zext i32 %54 to i64
%72 = mul nsw i64 %71, -8
%73 = add i64 %72, %70
%74 = add i64 %7, 8
%75 = call i64 @llvm.umax.i64(i64 %73, i64 %74)
%76 = xor i64 %7, -1
%77 = add i64 %75, %76
%78 = lshr i64 %77, 3
%79 = add nuw nsw i64 %78, 1
%80 = icmp ult i64 %77, 8
br i1 %80, label %121, label %81
81: ; preds = %66
%82 = and i64 %79, 4611686018427387902
%83 = getelementptr double, double* %4, i64 %82
%84 = insertelement <2 x double> poison, double %140, i64 0
%85 = shufflevector <2 x double> %84, <2 x double> poison, <2 x i32> zeroinitializer
%86 = add nsw i64 %82, -2
%87 = lshr exact i64 %86, 1
%88 = add nuw i64 %87, 1
%89 = and i64 %88, 1
%90 = icmp eq i64 %86, 0
br i1 %90, label %110, label %91
91: ; preds = %81
%92 = and i64 %88, -2
br label %93
93: ; preds = %93, %91
%94 = phi i64 [ 0, %91 ], [ %107, %93 ]
%95 = phi i64 [ 0, %91 ], [ %108, %93 ]
%96 = getelementptr double, double* %4, i64 %94
%97 = bitcast double* %96 to <2 x double>*
%98 = load <2 x double>, <2 x double>* %97
%99 = fdiv <2 x double> %98, %85
%100 = bitcast double* %96 to <2 x double>*
store <2 x double> %99, <2 x double>* %100
%101 = or i64 %94, 2
%102 = getelementptr double, double* %4, i64 %101
%103 = bitcast double* %102 to <2 x double>*
%104 = load <2 x double>, <2 x double>* %103
%105 = fdiv <2 x double> %104, %85
%106 = bitcast double* %102 to <2 x double>*
store <2 x double> %105, <2 x double>* %106
%107 = add nuw i64 %94, 4
%108 = add nuw i64 %95, 2
%109 = icmp eq i64 %108, %92
br i1 %109, label %110, label %93
110: ; preds = %93, %81
%111 = phi i64 [ 0, %81 ], [ %107, %93 ]
%112 = icmp eq i64 %89, 0
br i1 %112, label %119, label %113
113: ; preds = %110
%114 = getelementptr double, double* %4, i64 %111
%115 = bitcast double* %114 to <2 x double>*
%116 = load <2 x double>, <2 x double>* %115
%117 = fdiv <2 x double> %116, %85
%118 = bitcast double* %114 to <2 x double>*
store <2 x double> %117, <2 x double>* %118
br label %119
119: ; preds = %110, %113
%120 = icmp eq i64 %79, %82
br i1 %120, label %150, label %121
121: ; preds = %66, %119
%122 = phi double* [ %4, %66 ], [ %83, %119 ]
br label %142
123: ; preds = %63, %123
%124 = phi double [ 0.000000e+00, %63 ], [ %140, %123 ]
%125 = phi double* [ %4, %63 ], [ %139, %123 ]
%126 = phi i32 [ %54, %63 ], [ %127, %123 ]
%127 = add nuw nsw i32 %126, 1
%128 = sitofp i32 %126 to double
%129 = fsub double %8, %128
%130 = fmul double %129, 0x400921FB54442D18
%131 = tail call double @sin(double %130)
%132 = fdiv double %131, %130
%133 = fmul double %132, 5.000000e-01
%134 = fmul double %130, 2.000000e+00
%135 = fdiv double %134, %64
%136 = tail call double @cos(double %135)
%137 = fadd double %136, 1.000000e+00
%138 = fmul double %133, %137
%139 = getelementptr inbounds double, double* %125, i64 1
store double %138, double* %125
%140 = fadd double %124, %138
%141 = icmp ugt double* %139, %61
br i1 %141, label %65, label %123
142: ; preds = %121, %142
%143 = phi double* [ %144, %142 ], [ %122, %121 ]
%144 = getelementptr inbounds double, double* %143, i64 1
%145 = load double, double* %143
%146 = fdiv double %145, %140
store double %146, double* %143
%147 = icmp ugt double* %144, %61
br i1 %147, label %150, label %142
148: ; preds = %20, %18
%149 = phi double* [ %19, %18 ], [ %4, %20 ]
store double* %149, double** %5
br label %150
150: ; preds = %142, %119, %148, %46, %65
ret void
}