#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 /*<<< orphan*/ blackman(float *, int);
int ceil(int);
int sin(double);
float setPFIR(int *pfircoeffs, float freq_in, float Fpass, float Fstop,
              int matched) {
  int pi = 3.14159265359;
  int length = 63;
  float window[63];
  float PFIRgain, gaintemp;
  double wp, ws, wc;
  int n;
  blackman(window, length);
  wp = pi * (float)Fpass / (float)freq_in;
  ws = pi * (float)Fstop / (float)freq_in;
  wc = (wp + ws) / 2;
  PFIRgain = 0;
  if (matched) {
    wc = freq_in / ((Fpass + Fstop) / 2) / 2;
    for (n = 0; n < 31; n++) {
      if (n > ceil(31 - wc)) {
        pfircoeffs[n] = 32767;
      } else {
        pfircoeffs[n] = 0;
      }
      PFIRgain = PFIRgain + pfircoeffs[n];
    }
    pfircoeffs[31] = 32767;
    PFIRgain = 2 * PFIRgain + pfircoeffs[31];
    PFIRgain = PFIRgain / 65536;
  } else {
    for (n = 0; n < 31; n++) {
      pfircoeffs[n] =
          (int)(32767 * window[n] * (pi / wc) * sin(wc * ((float)n - 31)) /
                    (pi * ((float)n - 31)) +
                .49999);
      PFIRgain = PFIRgain + pfircoeffs[n];
    }
    pfircoeffs[31] = 32767;
    PFIRgain = 2 * PFIRgain + pfircoeffs[31];
    PFIRgain = PFIRgain / 65536;
  }
  if (PFIRgain > 1) {
    gaintemp = PFIRgain;
    PFIRgain = 0;
    for (n = 0; n < 31; n++) {
      pfircoeffs[n] = (int)((1 / gaintemp) * (float)pfircoeffs[n] + 0.499999);
      PFIRgain = PFIRgain + pfircoeffs[n];
    }
    pfircoeffs[31] = (int)((1 / gaintemp) * (float)pfircoeffs[31] + 0.49999);
    PFIRgain = 2 * PFIRgain + pfircoeffs[31];
    PFIRgain = PFIRgain / 65536;
  }
  return PFIRgain;
}


x86 assembly (clang, -O0):
<setPFIR>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
mov    %rdi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
movss  %xmm2,-0x14(%rbp)
mov    %esi,-0x18(%rbp)
movl   $0x3,-0x1c(%rbp)
movl   $0x3f,-0x20(%rbp)
lea    -0x120(%rbp),%rdi
mov    -0x20(%rbp),%esi
call   1040 <blackman@plt>
cvtsi2ssl -0x1c(%rbp),%xmm0
mulss  -0x10(%rbp),%xmm0
divss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
cvtsi2ssl -0x1c(%rbp),%xmm0
mulss  -0x14(%rbp),%xmm0
divss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
addsd  -0x138(%rbp),%xmm0
ff
movsd  0xe44(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
xorps  %xmm0,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
cmpl   $0x0,-0x18(%rbp)
je     130e <setPFIR+0x1de>
movss  -0xc(%rbp),%xmm0
movss  -0x10(%rbp),%xmm1
addss  -0x14(%rbp),%xmm1
movss  0xe38(%rip),%xmm2
divss  %xmm2,%xmm1
divss  %xmm1,%xmm0
movss  0xe28(%rip),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movl   $0x0,-0x144(%rbp)
cmpl   $0x1f,-0x144(%rbp)
jge    12c1 <setPFIR+0x191>
mov    -0x144(%rbp),%eax
mov    %eax,-0x148(%rbp)
movsd  0xdd9(%rip),%xmm0
subsd  -0x140(%rbp),%xmm0
ff
cvttsd2si %xmm0,%edi
call   1030 <ceil@plt>
mov    %eax,%ecx
mov    -0x148(%rbp),%eax
cmp    %ecx,%eax
jle    1277 <setPFIR+0x147>
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
movl   $0x7fff,(%rax,%rcx,4)
jmp    1289 <setPFIR+0x159>
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
movss  -0x124(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
mov    -0x144(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x144(%rbp)
jmp    121e <setPFIR+0xee>
mov    -0x8(%rbp),%rax
movl   $0x7fff,0x7c(%rax)
movss  -0x124(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
cvtsi2ssl 0x7c(%rax),%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
movss  -0x124(%rbp),%xmm0
ff
movss  0xd23(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
jmp    1456 <setPFIR+0x326>
movl   $0x0,-0x144(%rbp)
cmpl   $0x1f,-0x144(%rbp)
jge    140e <setPFIR+0x2de>
movslq -0x144(%rbp),%rax
movss  0xcf4(%rip),%xmm0
mulss  -0x120(%rbp,%rax,4),%xmm0
ff ff
cvtss2sd %xmm0,%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm1
divsd  -0x140(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
cvtsi2ssl -0x144(%rbp),%xmm1
ff
movss  0xcb2(%rip),%xmm2
subss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  -0x150(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
cvtsi2ssl -0x144(%rbp),%xmm2
ff
movss  0xc7c(%rip),%xmm3
subss  %xmm3,%xmm2
mulss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  0xc48(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edx
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
movss  -0x124(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
mov    -0x144(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x144(%rbp)
jmp    1318 <setPFIR+0x1e8>
mov    -0x8(%rbp),%rax
movl   $0x7fff,0x7c(%rax)
movss  -0x124(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
cvtsi2ssl 0x7c(%rax),%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
movss  -0x124(%rbp),%xmm0
ff
movss  0xbd6(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
movss  -0x124(%rbp),%xmm0
ff
movss  0xbca(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1594 <setPFIR+0x464>
movss  -0x124(%rbp),%xmm0
ff
movss  %xmm0,-0x128(%rbp)
ff
xorps  %xmm0,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
movl   $0x0,-0x144(%rbp)
cmpl   $0x1f,-0x144(%rbp)
jge    151f <setPFIR+0x3ef>
movss  0xb87(%rip),%xmm0
divss  -0x128(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb3f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edx
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
movss  -0x124(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x144(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
mov    -0x144(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x144(%rbp)
jmp    1494 <setPFIR+0x364>
movss  0xb09(%rip),%xmm0
divss  -0x128(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
cvtsi2ssl 0x7c(%rax),%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xac0(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x7c(%rax)
movss  -0x124(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
cvtsi2ssl 0x7c(%rax),%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
movss  -0x124(%rbp),%xmm0
ff
movss  0xa98(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x124(%rbp)
ff
movss  -0x124(%rbp),%xmm0
ff
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<setPFIR>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x148,%rsp
mov    %esi,%ebp
movss  %xmm2,0x28(%rsp)
movss  %xmm1,0xc(%rsp)
movss  %xmm0,0x10(%rsp)
mov    %rdi,%r14
lea    0x40(%rsp),%rdi
mov    $0x3f,%esi
call   1040 <blackman@plt>
test   %ebp,%ebp
je     123c <setPFIR+0x10c>
movss  0xc(%rsp),%xmm2
addss  0x28(%rsp),%xmm2
movss  0xe85(%rip),%xmm0
mulss  %xmm0,%xmm2
movss  0x10(%rsp),%xmm1
divss  %xmm2,%xmm1
mulss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
movsd  0xe80(%rip),%xmm1
subsd  %xmm0,%xmm1
cvttsd2si %xmm1,%r15d
xorps  %xmm0,%xmm0
movaps %xmm0,0x10(%rsp)
xor    %ebp,%ebp
jmp    11e1 <setPFIR+0xb1>
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mov    %eax,0x4(%r14,%rbp,4)
movaps 0x10(%rsp),%xmm1
addss  %xmm0,%xmm1
movaps %xmm1,0x10(%rsp)
add    $0x1,%rbx
mov    %rbx,%rbp
mov    %r15d,%edi
call   1030 <ceil@plt>
movslq %eax,%rcx
mov    $0x7fff,%eax
cmp    %rcx,%rbp
jg     11f8 <setPFIR+0xc8>
xor    %eax,%eax
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
mov    %eax,(%r14,%rbp,4)
movaps 0x10(%rsp),%xmm0
addss  %xmm1,%xmm0
lea    0x1(%rbp),%rbx
cmp    $0x1f,%rbx
je     133c <setPFIR+0x20c>
movaps %xmm0,0x10(%rsp)
mov    %r15d,%edi
call   1030 <ceil@plt>
movslq %eax,%rcx
lea    -0x1(%rbx),%rdx
xor    %eax,%eax
cmp    %rcx,%rdx
jl     11c0 <setPFIR+0x90>
mov    $0x7fff,%eax
jmp    11c0 <setPFIR+0x90>
movss  0xdbc(%rip),%xmm1
movss  0xc(%rsp),%xmm0
mulss  %xmm1,%xmm0
movss  0x10(%rsp),%xmm2
divss  %xmm2,%xmm0
cvtss2sd %xmm0,%xmm0
movss  0x28(%rsp),%xmm3
mulss  %xmm1,%xmm3
divss  %xmm2,%xmm3
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
addsd  %xmm0,%xmm1
mulsd  0xd9b(%rip),%xmm1
movsd  0xda3(%rip),%xmm0
movsd  %xmm1,0x38(%rsp)
divsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rsp)
xorpd  %xmm0,%xmm0
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
movapd %xmm0,0x10(%rsp)
movss  0x40(%rsp,%rbp,4),%xmm0
mulss  0xd54(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
mulsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
addss  0xd39(%rip),%xmm1
movss  %xmm1,0xc(%rsp)
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
mulsd  0x38(%rsp),%xmm0
call   1050 <sin@plt>
movaps 0x10(%rsp),%xmm0
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  0x28(%rsp),%xmm2
movss  0xc(%rsp),%xmm1
mulss  0xcf5(%rip),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm2
addsd  0xd15(%rip),%xmm2
cvttsd2si %xmm2,%eax
cvttpd2dq %xmm2,%xmm1
mov    %eax,(%r14,%rbp,4)
cvtdq2ps %xmm1,%xmm1
addss  %xmm1,%xmm0
add    $0x1,%rbp
cmp    $0x1f,%rbp
jne    12a0 <setPFIR+0x170>
addss  %xmm0,%xmm0
addss  0xcc0(%rip),%xmm0
mulss  0xcc0(%rip),%xmm0
movl   $0x7fff,0x7c(%r14)
ucomiss 0xcb5(%rip),%xmm0
jbe    142c <setPFIR+0x2fc>
movss  0xca7(%rip),%xmm4
divss  %xmm0,%xmm4
xorps  %xmm2,%xmm2
mov    $0x1,%eax
movsd  0xcb7(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm3,%xmm3
cvtsi2ssl -0x4(%r14,%rax,4),%xmm3
mulss  %xmm4,%xmm3
cvtss2sd %xmm3,%xmm3
addsd  %xmm1,%xmm3
cvttsd2si %xmm3,%ecx
cvttpd2dq %xmm3,%xmm3
mov    %ecx,-0x4(%r14,%rax,4)
cvtdq2ps %xmm3,%xmm0
addss  %xmm2,%xmm0
cmp    $0x1f,%rax
je     13f1 <setPFIR+0x2c1>
xorps  %xmm2,%xmm2
cvtsi2ssl (%r14,%rax,4),%xmm2
mulss  %xmm4,%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
cvttsd2si %xmm2,%ecx
cvttpd2dq %xmm2,%xmm2
mov    %ecx,(%r14,%rax,4)
cvtdq2ps %xmm2,%xmm2
addss  %xmm2,%xmm0
add    $0x2,%rax
movaps %xmm0,%xmm2
jmp    1390 <setPFIR+0x260>
xorps  %xmm1,%xmm1
cvtsi2ssl 0x7c(%r14),%xmm1
mulss  %xmm1,%xmm4
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  0xc23(%rip),%xmm1
cvttsd2si %xmm1,%eax
mov    %eax,0x7c(%r14)
cvttpd2dq %xmm1,%xmm1
cvtdq2ps %xmm1,%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
mulss  0xbe4(%rip),%xmm0
add    $0x148,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define float @setPFIR(i32* %0, float %1, float %2, float %3, i32 %4) {
%6 = alloca i32*
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca [63 x float]
%14 = alloca float
%15 = alloca float
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca i32
store i32* %0, i32** %6
store float %1, float* %7
store float %2, float* %8
store float %3, float* %9
store i32 %4, i32* %10
store i32 3, i32* %11
store i32 63, i32* %12
%20 = getelementptr inbounds [63 x float], [63 x float]* %13, i64 0, i64 0
%21 = load i32, i32* %12
%22 = call i32 @blackman(float* %20, i32 %21)
%23 = load i32, i32* %11
%24 = sitofp i32 %23 to float
%25 = load float, float* %8
%26 = fmul float %24, %25
%27 = load float, float* %7
%28 = fdiv float %26, %27
%29 = fpext float %28 to double
store double %29, double* %16
%30 = load i32, i32* %11
%31 = sitofp i32 %30 to float
%32 = load float, float* %9
%33 = fmul float %31, %32
%34 = load float, float* %7
%35 = fdiv float %33, %34
%36 = fpext float %35 to double
store double %36, double* %17
%37 = load double, double* %16
%38 = load double, double* %17
%39 = fadd double %37, %38
%40 = fdiv double %39, 2.000000e+00
store double %40, double* %18
store float 0.000000e+00, float* %14
%41 = load i32, i32* %10
%42 = icmp ne i32 %41, 0
br i1 %42, label %43, label %95
43: ; preds = %5
%44 = load float, float* %7
%45 = load float, float* %8
%46 = load float, float* %9
%47 = fadd float %45, %46
%48 = fdiv float %47, 2.000000e+00
%49 = fdiv float %44, %48
%50 = fdiv float %49, 2.000000e+00
%51 = fpext float %50 to double
store double %51, double* %18
store i32 0, i32* %19
br label %52
52: ; preds = %81, %43
%53 = load i32, i32* %19
%54 = icmp slt i32 %53, 31
br i1 %54, label %55, label %84
55: ; preds = %52
%56 = load i32, i32* %19
%57 = load double, double* %18
%58 = fsub double 3.100000e+01, %57
%59 = fptosi double %58 to i32
%60 = call i32 @ceil(i32 %59)
%61 = icmp sgt i32 %56, %60
br i1 %61, label %62, label %67
62: ; preds = %55
%63 = load i32*, i32** %6
%64 = load i32, i32* %19
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i32, i32* %63, i64 %65
store i32 32767, i32* %66
br label %72
67: ; preds = %55
%68 = load i32*, i32** %6
%69 = load i32, i32* %19
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i32, i32* %68, i64 %70
store i32 0, i32* %71
br label %72
72: ; preds = %67, %62
%73 = load float, float* %14
%74 = load i32*, i32** %6
%75 = load i32, i32* %19
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds i32, i32* %74, i64 %76
%78 = load i32, i32* %77
%79 = sitofp i32 %78 to float
%80 = fadd float %73, %79
store float %80, float* %14
br label %81
81: ; preds = %72
%82 = load i32, i32* %19
%83 = add nsw i32 %82, 1
store i32 %83, i32* %19
br label %52
84: ; preds = %52
%85 = load i32*, i32** %6
%86 = getelementptr inbounds i32, i32* %85, i64 31
store i32 32767, i32* %86
%87 = load float, float* %14
%88 = load i32*, i32** %6
%89 = getelementptr inbounds i32, i32* %88, i64 31
%90 = load i32, i32* %89
%91 = sitofp i32 %90 to float
%92 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %87, float %91)
store float %92, float* %14
%93 = load float, float* %14
%94 = fdiv float %93, 6.553600e+04
store float %94, float* %14
br label %156
95: ; preds = %5
store i32 0, i32* %19
br label %96
96: ; preds = %142, %95
%97 = load i32, i32* %19
%98 = icmp slt i32 %97, 31
br i1 %98, label %99, label %145
99: ; preds = %96
%100 = load i32, i32* %19
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [63 x float], [63 x float]* %13, i64 0, i64 %101
%103 = load float, float* %102
%104 = fmul float 3.276700e+04, %103
%105 = fpext float %104 to double
%106 = load i32, i32* %11
%107 = sitofp i32 %106 to double
%108 = load double, double* %18
%109 = fdiv double %107, %108
%110 = fmul double %105, %109
%111 = load double, double* %18
%112 = load i32, i32* %19
%113 = sitofp i32 %112 to float
%114 = fsub float %113, 3.100000e+01
%115 = fpext float %114 to double
%116 = fmul double %111, %115
%117 = call i32 @sin(double %116)
%118 = sitofp i32 %117 to double
%119 = fmul double %110, %118
%120 = load i32, i32* %11
%121 = sitofp i32 %120 to float
%122 = load i32, i32* %19
%123 = sitofp i32 %122 to float
%124 = fsub float %123, 3.100000e+01
%125 = fmul float %121, %124
%126 = fpext float %125 to double
%127 = fdiv double %119, %126
%128 = fadd double %127, 4.999900e-01
%129 = fptosi double %128 to i32
%130 = load i32*, i32** %6
%131 = load i32, i32* %19
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds i32, i32* %130, i64 %132
store i32 %129, i32* %133
%134 = load float, float* %14
%135 = load i32*, i32** %6
%136 = load i32, i32* %19
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i32, i32* %135, i64 %137
%139 = load i32, i32* %138
%140 = sitofp i32 %139 to float
%141 = fadd float %134, %140
store float %141, float* %14
br label %142
142: ; preds = %99
%143 = load i32, i32* %19
%144 = add nsw i32 %143, 1
store i32 %144, i32* %19
br label %96
145: ; preds = %96
%146 = load i32*, i32** %6
%147 = getelementptr inbounds i32, i32* %146, i64 31
store i32 32767, i32* %147
%148 = load float, float* %14
%149 = load i32*, i32** %6
%150 = getelementptr inbounds i32, i32* %149, i64 31
%151 = load i32, i32* %150
%152 = sitofp i32 %151 to float
%153 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %148, float %152)
store float %153, float* %14
%154 = load float, float* %14
%155 = fdiv float %154, 6.553600e+04
store float %155, float* %14
br label %156
156: ; preds = %145, %84
%157 = load float, float* %14
%158 = fcmp ogt float %157, 1.000000e+00
br i1 %158, label %159, label %213
159: ; preds = %156
%160 = load float, float* %14
store float %160, float* %15
store float 0.000000e+00, float* %14
store i32 0, i32* %19
br label %161
161: ; preds = %189, %159
%162 = load i32, i32* %19
%163 = icmp slt i32 %162, 31
br i1 %163, label %164, label %192
164: ; preds = %161
%165 = load float, float* %15
%166 = fdiv float 1.000000e+00, %165
%167 = load i32*, i32** %6
%168 = load i32, i32* %19
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i32, i32* %167, i64 %169
%171 = load i32, i32* %170
%172 = sitofp i32 %171 to float
%173 = fmul float %166, %172
%174 = fpext float %173 to double
%175 = fadd double %174, 4.999990e-01
%176 = fptosi double %175 to i32
%177 = load i32*, i32** %6
%178 = load i32, i32* %19
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds i32, i32* %177, i64 %179
store i32 %176, i32* %180
%181 = load float, float* %14
%182 = load i32*, i32** %6
%183 = load i32, i32* %19
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds i32, i32* %182, i64 %184
%186 = load i32, i32* %185
%187 = sitofp i32 %186 to float
%188 = fadd float %181, %187
store float %188, float* %14
br label %189
189: ; preds = %164
%190 = load i32, i32* %19
%191 = add nsw i32 %190, 1
store i32 %191, i32* %19
br label %161
192: ; preds = %161
%193 = load float, float* %15
%194 = fdiv float 1.000000e+00, %193
%195 = load i32*, i32** %6
%196 = getelementptr inbounds i32, i32* %195, i64 31
%197 = load i32, i32* %196
%198 = sitofp i32 %197 to float
%199 = fmul float %194, %198
%200 = fpext float %199 to double
%201 = fadd double %200, 4.999900e-01
%202 = fptosi double %201 to i32
%203 = load i32*, i32** %6
%204 = getelementptr inbounds i32, i32* %203, i64 31
store i32 %202, i32* %204
%205 = load float, float* %14
%206 = load i32*, i32** %6
%207 = getelementptr inbounds i32, i32* %206, i64 31
%208 = load i32, i32* %207
%209 = sitofp i32 %208 to float
%210 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %205, float %209)
store float %210, float* %14
%211 = load float, float* %14
%212 = fdiv float %211, 6.553600e+04
store float %212, float* %14
br label %213
213: ; preds = %192, %156
%214 = load float, float* %14
ret float %214
}

LLVM IR (-O2):
define float @setPFIR(i32* nocapture %0, float %1, float %2, float %3, i32 %4) {
%6 = alloca [63 x float]
%7 = bitcast [63 x float]* %6 to i8*
%8 = getelementptr inbounds [63 x float], [63 x float]* %6, i64 0, i64 0
%9 = call i32 @blackman(float* %8, i32 63)
%10 = fmul float %2, 3.000000e+00
%11 = fdiv float %10, %1
%12 = fpext float %11 to double
%13 = fmul float %3, 3.000000e+00
%14 = fdiv float %13, %1
%15 = fpext float %14 to double
%16 = fadd double %12, %15
%17 = fmul double %16, 5.000000e-01
%18 = icmp eq i32 %4, 0
br i1 %18, label %19, label %21
19: ; preds = %5
%20 = fdiv double 3.000000e+00, %17
br label %50
21: ; preds = %5
%22 = fadd float %2, %3
%23 = fmul float %22, 5.000000e-01
%24 = fdiv float %1, %23
%25 = fmul float %24, 5.000000e-01
%26 = fpext float %25 to double
%27 = fsub double 3.100000e+01, %26
%28 = fptosi double %27 to i32
br label %29
29: ; preds = %41, %21
%30 = phi i64 [ 0, %21 ], [ %49, %41 ]
%31 = phi float [ 0.000000e+00, %21 ], [ %48, %41 ]
%32 = call i32 @ceil(i32 %28)
%33 = sext i32 %32 to i64
%34 = icmp sgt i64 %30, %33
%35 = select i1 %34, i32 32767, i32 0
%36 = getelementptr inbounds i32, i32* %0, i64 %30
store i32 %35, i32* %36
%37 = sitofp i32 %35 to float
%38 = fadd float %31, %37
%39 = or i64 %30, 1
%40 = icmp eq i64 %39, 31
br i1 %40, label %76, label %41
41: ; preds = %29
%42 = call i32 @ceil(i32 %28)
%43 = sext i32 %42 to i64
%44 = icmp slt i64 %30, %43
%45 = select i1 %44, i32 0, i32 32767
%46 = getelementptr inbounds i32, i32* %0, i64 %39
store i32 %45, i32* %46
%47 = sitofp i32 %45 to float
%48 = fadd float %38, %47
%49 = add nuw nsw i64 %30, 2
br label %29
50: ; preds = %19, %50
%51 = phi i64 [ 0, %19 ], [ %74, %50 ]
%52 = phi float [ 0.000000e+00, %19 ], [ %73, %50 ]
%53 = getelementptr inbounds [63 x float], [63 x float]* %6, i64 0, i64 %51
%54 = load float, float* %53
%55 = fmul float %54, 3.276700e+04
%56 = fpext float %55 to double
%57 = fmul double %20, %56
%58 = trunc i64 %51 to i32
%59 = sitofp i32 %58 to float
%60 = fadd float %59, -3.100000e+01
%61 = fpext float %60 to double
%62 = fmul double %17, %61
%63 = call i32 @sin(double %62)
%64 = sitofp i32 %63 to double
%65 = fmul double %57, %64
%66 = fmul float %60, 3.000000e+00
%67 = fpext float %66 to double
%68 = fdiv double %65, %67
%69 = fadd double %68, 4.999900e-01
%70 = fptosi double %69 to i32
%71 = getelementptr inbounds i32, i32* %0, i64 %51
store i32 %70, i32* %71
%72 = sitofp i32 %70 to float
%73 = fadd float %52, %72
%74 = add nuw nsw i64 %51, 1
%75 = icmp eq i64 %74, 31
br i1 %75, label %76, label %50
76: ; preds = %29, %50
%77 = phi float [ %73, %50 ], [ %38, %29 ]
%78 = getelementptr inbounds i32, i32* %0, i64 31
store i32 32767, i32* %78
%79 = call float @llvm.fmuladd.f32(float %77, float 2.000000e+00, float 3.276700e+04)
%80 = fmul float %79, 0x3EF0000000000000
%81 = fcmp ogt float %80, 1.000000e+00
br i1 %81, label %82, label %120
82: ; preds = %76
%83 = fdiv float 1.000000e+00, %80
br label %84
84: ; preds = %98, %82
%85 = phi i64 [ 0, %82 ], [ %108, %98 ]
%86 = phi float [ 0.000000e+00, %82 ], [ %107, %98 ]
%87 = getelementptr inbounds i32, i32* %0, i64 %85
%88 = load i32, i32* %87
%89 = sitofp i32 %88 to float
%90 = fmul float %83, %89
%91 = fpext float %90 to double
%92 = fadd double %91, 4.999990e-01
%93 = fptosi double %92 to i32
store i32 %93, i32* %87
%94 = sitofp i32 %93 to float
%95 = fadd float %86, %94
%96 = or i64 %85, 1
%97 = icmp eq i64 %96, 31
br i1 %97, label %109, label %98
98: ; preds = %84
%99 = getelementptr inbounds i32, i32* %0, i64 %96
%100 = load i32, i32* %99
%101 = sitofp i32 %100 to float
%102 = fmul float %83, %101
%103 = fpext float %102 to double
%104 = fadd double %103, 4.999990e-01
%105 = fptosi double %104 to i32
store i32 %105, i32* %99
%106 = sitofp i32 %105 to float
%107 = fadd float %95, %106
%108 = add nuw nsw i64 %85, 2
br label %84
109: ; preds = %84
%110 = getelementptr inbounds i32, i32* %0, i64 31
%111 = load i32, i32* %110
%112 = sitofp i32 %111 to float
%113 = fmul float %83, %112
%114 = fpext float %113 to double
%115 = fadd double %114, 4.999900e-01
%116 = fptosi double %115 to i32
store i32 %116, i32* %110
%117 = sitofp i32 %116 to float
%118 = call float @llvm.fmuladd.f32(float %95, float 2.000000e+00, float %117)
%119 = fmul float %118, 0x3EF0000000000000
br label %120
120: ; preds = %109, %76
%121 = phi float [ %119, %109 ], [ %80, %76 ]
ret float %121
}