#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int atan(double);
double cos(int);
float sin(int);
void makewt(int nw, int *ip, float *w) {
  void makeipt(int nw, int *ip);
  int j, nwh, nw0, nw1;
  float delta, wn4r, wk1r, wk1i, wk3r, wk3i;
  ip[0] = nw;
  ip[1] = 1;
  if (nw > 2) {
    nwh = nw >> 1;
    delta = atan(1.0) / nwh;
    wn4r = cos(delta * nwh);
    w[0] = 1;
    w[1] = wn4r;
    if (nwh == 4) {
      w[2] = cos(delta * 2);
      w[3] = sin(delta * 2);
    } else if (nwh > 4) {
      makeipt(nw, ip);
      w[2] = 0.5 / cos(delta * 2);
      w[3] = 0.5 / cos(delta * 6);
      for (j = 4; j < nwh; j += 4) {
        w[j] = cos(delta * j);
        w[j + 1] = sin(delta * j);
        w[j + 2] = cos(3 * delta * j);
        w[j + 3] = -sin(3 * delta * j);
      }
    }
    nw0 = 0;
    while (nwh > 2) {
      nw1 = nw0 + nwh;
      nwh >>= 1;
      w[nw1] = 1;
      w[nw1 + 1] = wn4r;
      if (nwh == 4) {
        wk1r = w[nw0 + 4];
        wk1i = w[nw0 + 5];
        w[nw1 + 2] = wk1r;
        w[nw1 + 3] = wk1i;
      } else if (nwh > 4) {
        wk1r = w[nw0 + 4];
        wk3r = w[nw0 + 6];
        w[nw1 + 2] = 0.5 / wk1r;
        w[nw1 + 3] = 0.5 / wk3r;
        for (j = 4; j < nwh; j += 4) {
          wk1r = w[nw0 + 2 * j];
          wk1i = w[nw0 + 2 * j + 1];
          wk3r = w[nw0 + 2 * j + 2];
          wk3i = w[nw0 + 2 * j + 3];
          w[nw1 + j] = wk1r;
          w[nw1 + j + 1] = wk1i;
          w[nw1 + j + 2] = wk3r;
          w[nw1 + j + 3] = wk3i;
        }
      }
      nw0 = nw1;
    }
  }
}


x86 assembly (clang, -O0):
<makewt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x4(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
movl   $0x1,0x4(%rax)
cmpl   $0x2,-0x4(%rbp)
jle    15ed <makewt+0x4ad>
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x20(%rbp)
movsd  0xe8e(%rip),%xmm0
call   1040 <atan@plt>
cltd
idivl  -0x20(%rbp)
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
cvtsi2ssl -0x20(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movss  0xe40(%rip),%xmm0
movss  %xmm0,(%rax)
movss  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x4(%rax)
cmpl   $0x4,-0x20(%rbp)
jne    1223 <makewt+0xe3>
movss  0xe24(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  0xe01(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvttss2si %xmm0,%edi
call   1030 <sin@plt>
mov    -0x18(%rbp),%rax
movss  %xmm0,0xc(%rax)
jmp    138c <makewt+0x24c>
cmpl   $0x4,-0x20(%rbp)
jle    1387 <makewt+0x247>
mov    -0x4(%rbp),%edi
mov    -0x10(%rbp),%rsi
call   1060 <makeipt@plt>
movss  0xdc7(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  0xdbe(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  0xd91(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  0xd8c(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0xc(%rax)
movl   $0x4,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1382 <makewt+0x242>
movss  -0x2c(%rbp),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x2c(%rbp),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1030 <sin@plt>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  0xd03(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  0xcce(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1030 <sin@plt>
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x1c(%rbp)
jmp    12a4 <makewt+0x164>
jmp    1387 <makewt+0x247>
jmp    138c <makewt+0x24c>
movl   $0x0,-0x24(%rbp)
cmpl   $0x2,-0x20(%rbp)
jle    15e8 <makewt+0x4a8>
mov    -0x24(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  0xc41(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
cmpl   $0x4,-0x20(%rbp)
jne    1446 <makewt+0x306>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    15dd <makewt+0x49d>
cmpl   $0x4,-0x20(%rbp)
jle    15d8 <makewt+0x498>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb89(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb5e(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movl   $0x4,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    15d3 <makewt+0x493>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x1c(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x1c(%rbp)
jmp    14db <makewt+0x39b>
jmp    15d8 <makewt+0x498>
jmp    15dd <makewt+0x49d>
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    1393 <makewt+0x253>
jmp    15ed <makewt+0x4ad>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<makewt>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %edi,(%rsi)
movl   $0x1,0x4(%rsi)
cmp    $0x3,%edi
jl     13b6 <makewt+0x276>
mov    %rdx,%r13
mov    %rsi,%rbp
mov    %edi,%r14d
mov    %edi,%r15d
shr    %r15d
movsd  0xe89(%rip),%xmm0
call   1040 <atan@plt>
cltd
idiv   %r15d
cvtsi2ss %eax,%xmm1
xorps  %xmm0,%xmm0
cvtsi2ss %r15d,%xmm0
movss  %xmm1,0x8(%rsp)
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movl   $0x3f800000,0x0(%r13)
3f
movss  %xmm0,0xc(%rsp)
movss  %xmm0,0x4(%r13)
cmp    $0x4,%r15d
jne    11ee <makewt+0xae>
movss  0x8(%rsp),%xmm0
addss  %xmm0,%xmm0
cvttss2si %xmm0,%ebp
mov    %ebp,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x8(%r13)
mov    %ebp,%edi
call   1030 <sin@plt>
movss  %xmm0,0xc(%r13)
jmp    12fb <makewt+0x1bb>
cmp    $0xa,%r14d
jb     12fb <makewt+0x1bb>
mov    %r14d,%edi
mov    %rbp,%rsi
call   1060 <makeipt@plt>
movss  0x8(%rsp),%xmm0
addss  %xmm0,%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
movsd  0xdea(%rip),%xmm1
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0x8(%r13)
movss  0xdd9(%rip),%xmm0
mulss  0x8(%rsp),%xmm0
cvttss2si %xmm0,%edi
call   1050 <cos@plt>
movsd  0xdba(%rip),%xmm1
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0xc(%r13)
movss  0xdad(%rip),%xmm0
mulss  0x8(%rsp),%xmm0
movss  %xmm0,0x10(%rsp)
mov    %r15d,%r12d
mov    $0x4,%ebx
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2ss %ebx,%xmm1
movss  %xmm1,0x14(%rsp)
movss  0x8(%rsp),%xmm0
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%ebp
mov    %ebp,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x0(%r13,%rbx,4)
mov    %ebp,%edi
call   1030 <sin@plt>
movss  %xmm0,0x4(%r13,%rbx,4)
movss  0x14(%rsp),%xmm0
mulss  0x10(%rsp),%xmm0
cvttss2si %xmm0,%ebp
mov    %ebp,%edi
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x8(%r13,%rbx,4)
mov    %ebp,%edi
call   1030 <sin@plt>
xorps  0xd35(%rip),%xmm0
movss  %xmm0,0xc(%r13,%rbx,4)
add    $0x4,%rbx
cmp    %r12,%rbx
jb     1280 <makewt+0x140>
cmp    $0x6,%r14d
movss  0xc(%rsp),%xmm3
jb     13b6 <makewt+0x276>
xor    %eax,%eax
movss  0xd03(%rip),%xmm0
jmp    1335 <makewt+0x1f5>
nopw   0x0(%rax,%rax,1)
mov    %edx,%edx
mov    0x10(%r13,%rdx,4),%rdx
mov    %rdx,0x8(%r13,%rax,4)
cmp    $0x5,%ecx
jbe    13b6 <makewt+0x276>
mov    %eax,%edx
mov    %r15d,%ecx
lea    (%rcx,%rdx,1),%eax
shr    %r15d
movl   $0x3f800000,0x0(%r13,%rax,4)
80 3f
movss  %xmm3,0x4(%r13,%rax,4)
cmp    $0x4,%r15d
je     1320 <makewt+0x1e0>
cmp    $0xa,%ecx
jb     132c <makewt+0x1ec>
mov    %edx,%edi
movaps %xmm0,%xmm1
divss  0x10(%r13,%rdi,4),%xmm1
movaps %xmm0,%xmm2
divss  0x18(%r13,%rdi,4),%xmm2
movss  %xmm1,0x8(%r13,%rax,4)
movss  %xmm2,0xc(%r13,%rax,4)
mov    %r15d,%edx
lea    0x0(,%rax,4),%rsi
add    %r13,%rsi
lea    0x0(,%rdi,4),%rdi
add    %r13,%rdi
mov    $0x4,%ebp
nopl   (%rax)
movups (%rdi,%rbp,8),%xmm1
movups %xmm1,(%rsi,%rbp,4)
add    $0x4,%rbp
cmp    %rdx,%rbp
jb     13a0 <makewt+0x260>
jmp    132c <makewt+0x1ec>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @makewt(i32 %0, i32* %1, float* %2) {
%4 = alloca i32
%5 = alloca i32*
%6 = alloca float*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
store i32 %0, i32* %4
store i32* %1, i32** %5
store float* %2, float** %6
%17 = load i32, i32* %4
%18 = load i32*, i32** %5
%19 = getelementptr inbounds i32, i32* %18, i64 0
store i32 %17, i32* %19
%20 = load i32*, i32** %5
%21 = getelementptr inbounds i32, i32* %20, i64 1
store i32 1, i32* %21
%22 = load i32, i32* %4
%23 = icmp sgt i32 %22, 2
br i1 %23, label %24, label %299
24: ; preds = %3
%25 = load i32, i32* %4
%26 = ashr i32 %25, 1
store i32 %26, i32* %8
%27 = call i32 @atan(double 1.000000e+00)
%28 = load i32, i32* %8
%29 = sdiv i32 %27, %28
%30 = sitofp i32 %29 to float
store float %30, float* %11
%31 = load float, float* %11
%32 = load i32, i32* %8
%33 = sitofp i32 %32 to float
%34 = fmul float %31, %33
%35 = fptosi float %34 to i32
%36 = call double @cos(i32 %35)
%37 = fptrunc double %36 to float
store float %37, float* %12
%38 = load float*, float** %6
%39 = getelementptr inbounds float, float* %38, i64 0
store float 1.000000e+00, float* %39
%40 = load float, float* %12
%41 = load float*, float** %6
%42 = getelementptr inbounds float, float* %41, i64 1
store float %40, float* %42
%43 = load i32, i32* %8
%44 = icmp eq i32 %43, 4
br i1 %44, label %45, label %59
45: ; preds = %24
%46 = load float, float* %11
%47 = fmul float %46, 2.000000e+00
%48 = fptosi float %47 to i32
%49 = call double @cos(i32 %48)
%50 = fptrunc double %49 to float
%51 = load float*, float** %6
%52 = getelementptr inbounds float, float* %51, i64 2
store float %50, float* %52
%53 = load float, float* %11
%54 = fmul float %53, 2.000000e+00
%55 = fptosi float %54 to i32
%56 = call float @sin(i32 %55)
%57 = load float*, float** %6
%58 = getelementptr inbounds float, float* %57, i64 3
store float %56, float* %58
br label %139
59: ; preds = %24
%60 = load i32, i32* %8
%61 = icmp sgt i32 %60, 4
br i1 %61, label %62, label %138
62: ; preds = %59
%63 = load i32, i32* %4
%64 = load i32*, i32** %5
%65 = load float, float* %11
%66 = fmul float %65, 2.000000e+00
%67 = fptosi float %66 to i32
%68 = call double @cos(i32 %67)
%69 = fdiv double 5.000000e-01, %68
%70 = fptrunc double %69 to float
%71 = load float*, float** %6
%72 = getelementptr inbounds float, float* %71, i64 2
store float %70, float* %72
%73 = load float, float* %11
%74 = fmul float %73, 6.000000e+00
%75 = fptosi float %74 to i32
%76 = call double @cos(i32 %75)
%77 = fdiv double 5.000000e-01, %76
%78 = fptrunc double %77 to float
%79 = load float*, float** %6
%80 = getelementptr inbounds float, float* %79, i64 3
store float %78, float* %80
store i32 4, i32* %7
br label %81
81: ; preds = %134, %62
%82 = load i32, i32* %7
%83 = load i32, i32* %8
%84 = icmp slt i32 %82, %83
br i1 %84, label %85, label %137
85: ; preds = %81
%86 = load float, float* %11
%87 = load i32, i32* %7
%88 = sitofp i32 %87 to float
%89 = fmul float %86, %88
%90 = fptosi float %89 to i32
%91 = call double @cos(i32 %90)
%92 = fptrunc double %91 to float
%93 = load float*, float** %6
%94 = load i32, i32* %7
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds float, float* %93, i64 %95
store float %92, float* %96
%97 = load float, float* %11
%98 = load i32, i32* %7
%99 = sitofp i32 %98 to float
%100 = fmul float %97, %99
%101 = fptosi float %100 to i32
%102 = call float @sin(i32 %101)
%103 = load float*, float** %6
%104 = load i32, i32* %7
%105 = add nsw i32 %104, 1
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds float, float* %103, i64 %106
store float %102, float* %107
%108 = load float, float* %11
%109 = fmul float 3.000000e+00, %108
%110 = load i32, i32* %7
%111 = sitofp i32 %110 to float
%112 = fmul float %109, %111
%113 = fptosi float %112 to i32
%114 = call double @cos(i32 %113)
%115 = fptrunc double %114 to float
%116 = load float*, float** %6
%117 = load i32, i32* %7
%118 = add nsw i32 %117, 2
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds float, float* %116, i64 %119
store float %115, float* %120
%121 = load float, float* %11
%122 = fmul float 3.000000e+00, %121
%123 = load i32, i32* %7
%124 = sitofp i32 %123 to float
%125 = fmul float %122, %124
%126 = fptosi float %125 to i32
%127 = call float @sin(i32 %126)
%128 = fneg float %127
%129 = load float*, float** %6
%130 = load i32, i32* %7
%131 = add nsw i32 %130, 3
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds float, float* %129, i64 %132
store float %128, float* %133
br label %134
134: ; preds = %85
%135 = load i32, i32* %7
%136 = add nsw i32 %135, 4
store i32 %136, i32* %7
br label %81
137: ; preds = %81
br label %138
138: ; preds = %137, %59
br label %139
139: ; preds = %138, %45
store i32 0, i32* %9
br label %140
140: ; preds = %296, %139
%141 = load i32, i32* %8
%142 = icmp sgt i32 %141, 2
br i1 %142, label %143, label %298
143: ; preds = %140
%144 = load i32, i32* %9
%145 = load i32, i32* %8
%146 = add nsw i32 %144, %145
store i32 %146, i32* %10
%147 = load i32, i32* %8
%148 = ashr i32 %147, 1
store i32 %148, i32* %8
%149 = load float*, float** %6
%150 = load i32, i32* %10
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds float, float* %149, i64 %151
store float 1.000000e+00, float* %152
%153 = load float, float* %12
%154 = load float*, float** %6
%155 = load i32, i32* %10
%156 = add nsw i32 %155, 1
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds float, float* %154, i64 %157
store float %153, float* %158
%159 = load i32, i32* %8
%160 = icmp eq i32 %159, 4
br i1 %160, label %161, label %186
161: ; preds = %143
%162 = load float*, float** %6
%163 = load i32, i32* %9
%164 = add nsw i32 %163, 4
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds float, float* %162, i64 %165
%167 = load float, float* %166
store float %167, float* %13
%168 = load float*, float** %6
%169 = load i32, i32* %9
%170 = add nsw i32 %169, 5
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds float, float* %168, i64 %171
%173 = load float, float* %172
store float %173, float* %14
%174 = load float, float* %13
%175 = load float*, float** %6
%176 = load i32, i32* %10
%177 = add nsw i32 %176, 2
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds float, float* %175, i64 %178
store float %174, float* %179
%180 = load float, float* %14
%181 = load float*, float** %6
%182 = load i32, i32* %10
%183 = add nsw i32 %182, 3
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds float, float* %181, i64 %184
store float %180, float* %185
br label %296
186: ; preds = %143
%187 = load i32, i32* %8
%188 = icmp sgt i32 %187, 4
br i1 %188, label %189, label %295
189: ; preds = %186
%190 = load float*, float** %6
%191 = load i32, i32* %9
%192 = add nsw i32 %191, 4
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds float, float* %190, i64 %193
%195 = load float, float* %194
store float %195, float* %13
%196 = load float*, float** %6
%197 = load i32, i32* %9
%198 = add nsw i32 %197, 6
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds float, float* %196, i64 %199
%201 = load float, float* %200
store float %201, float* %15
%202 = load float, float* %13
%203 = fpext float %202 to double
%204 = fdiv double 5.000000e-01, %203
%205 = fptrunc double %204 to float
%206 = load float*, float** %6
%207 = load i32, i32* %10
%208 = add nsw i32 %207, 2
%209 = sext i32 %208 to i64
%210 = getelementptr inbounds float, float* %206, i64 %209
store float %205, float* %210
%211 = load float, float* %15
%212 = fpext float %211 to double
%213 = fdiv double 5.000000e-01, %212
%214 = fptrunc double %213 to float
%215 = load float*, float** %6
%216 = load i32, i32* %10
%217 = add nsw i32 %216, 3
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds float, float* %215, i64 %218
store float %214, float* %219
store i32 4, i32* %7
br label %220
220: ; preds = %291, %189
%221 = load i32, i32* %7
%222 = load i32, i32* %8
%223 = icmp slt i32 %221, %222
br i1 %223, label %224, label %294
224: ; preds = %220
%225 = load float*, float** %6
%226 = load i32, i32* %9
%227 = load i32, i32* %7
%228 = mul nsw i32 2, %227
%229 = add nsw i32 %226, %228
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds float, float* %225, i64 %230
%232 = load float, float* %231
store float %232, float* %13
%233 = load float*, float** %6
%234 = load i32, i32* %9
%235 = load i32, i32* %7
%236 = mul nsw i32 2, %235
%237 = add nsw i32 %234, %236
%238 = add nsw i32 %237, 1
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds float, float* %233, i64 %239
%241 = load float, float* %240
store float %241, float* %14
%242 = load float*, float** %6
%243 = load i32, i32* %9
%244 = load i32, i32* %7
%245 = mul nsw i32 2, %244
%246 = add nsw i32 %243, %245
%247 = add nsw i32 %246, 2
%248 = sext i32 %247 to i64
%249 = getelementptr inbounds float, float* %242, i64 %248
%250 = load float, float* %249
store float %250, float* %15
%251 = load float*, float** %6
%252 = load i32, i32* %9
%253 = load i32, i32* %7
%254 = mul nsw i32 2, %253
%255 = add nsw i32 %252, %254
%256 = add nsw i32 %255, 3
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds float, float* %251, i64 %257
%259 = load float, float* %258
store float %259, float* %16
%260 = load float, float* %13
%261 = load float*, float** %6
%262 = load i32, i32* %10
%263 = load i32, i32* %7
%264 = add nsw i32 %262, %263
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds float, float* %261, i64 %265
store float %260, float* %266
%267 = load float, float* %14
%268 = load float*, float** %6
%269 = load i32, i32* %10
%270 = load i32, i32* %7
%271 = add nsw i32 %269, %270
%272 = add nsw i32 %271, 1
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds float, float* %268, i64 %273
store float %267, float* %274
%275 = load float, float* %15
%276 = load float*, float** %6
%277 = load i32, i32* %10
%278 = load i32, i32* %7
%279 = add nsw i32 %277, %278
%280 = add nsw i32 %279, 2
%281 = sext i32 %280 to i64
%282 = getelementptr inbounds float, float* %276, i64 %281
store float %275, float* %282
%283 = load float, float* %16
%284 = load float*, float** %6
%285 = load i32, i32* %10
%286 = load i32, i32* %7
%287 = add nsw i32 %285, %286
%288 = add nsw i32 %287, 3
%289 = sext i32 %288 to i64
%290 = getelementptr inbounds float, float* %284, i64 %289
store float %283, float* %290
br label %291
291: ; preds = %224
%292 = load i32, i32* %7
%293 = add nsw i32 %292, 4
store i32 %293, i32* %7
br label %220
294: ; preds = %220
br label %295
295: ; preds = %294, %186
br label %296
296: ; preds = %295, %161
%297 = load i32, i32* %10
store i32 %297, i32* %9
br label %140
298: ; preds = %140
br label %299
299: ; preds = %298, %3
ret void
}

LLVM IR (-O2):
define void @makewt(i32 %0, i32* %1, float* %2) {
store i32 %0, i32* %1
%4 = getelementptr inbounds i32, i32* %1, i64 1
store i32 1, i32* %4
%5 = icmp sgt i32 %0, 2
br i1 %5, label %6, label %131
6: ; preds = %3
%7 = lshr i32 %0, 1
%8 = tail call i32 @atan(double 1.000000e+00)
%9 = sdiv i32 %8, %7
%10 = sitofp i32 %9 to float
%11 = sitofp i32 %7 to float
%12 = fmul float %11, %10
%13 = fptosi float %12 to i32
%14 = tail call double @cos(i32 %13)
%15 = fptrunc double %14 to float
store float 1.000000e+00, float* %2
%16 = getelementptr inbounds float, float* %2, i64 1
store float %15, float* %16
%17 = icmp eq i32 %7, 4
br i1 %17, label %18, label %26
18: ; preds = %6
%19 = fmul float %10, 2.000000e+00
%20 = fptosi float %19 to i32
%21 = tail call double @cos(i32 %20)
%22 = fptrunc double %21 to float
%23 = getelementptr inbounds float, float* %2, i64 2
store float %22, float* %23
%24 = tail call float @sin(i32 %20)
%25 = getelementptr inbounds float, float* %2, i64 3
store float %24, float* %25
br label %67
26: ; preds = %6
%27 = icmp ugt i32 %0, 9
br i1 %27, label %28, label %67
28: ; preds = %26
tail call void @makeipt(i32 %0, i32* %1)
%29 = fmul float %10, 2.000000e+00
%30 = fptosi float %29 to i32
%31 = tail call double @cos(i32 %30)
%32 = fdiv double 5.000000e-01, %31
%33 = fptrunc double %32 to float
%34 = getelementptr inbounds float, float* %2, i64 2
store float %33, float* %34
%35 = fmul float %10, 6.000000e+00
%36 = fptosi float %35 to i32
%37 = tail call double @cos(i32 %36)
%38 = fdiv double 5.000000e-01, %37
%39 = fptrunc double %38 to float
%40 = getelementptr inbounds float, float* %2, i64 3
store float %39, float* %40
%41 = fmul float %10, 3.000000e+00
%42 = zext i32 %7 to i64
br label %43
43: ; preds = %28, %43
%44 = phi i64 [ 4, %28 ], [ %65, %43 ]
%45 = trunc i64 %44 to i32
%46 = sitofp i32 %45 to float
%47 = fmul float %10, %46
%48 = fptosi float %47 to i32
%49 = tail call double @cos(i32 %48)
%50 = fptrunc double %49 to float
%51 = getelementptr inbounds float, float* %2, i64 %44
store float %50, float* %51
%52 = tail call float @sin(i32 %48)
%53 = or i64 %44, 1
%54 = getelementptr inbounds float, float* %2, i64 %53
store float %52, float* %54
%55 = fmul float %41, %46
%56 = fptosi float %55 to i32
%57 = tail call double @cos(i32 %56)
%58 = fptrunc double %57 to float
%59 = or i64 %44, 2
%60 = getelementptr inbounds float, float* %2, i64 %59
store float %58, float* %60
%61 = tail call float @sin(i32 %56)
%62 = fneg float %61
%63 = or i64 %44, 3
%64 = getelementptr inbounds float, float* %2, i64 %63
store float %62, float* %64
%65 = add nuw nsw i64 %44, 4
%66 = icmp ult i64 %65, %42
br i1 %66, label %43, label %67
67: ; preds = %43, %26, %18
%68 = icmp ugt i32 %0, 5
br i1 %68, label %69, label %131
69: ; preds = %67, %129
%70 = phi i32 [ %73, %129 ], [ %7, %67 ]
%71 = phi i32 [ %72, %129 ], [ 0, %67 ]
%72 = add nuw nsw i32 %70, %71
%73 = lshr i32 %70, 1
%74 = zext i32 %72 to i64
%75 = getelementptr inbounds float, float* %2, i64 %74
store float 1.000000e+00, float* %75
%76 = add nuw nsw i32 %72, 1
%77 = zext i32 %76 to i64
%78 = getelementptr inbounds float, float* %2, i64 %77
store float %15, float* %78
%79 = icmp eq i32 %73, 4
br i1 %79, label %80, label %95
80: ; preds = %69
%81 = add nuw nsw i32 %71, 4
%82 = zext i32 %81 to i64
%83 = getelementptr inbounds float, float* %2, i64 %82
%84 = load float, float* %83
%85 = add nuw nsw i32 %71, 5
%86 = zext i32 %85 to i64
%87 = getelementptr inbounds float, float* %2, i64 %86
%88 = load float, float* %87
%89 = add nuw nsw i32 %72, 2
%90 = zext i32 %89 to i64
%91 = getelementptr inbounds float, float* %2, i64 %90
store float %84, float* %91
%92 = add nuw nsw i32 %72, 3
%93 = zext i32 %92 to i64
%94 = getelementptr inbounds float, float* %2, i64 %93
store float %88, float* %94
br label %129
95: ; preds = %69
%96 = icmp ugt i32 %70, 9
br i1 %96, label %97, label %129
97: ; preds = %95
%98 = add nuw nsw i32 %71, 4
%99 = zext i32 %98 to i64
%100 = getelementptr inbounds float, float* %2, i64 %99
%101 = load float, float* %100
%102 = add nuw nsw i32 %71, 6
%103 = zext i32 %102 to i64
%104 = getelementptr inbounds float, float* %2, i64 %103
%105 = load float, float* %104
%106 = fdiv float 5.000000e-01, %101
%107 = add nuw nsw i32 %72, 2
%108 = zext i32 %107 to i64
%109 = getelementptr inbounds float, float* %2, i64 %108
store float %106, float* %109
%110 = fdiv float 5.000000e-01, %105
%111 = add nuw nsw i32 %72, 3
%112 = zext i32 %111 to i64
%113 = getelementptr inbounds float, float* %2, i64 %112
store float %110, float* %113
%114 = zext i32 %71 to i64
%115 = zext i32 %73 to i64
br label %116
116: ; preds = %97, %116
%117 = phi i64 [ 4, %97 ], [ %127, %116 ]
%118 = shl nuw nsw i64 %117, 1
%119 = add nuw i64 %118, %114
%120 = and i64 %119, 4294967295
%121 = getelementptr inbounds float, float* %2, i64 %120
%122 = bitcast float* %121 to <4 x float>*
%123 = load <4 x float>, <4 x float>* %122
%124 = add nuw nsw i64 %117, %74
%125 = getelementptr inbounds float, float* %2, i64 %124
%126 = bitcast float* %125 to <4 x float>*
store <4 x float> %123, <4 x float>* %126
%127 = add nuw nsw i64 %117, 4
%128 = icmp ult i64 %127, %115
br i1 %128, label %116, label %129
129: ; preds = %116, %95, %80
%130 = icmp ugt i32 %70, 5
br i1 %130, label %69, label %131
131: ; preds = %129, %67, %3
ret void
}