#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 */
double M_PI;
int cos(double);
int /*<<< orphan*/ exit(int);
double exp(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int pow(double, int);
int /*<<< orphan*/ stderr;
void make_stf(int lh, char *type, double *h) {
  int i, LH;
  double al0;
  LH = lh + 1;
  al0 = ((double)lh) / 1.51743;
  if (type[0] == 'g')
    for (i = 0; i <= lh; i++)
      h[i] = exp(-pow(((double)i) / al0, 2));
  else if (type[0] == 'q')
    for (i = 0; i <= lh; i++)
      h[i] = 1. - pow(((double)i) / ((double)lh), 2);
  else if (type[0] == 'l')
    for (i = 0; i <= lh; i++)
      h[i] = 1. - ((double)i) / ((double)lh);
  else if (type[0] == 'b')
    for (i = 0; i <= lh; i++)
      h[i] = 1.;
  else if (type[0] == 'c')
    for (i = 0; i <= lh; i++)
      h[i] = 1. + cos(M_PI * ((double)i) / ((double)lh));
  else {
    fprintf(stderr, "ERROR: Invalid STF type (arg 4)\n");
    fprintf(stderr,
            "       arg 4 must be one of these letters:\n\t g :gaussian \n\t q "
            ": parabolic \n\t l : triangle \n\t b : box car \n\t c : cosine\n");
    exit(1);
  }
  al0 = 0.;
  for (i = 0; i < LH; i++)
    al0 = al0 + h[i];
  al0 = 2. * al0 - h[0];
  for (i = 0; i <= lh; i++)
    h[i] = h[i] / al0;
}


x86 assembly (clang, -O0):
<make_stf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm0
movsd  0xe87(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x67,%eax
jne    11e2 <make_stf+0x92>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     11dd <make_stf+0x8d>
cvtsi2sdl -0x1c(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
xor    %edi,%edi
sub    %eax,%edi
call   1040 <exp@plt>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1199 <make_stf+0x49>
jmp    13b2 <make_stf+0x262>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x71,%eax
jne    124d <make_stf+0xfd>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1248 <make_stf+0xf8>
cvtsi2sdl -0x1c(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
cvtsi2sd %eax,%xmm1
movsd  0xddf(%rip),%xmm0
subsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11f9 <make_stf+0xa9>
jmp    13ad <make_stf+0x25d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x6c,%eax
jne    12aa <make_stf+0x15a>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     12a5 <make_stf+0x155>
cvtsi2sdl -0x1c(%rbp),%xmm1
cvtsi2sdl -0x4(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  0xd82(%rip),%xmm0
subsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1264 <make_stf+0x114>
jmp    13a8 <make_stf+0x258>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x62,%eax
jne    12f5 <make_stf+0x1a5>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     12f0 <make_stf+0x1a0>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  0xd2b(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    12c1 <make_stf+0x171>
jmp    13a3 <make_stf+0x253>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x63,%eax
jne    136a <make_stf+0x21a>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1365 <make_stf+0x215>
mov    0x2cc9(%rip),%rax
movsd  (%rax),%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1050 <cos@plt>
cvtsi2sd %eax,%xmm1
movsd  0xcc2(%rip),%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    130c <make_stf+0x1bc>
jmp    139e <make_stf+0x24e>
mov    0x2c67(%rip),%rax
mov    (%rax),%edi
lea    0xc96(%rip),%rsi
call   1030 <fprintf@plt>
mov    0x2c52(%rip),%rax
mov    (%rax),%edi
lea    0xca2(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1070 <exit@plt>
jmp    13a3 <make_stf+0x253>
jmp    13a8 <make_stf+0x258>
jmp    13ad <make_stf+0x25d>
jmp    13b2 <make_stf+0x262>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    13f2 <make_stf+0x2a2>
movsd  -0x28(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    13c1 <make_stf+0x271>
movsd  -0x28(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1463 <make_stf+0x313>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x28(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    142a <make_stf+0x2da>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<make_stf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    (%rsi),%al
add    $0x9e,%al
cmp    $0xf,%al
ja     17b1 <make_stf+0x661>
mov    %rdx,%r15
mov    %edi,%r14d
cvtsi2sd %edi,%xmm7
movzbl %al,%eax
lea    0xed2(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
movapd %xmm7,(%rsp)
jmp    *%rax
test   %r14d,%r14d
js     1779 <make_stf+0x629>
lea    0x1(%r14),%eax
cmp    $0x3,%r14d
jae    141e <make_stf+0x2ce>
xor    %ecx,%ecx
jmp    15e9 <make_stf+0x499>
test   %r14d,%r14d
js     1779 <make_stf+0x629>
lea    0x1(%r14),%r12d
test   %r14d,%r14d
je     1448 <make_stf+0x2f8>
mov    %r12d,%r13d
and    $0xfffffffe,%r13d
xor    %ebx,%ebx
mov    0x2e18(%rip),%rbp
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
mulsd  0x0(%rbp),%xmm0
divsd  %xmm7,%xmm0
call   1050 <cos@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xe14(%rip),%xmm0
addsd  %xmm0,%xmm1
lea    0x1(%rbx),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm1,(%r15,%rbx,8)
mulsd  0x0(%rbp),%xmm0
divsd  (%rsp),%xmm0
call   1050 <cos@plt>
movapd (%rsp),%xmm7
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xddd(%rip),%xmm0
movsd  %xmm0,0x8(%r15,%rbx,8)
add    $0x2,%rbx
cmp    %r13,%rbx
jne    11d0 <make_stf+0x80>
test   $0x1,%r12b
jne    1454 <make_stf+0x304>
jmp    160d <make_stf+0x4bd>
test   %r14d,%r14d
js     1779 <make_stf+0x629>
divsd  0xda5(%rip),%xmm7
lea    0x1(%r14),%ebx
xor    %ebp,%ebp
movapd %xmm7,(%rsp)
cs nopw 0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
divsd  %xmm7,%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
neg    %eax
mov    %eax,%edi
call   1040 <exp@plt>
movapd (%rsp),%xmm7
movsd  %xmm0,(%r15,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%rbx
jne    1270 <make_stf+0x120>
jmp    160d <make_stf+0x4bd>
test   %r14d,%r14d
js     1779 <make_stf+0x629>
lea    0x1(%r14),%eax
test   %r14d,%r14d
je     1489 <make_stf+0x339>
mov    %eax,%ecx
and    $0xfffffffe,%ecx
movapd %xmm7,%xmm0
unpcklpd %xmm7,%xmm0
lea    -0x2(%rcx),%rsi
mov    %rsi,%rdx
shr    %rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     1788 <make_stf+0x638>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xd30(%rip),%xmm1
xor    %esi,%esi
movapd 0xd16(%rip),%xmm2
movdqa 0xd2e(%rip),%xmm3
movdqa 0xd36(%rip),%xmm4
nopw   0x0(%rax,%rax,1)
cvtdq2pd %xmm1,%xmm5
divpd  %xmm0,%xmm5
movapd %xmm2,%xmm6
subpd  %xmm5,%xmm6
movupd %xmm6,(%r15,%rsi,8)
movdqa %xmm1,%xmm5
paddd  %xmm3,%xmm5
cvtdq2pd %xmm5,%xmm5
divpd  %xmm0,%xmm5
movapd %xmm2,%xmm6
subpd  %xmm5,%xmm6
movupd %xmm6,0x10(%r15,%rsi,8)
add    $0x4,%rsi
paddd  %xmm4,%xmm1
add    $0xfffffffffffffffe,%rdi
jne    1310 <make_stf+0x1c0>
cvtdq2pd %xmm1,%xmm1
test   $0x1,%dl
je     1372 <make_stf+0x222>
divpd  %xmm0,%xmm1
movapd 0xca8(%rip),%xmm0
subpd  %xmm1,%xmm0
movupd %xmm0,(%r15,%rsi,8)
cmp    %rax,%rcx
jne    148b <make_stf+0x33b>
jmp    160d <make_stf+0x4bd>
test   %r14d,%r14d
js     1779 <make_stf+0x629>
lea    0x1(%r14),%r12d
test   %r14d,%r14d
je     14c7 <make_stf+0x377>
mov    %r12d,%r13d
and    $0xfffffffe,%r13d
xor    %ebx,%ebx
nop
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
divsd  %xmm7,%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0xc44(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r15,%rbx,8)
lea    0x1(%rbx),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  (%rsp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
movapd (%rsp),%xmm7
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0xc0d(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%r15,%rbx,8)
add    $0x2,%rbx
cmp    %r13,%rbx
jne    13a0 <make_stf+0x250>
test   $0x1,%r12b
jne    14d3 <make_stf+0x383>
jmp    160d <make_stf+0x4bd>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x1c,%rdi
jae    1506 <make_stf+0x3b6>
xor    %edi,%edi
jmp    15b5 <make_stf+0x465>
xor    %ebx,%ebx
test   $0x1,%r12b
je     160d <make_stf+0x4bd>
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
mov    0x2b86(%rip),%rax
mulsd  (%rax),%xmm0
divsd  %xmm7,%xmm0
call   1050 <cos@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xb8a(%rip),%xmm0
movsd  %xmm0,(%r15,%rbx,8)
jmp    160d <make_stf+0x4bd>
xor    %ecx,%ecx
movsd  0xb75(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
divsd  %xmm7,%xmm1
movapd %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%r15,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    14a0 <make_stf+0x350>
jmp    160d <make_stf+0x4bd>
xor    %ebx,%ebx
test   $0x1,%r12b
je     160d <make_stf+0x4bd>
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
divsd  %xmm7,%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0xb11(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r15,%rbx,8)
jmp    160d <make_stf+0x4bd>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
movapd 0xafc(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd %xmm0,(%r15,%rdi,8)
movupd %xmm0,0x10(%r15,%rdi,8)
movupd %xmm0,0x20(%r15,%rdi,8)
movupd %xmm0,0x30(%r15,%rdi,8)
movupd %xmm0,0x40(%r15,%rdi,8)
movupd %xmm0,0x50(%r15,%rdi,8)
movupd %xmm0,0x60(%r15,%rdi,8)
movupd %xmm0,0x70(%r15,%rdi,8)
movupd %xmm0,0x80(%r15,%rdi,8)
movupd %xmm0,0x90(%r15,%rdi,8)
movupd %xmm0,0xa0(%r15,%rdi,8)
movupd %xmm0,0xb0(%r15,%rdi,8)
movupd %xmm0,0xc0(%r15,%rdi,8)
movupd %xmm0,0xd0(%r15,%rdi,8)
movupd %xmm0,0xe0(%r15,%rdi,8)
movupd %xmm0,0xf0(%r15,%rdi,8)
add    $0x20,%rdi
add    $0xfffffffffffffff8,%rsi
jne    1520 <make_stf+0x3d0>
test   %rdx,%rdx
je     15e4 <make_stf+0x494>
lea    (%r15,%rdi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
movapd 0xa40(%rip),%xmm0
movupd %xmm0,-0x10(%rsi,%rdi,1)
movupd %xmm0,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    15d0 <make_stf+0x480>
cmp    %rax,%rcx
je     160d <make_stf+0x4bd>
movabs $0x3ff0000000000000,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rdx,(%r15,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1600 <make_stf+0x4b0>
test   %r14d,%r14d
js     1779 <make_stf+0x629>
mov    %r14d,%eax
add    $0x1,%rax
mov    %eax,%ecx
and    $0x7,%ecx
cmp    $0x7,%r14d
jae    1630 <make_stf+0x4e0>
xorpd  %xmm0,%xmm0
xor    %edx,%edx
jmp    1680 <make_stf+0x530>
mov    %eax,%esi
and    $0xfffffff8,%esi
xorpd  %xmm0,%xmm0
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
addsd  (%r15,%rdx,8),%xmm0
addsd  0x8(%r15,%rdx,8),%xmm0
addsd  0x10(%r15,%rdx,8),%xmm0
addsd  0x18(%r15,%rdx,8),%xmm0
addsd  0x20(%r15,%rdx,8),%xmm0
addsd  0x28(%r15,%rdx,8),%xmm0
addsd  0x30(%r15,%rdx,8),%xmm0
addsd  0x38(%r15,%rdx,8),%xmm0
add    $0x8,%rdx
cmp    %rdx,%rsi
jne    1640 <make_stf+0x4f0>
test   %rcx,%rcx
je     169e <make_stf+0x54e>
lea    (%r15,%rdx,8),%rdx
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
addsd  (%rdx,%rsi,8),%xmm0
add    $0x1,%rsi
cmp    %rsi,%rcx
jne    1690 <make_stf+0x540>
test   %r14d,%r14d
js     1779 <make_stf+0x629>
movsd  (%r15),%xmm1
addsd  %xmm0,%xmm0
subsd  %xmm1,%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,(%r15)
je     1779 <make_stf+0x629>
lea    -0x1(%rax),%rcx
mov    $0x1,%edx
cmp    $0x2,%rcx
jb     1760 <make_stf+0x610>
mov    %rcx,%rdx
and    $0xfffffffffffffffe,%rdx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x2(%rdx),%rsi
mov    %rsi,%rbp
shr    %rbp
add    $0x1,%rbp
test   %rsi,%rsi
je     17a4 <make_stf+0x654>
mov    %rbp,%rsi
and    $0xfffffffffffffffe,%rsi
mov    $0x1,%edi
nopl   0x0(%rax,%rax,1)
movupd (%r15,%rdi,8),%xmm2
movupd 0x10(%r15,%rdi,8),%xmm3
divpd  %xmm1,%xmm2
movupd %xmm2,(%r15,%rdi,8)
divpd  %xmm1,%xmm3
movupd %xmm3,0x10(%r15,%rdi,8)
add    $0x4,%rdi
add    $0xfffffffffffffffe,%rsi
jne    1710 <make_stf+0x5c0>
test   $0x1,%bpl
je     1752 <make_stf+0x602>
movupd (%r15,%rdi,8),%xmm2
divpd  %xmm1,%xmm2
movupd %xmm2,(%r15,%rdi,8)
cmp    %rdx,%rcx
je     1779 <make_stf+0x629>
or     $0x1,%rcx
mov    %rcx,%rdx
xchg   %ax,%ax
movsd  (%r15,%rdx,8),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%r15,%rdx,8)
add    $0x1,%rdx
cmp    %rdx,%rax
jne    1760 <make_stf+0x610>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xorpd  %xmm1,%xmm1
movhpd 0x874(%rip),%xmm1
xor    %esi,%esi
test   $0x1,%dl
jne    135c <make_stf+0x20c>
jmp    1372 <make_stf+0x222>
mov    $0x1,%edi
test   $0x1,%bpl
jne    1742 <make_stf+0x5f2>
jmp    1752 <make_stf+0x602>
mov    0x2820(%rip),%rbx
mov    (%rbx),%edi
lea    0x8cf(%rip),%rsi
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x8e2(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1070 <exit@plt>

LLVM IR (-O0):
@M_PI = global double 0.000000e+00
@stderr = global i32 0
@.str = [33 x i8] c"ERROR: Invalid STF type (arg 4)\0A\00"
@.str.1 = [120 x i8] c" arg 4 must be one of these letters:\0A\09 g :gaussian \0A\09 q : parabolic \0A\09 l : triangle \0A\09 b : box car \0A\09 c : cosine\0A\00"
define void @make_stf(i32 %0, i8* %1, double* %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca double*
%7 = alloca i32
%8 = alloca i32
%9 = alloca double
store i32 %0, i32* %4
store i8* %1, i8** %5
store double* %2, double** %6
%10 = load i32, i32* %4
%11 = add nsw i32 %10, 1
store i32 %11, i32* %8
%12 = load i32, i32* %4
%13 = sitofp i32 %12 to double
%14 = fdiv double %13, 1.517430e+00
store double %14, double* %9
%15 = load i8*, i8** %5
%16 = getelementptr inbounds i8, i8* %15, i64 0
%17 = load i8, i8* %16
%18 = sext i8 %17 to i32
%19 = icmp eq i32 %18, 103
br i1 %19, label %20, label %41
20: ; preds = %3
store i32 0, i32* %7
br label %21
21: ; preds = %37, %20
%22 = load i32, i32* %7
%23 = load i32, i32* %4
%24 = icmp sle i32 %22, %23
br i1 %24, label %25, label %40
25: ; preds = %21
%26 = load i32, i32* %7
%27 = sitofp i32 %26 to double
%28 = load double, double* %9
%29 = fdiv double %27, %28
%30 = call i32 @pow(double %29, i32 2)
%31 = sub nsw i32 0, %30
%32 = call double @exp(i32 %31)
%33 = load double*, double** %6
%34 = load i32, i32* %7
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds double, double* %33, i64 %35
store double %32, double* %36
br label %37
37: ; preds = %25
%38 = load i32, i32* %7
%39 = add nsw i32 %38, 1
store i32 %39, i32* %7
br label %21
40: ; preds = %21
br label %155
41: ; preds = %3
%42 = load i8*, i8** %5
%43 = getelementptr inbounds i8, i8* %42, i64 0
%44 = load i8, i8* %43
%45 = sext i8 %44 to i32
%46 = icmp eq i32 %45, 113
br i1 %46, label %47, label %69
47: ; preds = %41
store i32 0, i32* %7
br label %48
48: ; preds = %65, %47
%49 = load i32, i32* %7
%50 = load i32, i32* %4
%51 = icmp sle i32 %49, %50
br i1 %51, label %52, label %68
52: ; preds = %48
%53 = load i32, i32* %7
%54 = sitofp i32 %53 to double
%55 = load i32, i32* %4
%56 = sitofp i32 %55 to double
%57 = fdiv double %54, %56
%58 = call i32 @pow(double %57, i32 2)
%59 = sitofp i32 %58 to double
%60 = fsub double 1.000000e+00, %59
%61 = load double*, double** %6
%62 = load i32, i32* %7
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds double, double* %61, i64 %63
store double %60, double* %64
br label %65
65: ; preds = %52
%66 = load i32, i32* %7
%67 = add nsw i32 %66, 1
store i32 %67, i32* %7
br label %48
68: ; preds = %48
br label %154
69: ; preds = %41
%70 = load i8*, i8** %5
%71 = getelementptr inbounds i8, i8* %70, i64 0
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %73, 108
br i1 %74, label %75, label %95
75: ; preds = %69
store i32 0, i32* %7
br label %76
76: ; preds = %91, %75
%77 = load i32, i32* %7
%78 = load i32, i32* %4
%79 = icmp sle i32 %77, %78
br i1 %79, label %80, label %94
80: ; preds = %76
%81 = load i32, i32* %7
%82 = sitofp i32 %81 to double
%83 = load i32, i32* %4
%84 = sitofp i32 %83 to double
%85 = fdiv double %82, %84
%86 = fsub double 1.000000e+00, %85
%87 = load double*, double** %6
%88 = load i32, i32* %7
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds double, double* %87, i64 %89
store double %86, double* %90
br label %91
91: ; preds = %80
%92 = load i32, i32* %7
%93 = add nsw i32 %92, 1
store i32 %93, i32* %7
br label %76
94: ; preds = %76
br label %153
95: ; preds = %69
%96 = load i8*, i8** %5
%97 = getelementptr inbounds i8, i8* %96, i64 0
%98 = load i8, i8* %97
%99 = sext i8 %98 to i32
%100 = icmp eq i32 %99, 98
br i1 %100, label %101, label %115
101: ; preds = %95
store i32 0, i32* %7
br label %102
102: ; preds = %111, %101
%103 = load i32, i32* %7
%104 = load i32, i32* %4
%105 = icmp sle i32 %103, %104
br i1 %105, label %106, label %114
106: ; preds = %102
%107 = load double*, double** %6
%108 = load i32, i32* %7
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds double, double* %107, i64 %109
store double 1.000000e+00, double* %110
br label %111
111: ; preds = %106
%112 = load i32, i32* %7
%113 = add nsw i32 %112, 1
store i32 %113, i32* %7
br label %102
114: ; preds = %102
br label %152
115: ; preds = %95
%116 = load i8*, i8** %5
%117 = getelementptr inbounds i8, i8* %116, i64 0
%118 = load i8, i8* %117
%119 = sext i8 %118 to i32
%120 = icmp eq i32 %119, 99
br i1 %120, label %121, label %145
121: ; preds = %115
store i32 0, i32* %7
br label %122
122: ; preds = %141, %121
%123 = load i32, i32* %7
%124 = load i32, i32* %4
%125 = icmp sle i32 %123, %124
br i1 %125, label %126, label %144
126: ; preds = %122
%127 = load double, double* @M_PI
%128 = load i32, i32* %7
%129 = sitofp i32 %128 to double
%130 = fmul double %127, %129
%131 = load i32, i32* %4
%132 = sitofp i32 %131 to double
%133 = fdiv double %130, %132
%134 = call i32 @cos(double %133)
%135 = sitofp i32 %134 to double
%136 = fadd double 1.000000e+00, %135
%137 = load double*, double** %6
%138 = load i32, i32* %7
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds double, double* %137, i64 %139
store double %136, double* %140
br label %141
141: ; preds = %126
%142 = load i32, i32* %7
%143 = add nsw i32 %142, 1
store i32 %143, i32* %7
br label %122
144: ; preds = %122
br label %151
145: ; preds = %115
%146 = load i32, i32* @stderr
%147 = call i32 @fprintf(i32 %146, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%148 = load i32, i32* @stderr
%149 = call i32 @fprintf(i32 %148, i8* getelementptr inbounds ([120 x i8], [120 x i8]* @.str.1, i64 0, i64 0))
%150 = call i32 @exit(i32 1)
unreachable
151: ; preds = %144
br label %152
152: ; preds = %151, %114
br label %153
153: ; preds = %152, %94
br label %154
154: ; preds = %153, %68
br label %155
155: ; preds = %154, %40
store double 0.000000e+00, double* %9
store i32 0, i32* %7
br label %156
156: ; preds = %168, %155
%157 = load i32, i32* %7
%158 = load i32, i32* %8
%159 = icmp slt i32 %157, %158
br i1 %159, label %160, label %171
160: ; preds = %156
%161 = load double, double* %9
%162 = load double*, double** %6
%163 = load i32, i32* %7
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds double, double* %162, i64 %164
%166 = load double, double* %165
%167 = fadd double %161, %166
store double %167, double* %9
br label %168
168: ; preds = %160
%169 = load i32, i32* %7
%170 = add nsw i32 %169, 1
store i32 %170, i32* %7
br label %156
171: ; preds = %156
%172 = load double, double* %9
%173 = load double*, double** %6
%174 = getelementptr inbounds double, double* %173, i64 0
%175 = load double, double* %174
%176 = fneg double %175
%177 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %172, double %176)
store double %177, double* %9
store i32 0, i32* %7
br label %178
178: ; preds = %194, %171
%179 = load i32, i32* %7
%180 = load i32, i32* %4
%181 = icmp sle i32 %179, %180
br i1 %181, label %182, label %197
182: ; preds = %178
%183 = load double*, double** %6
%184 = load i32, i32* %7
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds double, double* %183, i64 %185
%187 = load double, double* %186
%188 = load double, double* %9
%189 = fdiv double %187, %188
%190 = load double*, double** %6
%191 = load i32, i32* %7
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds double, double* %190, i64 %192
store double %189, double* %193
br label %194
194: ; preds = %182
%195 = load i32, i32* %7
%196 = add nsw i32 %195, 1
store i32 %196, i32* %7
br label %178
197: ; preds = %178
ret void
}

LLVM IR (-O2):
@M_PI = global double 0.000000e+00
@stderr = global i32 0
@.str = [33 x i8] c"ERROR: Invalid STF type (arg 4)\0A\00"
@.str.1 = [120 x i8] c" arg 4 must be one of these letters:\0A\09 g :gaussian \0A\09 q : parabolic \0A\09 l : triangle \0A\09 b : box car \0A\09 c : cosine\0A\00"
define void @make_stf(i32 %0, i8* nocapture %1, double* nocapture %2) {
%4 = sitofp i32 %0 to double
%5 = fdiv double %4, 1.517430e+00
%6 = load i8, i8* %1
switch i8 %6, label %230 [
i8 103, label %154
i8 113, label %145
i8 108, label %93
i8 98, label %16
i8 99, label %7
]
7: ; preds = %3
%8 = icmp slt i32 %0, 0
br i1 %8, label %389, label %9
9: ; preds = %7
%10 = add nuw i32 %0, 1
%11 = zext i32 %10 to i64
%12 = and i64 %11, 1
%13 = icmp eq i32 %0, 0
br i1 %13, label %247, label %14
14: ; preds = %9
%15 = and i64 %11, 4294967294
br label %205
16: ; preds = %3
%17 = icmp slt i32 %0, 0
br i1 %17, label %389, label %18
18: ; preds = %16
%19 = add nuw i32 %0, 1
%20 = zext i32 %19 to i64
%21 = icmp ult i32 %0, 3
br i1 %21, label %91, label %22
22: ; preds = %18
%23 = and i64 %20, 4294967292
%24 = add nsw i64 %23, -4
%25 = lshr exact i64 %24, 2
%26 = add nuw nsw i64 %25, 1
%27 = and i64 %26, 7
%28 = icmp ult i64 %24, 28
br i1 %28, label %76, label %29
29: ; preds = %22
%30 = and i64 %26, 9223372036854775800
br label %31
31: ; preds = %31, %29
%32 = phi i64 [ 0, %29 ], [ %73, %31 ]
%33 = phi i64 [ 0, %29 ], [ %74, %31 ]
%34 = getelementptr inbounds double, double* %2, i64 %32
%35 = bitcast double* %34 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %35
%36 = getelementptr inbounds double, double* %34, i64 2
%37 = bitcast double* %36 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %37
%38 = or i64 %32, 4
%39 = getelementptr inbounds double, double* %2, i64 %38
%40 = bitcast double* %39 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %40
%41 = getelementptr inbounds double, double* %39, i64 2
%42 = bitcast double* %41 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %42
%43 = or i64 %32, 8
%44 = getelementptr inbounds double, double* %2, i64 %43
%45 = bitcast double* %44 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %45
%46 = getelementptr inbounds double, double* %44, i64 2
%47 = bitcast double* %46 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %47
%48 = or i64 %32, 12
%49 = getelementptr inbounds double, double* %2, i64 %48
%50 = bitcast double* %49 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %50
%51 = getelementptr inbounds double, double* %49, i64 2
%52 = bitcast double* %51 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %52
%53 = or i64 %32, 16
%54 = getelementptr inbounds double, double* %2, i64 %53
%55 = bitcast double* %54 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %55
%56 = getelementptr inbounds double, double* %54, i64 2
%57 = bitcast double* %56 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %57
%58 = or i64 %32, 20
%59 = getelementptr inbounds double, double* %2, i64 %58
%60 = bitcast double* %59 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %60
%61 = getelementptr inbounds double, double* %59, i64 2
%62 = bitcast double* %61 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %62
%63 = or i64 %32, 24
%64 = getelementptr inbounds double, double* %2, i64 %63
%65 = bitcast double* %64 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %65
%66 = getelementptr inbounds double, double* %64, i64 2
%67 = bitcast double* %66 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %67
%68 = or i64 %32, 28
%69 = getelementptr inbounds double, double* %2, i64 %68
%70 = bitcast double* %69 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %70
%71 = getelementptr inbounds double, double* %69, i64 2
%72 = bitcast double* %71 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %72
%73 = add nuw i64 %32, 32
%74 = add i64 %33, 8
%75 = icmp eq i64 %74, %30
br i1 %75, label %76, label %31
76: ; preds = %31, %22
%77 = phi i64 [ 0, %22 ], [ %73, %31 ]
%78 = icmp eq i64 %27, 0
br i1 %78, label %89, label %79
79: ; preds = %76, %79
%80 = phi i64 [ %86, %79 ], [ %77, %76 ]
%81 = phi i64 [ %87, %79 ], [ 0, %76 ]
%82 = getelementptr inbounds double, double* %2, i64 %80
%83 = bitcast double* %82 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %83
%84 = getelementptr inbounds double, double* %82, i64 2
%85 = bitcast double* %84 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %85
%86 = add nuw i64 %80, 4
%87 = add i64 %81, 1
%88 = icmp eq i64 %87, %27
br i1 %88, label %89, label %79
89: ; preds = %79, %76
%90 = icmp eq i64 %23, %20
br i1 %90, label %260, label %91
91: ; preds = %18, %89
%92 = phi i64 [ 0, %18 ], [ %23, %89 ]
br label %200
93: ; preds = %3
%94 = icmp slt i32 %0, 0
br i1 %94, label %389, label %95
95: ; preds = %93
%96 = add nuw i32 %0, 1
%97 = zext i32 %96 to i64
%98 = icmp eq i32 %0, 0
br i1 %98, label %143, label %99
99: ; preds = %95
%100 = and i64 %97, 4294967294
%101 = insertelement <2 x double> poison, double %4, i64 0
%102 = shufflevector <2 x double> %101, <2 x double> poison, <2 x i32> zeroinitializer
%103 = add nsw i64 %100, -2
%104 = lshr exact i64 %103, 1
%105 = add nuw i64 %104, 1
%106 = and i64 %105, 1
%107 = icmp eq i64 %103, 0
br i1 %107, label %132, label %108
108: ; preds = %99
%109 = and i64 %105, -2
br label %110
110: ; preds = %110, %108
%111 = phi i64 [ 0, %108 ], [ %126, %110 ]
%112 = phi <2 x i32> [ <i32 0, i32 1>, %108 ], [ %127, %110 ]
%113 = phi i64 [ 0, %108 ], [ %128, %110 ]
%114 = sitofp <2 x i32> %112 to <2 x double>
%115 = fdiv <2 x double> %114, %102
%116 = fsub <2 x double> <double 1.000000e+00, double 1.000000e+00>, %115
%117 = getelementptr inbounds double, double* %2, i64 %111
%118 = bitcast double* %117 to <2 x double>*
store <2 x double> %116, <2 x double>* %118
%119 = or i64 %111, 2
%120 = add <2 x i32> %112, <i32 2, i32 2>
%121 = sitofp <2 x i32> %120 to <2 x double>
%122 = fdiv <2 x double> %121, %102
%123 = fsub <2 x double> <double 1.000000e+00, double 1.000000e+00>, %122
%124 = getelementptr inbounds double, double* %2, i64 %119
%125 = bitcast double* %124 to <2 x double>*
store <2 x double> %123, <2 x double>* %125
%126 = add nuw i64 %111, 4
%127 = add <2 x i32> %112, <i32 4, i32 4>
%128 = add nuw i64 %113, 2
%129 = icmp eq i64 %128, %109
br i1 %129, label %130, label %110
130: ; preds = %110
%131 = sitofp <2 x i32> %127 to <2 x double>
br label %132
132: ; preds = %130, %99
%133 = phi i64 [ 0, %99 ], [ %126, %130 ]
%134 = phi <2 x double> [ <double 0.000000e+00, double 1.000000e+00>, %99 ], [ %131, %130 ]
%135 = icmp eq i64 %106, 0
br i1 %135, label %141, label %136
136: ; preds = %132
%137 = fdiv <2 x double> %134, %102
%138 = fsub <2 x double> <double 1.000000e+00, double 1.000000e+00>, %137
%139 = getelementptr inbounds double, double* %2, i64 %133
%140 = bitcast double* %139 to <2 x double>*
store <2 x double> %138, <2 x double>* %140
br label %141
141: ; preds = %132, %136
%142 = icmp eq i64 %100, %97
br i1 %142, label %260, label %143
143: ; preds = %95, %141
%144 = phi i64 [ 0, %95 ], [ %100, %141 ]
br label %191
145: ; preds = %3
%146 = icmp slt i32 %0, 0
br i1 %146, label %389, label %147
147: ; preds = %145
%148 = add nuw i32 %0, 1
%149 = zext i32 %148 to i64
%150 = and i64 %149, 1
%151 = icmp eq i32 %0, 0
br i1 %151, label %236, label %152
152: ; preds = %147
%153 = and i64 %149, 4294967294
br label %170
154: ; preds = %3
%155 = icmp slt i32 %0, 0
br i1 %155, label %389, label %156
156: ; preds = %154
%157 = add nuw i32 %0, 1
%158 = zext i32 %157 to i64
br label %159
159: ; preds = %156, %159
%160 = phi i64 [ 0, %156 ], [ %168, %159 ]
%161 = trunc i64 %160 to i32
%162 = sitofp i32 %161 to double
%163 = fdiv double %162, %5
%164 = tail call i32 @pow(double %163, i32 2)
%165 = sub nsw i32 0, %164
%166 = tail call double @exp(i32 %165)
%167 = getelementptr inbounds double, double* %2, i64 %160
store double %166, double* %167
%168 = add nuw nsw i64 %160, 1
%169 = icmp eq i64 %168, %158
br i1 %169, label %260, label %159
170: ; preds = %170, %152
%171 = phi i64 [ 0, %152 ], [ %188, %170 ]
%172 = phi i64 [ 0, %152 ], [ %189, %170 ]
%173 = trunc i64 %171 to i32
%174 = sitofp i32 %173 to double
%175 = fdiv double %174, %4
%176 = tail call i32 @pow(double %175, i32 2)
%177 = sitofp i32 %176 to double
%178 = fsub double 1.000000e+00, %177
%179 = getelementptr inbounds double, double* %2, i64 %171
store double %178, double* %179
%180 = or i64 %171, 1
%181 = trunc i64 %180 to i32
%182 = sitofp i32 %181 to double
%183 = fdiv double %182, %4
%184 = tail call i32 @pow(double %183, i32 2)
%185 = sitofp i32 %184 to double
%186 = fsub double 1.000000e+00, %185
%187 = getelementptr inbounds double, double* %2, i64 %180
store double %186, double* %187
%188 = add nuw nsw i64 %171, 2
%189 = add i64 %172, 2
%190 = icmp eq i64 %189, %153
br i1 %190, label %236, label %170
191: ; preds = %143, %191
%192 = phi i64 [ %198, %191 ], [ %144, %143 ]
%193 = trunc i64 %192 to i32
%194 = sitofp i32 %193 to double
%195 = fdiv double %194, %4
%196 = fsub double 1.000000e+00, %195
%197 = getelementptr inbounds double, double* %2, i64 %192
store double %196, double* %197
%198 = add nuw nsw i64 %192, 1
%199 = icmp eq i64 %198, %97
br i1 %199, label %260, label %191
200: ; preds = %91, %200
%201 = phi i64 [ %203, %200 ], [ %92, %91 ]
%202 = getelementptr inbounds double, double* %2, i64 %201
store double 1.000000e+00, double* %202
%203 = add nuw nsw i64 %201, 1
%204 = icmp eq i64 %203, %20
br i1 %204, label %260, label %200
205: ; preds = %205, %14
%206 = phi i64 [ 0, %14 ], [ %227, %205 ]
%207 = phi i64 [ 0, %14 ], [ %228, %205 ]
%208 = load double, double* @M_PI
%209 = trunc i64 %206 to i32
%210 = sitofp i32 %209 to double
%211 = fmul double %208, %210
%212 = fdiv double %211, %4
%213 = tail call i32 @cos(double %212)
%214 = sitofp i32 %213 to double
%215 = fadd double %214, 1.000000e+00
%216 = getelementptr inbounds double, double* %2, i64 %206
store double %215, double* %216
%217 = or i64 %206, 1
%218 = load double, double* @M_PI
%219 = trunc i64 %217 to i32
%220 = sitofp i32 %219 to double
%221 = fmul double %218, %220
%222 = fdiv double %221, %4
%223 = tail call i32 @cos(double %222)
%224 = sitofp i32 %223 to double
%225 = fadd double %224, 1.000000e+00
%226 = getelementptr inbounds double, double* %2, i64 %217
store double %225, double* %226
%227 = add nuw nsw i64 %206, 2
%228 = add i64 %207, 2
%229 = icmp eq i64 %228, %15
br i1 %229, label %247, label %205
230: ; preds = %3
%231 = load i32, i32* @stderr
%232 = tail call i32 @fprintf(i32 %231, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%233 = load i32, i32* @stderr
%234 = tail call i32 @fprintf(i32 %233, i8* getelementptr inbounds ([120 x i8], [120 x i8]* @.str.1, i64 0, i64 0))
%235 = tail call i32 @exit(i32 1)
unreachable
236: ; preds = %170, %147
%237 = phi i64 [ 0, %147 ], [ %188, %170 ]
%238 = icmp eq i64 %150, 0
br i1 %238, label %260, label %239
239: ; preds = %236
%240 = trunc i64 %237 to i32
%241 = sitofp i32 %240 to double
%242 = fdiv double %241, %4
%243 = tail call i32 @pow(double %242, i32 2)
%244 = sitofp i32 %243 to double
%245 = fsub double 1.000000e+00, %244
%246 = getelementptr inbounds double, double* %2, i64 %237
store double %245, double* %246
br label %260
247: ; preds = %205, %9
%248 = phi i64 [ 0, %9 ], [ %227, %205 ]
%249 = icmp eq i64 %12, 0
br i1 %249, label %260, label %250
250: ; preds = %247
%251 = load double, double* @M_PI
%252 = trunc i64 %248 to i32
%253 = sitofp i32 %252 to double
%254 = fmul double %251, %253
%255 = fdiv double %254, %4
%256 = tail call i32 @cos(double %255)
%257 = sitofp i32 %256 to double
%258 = fadd double %257, 1.000000e+00
%259 = getelementptr inbounds double, double* %2, i64 %248
store double %258, double* %259
br label %260
260: ; preds = %250, %247, %200, %191, %239, %236, %159, %89, %141
%261 = icmp slt i32 %0, 0
br i1 %261, label %389, label %262
262: ; preds = %260
%263 = add nuw i32 %0, 1
%264 = zext i32 %263 to i64
%265 = add nsw i64 %264, -1
%266 = and i64 %264, 7
%267 = icmp ult i64 %265, 7
br i1 %267, label %308, label %268
268: ; preds = %262
%269 = and i64 %264, 4294967288
br label %270
270: ; preds = %270, %268
%271 = phi i64 [ 0, %268 ], [ %305, %270 ]
%272 = phi double [ 0.000000e+00, %268 ], [ %304, %270 ]
%273 = phi i64 [ 0, %268 ], [ %306, %270 ]
%274 = getelementptr inbounds double, double* %2, i64 %271
%275 = load double, double* %274
%276 = fadd double %272, %275
%277 = or i64 %271, 1
%278 = getelementptr inbounds double, double* %2, i64 %277
%279 = load double, double* %278
%280 = fadd double %276, %279
%281 = or i64 %271, 2
%282 = getelementptr inbounds double, double* %2, i64 %281
%283 = load double, double* %282
%284 = fadd double %280, %283
%285 = or i64 %271, 3
%286 = getelementptr inbounds double, double* %2, i64 %285
%287 = load double, double* %286
%288 = fadd double %284, %287
%289 = or i64 %271, 4
%290 = getelementptr inbounds double, double* %2, i64 %289
%291 = load double, double* %290
%292 = fadd double %288, %291
%293 = or i64 %271, 5
%294 = getelementptr inbounds double, double* %2, i64 %293
%295 = load double, double* %294
%296 = fadd double %292, %295
%297 = or i64 %271, 6
%298 = getelementptr inbounds double, double* %2, i64 %297
%299 = load double, double* %298
%300 = fadd double %296, %299
%301 = or i64 %271, 7
%302 = getelementptr inbounds double, double* %2, i64 %301
%303 = load double, double* %302
%304 = fadd double %300, %303
%305 = add nuw nsw i64 %271, 8
%306 = add i64 %273, 8
%307 = icmp eq i64 %306, %269
br i1 %307, label %308, label %270
308: ; preds = %270, %262
%309 = phi double [ undef, %262 ], [ %304, %270 ]
%310 = phi i64 [ 0, %262 ], [ %305, %270 ]
%311 = phi double [ 0.000000e+00, %262 ], [ %304, %270 ]
%312 = icmp eq i64 %266, 0
br i1 %312, label %323, label %313
313: ; preds = %308, %313
%314 = phi i64 [ %320, %313 ], [ %310, %308 ]
%315 = phi double [ %319, %313 ], [ %311, %308 ]
%316 = phi i64 [ %321, %313 ], [ 0, %308 ]
%317 = getelementptr inbounds double, double* %2, i64 %314
%318 = load double, double* %317
%319 = fadd double %315, %318
%320 = add nuw nsw i64 %314, 1
%321 = add i64 %316, 1
%322 = icmp eq i64 %321, %266
br i1 %322, label %323, label %313
323: ; preds = %313, %308
%324 = phi double [ %309, %308 ], [ %319, %313 ]
%325 = load double, double* %2
%326 = fneg double %325
%327 = tail call double @llvm.fmuladd.f64(double %324, double 2.000000e+00, double %326)
br i1 %261, label %389, label %328
328: ; preds = %323
%329 = add nuw i32 %0, 1
%330 = zext i32 %329 to i64
%331 = fdiv double %325, %327
store double %331, double* %2
%332 = icmp eq i32 %0, 0
br i1 %332, label %389, label %333
333: ; preds = %328
%334 = add nsw i64 %264, -1
%335 = icmp ult i64 %334, 2
br i1 %335, label %379, label %336
336: ; preds = %333
%337 = and i64 %334, -2
%338 = or i64 %334, 1
%339 = insertelement <2 x double> poison, double %327, i64 0
%340 = shufflevector <2 x double> %339, <2 x double> poison, <2 x i32> zeroinitializer
%341 = add nsw i64 %337, -2
%342 = lshr exact i64 %341, 1
%343 = add nuw i64 %342, 1
%344 = and i64 %343, 1
%345 = icmp eq i64 %341, 0
br i1 %345, label %368, label %346
346: ; preds = %336
%347 = and i64 %343, -2
br label %348
348: ; preds = %348, %346
%349 = phi i64 [ 0, %346 ], [ %363, %348 ]
%350 = phi i64 [ 0, %346 ], [ %364, %348 ]
%351 = or i64 %349, 1
%352 = getelementptr inbounds double, double* %2, i64 %351
%353 = bitcast double* %352 to <2 x double>*
%354 = load <2 x double>, <2 x double>* %353
%355 = fdiv <2 x double> %354, %340
%356 = bitcast double* %352 to <2 x double>*
store <2 x double> %355, <2 x double>* %356
%357 = or i64 %349, 3
%358 = getelementptr inbounds double, double* %2, i64 %357
%359 = bitcast double* %358 to <2 x double>*
%360 = load <2 x double>, <2 x double>* %359
%361 = fdiv <2 x double> %360, %340
%362 = bitcast double* %358 to <2 x double>*
store <2 x double> %361, <2 x double>* %362
%363 = add nuw i64 %349, 4
%364 = add nuw i64 %350, 2
%365 = icmp eq i64 %364, %347
br i1 %365, label %366, label %348
366: ; preds = %348
%367 = or i64 %363, 1
br label %368
368: ; preds = %366, %336
%369 = phi i64 [ 1, %336 ], [ %367, %366 ]
%370 = icmp eq i64 %344, 0
br i1 %370, label %377, label %371
371: ; preds = %368
%372 = getelementptr inbounds double, double* %2, i64 %369
%373 = bitcast double* %372 to <2 x double>*
%374 = load <2 x double>, <2 x double>* %373
%375 = fdiv <2 x double> %374, %340
%376 = bitcast double* %372 to <2 x double>*
store <2 x double> %375, <2 x double>* %376
br label %377
377: ; preds = %368, %371
%378 = icmp eq i64 %334, %337
br i1 %378, label %389, label %379
379: ; preds = %333, %377
%380 = phi i64 [ 1, %333 ], [ %338, %377 ]
br label %381
381: ; preds = %379, %381
%382 = phi i64 [ %387, %381 ], [ %380, %379 ]
%383 = getelementptr inbounds double, double* %2, i64 %382
%384 = load double, double* %383
%385 = getelementptr inbounds double, double* %2, i64 %382
%386 = fdiv double %384, %327
store double %386, double* %385
%387 = add nuw nsw i64 %382, 1
%388 = icmp eq i64 %387, %330
br i1 %388, label %389, label %381
389: ; preds = %381, %328, %377, %154, %145, %93, %16, %7, %260, %323
ret void
}