#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*/ printf(char *);
void IIRSOS(float *filterthis, int sig_length, float *temp, int Fs, int cutoff,
            int highorlowpass) {
  float b[3] = {0.0, 0.0, 0.0};
  float a[2] = {0.0, 0.0};
  float w[2] = {0.0};
  float RC;
  float T;
  int i = 0;
  RC = 1.0 / (2 * 3.14159265359 * cutoff);
  T = 1.0 / Fs;
  if (highorlowpass == 0) {
    printf("Running Yu Yu's LPF!\n");
    b[0] = 1.0 / (1.0 + (2.0 * RC) / T);
    b[1] = 1.0 / (1.0 + (2.0 * RC) / T);
    a[1] = (1.0 - (2.0 * RC) / T) / (1.0 + (2 * RC) / T);
  } else if (highorlowpass == 1) {
    printf("Running Yu Yu's HPF!\n");
    b[0] = 1.0 * (1.0 / (1.0 + T / (2.0 * RC)));
    b[1] = -1.0 * (1.0 / (1.0 + T / (2.0 * RC)));
    a[1] = -1.0 * (1.0 - (2.0 * RC) / T) / (1.0 + (2.0 * RC) / T);
  }
  for (i = 0; i < sig_length; i++) {
    float input;
    float wn, yn;
    input = filterthis[i];
    wn = input - a[0] * w[0] - a[1] * w[1];
    yn = b[0] * wn + b[1] * w[0] + b[2] * w[1];
    w[1] = w[0];
    w[0] = wn;
    input = yn;
    temp[i] = yn;
  }
  printf("");
}


x86 assembly (clang, -O0):
<IIRSOS>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
lea    -0x30(%rbp),%rdi
xor    %esi,%esi
mov    $0xc,%edx
call   1040 <memset@plt>
lea    -0x38(%rbp),%rdi
xor    %esi,%esi
mov    $0x8,%edx
call   1040 <memset@plt>
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x8,%edx
call   1040 <memset@plt>
movl   $0x0,-0x4c(%rbp)
cvtsi2sdl -0x20(%rbp),%xmm0
movsd  0xe86(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xe72(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
cvtsi2sdl -0x1c(%rbp),%xmm1
movsd  0xe58(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    12b3 <IIRSOS+0x193>
lea    0xe5e(%rip),%rdi
call   1030 <printf@plt>
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe34(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  0xe0b(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xdff(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdf1(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  0xdc8(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xdbc(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdae(%rip),%xmm1
mulsd  %xmm0,%xmm1
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
divsd  %xmm0,%xmm1
movsd  0xd85(%rip),%xmm0
subsd  %xmm1,%xmm0
movss  0xd99(%rip),%xmm1
mulss  -0x44(%rbp),%xmm1
divss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xd63(%rip),%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
jmp    13e1 <IIRSOS+0x2c1>
cmpl   $0x1,-0x24(%rbp)
jne    13dc <IIRSOS+0x2bc>
lea    0xd76(%rip),%rdi
call   1030 <printf@plt>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xd2d(%rip),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  0xd0d(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0xd01(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xcf5(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xcde(%rip),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  0xcbe(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0xcb2(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xcbe(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc98(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  0xc6f(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xc7b(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xc5e(%rip),%xmm2
mulsd  %xmm1,%xmm2
movss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm2
movsd  0xc35(%rip),%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
jmp    13e1 <IIRSOS+0x2c1>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    14bf <IIRSOS+0x39f>
mov    -0x8(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
movss  -0x38(%rbp),%xmm1
movss  -0x40(%rbp),%xmm2
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x3c(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x30(%rbp),%xmm1
movss  -0x54(%rbp),%xmm2
movss  -0x2c(%rbp),%xmm0
mulss  -0x40(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
movss  -0x3c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x58(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    13e8 <IIRSOS+0x2c8>
lea    0xb89(%rip),%rdi
call   1030 <printf@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<IIRSOS>:
push   %rbp
push   %r14
push   %rbx
sub    $0x10,%rsp
mov    %rdx,%r14
mov    %esi,%ebp
mov    %rdi,%rbx
cvtsi2sd %r8d,%xmm0
mulsd  0xed3(%rip),%xmm0
movsd  0xed3(%rip),%xmm2
movapd %xmm2,%xmm1
divsd  %xmm0,%xmm1
cvtsd2ss %xmm1,%xmm3
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
movapd %xmm2,%xmm1
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
cmp    $0x1,%r9d
je     11f4 <IIRSOS+0xe4>
test   %r9d,%r9d
jne    1279 <IIRSOS+0x169>
lea    0xef8(%rip),%rdi
movss  %xmm3,0x8(%rsp)
movss  %xmm0,0xc(%rsp)
call   1030 <puts@plt>
movss  0x8(%rsp),%xmm4
xorps  %xmm0,%xmm0
cvtss2sd %xmm4,%xmm0
addsd  %xmm0,%xmm0
movss  0xc(%rsp),%xmm3
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
divsd  %xmm1,%xmm0
movsd  0xe5c(%rip),%xmm2
subsd  %xmm0,%xmm2
movaps %xmm4,%xmm1
addss  %xmm4,%xmm1
divss  %xmm3,%xmm1
cvtss2sd %xmm1,%xmm1
movlhps %xmm0,%xmm1
addpd  0xe56(%rip),%xmm1
movapd %xmm2,%xmm0
shufpd $0x2,0xe59(%rip),%xmm0
divpd  %xmm1,%xmm0
cvtpd2ps %xmm0,%xmm4
movapd %xmm4,%xmm1
shufps $0x55,%xmm4,%xmm1
test   %ebp,%ebp
jg     1283 <IIRSOS+0x173>
jmp    12f8 <IIRSOS+0x1e8>
lea    0xe59(%rip),%rdi
movss  %xmm3,0x8(%rsp)
movss  %xmm0,0xc(%rsp)
call   1030 <puts@plt>
movss  0xc(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  0x8(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm1
movapd %xmm1,%xmm2
unpcklpd %xmm0,%xmm2
unpcklpd %xmm1,%xmm0
divpd  %xmm0,%xmm2
movsd  0xdcc(%rip),%xmm0
subsd  %xmm2,%xmm0
xorpd  0xdc8(%rip),%xmm0
addpd  0xdd0(%rip),%xmm2
shufpd $0x2,0xdd7(%rip),%xmm0
divpd  %xmm2,%xmm0
cvtpd2ps %xmm0,%xmm4
movapd %xmm4,%xmm1
shufps $0x55,%xmm4,%xmm1
xorps  0xdd0(%rip),%xmm1
test   %ebp,%ebp
jg     1283 <IIRSOS+0x173>
jmp    12f8 <IIRSOS+0x1e8>
xorps  %xmm4,%xmm4
xorps  %xmm1,%xmm1
test   %ebp,%ebp
jle    12f8 <IIRSOS+0x1e8>
movaps 0xdb6(%rip),%xmm2
xorps  %xmm4,%xmm2
mov    %ebp,%eax
shufps $0x55,%xmm4,%xmm4
xorps  %xmm8,%xmm8
xor    %ecx,%ecx
movss  0xdae(%rip),%xmm9
xorps  %xmm5,%xmm5
xorps  %xmm6,%xmm6
nopl   0x0(%rax,%rax,1)
movaps %xmm5,%xmm3
movaps %xmm5,%xmm7
mulss  %xmm9,%xmm7
addss  (%rbx,%rcx,4),%xmm7
movaps %xmm2,%xmm5
mulss  %xmm6,%xmm5
addss  %xmm7,%xmm5
movaps %xmm1,%xmm7
mulss  %xmm3,%xmm7
movaps %xmm4,%xmm0
mulss  %xmm5,%xmm0
addss  %xmm7,%xmm0
mulss  %xmm8,%xmm6
addss  %xmm0,%xmm6
movss  %xmm6,(%r14,%rcx,4)
add    $0x1,%rcx
movaps %xmm3,%xmm6
cmp    %rcx,%rax
jne    12b0 <IIRSOS+0x1a0>
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
@.str = [22 x i8] c"Running Yu Yu's LPF!\0A\00"
@.str.1 = [22 x i8] c"Running Yu Yu's HPF!\0A\00"
@.str.2 = [1 x i8] zeroinitializer
define void @IIRSOS(float* %0, i32 %1, float* %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca float*
%8 = alloca i32
%9 = alloca float*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca [3 x float]
%14 = alloca [2 x float]
%15 = alloca [2 x float]
%16 = alloca float
%17 = alloca float
%18 = alloca i32
%19 = alloca float
%20 = alloca float
%21 = alloca float
store float* %0, float** %7
store i32 %1, i32* %8
store float* %2, float** %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store i32 %5, i32* %12
%22 = bitcast [3 x float]* %13 to i8*
%23 = bitcast [2 x float]* %14 to i8*
%24 = bitcast [2 x float]* %15 to i8*
store i32 0, i32* %18
%25 = load i32, i32* %11
%26 = sitofp i32 %25 to double
%27 = fmul double 0x401921FB54442EEA, %26
%28 = fdiv double 1.000000e+00, %27
%29 = fptrunc double %28 to float
store float %29, float* %16
%30 = load i32, i32* %10
%31 = sitofp i32 %30 to double
%32 = fdiv double 1.000000e+00, %31
%33 = fptrunc double %32 to float
store float %33, float* %17
%34 = load i32, i32* %12
%35 = icmp eq i32 %34, 0
br i1 %35, label %36, label %74
36: ; preds = %6
%37 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0))
%38 = load float, float* %16
%39 = fpext float %38 to double
%40 = fmul double 2.000000e+00, %39
%41 = load float, float* %17
%42 = fpext float %41 to double
%43 = fdiv double %40, %42
%44 = fadd double 1.000000e+00, %43
%45 = fdiv double 1.000000e+00, %44
%46 = fptrunc double %45 to float
%47 = getelementptr inbounds [3 x float], [3 x float]* %13, i64 0, i64 0
store float %46, float* %47
%48 = load float, float* %16
%49 = fpext float %48 to double
%50 = fmul double 2.000000e+00, %49
%51 = load float, float* %17
%52 = fpext float %51 to double
%53 = fdiv double %50, %52
%54 = fadd double 1.000000e+00, %53
%55 = fdiv double 1.000000e+00, %54
%56 = fptrunc double %55 to float
%57 = getelementptr inbounds [3 x float], [3 x float]* %13, i64 0, i64 1
store float %56, float* %57
%58 = load float, float* %16
%59 = fpext float %58 to double
%60 = fmul double 2.000000e+00, %59
%61 = load float, float* %17
%62 = fpext float %61 to double
%63 = fdiv double %60, %62
%64 = fsub double 1.000000e+00, %63
%65 = load float, float* %16
%66 = fmul float 2.000000e+00, %65
%67 = load float, float* %17
%68 = fdiv float %66, %67
%69 = fpext float %68 to double
%70 = fadd double 1.000000e+00, %69
%71 = fdiv double %64, %70
%72 = fptrunc double %71 to float
%73 = getelementptr inbounds [2 x float], [2 x float]* %14, i64 0, i64 1
store float %72, float* %73
br label %120
74: ; preds = %6
%75 = load i32, i32* %12
%76 = icmp eq i32 %75, 1
br i1 %76, label %77, label %119
77: ; preds = %74
%78 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.1, i64 0, i64 0))
%79 = load float, float* %17
%80 = fpext float %79 to double
%81 = load float, float* %16
%82 = fpext float %81 to double
%83 = fmul double 2.000000e+00, %82
%84 = fdiv double %80, %83
%85 = fadd double 1.000000e+00, %84
%86 = fdiv double 1.000000e+00, %85
%87 = fmul double 1.000000e+00, %86
%88 = fptrunc double %87 to float
%89 = getelementptr inbounds [3 x float], [3 x float]* %13, i64 0, i64 0
store float %88, float* %89
%90 = load float, float* %17
%91 = fpext float %90 to double
%92 = load float, float* %16
%93 = fpext float %92 to double
%94 = fmul double 2.000000e+00, %93
%95 = fdiv double %91, %94
%96 = fadd double 1.000000e+00, %95
%97 = fdiv double 1.000000e+00, %96
%98 = fmul double -1.000000e+00, %97
%99 = fptrunc double %98 to float
%100 = getelementptr inbounds [3 x float], [3 x float]* %13, i64 0, i64 1
store float %99, float* %100
%101 = load float, float* %16
%102 = fpext float %101 to double
%103 = fmul double 2.000000e+00, %102
%104 = load float, float* %17
%105 = fpext float %104 to double
%106 = fdiv double %103, %105
%107 = fsub double 1.000000e+00, %106
%108 = fmul double -1.000000e+00, %107
%109 = load float, float* %16
%110 = fpext float %109 to double
%111 = fmul double 2.000000e+00, %110
%112 = load float, float* %17
%113 = fpext float %112 to double
%114 = fdiv double %111, %113
%115 = fadd double 1.000000e+00, %114
%116 = fdiv double %108, %115
%117 = fptrunc double %116 to float
%118 = getelementptr inbounds [2 x float], [2 x float]* %14, i64 0, i64 1
store float %117, float* %118
br label %119
119: ; preds = %77, %74
br label %120
120: ; preds = %119, %36
store i32 0, i32* %18
br label %121
121: ; preds = %169, %120
%122 = load i32, i32* %18
%123 = load i32, i32* %8
%124 = icmp slt i32 %122, %123
br i1 %124, label %125, label %172
125: ; preds = %121
%126 = load float*, float** %7
%127 = load i32, i32* %18
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds float, float* %126, i64 %128
%130 = load float, float* %129
store float %130, float* %19
%131 = load float, float* %19
%132 = getelementptr inbounds [2 x float], [2 x float]* %14, i64 0, i64 0
%133 = load float, float* %132
%134 = getelementptr inbounds [2 x float], [2 x float]* %15, i64 0, i64 0
%135 = load float, float* %134
%136 = fneg float %133
%137 = call float @llvm.fmuladd.f32(float %136, float %135, float %131)
%138 = getelementptr inbounds [2 x float], [2 x float]* %14, i64 0, i64 1
%139 = load float, float* %138
%140 = getelementptr inbounds [2 x float], [2 x float]* %15, i64 0, i64 1
%141 = load float, float* %140
%142 = fneg float %139
%143 = call float @llvm.fmuladd.f32(float %142, float %141, float %137)
store float %143, float* %20
%144 = getelementptr inbounds [3 x float], [3 x float]* %13, i64 0, i64 0
%145 = load float, float* %144
%146 = load float, float* %20
%147 = getelementptr inbounds [3 x float], [3 x float]* %13, i64 0, i64 1
%148 = load float, float* %147
%149 = getelementptr inbounds [2 x float], [2 x float]* %15, i64 0, i64 0
%150 = load float, float* %149
%151 = fmul float %148, %150
%152 = call float @llvm.fmuladd.f32(float %145, float %146, float %151)
%153 = getelementptr inbounds [3 x float], [3 x float]* %13, i64 0, i64 2
%154 = load float, float* %153
%155 = getelementptr inbounds [2 x float], [2 x float]* %15, i64 0, i64 1
%156 = load float, float* %155
%157 = call float @llvm.fmuladd.f32(float %154, float %156, float %152)
store float %157, float* %21
%158 = getelementptr inbounds [2 x float], [2 x float]* %15, i64 0, i64 0
%159 = load float, float* %158
%160 = getelementptr inbounds [2 x float], [2 x float]* %15, i64 0, i64 1
store float %159, float* %160
%161 = load float, float* %20
%162 = getelementptr inbounds [2 x float], [2 x float]* %15, i64 0, i64 0
store float %161, float* %162
%163 = load float, float* %21
store float %163, float* %19
%164 = load float, float* %21
%165 = load float*, float** %9
%166 = load i32, i32* %18
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds float, float* %165, i64 %167
store float %164, float* %168
br label %169
169: ; preds = %125
%170 = load i32, i32* %18
%171 = add nsw i32 %170, 1
store i32 %171, i32* %18
br label %121
172: ; preds = %121
%173 = call i32 @printf(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [21 x i8] c"Running Yu Yu's HPF!\00"
@str.3 = [21 x i8] c"Running Yu Yu's LPF!\00"
define void @IIRSOS(float* nocapture %0, i32 %1, float* nocapture writeonly %2, i32 %3, i32 %4, i32 %5) {
%7 = sitofp i32 %4 to double
%8 = fmul double %7, 0x401921FB54442EEA
%9 = fdiv double 1.000000e+00, %8
%10 = fptrunc double %9 to float
%11 = sitofp i32 %3 to double
%12 = fdiv double 1.000000e+00, %11
%13 = fptrunc double %12 to float
switch i32 %5, label %50 [
i32 0, label %14
i32 1, label %31
]
14: ; preds = %6
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.3, i64 0, i64 0))
%16 = fpext float %10 to double
%17 = fmul double %16, 2.000000e+00
%18 = fpext float %13 to double
%19 = fdiv double %17, %18
%20 = fsub double 1.000000e+00, %19
%21 = fmul float %10, 2.000000e+00
%22 = fdiv float %21, %13
%23 = fpext float %22 to double
%24 = insertelement <2 x double> poison, double %23, i64 0
%25 = insertelement <2 x double> %24, double %19, i64 1
%26 = fadd <2 x double> %25, <double 1.000000e+00, double 1.000000e+00>
%27 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %20, i64 0
%28 = fdiv <2 x double> %27, %26
%29 = fptrunc <2 x double> %28 to <2 x float>
%30 = extractelement <2 x float> %29, i64 1
br label %50
31: ; preds = %6
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str, i64 0, i64 0))
%33 = fpext float %13 to double
%34 = fpext float %10 to double
%35 = fmul double %34, 2.000000e+00
%36 = insertelement <2 x double> poison, double %35, i64 0
%37 = insertelement <2 x double> %36, double %33, i64 1
%38 = insertelement <2 x double> poison, double %33, i64 0
%39 = insertelement <2 x double> %38, double %35, i64 1
%40 = fdiv <2 x double> %37, %39
%41 = extractelement <2 x double> %40, i64 0
%42 = fsub double 1.000000e+00, %41
%43 = fneg double %42
%44 = fadd <2 x double> %40, <double 1.000000e+00, double 1.000000e+00>
%45 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %43, i64 0
%46 = fdiv <2 x double> %45, %44
%47 = fptrunc <2 x double> %46 to <2 x float>
%48 = extractelement <2 x float> %47, i64 1
%49 = fneg float %48
br label %50
50: ; preds = %6, %31, %14
%51 = phi float [ %30, %14 ], [ %49, %31 ], [ 0.000000e+00, %6 ]
%52 = phi <2 x float> [ %29, %14 ], [ %47, %31 ], [ zeroinitializer, %6 ]
%53 = icmp sgt i32 %1, 0
br i1 %53, label %54, label %73
54: ; preds = %50
%55 = extractelement <2 x float> %52, i64 0
%56 = fneg float %55
%57 = zext i32 %1 to i64
%58 = extractelement <2 x float> %52, i64 1
br label %59
59: ; preds = %54, %59
%60 = phi i64 [ 0, %54 ], [ %71, %59 ]
%61 = phi float [ 0.000000e+00, %54 ], [ %66, %59 ]
%62 = phi float [ 0.000000e+00, %54 ], [ %61, %59 ]
%63 = getelementptr inbounds float, float* %0, i64 %60
%64 = load float, float* %63
%65 = tail call float @llvm.fmuladd.f32(float %61, float -0.000000e+00, float %64)
%66 = tail call float @llvm.fmuladd.f32(float %56, float %62, float %65)
%67 = fmul float %51, %61
%68 = tail call float @llvm.fmuladd.f32(float %58, float %66, float %67)
%69 = tail call float @llvm.fmuladd.f32(float %62, float 0.000000e+00, float %68)
%70 = getelementptr inbounds float, float* %2, i64 %60
store float %69, float* %70
%71 = add nuw nsw i64 %60, 1
%72 = icmp eq i64 %71, %57
br i1 %72, label %73, label %59
73: ; preds = %59, %50
ret void
}