; LLVM IR from jgaeddert/liquid-dsp :: sandbox (symsync_crcf_test)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@optarg = external global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@stderr = external global ptr, align 8
@.str.12 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @usage() #0

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca float, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca ptr, align 8
  %26 = alloca { float, float }, align 4
  %27 = alloca float, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca { float, float }, align 4
  %42 = alloca { float, float }, align 4
  %43 = alloca { float, float }, align 4
  %44 = alloca { float, float }, align 4
  %45 = alloca { float, float }, align 4
  %46 = alloca ptr, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  %47 = call i64 @time(ptr noundef null) #10
  %48 = trunc i64 %47 to i32
  call void @srand(i32 noundef %48) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  store i32 2, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  store i32 3, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  store float 5.000000e-01, ptr %8, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  store i32 32, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  store i32 512, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #10
  store float 3.000000e+01, ptr %11, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #10
  store i32 7, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #10
  store i32 7, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  store float 0x3F947AE140000000, ptr %14, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  store float 0xBFC99999A0000000, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  br label %49

49:                                               ; preds = %104, %2
  %50 = load i32, ptr %4, align 4, !tbaa !5
  %51 = load ptr, ptr %5, align 8, !tbaa !9
  %52 = call i32 @getopt(i32 noundef %50, ptr noundef %51, ptr noundef @.str.10) #10
  store i32 %52, ptr %16, align 4, !tbaa !5
  %53 = icmp ne i32 %52, -1
  br i1 %53, label %54, label %105

54:                                               ; preds = %49
  %55 = load i32, ptr %16, align 4, !tbaa !5
  switch i32 %55, label %103 [
    i32 117, label %56
    i32 104, label %56
    i32 84, label %57
    i32 109, label %78
    i32 98, label %81
    i32 66, label %85
    i32 115, label %88
    i32 119, label %92
    i32 110, label %96
    i32 116, label %99
  ]

56:                                               ; preds = %54, %54
  call void @usage()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %690

57:                                               ; preds = %54
  %58 = load ptr, ptr @optarg, align 8, !tbaa !9
  %59 = call i32 @strcmp(ptr noundef %58, ptr noundef @.str.11) #11
  %60 = icmp eq i32 %59, 0
  br i1 %60, label %61, label %62

61:                                               ; preds = %57
  store i32 11, ptr %12, align 4, !tbaa !5
  store i32 12, ptr %13, align 4, !tbaa !5
  br label %67

62:                                               ; preds = %57
  %63 = load ptr, ptr @optarg, align 8, !tbaa !9
  %64 = call i32 @liquid_getopt_str2firfilt(ptr noundef %63)
  store i32 %64, ptr %12, align 4, !tbaa !5
  %65 = load ptr, ptr @optarg, align 8, !tbaa !9
  %66 = call i32 @liquid_getopt_str2firfilt(ptr noundef %65)
  store i32 %66, ptr %13, align 4, !tbaa !5
  br label %67

67:                                               ; preds = %62, %61
  %68 = load i32, ptr %12, align 4, !tbaa !5
  %69 = icmp eq i32 %68, 0
  br i1 %69, label %70, label %77

70:                                               ; preds = %67
  %71 = load ptr, ptr @stderr, align 8, !tbaa !9
  %72 = load ptr, ptr %5, align 8, !tbaa !9
  %73 = getelementptr inbounds ptr, ptr %72, i64 0
  %74 = load ptr, ptr %73, align 8, !tbaa !9
  %75 = load ptr, ptr @optarg, align 8, !tbaa !9
  %76 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %71, ptr noundef @.str.12, ptr noundef %74, ptr noundef %75) #10
  call void @exit(i32 noundef 1) #12
  unreachable

77:                                               ; preds = %67
  br label %104

78:                                               ; preds = %54
  %79 = load ptr, ptr @optarg, align 8, !tbaa !9
  %80 = call i32 @atoi(ptr noundef %79) #11
  store i32 %80, ptr %7, align 4, !tbaa !5
  br label %104

81:                                               ; preds = %54
  %82 = load ptr, ptr @optarg, align 8, !tbaa !9
  %83 = call double @atof(ptr noundef %82) #11
  %84 = fptrunc double %83 to float
  store float %84, ptr %8, align 4, !tbaa !11
  br label %104

85:                                               ; preds = %54
  %86 = load ptr, ptr @optarg, align 8, !tbaa !9
  %87 = call i32 @atoi(ptr noundef %86) #11
  store i32 %87, ptr %9, align 4, !tbaa !5
  br label %104

88:                                               ; preds = %54
  %89 = load ptr, ptr @optarg, align 8, !tbaa !9
  %90 = call double @atof(ptr noundef %89) #11
  %91 = fptrunc double %90 to float
  store float %91, ptr %11, align 4, !tbaa !11
  br label %104

92:                                               ; preds = %54
  %93 = load ptr, ptr @optarg, align 8, !tbaa !9
  %94 = call double @atof(ptr noundef %93) #11
  %95 = fptrunc double %94 to float
  store float %95, ptr %14, align 4, !tbaa !11
  br label %104

96:                                               ; preds = %54
  %97 = load ptr, ptr @optarg, align 8, !tbaa !9
  %98 = call i32 @atoi(ptr noundef %97) #11
  store i32 %98, ptr %10, align 4, !tbaa !5
  br label %104

99:                                               ; preds = %54
  %100 = load ptr, ptr @optarg, align 8, !tbaa !9
  %101 = call double @atof(ptr noundef %100) #11
  %102 = fptrunc double %101 to float
  store float %102, ptr %15, align 4, !tbaa !11
  br label %104

103:                                              ; preds = %54
  call void @exit(i32 noundef 1) #12
  unreachable

104:                                              ; preds = %99, %96, %92, %88, %85, %81, %78, %77
  br label %49, !llvm.loop !13

105:                                              ; preds = %49
  %106 = load i32, ptr %7, align 4, !tbaa !5
  %107 = icmp ult i32 %106, 1
  br i1 %107, label %108, label %111

108:                                              ; preds = %105
  %109 = load ptr, ptr @stderr, align 8, !tbaa !9
  %110 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %109, ptr noundef @.str.13) #10
  call void @exit(i32 noundef 1) #12
  unreachable

111:                                              ; preds = %105
  %112 = load float, ptr %8, align 4, !tbaa !11
  %113 = fcmp ole float %112, 0.000000e+00
  br i1 %113, label %117, label %114

114:                                              ; preds = %111
  %115 = load float, ptr %8, align 4, !tbaa !11
  %116 = fcmp ogt float %115, 1.000000e+00
  br i1 %116, label %117, label %120

117:                                              ; preds = %114, %111
  %118 = load ptr, ptr @stderr, align 8, !tbaa !9
  %119 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %118, ptr noundef @.str.14) #10
  call void @exit(i32 noundef 1) #12
  unreachable

120:                                              ; preds = %114
  %121 = load i32, ptr %9, align 4, !tbaa !5
  %122 = icmp eq i32 %121, 0
  br i1 %122, label %123, label %126

123:                                              ; preds = %120
  %124 = load ptr, ptr @stderr, align 8, !tbaa !9
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %124, ptr noundef @.str.15) #10
  call void @exit(i32 noundef 1) #12
  unreachable

126:                                              ; preds = %120
  %127 = load float, ptr %14, align 4, !tbaa !11
  %128 = fcmp ole float %127, 0.000000e+00
  br i1 %128, label %129, label %132

129:                                              ; preds = %126
  %130 = load ptr, ptr @stderr, align 8, !tbaa !9
  %131 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %130, ptr noundef @.str.16) #10
  call void @exit(i32 noundef 1) #12
  unreachable

132:                                              ; preds = %126
  %133 = load i32, ptr %10, align 4, !tbaa !5
  %134 = icmp eq i32 %133, 0
  br i1 %134, label %135, label %138

135:                                              ; preds = %132
  %136 = load ptr, ptr @stderr, align 8, !tbaa !9
  %137 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %136, ptr noundef @.str.17) #10
  call void @exit(i32 noundef 1) #12
  unreachable

138:                                              ; preds = %132
  %139 = load float, ptr %15, align 4, !tbaa !11
  %140 = fcmp olt float %139, -1.000000e+00
  br i1 %140, label %144, label %141

141:                                              ; preds = %138
  %142 = load float, ptr %15, align 4, !tbaa !11
  %143 = fcmp ogt float %142, 1.000000e+00
  br i1 %143, label %144, label %147

144:                                              ; preds = %141, %138
  %145 = load ptr, ptr @stderr, align 8, !tbaa !9
  %146 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %145, ptr noundef @.str.18) #10
  call void @exit(i32 noundef 1) #12
  unreachable

147:                                              ; preds = %141
  br label %148

148:                                              ; preds = %147
  br label %149

149:                                              ; preds = %148
  br label %150

150:                                              ; preds = %149
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  %153 = load i32, ptr %6, align 4, !tbaa !5
  %154 = load i32, ptr %10, align 4, !tbaa !5
  %155 = mul i32 %153, %154
  store i32 %155, ptr %19, align 4, !tbaa !5
  %156 = load i32, ptr %10, align 4, !tbaa !5
  %157 = zext i32 %156 to i64
  %158 = call ptr @llvm.stacksave.p0()
  store ptr %158, ptr %20, align 8
  %159 = alloca { float, float }, i64 %157, align 16
  store i64 %157, ptr %21, align 8
  %160 = load i32, ptr %19, align 4, !tbaa !5
  %161 = zext i32 %160 to i64
  %162 = alloca { float, float }, i64 %161, align 16
  store i64 %161, ptr %22, align 8
  %163 = load i32, ptr %19, align 4, !tbaa !5
  %164 = zext i32 %163 to i64
  %165 = alloca { float, float }, i64 %164, align 16
  store i64 %164, ptr %23, align 8
  %166 = load i32, ptr %10, align 4, !tbaa !5
  %167 = add i32 %166, 64
  %168 = zext i32 %167 to i64
  %169 = alloca { float, float }, i64 %168, align 16
  store i64 %168, ptr %24, align 8
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %170

170:                                              ; preds = %195, %152
  %171 = load i32, ptr %18, align 4, !tbaa !5
  %172 = load i32, ptr %10, align 4, !tbaa !5
  %173 = icmp ult i32 %171, %172
  br i1 %173, label %174, label %198

174:                                              ; preds = %170
  %175 = call i32 @rand() #10
  %176 = srem i32 %175, 2
  %177 = icmp ne i32 %176, 0
  %178 = zext i1 %177 to i64
  %179 = select i1 %177, double 0x3FE6A09E667F3BCD, double 0xBFE6A09E667F3BCD
  %180 = call i32 @rand() #10
  %181 = srem i32 %180, 2
  %182 = icmp ne i32 %181, 0
  %183 = zext i1 %182 to i64
  %184 = select i1 %182, double 0x3FE6A09E667F3BCD, double 0xBFE6A09E667F3BCD
  %185 = fmul double %184, 0.000000e+00
  %186 = fmul double %184, 1.000000e+00
  %187 = fadd double %179, %185
  %188 = fptrunc double %187 to float
  %189 = fptrunc double %186 to float
  %190 = load i32, ptr %18, align 4, !tbaa !5
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds { float, float }, ptr %159, i64 %191
  %193 = getelementptr inbounds { float, float }, ptr %192, i32 0, i32 0
  %194 = getelementptr inbounds { float, float }, ptr %192, i32 0, i32 1
  store float %188, ptr %193, align 8
  store float %189, ptr %194, align 4
  br label %195

195:                                              ; preds = %174
  %196 = load i32, ptr %18, align 4, !tbaa !5
  %197 = add i32 %196, 1
  store i32 %197, ptr %18, align 4, !tbaa !5
  br label %170, !llvm.loop !15

198:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %199 = load i32, ptr %12, align 4, !tbaa !5
  %200 = load i32, ptr %6, align 4, !tbaa !5
  %201 = load i32, ptr %7, align 4, !tbaa !5
  %202 = load float, ptr %8, align 4, !tbaa !11
  %203 = load float, ptr %15, align 4, !tbaa !11
  %204 = call ptr @firinterp_crcf_create_prototype(i32 noundef %199, i32 noundef %200, i32 noundef %201, float noundef %202, float noundef %203)
  store ptr %204, ptr %25, align 8, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %205

205:                                              ; preds = %227, %198
  %206 = load i32, ptr %18, align 4, !tbaa !5
  %207 = load i32, ptr %10, align 4, !tbaa !5
  %208 = icmp ult i32 %206, %207
  br i1 %208, label %209, label %230

209:                                              ; preds = %205
  %210 = load ptr, ptr %25, align 8, !tbaa !9
  %211 = load i32, ptr %18, align 4, !tbaa !5
  %212 = zext i32 %211 to i64
  %213 = getelementptr inbounds { float, float }, ptr %159, i64 %212
  %214 = getelementptr inbounds { float, float }, ptr %213, i32 0, i32 0
  %215 = load float, ptr %214, align 8
  %216 = getelementptr inbounds { float, float }, ptr %213, i32 0, i32 1
  %217 = load float, ptr %216, align 4
  %218 = load i32, ptr %18, align 4, !tbaa !5
  %219 = load i32, ptr %6, align 4, !tbaa !5
  %220 = mul i32 %218, %219
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds { float, float }, ptr %162, i64 %221
  %223 = getelementptr inbounds { float, float }, ptr %26, i32 0, i32 0
  %224 = getelementptr inbounds { float, float }, ptr %26, i32 0, i32 1
  store float %215, ptr %223, align 4
  store float %217, ptr %224, align 4
  %225 = load <2 x float>, ptr %26, align 4
  %226 = call i32 @firinterp_crcf_execute(ptr noundef %210, <2 x float> noundef %225, ptr noundef %222)
  br label %227

227:                                              ; preds = %209
  %228 = load i32, ptr %18, align 4, !tbaa !5
  %229 = add i32 %228, 1
  store i32 %229, ptr %18, align 4, !tbaa !5
  br label %205, !llvm.loop !16

230:                                              ; preds = %205
  %231 = load ptr, ptr %25, align 8, !tbaa !9
  %232 = call i32 @firinterp_crcf_destroy(ptr noundef %231)
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  %233 = load float, ptr %11, align 4, !tbaa !11
  %234 = fneg float %233
  %235 = fdiv float %234, 2.000000e+01
  %236 = call float @powf(float noundef 1.000000e+01, float noundef %235) #10
  store float %236, ptr %27, align 4, !tbaa !11
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %237

237:                                              ; preds = %272, %230
  %238 = load i32, ptr %18, align 4, !tbaa !5
  %239 = load i32, ptr %19, align 4, !tbaa !5
  %240 = icmp ult i32 %238, %239
  br i1 %240, label %241, label %275

241:                                              ; preds = %237
  %242 = load i32, ptr %18, align 4, !tbaa !5
  %243 = zext i32 %242 to i64
  %244 = getelementptr inbounds { float, float }, ptr %162, i64 %243
  %245 = getelementptr inbounds { float, float }, ptr %244, i32 0, i32 0
  %246 = load float, ptr %245, align 8
  %247 = getelementptr inbounds { float, float }, ptr %244, i32 0, i32 1
  %248 = load float, ptr %247, align 4
  %249 = fpext float %246 to double
  %250 = fpext float %248 to double
  %251 = load float, ptr %27, align 4, !tbaa !11
  %252 = call float (...) @randnf()
  %253 = call float (...) @randnf()
  %254 = fmul float 0.000000e+00, %253
  %255 = fmul float 1.000000e+00, %253
  %256 = fadd float %252, %254
  %257 = fmul float %251, %256
  %258 = fmul float %251, %255
  %259 = fpext float %257 to double
  %260 = fpext float %258 to double
  %261 = fmul double %259, 0x3FE6A09E667F3BCD
  %262 = fmul double %260, 0x3FE6A09E667F3BCD
  %263 = fadd double %249, %261
  %264 = fadd double %250, %262
  %265 = fptrunc double %263 to float
  %266 = fptrunc double %264 to float
  %267 = load i32, ptr %18, align 4, !tbaa !5
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds { float, float }, ptr %165, i64 %268
  %270 = getelementptr inbounds { float, float }, ptr %269, i32 0, i32 0
  %271 = getelementptr inbounds { float, float }, ptr %269, i32 0, i32 1
  store float %265, ptr %270, align 8
  store float %266, ptr %271, align 4
  br label %272

272:                                              ; preds = %241
  %273 = load i32, ptr %18, align 4, !tbaa !5
  %274 = add i32 %273, 1
  store i32 %274, ptr %18, align 4, !tbaa !5
  br label %237, !llvm.loop !17

275:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  %276 = load i32, ptr %13, align 4, !tbaa !5
  %277 = load i32, ptr %9, align 4, !tbaa !5
  %278 = load i32, ptr %6, align 4, !tbaa !5
  %279 = load i32, ptr %7, align 4, !tbaa !5
  %280 = load float, ptr %8, align 4, !tbaa !11
  %281 = call ptr @firpfb_crcf_create_rnyquist(i32 noundef %276, i32 noundef %277, i32 noundef %278, i32 noundef %279, float noundef %280)
  store ptr %281, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  %282 = load i32, ptr %13, align 4, !tbaa !5
  %283 = load i32, ptr %9, align 4, !tbaa !5
  %284 = load i32, ptr %6, align 4, !tbaa !5
  %285 = load i32, ptr %7, align 4, !tbaa !5
  %286 = load float, ptr %8, align 4, !tbaa !11
  %287 = call ptr @firpfb_crcf_create_drnyquist(i32 noundef %282, i32 noundef %283, i32 noundef %284, i32 noundef %285, float noundef %286)
  store ptr %287, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  store i32 0, ptr %30, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  store float 0x3FEEB851E0000000, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  store float 5.000000e-01, ptr %32, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  store float 0.000000e+00, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  store float 0.000000e+00, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  store float 0.000000e+00, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  store i32 0, ptr %36, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  store i32 0, ptr %37, align 4, !tbaa !5
  %288 = load i32, ptr %10, align 4, !tbaa !5
  %289 = add i32 %288, 64
  %290 = zext i32 %289 to i64
  %291 = alloca float, i64 %290, align 16
  store i64 %290, ptr %38, align 8
  %292 = load i32, ptr %10, align 4, !tbaa !5
  %293 = add i32 %292, 64
  %294 = zext i32 %293 to i64
  %295 = alloca float, i64 %294, align 16
  store i64 %294, ptr %39, align 8
  %296 = load i32, ptr %10, align 4, !tbaa !5
  %297 = add i32 %296, 64
  %298 = zext i32 %297 to i64
  %299 = alloca float, i64 %298, align 16
  store i64 %298, ptr %40, align 8
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %300

300:                                              ; preds = %447, %275
  %301 = load i32, ptr %18, align 4, !tbaa !5
  %302 = load i32, ptr %19, align 4, !tbaa !5
  %303 = icmp ult i32 %301, %302
  br i1 %303, label %304, label %450

304:                                              ; preds = %300
  %305 = load ptr, ptr %28, align 8, !tbaa !9
  %306 = load i32, ptr %18, align 4, !tbaa !5
  %307 = zext i32 %306 to i64
  %308 = getelementptr inbounds { float, float }, ptr %165, i64 %307
  %309 = getelementptr inbounds { float, float }, ptr %308, i32 0, i32 0
  %310 = load float, ptr %309, align 8
  %311 = getelementptr inbounds { float, float }, ptr %308, i32 0, i32 1
  %312 = load float, ptr %311, align 4
  %313 = getelementptr inbounds { float, float }, ptr %41, i32 0, i32 0
  %314 = getelementptr inbounds { float, float }, ptr %41, i32 0, i32 1
  store float %310, ptr %313, align 4
  store float %312, ptr %314, align 4
  %315 = load <2 x float>, ptr %41, align 4
  %316 = call i32 @firpfb_crcf_push(ptr noundef %305, <2 x float> noundef %315)
  %317 = load ptr, ptr %29, align 8, !tbaa !9
  %318 = load i32, ptr %18, align 4, !tbaa !5
  %319 = zext i32 %318 to i64
  %320 = getelementptr inbounds { float, float }, ptr %165, i64 %319
  %321 = getelementptr inbounds { float, float }, ptr %320, i32 0, i32 0
  %322 = load float, ptr %321, align 8
  %323 = getelementptr inbounds { float, float }, ptr %320, i32 0, i32 1
  %324 = load float, ptr %323, align 4
  %325 = getelementptr inbounds { float, float }, ptr %42, i32 0, i32 0
  %326 = getelementptr inbounds { float, float }, ptr %42, i32 0, i32 1
  store float %322, ptr %325, align 4
  store float %324, ptr %326, align 4
  %327 = load <2 x float>, ptr %42, align 4
  %328 = call i32 @firpfb_crcf_push(ptr noundef %317, <2 x float> noundef %327)
  %329 = load i32, ptr %37, align 4, !tbaa !5
  %330 = icmp sle i32 %329, 0
  br i1 %330, label %331, label %444

331:                                              ; preds = %304
  store i32 2, ptr %37, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #10
  %332 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 0
  %333 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 1
  store float 0.000000e+00, ptr %332, align 4
  store float 0.000000e+00, ptr %333, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %334 = getelementptr inbounds { float, float }, ptr %44, i32 0, i32 0
  %335 = getelementptr inbounds { float, float }, ptr %44, i32 0, i32 1
  store float 0.000000e+00, ptr %334, align 4
  store float 0.000000e+00, ptr %335, align 4
  %336 = load ptr, ptr %28, align 8, !tbaa !9
  %337 = load i32, ptr %36, align 4, !tbaa !5
  %338 = call i32 @firpfb_crcf_execute(ptr noundef %336, i32 noundef %337, ptr noundef %43)
  %339 = load ptr, ptr %29, align 8, !tbaa !9
  %340 = load i32, ptr %36, align 4, !tbaa !5
  %341 = call i32 @firpfb_crcf_execute(ptr noundef %339, i32 noundef %340, ptr noundef %44)
  %342 = load i32, ptr %6, align 4, !tbaa !5
  %343 = uitofp i32 %342 to float
  %344 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 0
  %345 = load float, ptr %344, align 4
  %346 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 1
  %347 = load float, ptr %346, align 4
  %348 = fdiv float %345, %343
  %349 = fdiv float %347, %343
  %350 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 0
  %351 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 1
  store float %348, ptr %350, align 4
  store float %349, ptr %351, align 4
  %352 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 0
  %353 = load float, ptr %352, align 4
  %354 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 1
  %355 = load float, ptr %354, align 4
  %356 = load i32, ptr %30, align 4, !tbaa !5
  %357 = zext i32 %356 to i64
  %358 = getelementptr inbounds { float, float }, ptr %169, i64 %357
  %359 = getelementptr inbounds { float, float }, ptr %358, i32 0, i32 0
  %360 = getelementptr inbounds { float, float }, ptr %358, i32 0, i32 1
  store float %353, ptr %359, align 8
  store float %355, ptr %360, align 4
  %361 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 0
  %362 = load float, ptr %361, align 4
  %363 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 1
  %364 = load float, ptr %363, align 4
  %365 = fneg float %364
  %366 = getelementptr inbounds { float, float }, ptr %44, i32 0, i32 0
  %367 = load float, ptr %366, align 4
  %368 = getelementptr inbounds { float, float }, ptr %44, i32 0, i32 1
  %369 = load float, ptr %368, align 4
  %370 = fmul float %362, %367
  %371 = fmul float %365, %369
  %372 = fmul float %362, %369
  %373 = fmul float %365, %367
  %374 = fsub float %370, %371
  %375 = fadd float %372, %373
  %376 = fcmp uno float %374, %374
  br i1 %376, label %377, label %385, !prof !18

377:                                              ; preds = %331
  %378 = fcmp uno float %375, %375
  br i1 %378, label %379, label %385, !prof !18

379:                                              ; preds = %377
  %380 = call <2 x float> @__mulsc3(float noundef %362, float noundef %365, float noundef %367, float noundef %369) #10
  store <2 x float> %380, ptr %45, align 4
  %381 = getelementptr inbounds { float, float }, ptr %45, i32 0, i32 0
  %382 = load float, ptr %381, align 4
  %383 = getelementptr inbounds { float, float }, ptr %45, i32 0, i32 1
  %384 = load float, ptr %383, align 4
  br label %385

385:                                              ; preds = %379, %377, %331
  %386 = phi float [ %374, %331 ], [ %374, %377 ], [ %382, %379 ]
  %387 = phi float [ %375, %331 ], [ %375, %377 ], [ %384, %379 ]
  store float %386, ptr %33, align 4, !tbaa !11
  %388 = load float, ptr %31, align 4, !tbaa !11
  %389 = load float, ptr %34, align 4, !tbaa !11
  %390 = load float, ptr %32, align 4, !tbaa !11
  %391 = load float, ptr %33, align 4, !tbaa !11
  %392 = fmul float %390, %391
  %393 = call float @llvm.fmuladd.f32(float %388, float %389, float %392)
  store float %393, ptr %34, align 4, !tbaa !11
  %394 = load float, ptr %34, align 4, !tbaa !11
  %395 = load float, ptr %35, align 4, !tbaa !11
  %396 = fadd float %395, %394
  store float %396, ptr %35, align 4, !tbaa !11
  %397 = load float, ptr %35, align 4, !tbaa !11
  %398 = call float @llvm.round.f32(float %397)
  %399 = fptosi float %398 to i32
  store i32 %399, ptr %36, align 4, !tbaa !5
  br label %400

400:                                              ; preds = %403, %385
  %401 = load i32, ptr %36, align 4, !tbaa !5
  %402 = icmp slt i32 %401, 0
  br i1 %402, label %403, label %413

403:                                              ; preds = %400
  %404 = load i32, ptr %9, align 4, !tbaa !5
  %405 = load i32, ptr %36, align 4, !tbaa !5
  %406 = add i32 %405, %404
  store i32 %406, ptr %36, align 4, !tbaa !5
  %407 = load i32, ptr %9, align 4, !tbaa !5
  %408 = uitofp i32 %407 to float
  %409 = load float, ptr %35, align 4, !tbaa !11
  %410 = fadd float %409, %408
  store float %410, ptr %35, align 4, !tbaa !11
  %411 = load i32, ptr %37, align 4, !tbaa !5
  %412 = add nsw i32 %411, -1
  store i32 %412, ptr %37, align 4, !tbaa !5
  br label %400, !llvm.loop !19

413:                                              ; preds = %400
  br label %414

414:                                              ; preds = %419, %413
  %415 = load i32, ptr %36, align 4, !tbaa !5
  %416 = load i32, ptr %9, align 4, !tbaa !5
  %417 = sub i32 %416, 1
  %418 = icmp ugt i32 %415, %417
  br i1 %418, label %419, label %429

419:                                              ; preds = %414
  %420 = load i32, ptr %9, align 4, !tbaa !5
  %421 = load i32, ptr %36, align 4, !tbaa !5
  %422 = sub i32 %421, %420
  store i32 %422, ptr %36, align 4, !tbaa !5
  %423 = load i32, ptr %9, align 4, !tbaa !5
  %424 = uitofp i32 %423 to float
  %425 = load float, ptr %35, align 4, !tbaa !11
  %426 = fsub float %425, %424
  store float %426, ptr %35, align 4, !tbaa !11
  %427 = load i32, ptr %37, align 4, !tbaa !5
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %37, align 4, !tbaa !5
  br label %414, !llvm.loop !20

429:                                              ; preds = %414
  %430 = load float, ptr %33, align 4, !tbaa !11
  %431 = load i32, ptr %30, align 4, !tbaa !5
  %432 = zext i32 %431 to i64
  %433 = getelementptr inbounds float, ptr %291, i64 %432
  store float %430, ptr %433, align 4, !tbaa !11
  %434 = load float, ptr %34, align 4, !tbaa !11
  %435 = load i32, ptr %30, align 4, !tbaa !5
  %436 = zext i32 %435 to i64
  %437 = getelementptr inbounds float, ptr %295, i64 %436
  store float %434, ptr %437, align 4, !tbaa !11
  %438 = load float, ptr %35, align 4, !tbaa !11
  %439 = load i32, ptr %30, align 4, !tbaa !5
  %440 = zext i32 %439 to i64
  %441 = getelementptr inbounds float, ptr %299, i64 %440
  store float %438, ptr %441, align 4, !tbaa !11
  %442 = load i32, ptr %30, align 4, !tbaa !5
  %443 = add i32 %442, 1
  store i32 %443, ptr %30, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  br label %444

444:                                              ; preds = %429, %304
  %445 = load i32, ptr %37, align 4, !tbaa !5
  %446 = add nsw i32 %445, -1
  store i32 %446, ptr %37, align 4, !tbaa !5
  br label %447

447:                                              ; preds = %444
  %448 = load i32, ptr %18, align 4, !tbaa !5
  %449 = add i32 %448, 1
  store i32 %449, ptr %18, align 4, !tbaa !5
  br label %300, !llvm.loop !21

450:                                              ; preds = %300
  %451 = load ptr, ptr %28, align 8, !tbaa !9
  %452 = call i32 @firpfb_crcf_destroy(ptr noundef %451)
  %453 = load ptr, ptr %29, align 8, !tbaa !9
  %454 = call i32 @firpfb_crcf_destroy(ptr noundef %453)
  %455 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  %456 = load i32, ptr %30, align 4, !tbaa !5
  %457 = sub i32 %456, 10
  store i32 %457, ptr %18, align 4, !tbaa !5
  br label %458

458:                                              ; preds = %482, %450
  %459 = load i32, ptr %18, align 4, !tbaa !5
  %460 = load i32, ptr %30, align 4, !tbaa !5
  %461 = icmp ult i32 %459, %460
  br i1 %461, label %462, label %485

462:                                              ; preds = %458
  %463 = load i32, ptr %18, align 4, !tbaa !5
  %464 = add i32 %463, 1
  %465 = load i32, ptr %18, align 4, !tbaa !5
  %466 = zext i32 %465 to i64
  %467 = getelementptr inbounds { float, float }, ptr %169, i64 %466
  %468 = getelementptr inbounds { float, float }, ptr %467, i32 0, i32 0
  %469 = load float, ptr %468, align 8
  %470 = getelementptr inbounds { float, float }, ptr %467, i32 0, i32 1
  %471 = load float, ptr %470, align 4
  %472 = fpext float %469 to double
  %473 = load i32, ptr %18, align 4, !tbaa !5
  %474 = zext i32 %473 to i64
  %475 = getelementptr inbounds { float, float }, ptr %169, i64 %474
  %476 = getelementptr inbounds { float, float }, ptr %475, i32 0, i32 0
  %477 = load float, ptr %476, align 8
  %478 = getelementptr inbounds { float, float }, ptr %475, i32 0, i32 1
  %479 = load float, ptr %478, align 4
  %480 = fpext float %479 to double
  %481 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef %464, double noundef %472, double noundef %480)
  br label %482

482:                                              ; preds = %462
  %483 = load i32, ptr %18, align 4, !tbaa !5
  %484 = add i32 %483, 1
  store i32 %484, ptr %18, align 4, !tbaa !5
  br label %458, !llvm.loop !22

485:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %486 = call noalias ptr @fopen(ptr noundef @.str.21, ptr noundef @.str.22)
  store ptr %486, ptr %46, align 8, !tbaa !9
  %487 = load ptr, ptr %46, align 8, !tbaa !9
  %488 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %487, ptr noundef @.str.23, ptr noundef @.str.21) #10
  %489 = load ptr, ptr %46, align 8, !tbaa !9
  %490 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %489, ptr noundef @.str.24) #10
  %491 = load ptr, ptr %46, align 8, !tbaa !9
  %492 = load i32, ptr %6, align 4, !tbaa !5
  %493 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %491, ptr noundef @.str.25, i32 noundef %492) #10
  %494 = load ptr, ptr %46, align 8, !tbaa !9
  %495 = load i32, ptr %7, align 4, !tbaa !5
  %496 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %494, ptr noundef @.str.26, i32 noundef %495) #10
  %497 = load ptr, ptr %46, align 8, !tbaa !9
  %498 = load float, ptr %8, align 4, !tbaa !11
  %499 = fpext float %498 to double
  %500 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %497, ptr noundef @.str.27, double noundef %499) #10
  %501 = load ptr, ptr %46, align 8, !tbaa !9
  %502 = load i32, ptr %9, align 4, !tbaa !5
  %503 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %501, ptr noundef @.str.28, i32 noundef %502) #10
  %504 = load ptr, ptr %46, align 8, !tbaa !9
  %505 = load i32, ptr %10, align 4, !tbaa !5
  %506 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %504, ptr noundef @.str.29, i32 noundef %505) #10
  %507 = load ptr, ptr %46, align 8, !tbaa !9
  %508 = load i32, ptr %30, align 4, !tbaa !5
  %509 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %507, ptr noundef @.str.30, i32 noundef %508) #10
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %510

510:                                              ; preds = %535, %485
  %511 = load i32, ptr %18, align 4, !tbaa !5
  %512 = load i32, ptr %10, align 4, !tbaa !5
  %513 = icmp ult i32 %511, %512
  br i1 %513, label %514, label %538

514:                                              ; preds = %510
  %515 = load ptr, ptr %46, align 8, !tbaa !9
  %516 = load i32, ptr %18, align 4, !tbaa !5
  %517 = add i32 %516, 1
  %518 = load i32, ptr %18, align 4, !tbaa !5
  %519 = zext i32 %518 to i64
  %520 = getelementptr inbounds { float, float }, ptr %159, i64 %519
  %521 = getelementptr inbounds { float, float }, ptr %520, i32 0, i32 0
  %522 = load float, ptr %521, align 8
  %523 = getelementptr inbounds { float, float }, ptr %520, i32 0, i32 1
  %524 = load float, ptr %523, align 4
  %525 = fpext float %522 to double
  %526 = load i32, ptr %18, align 4, !tbaa !5
  %527 = zext i32 %526 to i64
  %528 = getelementptr inbounds { float, float }, ptr %159, i64 %527
  %529 = getelementptr inbounds { float, float }, ptr %528, i32 0, i32 0
  %530 = load float, ptr %529, align 8
  %531 = getelementptr inbounds { float, float }, ptr %528, i32 0, i32 1
  %532 = load float, ptr %531, align 4
  %533 = fpext float %532 to double
  %534 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %515, ptr noundef @.str.31, i32 noundef %517, double noundef %525, double noundef %533) #10
  br label %535

535:                                              ; preds = %514
  %536 = load i32, ptr %18, align 4, !tbaa !5
  %537 = add i32 %536, 1
  store i32 %537, ptr %18, align 4, !tbaa !5
  br label %510, !llvm.loop !23

538:                                              ; preds = %510
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %539

539:                                              ; preds = %564, %538
  %540 = load i32, ptr %18, align 4, !tbaa !5
  %541 = load i32, ptr %19, align 4, !tbaa !5
  %542 = icmp ult i32 %540, %541
  br i1 %542, label %543, label %567

543:                                              ; preds = %539
  %544 = load ptr, ptr %46, align 8, !tbaa !9
  %545 = load i32, ptr %18, align 4, !tbaa !5
  %546 = add i32 %545, 1
  %547 = load i32, ptr %18, align 4, !tbaa !5
  %548 = zext i32 %547 to i64
  %549 = getelementptr inbounds { float, float }, ptr %162, i64 %548
  %550 = getelementptr inbounds { float, float }, ptr %549, i32 0, i32 0
  %551 = load float, ptr %550, align 8
  %552 = getelementptr inbounds { float, float }, ptr %549, i32 0, i32 1
  %553 = load float, ptr %552, align 4
  %554 = fpext float %551 to double
  %555 = load i32, ptr %18, align 4, !tbaa !5
  %556 = zext i32 %555 to i64
  %557 = getelementptr inbounds { float, float }, ptr %162, i64 %556
  %558 = getelementptr inbounds { float, float }, ptr %557, i32 0, i32 0
  %559 = load float, ptr %558, align 8
  %560 = getelementptr inbounds { float, float }, ptr %557, i32 0, i32 1
  %561 = load float, ptr %560, align 4
  %562 = fpext float %561 to double
  %563 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %544, ptr noundef @.str.32, i32 noundef %546, double noundef %554, double noundef %562) #10
  br label %564

564:                                              ; preds = %543
  %565 = load i32, ptr %18, align 4, !tbaa !5
  %566 = add i32 %565, 1
  store i32 %566, ptr %18, align 4, !tbaa !5
  br label %539, !llvm.loop !24

567:                                              ; preds = %539
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %568

568:                                              ; preds = %593, %567
  %569 = load i32, ptr %18, align 4, !tbaa !5
  %570 = load i32, ptr %19, align 4, !tbaa !5
  %571 = icmp ult i32 %569, %570
  br i1 %571, label %572, label %596

572:                                              ; preds = %568
  %573 = load ptr, ptr %46, align 8, !tbaa !9
  %574 = load i32, ptr %18, align 4, !tbaa !5
  %575 = add i32 %574, 1
  %576 = load i32, ptr %18, align 4, !tbaa !5
  %577 = zext i32 %576 to i64
  %578 = getelementptr inbounds { float, float }, ptr %165, i64 %577
  %579 = getelementptr inbounds { float, float }, ptr %578, i32 0, i32 0
  %580 = load float, ptr %579, align 8
  %581 = getelementptr inbounds { float, float }, ptr %578, i32 0, i32 1
  %582 = load float, ptr %581, align 4
  %583 = fpext float %580 to double
  %584 = load i32, ptr %18, align 4, !tbaa !5
  %585 = zext i32 %584 to i64
  %586 = getelementptr inbounds { float, float }, ptr %165, i64 %585
  %587 = getelementptr inbounds { float, float }, ptr %586, i32 0, i32 0
  %588 = load float, ptr %587, align 8
  %589 = getelementptr inbounds { float, float }, ptr %586, i32 0, i32 1
  %590 = load float, ptr %589, align 4
  %591 = fpext float %590 to double
  %592 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %573, ptr noundef @.str.33, i32 noundef %575, double noundef %583, double noundef %591) #10
  br label %593

593:                                              ; preds = %572
  %594 = load i32, ptr %18, align 4, !tbaa !5
  %595 = add i32 %594, 1
  store i32 %595, ptr %18, align 4, !tbaa !5
  br label %568, !llvm.loop !25

596:                                              ; preds = %568
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %597

597:                                              ; preds = %649, %596
  %598 = load i32, ptr %18, align 4, !tbaa !5
  %599 = load i32, ptr %30, align 4, !tbaa !5
  %600 = icmp ult i32 %598, %599
  br i1 %600, label %601, label %652

601:                                              ; preds = %597
  %602 = load ptr, ptr %46, align 8, !tbaa !9
  %603 = load i32, ptr %18, align 4, !tbaa !5
  %604 = add i32 %603, 1
  %605 = load i32, ptr %18, align 4, !tbaa !5
  %606 = zext i32 %605 to i64
  %607 = getelementptr inbounds { float, float }, ptr %169, i64 %606
  %608 = getelementptr inbounds { float, float }, ptr %607, i32 0, i32 0
  %609 = load float, ptr %608, align 8
  %610 = getelementptr inbounds { float, float }, ptr %607, i32 0, i32 1
  %611 = load float, ptr %610, align 4
  %612 = fpext float %609 to double
  %613 = load i32, ptr %18, align 4, !tbaa !5
  %614 = zext i32 %613 to i64
  %615 = getelementptr inbounds { float, float }, ptr %169, i64 %614
  %616 = getelementptr inbounds { float, float }, ptr %615, i32 0, i32 0
  %617 = load float, ptr %616, align 8
  %618 = getelementptr inbounds { float, float }, ptr %615, i32 0, i32 1
  %619 = load float, ptr %618, align 4
  %620 = fpext float %619 to double
  %621 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %602, ptr noundef @.str.34, i32 noundef %604, double noundef %612, double noundef %620) #10
  %622 = load ptr, ptr %46, align 8, !tbaa !9
  %623 = load i32, ptr %18, align 4, !tbaa !5
  %624 = add i32 %623, 1
  %625 = load i32, ptr %18, align 4, !tbaa !5
  %626 = zext i32 %625 to i64
  %627 = getelementptr inbounds float, ptr %291, i64 %626
  %628 = load float, ptr %627, align 4, !tbaa !11
  %629 = fpext float %628 to double
  %630 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %622, ptr noundef @.str.35, i32 noundef %624, double noundef %629) #10
  %631 = load ptr, ptr %46, align 8, !tbaa !9
  %632 = load i32, ptr %18, align 4, !tbaa !5
  %633 = add i32 %632, 1
  %634 = load i32, ptr %18, align 4, !tbaa !5
  %635 = zext i32 %634 to i64
  %636 = getelementptr inbounds float, ptr %295, i64 %635
  %637 = load float, ptr %636, align 4, !tbaa !11
  %638 = fpext float %637 to double
  %639 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %631, ptr noundef @.str.36, i32 noundef %633, double noundef %638) #10
  %640 = load ptr, ptr %46, align 8, !tbaa !9
  %641 = load i32, ptr %18, align 4, !tbaa !5
  %642 = add i32 %641, 1
  %643 = load i32, ptr %18, align 4, !tbaa !5
  %644 = zext i32 %643 to i64
  %645 = getelementptr inbounds float, ptr %299, i64 %644
  %646 = load float, ptr %645, align 4, !tbaa !11
  %647 = fpext float %646 to double
  %648 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %640, ptr noundef @.str.37, i32 noundef %642, double noundef %647) #10
  br label %649

649:                                              ; preds = %601
  %650 = load i32, ptr %18, align 4, !tbaa !5
  %651 = add i32 %650, 1
  store i32 %651, ptr %18, align 4, !tbaa !5
  br label %597, !llvm.loop !26

652:                                              ; preds = %597
  %653 = load ptr, ptr %46, align 8, !tbaa !9
  %654 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %653, ptr noundef @.str.38) #10
  %655 = load ptr, ptr %46, align 8, !tbaa !9
  %656 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %655, ptr noundef @.str.39) #10
  %657 = load ptr, ptr %46, align 8, !tbaa !9
  %658 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %657, ptr noundef @.str.40) #10
  %659 = load ptr, ptr %46, align 8, !tbaa !9
  %660 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %659, ptr noundef @.str.41) #10
  %661 = load ptr, ptr %46, align 8, !tbaa !9
  %662 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %661, ptr noundef @.str.42) #10
  %663 = load ptr, ptr %46, align 8, !tbaa !9
  %664 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %663, ptr noundef @.str.38) #10
  %665 = load ptr, ptr %46, align 8, !tbaa !9
  %666 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %665, ptr noundef @.str.43) #10
  %667 = load ptr, ptr %46, align 8, !tbaa !9
  %668 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %667, ptr noundef @.str.44) #10
  %669 = load ptr, ptr %46, align 8, !tbaa !9
  %670 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %669, ptr noundef @.str.45) #10
  %671 = load ptr, ptr %46, align 8, !tbaa !9
  %672 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %671, ptr noundef @.str.46) #10
  %673 = load ptr, ptr %46, align 8, !tbaa !9
  %674 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %673, ptr noundef @.str.47) #10
  %675 = load ptr, ptr %46, align 8, !tbaa !9
  %676 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %675, ptr noundef @.str.48) #10
  %677 = load ptr, ptr %46, align 8, !tbaa !9
  %678 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %677, ptr noundef @.str.49) #10
  %679 = load ptr, ptr %46, align 8, !tbaa !9
  %680 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %679, ptr noundef @.str.50) #10
  %681 = load ptr, ptr %46, align 8, !tbaa !9
  %682 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %681, ptr noundef @.str.51) #10
  %683 = load ptr, ptr %46, align 8, !tbaa !9
  %684 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %683, ptr noundef @.str.46) #10
  %685 = load ptr, ptr %46, align 8, !tbaa !9
  %686 = call i32 @fclose(ptr noundef %685)
  %687 = call i32 (ptr, ...) @printf(ptr noundef @.str.52, ptr noundef @.str.21)
  %688 = call i32 (ptr, ...) @printf(ptr noundef @.str.53)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  %689 = load ptr, ptr %20, align 8
  call void @llvm.stackrestore.p0(ptr %689)
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  br label %690

690:                                              ; preds = %652, %56
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  %691 = load i32, ptr %3, align 4
  ret i32 %691
}

; Function Attrs: nounwind
declare void @srand(i32 noundef) #3

; Function Attrs: nounwind
declare i64 @time(ptr noundef) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #4

; Function Attrs: nounwind
declare i32 @getopt(i32 noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #5

declare i32 @liquid_getopt_str2firfilt(ptr noundef) #1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #3

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #6

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #7

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare double @atof(ptr noundef nonnull) #7

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #8

; Function Attrs: nounwind
declare i32 @rand() #3

declare ptr @firinterp_crcf_create_prototype(i32 noundef, i32 noundef, i32 noundef, float noundef, float noundef) #1

declare i32 @firinterp_crcf_execute(ptr noundef, <2 x float> noundef, ptr noundef) #1

declare i32 @firinterp_crcf_destroy(ptr noundef) #1

; Function Attrs: nounwind
declare float @powf(float noundef, float noundef) #3

declare float @randnf(...) #1

declare ptr @firpfb_crcf_create_rnyquist(i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) #1

declare ptr @firpfb_crcf_create_drnyquist(i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) #1

declare i32 @firpfb_crcf_push(ptr noundef, <2 x float> noundef) #1

declare i32 @firpfb_crcf_execute(ptr noundef, i32 noundef, ptr noundef) #1

declare <2 x float> @__mulsc3(float, float, float, float)

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.round.f32(float) #9

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #4

declare i32 @firpfb_crcf_destroy(ptr noundef) #1

declare noalias ptr @fopen(ptr noundef, ptr noundef) #1

declare i32 @fclose(ptr noundef) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #8

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nosync nounwind willreturn }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = !{!"branch_weights", i32 1, i32 1048575}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@optarg = external local_unnamed_addr global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.12 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @usage() local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = alloca { float, float }, align 8
  %4 = alloca { float, float }, align 8
  %5 = tail call i64 @time(ptr noundef null) #13
  %6 = trunc i64 %5 to i32
  tail call void @srand(i32 noundef %6) #13
  br label %.thread

.thread:                                          ; preds = %.thread.backedge, %2
  %.0216 = phi float [ 0xBFC99999A0000000, %2 ], [ %.0216.be, %.thread.backedge ]
  %.0214 = phi float [ 0x3F947AE140000000, %2 ], [ %.0214.be, %.thread.backedge ]
  %.0211 = phi i32 [ 7, %2 ], [ %.0211.be, %.thread.backedge ]
  %.0206 = phi i32 [ 7, %2 ], [ %.0206.be, %.thread.backedge ]
  %.0204 = phi float [ 3.000000e+01, %2 ], [ %.0204.be, %.thread.backedge ]
  %.0190 = phi i32 [ 512, %2 ], [ %.0190.be, %.thread.backedge ]
  %.0188 = phi i32 [ 32, %2 ], [ %.0188.be, %.thread.backedge ]
  %.0186 = phi float [ 5.000000e-01, %2 ], [ %.0186.be, %.thread.backedge ]
  %.0185 = phi i32 [ 3, %2 ], [ %.0185.be, %.thread.backedge ]
  %7 = tail call i32 @getopt(i32 noundef %0, ptr noundef %1, ptr noundef nonnull @.str.10) #13
  switch i32 %7, label %48 [
    i32 -1, label %49
    i32 117, label %8
    i32 104, label %8
    i32 84, label %9
    i32 109, label %23
    i32 98, label %26
    i32 66, label %30
    i32 115, label %33
    i32 119, label %37
    i32 110, label %41
    i32 116, label %44
  ]

8:                                                ; preds = %.thread, %.thread
  tail call void @usage()
  br label %285

9:                                                ; preds = %.thread
  %10 = load ptr, ptr @optarg, align 8, !tbaa !5
  %11 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %10, ptr noundef nonnull dereferenceable(1) @.str.11) #14
  %12 = icmp eq i32 %11, 0
  br i1 %12, label %.thread.backedge, label %13

.thread.backedge:                                 ; preds = %9, %13, %44, %41, %37, %33, %30, %26, %23
  %.0216.be = phi float [ %47, %44 ], [ %.0216, %41 ], [ %.0216, %37 ], [ %.0216, %33 ], [ %.0216, %30 ], [ %.0216, %26 ], [ %.0216, %23 ], [ %.0216, %13 ], [ %.0216, %9 ]
  %.0214.be = phi float [ %.0214, %44 ], [ %.0214, %41 ], [ %40, %37 ], [ %.0214, %33 ], [ %.0214, %30 ], [ %.0214, %26 ], [ %.0214, %23 ], [ %.0214, %13 ], [ %.0214, %9 ]
  %.0211.be = phi i32 [ %.0211, %44 ], [ %.0211, %41 ], [ %.0211, %37 ], [ %.0211, %33 ], [ %.0211, %30 ], [ %.0211, %26 ], [ %.0211, %23 ], [ %16, %13 ], [ 12, %9 ]
  %.0206.be = phi i32 [ %.0206, %44 ], [ %.0206, %41 ], [ %.0206, %37 ], [ %.0206, %33 ], [ %.0206, %30 ], [ %.0206, %26 ], [ %.0206, %23 ], [ %14, %13 ], [ 11, %9 ]
  %.0204.be = phi float [ %.0204, %44 ], [ %.0204, %41 ], [ %.0204, %37 ], [ %36, %33 ], [ %.0204, %30 ], [ %.0204, %26 ], [ %.0204, %23 ], [ %.0204, %13 ], [ %.0204, %9 ]
  %.0190.be = phi i32 [ %.0190, %44 ], [ %43, %41 ], [ %.0190, %37 ], [ %.0190, %33 ], [ %.0190, %30 ], [ %.0190, %26 ], [ %.0190, %23 ], [ %.0190, %13 ], [ %.0190, %9 ]
  %.0188.be = phi i32 [ %.0188, %44 ], [ %.0188, %41 ], [ %.0188, %37 ], [ %.0188, %33 ], [ %32, %30 ], [ %.0188, %26 ], [ %.0188, %23 ], [ %.0188, %13 ], [ %.0188, %9 ]
  %.0186.be = phi float [ %.0186, %44 ], [ %.0186, %41 ], [ %.0186, %37 ], [ %.0186, %33 ], [ %.0186, %30 ], [ %29, %26 ], [ %.0186, %23 ], [ %.0186, %13 ], [ %.0186, %9 ]
  %.0185.be = phi i32 [ %.0185, %44 ], [ %.0185, %41 ], [ %.0185, %37 ], [ %.0185, %33 ], [ %.0185, %30 ], [ %.0185, %26 ], [ %25, %23 ], [ %.0185, %13 ], [ %.0185, %9 ]
  br label %.thread, !llvm.loop !9

13:                                               ; preds = %9
  %14 = tail call i32 @liquid_getopt_str2firfilt(ptr noundef %10) #13
  %15 = load ptr, ptr @optarg, align 8, !tbaa !5
  %16 = tail call i32 @liquid_getopt_str2firfilt(ptr noundef %15) #13
  %17 = icmp eq i32 %14, 0
  br i1 %17, label %18, label %.thread.backedge

18:                                               ; preds = %13
  %19 = load ptr, ptr @stderr, align 8, !tbaa !5
  %20 = load ptr, ptr %1, align 8, !tbaa !5
  %21 = load ptr, ptr @optarg, align 8, !tbaa !5
  %22 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %19, ptr noundef nonnull @.str.12, ptr noundef %20, ptr noundef %21) #15
  tail call void @exit(i32 noundef 1) #16
  unreachable

23:                                               ; preds = %.thread
  %24 = load ptr, ptr @optarg, align 8, !tbaa !5
  %25 = tail call i32 @atoi(ptr nocapture noundef %24) #14
  br label %.thread.backedge

26:                                               ; preds = %.thread
  %27 = load ptr, ptr @optarg, align 8, !tbaa !5
  %28 = tail call double @atof(ptr noundef %27) #14
  %29 = fptrunc double %28 to float
  br label %.thread.backedge

30:                                               ; preds = %.thread
  %31 = load ptr, ptr @optarg, align 8, !tbaa !5
  %32 = tail call i32 @atoi(ptr nocapture noundef %31) #14
  br label %.thread.backedge

33:                                               ; preds = %.thread
  %34 = load ptr, ptr @optarg, align 8, !tbaa !5
  %35 = tail call double @atof(ptr noundef %34) #14
  %36 = fptrunc double %35 to float
  br label %.thread.backedge

37:                                               ; preds = %.thread
  %38 = load ptr, ptr @optarg, align 8, !tbaa !5
  %39 = tail call double @atof(ptr noundef %38) #14
  %40 = fptrunc double %39 to float
  br label %.thread.backedge

41:                                               ; preds = %.thread
  %42 = load ptr, ptr @optarg, align 8, !tbaa !5
  %43 = tail call i32 @atoi(ptr nocapture noundef %42) #14
  br label %.thread.backedge

44:                                               ; preds = %.thread
  %45 = load ptr, ptr @optarg, align 8, !tbaa !5
  %46 = tail call double @atof(ptr noundef %45) #14
  %47 = fptrunc double %46 to float
  br label %.thread.backedge

48:                                               ; preds = %.thread
  tail call void @exit(i32 noundef 1) #16
  unreachable

49:                                               ; preds = %.thread
  %50 = icmp eq i32 %.0185, 0
  br i1 %50, label %51, label %54

51:                                               ; preds = %49
  %52 = load ptr, ptr @stderr, align 8, !tbaa !5
  %53 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %52, ptr noundef nonnull @.str.13) #15
  tail call void @exit(i32 noundef 1) #16
  unreachable

54:                                               ; preds = %49
  %55 = fcmp ole float %.0186, 0.000000e+00
  %56 = fcmp ogt float %.0186, 1.000000e+00
  %or.cond = or i1 %55, %56
  br i1 %or.cond, label %57, label %60

57:                                               ; preds = %54
  %58 = load ptr, ptr @stderr, align 8, !tbaa !5
  %59 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %58, ptr noundef nonnull @.str.14) #15
  tail call void @exit(i32 noundef 1) #16
  unreachable

60:                                               ; preds = %54
  %61 = icmp eq i32 %.0188, 0
  br i1 %61, label %62, label %65

62:                                               ; preds = %60
  %63 = load ptr, ptr @stderr, align 8, !tbaa !5
  %64 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %63, ptr noundef nonnull @.str.15) #15
  tail call void @exit(i32 noundef 1) #16
  unreachable

65:                                               ; preds = %60
  %66 = fcmp ugt float %.0214, 0.000000e+00
  br i1 %66, label %70, label %67

67:                                               ; preds = %65
  %68 = load ptr, ptr @stderr, align 8, !tbaa !5
  %69 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef nonnull @.str.16) #15
  tail call void @exit(i32 noundef 1) #16
  unreachable

70:                                               ; preds = %65
  %71 = icmp eq i32 %.0190, 0
  br i1 %71, label %72, label %75

72:                                               ; preds = %70
  %73 = load ptr, ptr @stderr, align 8, !tbaa !5
  %74 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %73, ptr noundef nonnull @.str.17) #15
  tail call void @exit(i32 noundef 1) #16
  unreachable

75:                                               ; preds = %70
  %76 = tail call float @llvm.fabs.f32(float %.0216)
  %or.cond3 = fcmp ogt float %76, 1.000000e+00
  br i1 %or.cond3, label %77, label %80

77:                                               ; preds = %75
  %78 = load ptr, ptr @stderr, align 8, !tbaa !5
  %79 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %78, ptr noundef nonnull @.str.18) #15
  tail call void @exit(i32 noundef 1) #16
  unreachable

80:                                               ; preds = %75
  %81 = shl i32 %.0190, 1
  %82 = zext i32 %.0190 to i64
  %83 = tail call ptr @llvm.stacksave.p0()
  %84 = alloca { float, float }, i64 %82, align 16
  %85 = zext i32 %81 to i64
  %86 = alloca { float, float }, i64 %85, align 16
  %87 = alloca { float, float }, i64 %85, align 16
  %88 = add i32 %.0190, 64
  %89 = zext i32 %88 to i64
  %90 = alloca { float, float }, i64 %89, align 16
  br label %91

91:                                               ; preds = %80, %91
  %indvars.iv = phi i64 [ 0, %80 ], [ %indvars.iv.next, %91 ]
  %92 = tail call i32 @rand() #13
  %93 = and i32 %92, 1
  %.not223 = icmp eq i32 %93, 0
  %94 = select i1 %.not223, double 0xBFE6A09E667F3BCD, double 0x3FE6A09E667F3BCD
  %95 = tail call i32 @rand() #13
  %96 = and i32 %95, 1
  %.not224 = icmp eq i32 %96, 0
  %97 = select i1 %.not224, double 0xBFE6A09E667F3BCD, double 0x3FE6A09E667F3BCD
  %98 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %97)
  %99 = fadd double %94, %98
  %100 = getelementptr inbounds { float, float }, ptr %84, i64 %indvars.iv
  %101 = insertelement <2 x double> poison, double %99, i64 0
  %102 = insertelement <2 x double> %101, double %97, i64 1
  %103 = fptrunc <2 x double> %102 to <2 x float>
  store <2 x float> %103, ptr %100, align 8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %82
  br i1 %exitcond.not, label %104, label %91, !llvm.loop !11

104:                                              ; preds = %91
  %105 = tail call ptr @firinterp_crcf_create_prototype(i32 noundef %.0206, i32 noundef 2, i32 noundef %.0185, float noundef %.0186, float noundef %.0216) #13
  br label %106

106:                                              ; preds = %104, %106
  %indvars.iv334 = phi i64 [ 0, %104 ], [ %indvars.iv.next335, %106 ]
  %107 = getelementptr inbounds { float, float }, ptr %84, i64 %indvars.iv334
  %108 = load <2 x float>, ptr %107, align 8
  %109 = shl nuw i64 %indvars.iv334, 1
  %110 = and i64 %109, 4294967294
  %111 = getelementptr inbounds { float, float }, ptr %86, i64 %110
  %112 = call i32 @firinterp_crcf_execute(ptr noundef %105, <2 x float> noundef %108, ptr noundef nonnull %111) #13
  %indvars.iv.next335 = add nuw nsw i64 %indvars.iv334, 1
  %exitcond338.not = icmp eq i64 %indvars.iv.next335, %82
  br i1 %exitcond338.not, label %113, label %106, !llvm.loop !12

113:                                              ; preds = %106
  %114 = call i32 @firinterp_crcf_destroy(ptr noundef %105) #13
  %115 = fdiv float %.0204, -2.000000e+01
  %116 = call float @powf(float noundef 1.000000e+01, float noundef %115) #13
  %.not = icmp eq i32 %81, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %113
  %117 = insertelement <2 x float> poison, float %116, i64 0
  %118 = shufflevector <2 x float> %117, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv339 = phi i64 [ %indvars.iv.next340, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %119 = getelementptr inbounds { float, float }, ptr %86, i64 %indvars.iv339
  %120 = getelementptr inbounds { float, float }, ptr %87, i64 %indvars.iv339
  %121 = load <2 x float>, ptr %119, align 8
  %122 = fpext <2 x float> %121 to <2 x double>
  %123 = call float (...) @randnf() #13
  %124 = call float (...) @randnf() #13
  %125 = fmul float %124, 0.000000e+00
  %126 = fadd float %123, %125
  %127 = insertelement <2 x float> poison, float %126, i64 0
  %128 = insertelement <2 x float> %127, float %124, i64 1
  %129 = fmul <2 x float> %118, %128
  %130 = fpext <2 x float> %129 to <2 x double>
  %131 = fmul <2 x double> %130, <double 0x3FE6A09E667F3BCD, double 0x3FE6A09E667F3BCD>
  %132 = fadd <2 x double> %131, %122
  %133 = fptrunc <2 x double> %132 to <2 x float>
  store <2 x float> %133, ptr %120, align 8
  %indvars.iv.next340 = add nuw nsw i64 %indvars.iv339, 1
  %exitcond343.not = icmp eq i64 %indvars.iv.next340, %85
  br i1 %exitcond343.not, label %._crit_edge, label %.lr.ph, !llvm.loop !13

._crit_edge:                                      ; preds = %.lr.ph, %113
  %134 = call ptr @firpfb_crcf_create_rnyquist(i32 noundef %.0211, i32 noundef %.0188, i32 noundef 2, i32 noundef %.0185, float noundef %.0186) #13
  %135 = call ptr @firpfb_crcf_create_drnyquist(i32 noundef %.0211, i32 noundef %.0188, i32 noundef 2, i32 noundef %.0185, float noundef %.0186) #13
  %136 = alloca float, i64 %89, align 16
  %137 = alloca float, i64 %89, align 16
  %138 = alloca float, i64 %89, align 16
  br i1 %.not, label %._crit_edge283, label %.lr.ph282

.lr.ph282:                                        ; preds = %._crit_edge
  %139 = uitofp i32 %.0188 to float
  %140 = add i32 %.0188, -1
  br label %141

141:                                              ; preds = %.lr.ph282, %193
  %indvars.iv344 = phi i64 [ 0, %.lr.ph282 ], [ %indvars.iv.next345, %193 ]
  %.0192280 = phi i32 [ 0, %.lr.ph282 ], [ %194, %193 ]
  %.0194279 = phi i32 [ 0, %.lr.ph282 ], [ %.3197, %193 ]
  %.0198278 = phi float [ 0.000000e+00, %.lr.ph282 ], [ %.3201, %193 ]
  %.0202277 = phi float [ 0.000000e+00, %.lr.ph282 ], [ %.1203, %193 ]
  %.0209276 = phi i32 [ 0, %.lr.ph282 ], [ %.1210, %193 ]
  %142 = getelementptr inbounds { float, float }, ptr %87, i64 %indvars.iv344
  %143 = load <2 x float>, ptr %142, align 8
  %144 = call i32 @firpfb_crcf_push(ptr noundef %134, <2 x float> noundef %143) #13
  %145 = call i32 @firpfb_crcf_push(ptr noundef %135, <2 x float> noundef %143) #13
  %146 = icmp slt i32 %.0192280, 1
  br i1 %146, label %147, label %193

147:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #13
  store <2 x float> zeroinitializer, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #13
  store <2 x float> zeroinitializer, ptr %4, align 8
  %148 = call i32 @firpfb_crcf_execute(ptr noundef %134, i32 noundef %.0194279, ptr noundef nonnull %3) #13
  %149 = call i32 @firpfb_crcf_execute(ptr noundef %135, i32 noundef %.0194279, ptr noundef nonnull %4) #13
  %150 = zext i32 %.0209276 to i64
  %151 = getelementptr inbounds { float, float }, ptr %90, i64 %150
  %152 = load <2 x float>, ptr %3, align 8
  %153 = fmul <2 x float> %152, <float 5.000000e-01, float 5.000000e-01>
  store <2 x float> %153, ptr %3, align 8
  store <2 x float> %153, ptr %151, align 8
  %154 = extractelement <2 x float> %153, i64 1
  %155 = fneg float %154
  %156 = load <2 x float>, ptr %4, align 8
  %157 = fmul <2 x float> %153, %156
  %shift = shufflevector <2 x float> %157, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %158 = fadd <2 x float> %157, %shift
  %159 = extractelement <2 x float> %158, i64 0
  %160 = fcmp uno float %159, 0.000000e+00
  br i1 %160, label %161, label %172, !prof !14

161:                                              ; preds = %147
  %162 = shufflevector <2 x float> %156, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %163 = fmul <2 x float> %153, %162
  %shift436 = shufflevector <2 x float> %163, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %164 = fsub <2 x float> %163, %shift436
  %165 = extractelement <2 x float> %164, i64 0
  %166 = fcmp uno float %165, 0.000000e+00
  br i1 %166, label %167, label %172, !prof !14

167:                                              ; preds = %161
  %168 = extractelement <2 x float> %153, i64 0
  %169 = extractelement <2 x float> %156, i64 0
  %170 = extractelement <2 x float> %156, i64 1
  %171 = call <2 x float> @__mulsc3(float noundef %168, float noundef %155, float noundef %169, float noundef %170) #13
  %.sroa.0.0.vec.extract = extractelement <2 x float> %171, i64 0
  br label %172

172:                                              ; preds = %167, %161, %147
  %173 = phi float [ %159, %147 ], [ %159, %161 ], [ %.sroa.0.0.vec.extract, %167 ]
  %174 = fmul float %173, 5.000000e-01
  %175 = call float @llvm.fmuladd.f32(float %.0202277, float 0x3FEEB851E0000000, float %174)
  %176 = fadd float %.0198278, %175
  %177 = call float @llvm.round.f32(float %176)
  %178 = fptosi float %177 to i32
  %179 = icmp slt i32 %178, 0
  br i1 %179, label %.lr.ph264, label %.preheader229

.preheader229:                                    ; preds = %.lr.ph264, %172
  %.1199.lcssa = phi float [ %176, %172 ], [ %182, %.lr.ph264 ]
  %.1195.lcssa = phi i32 [ %178, %172 ], [ %181, %.lr.ph264 ]
  %.1193.lcssa = phi i32 [ 2, %172 ], [ %183, %.lr.ph264 ]
  %180 = icmp ugt i32 %.1195.lcssa, %140
  br i1 %180, label %.lr.ph270, label %._crit_edge271

.lr.ph264:                                        ; preds = %172, %.lr.ph264
  %.1193262 = phi i32 [ %183, %.lr.ph264 ], [ 2, %172 ]
  %.1195261 = phi i32 [ %181, %.lr.ph264 ], [ %178, %172 ]
  %.1199260 = phi float [ %182, %.lr.ph264 ], [ %176, %172 ]
  %181 = add i32 %.1195261, %.0188
  %182 = fadd float %.1199260, %139
  %183 = add nsw i32 %.1193262, -1
  %184 = icmp slt i32 %181, 0
  br i1 %184, label %.lr.ph264, label %.preheader229, !llvm.loop !15

.lr.ph270:                                        ; preds = %.preheader229, %.lr.ph270
  %.2269 = phi i32 [ %187, %.lr.ph270 ], [ %.1193.lcssa, %.preheader229 ]
  %.2196268 = phi i32 [ %185, %.lr.ph270 ], [ %.1195.lcssa, %.preheader229 ]
  %.2200267 = phi float [ %186, %.lr.ph270 ], [ %.1199.lcssa, %.preheader229 ]
  %185 = sub i32 %.2196268, %.0188
  %186 = fsub float %.2200267, %139
  %187 = add nsw i32 %.2269, 1
  %188 = icmp ugt i32 %185, %140
  br i1 %188, label %.lr.ph270, label %._crit_edge271, !llvm.loop !16

._crit_edge271:                                   ; preds = %.lr.ph270, %.preheader229
  %.2200.lcssa = phi float [ %.1199.lcssa, %.preheader229 ], [ %186, %.lr.ph270 ]
  %.2196.lcssa = phi i32 [ %.1195.lcssa, %.preheader229 ], [ %185, %.lr.ph270 ]
  %.2.lcssa = phi i32 [ %.1193.lcssa, %.preheader229 ], [ %187, %.lr.ph270 ]
  %189 = getelementptr inbounds float, ptr %136, i64 %150
  store float %173, ptr %189, align 4, !tbaa !17
  %190 = getelementptr inbounds float, ptr %137, i64 %150
  store float %175, ptr %190, align 4, !tbaa !17
  %191 = getelementptr inbounds float, ptr %138, i64 %150
  store float %.2200.lcssa, ptr %191, align 4, !tbaa !17
  %192 = add i32 %.0209276, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #13
  br label %193

193:                                              ; preds = %._crit_edge271, %141
  %.1210 = phi i32 [ %192, %._crit_edge271 ], [ %.0209276, %141 ]
  %.1203 = phi float [ %175, %._crit_edge271 ], [ %.0202277, %141 ]
  %.3201 = phi float [ %.2200.lcssa, %._crit_edge271 ], [ %.0198278, %141 ]
  %.3197 = phi i32 [ %.2196.lcssa, %._crit_edge271 ], [ %.0194279, %141 ]
  %.3 = phi i32 [ %.2.lcssa, %._crit_edge271 ], [ %.0192280, %141 ]
  %194 = add nsw i32 %.3, -1
  %indvars.iv.next345 = add nuw nsw i64 %indvars.iv344, 1
  %exitcond348.not = icmp eq i64 %indvars.iv.next345, %85
  br i1 %exitcond348.not, label %._crit_edge283, label %141, !llvm.loop !19

._crit_edge283:                                   ; preds = %193, %._crit_edge
  %.0209.lcssa = phi i32 [ 0, %._crit_edge ], [ %.1210, %193 ]
  %195 = call i32 @firpfb_crcf_destroy(ptr noundef %134) #13
  %196 = call i32 @firpfb_crcf_destroy(ptr noundef %135) #13
  %197 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19)
  %198 = icmp ugt i32 %.0209.lcssa, 9
  br i1 %198, label %.lr.ph287.preheader, label %._crit_edge288

.lr.ph287.preheader:                              ; preds = %._crit_edge283
  %199 = add i32 %.0209.lcssa, -10
  %200 = zext i32 %199 to i64
  %201 = zext i32 %.0209.lcssa to i64
  br label %.lr.ph287

.lr.ph287:                                        ; preds = %.lr.ph287.preheader, %.lr.ph287
  %indvars.iv349 = phi i64 [ %200, %.lr.ph287.preheader ], [ %indvars.iv.next350, %.lr.ph287 ]
  %indvars.iv.next350 = add nuw nsw i64 %indvars.iv349, 1
  %202 = getelementptr inbounds { float, float }, ptr %90, i64 %indvars.iv349
  %203 = load float, ptr %202, align 8
  %204 = getelementptr inbounds i8, ptr %202, i64 4
  %205 = fpext float %203 to double
  %206 = load float, ptr %204, align 4
  %207 = fpext float %206 to double
  %208 = trunc nuw i64 %indvars.iv.next350 to i32
  %209 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef %208, double noundef %205, double noundef %207)
  %210 = icmp ult i64 %indvars.iv.next350, %201
  br i1 %210, label %.lr.ph287, label %._crit_edge288, !llvm.loop !20

._crit_edge288:                                   ; preds = %.lr.ph287, %._crit_edge283
  %211 = call noalias ptr @fopen(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.22)
  %212 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.21) #13
  %213 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.24) #13
  %214 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.25, i32 noundef 2) #13
  %215 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.26, i32 noundef %.0185) #13
  %216 = fpext float %.0186 to double
  %217 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.27, double noundef %216) #13
  %218 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.28, i32 noundef %.0188) #13
  %219 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.29, i32 noundef %.0190) #13
  %220 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.30, i32 noundef %.0209.lcssa) #13
  %umax = call i32 @llvm.umax.i32(i32 %.0190, i32 1)
  %wide.trip.count355 = zext i32 %umax to i64
  br label %221

.preheader228:                                    ; preds = %221
  br i1 %.not, label %.preheader, label %.lr.ph291

221:                                              ; preds = %._crit_edge288, %221
  %indvars.iv352 = phi i64 [ 0, %._crit_edge288 ], [ %indvars.iv.next353, %221 ]
  %indvars.iv.next353 = add nuw nsw i64 %indvars.iv352, 1
  %222 = getelementptr inbounds { float, float }, ptr %84, i64 %indvars.iv352
  %223 = load float, ptr %222, align 8
  %224 = getelementptr inbounds i8, ptr %222, i64 4
  %225 = fpext float %223 to double
  %226 = load float, ptr %224, align 4
  %227 = fpext float %226 to double
  %228 = trunc nuw i64 %indvars.iv.next353 to i32
  %229 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.31, i32 noundef %228, double noundef %225, double noundef %227) #13
  %exitcond356.not = icmp eq i64 %indvars.iv.next353, %wide.trip.count355
  br i1 %exitcond356.not, label %.preheader228, label %221, !llvm.loop !21

.preheader227:                                    ; preds = %.lr.ph291
  br i1 %.not, label %.preheader, label %.lr.ph293

.lr.ph291:                                        ; preds = %.preheader228, %.lr.ph291
  %indvars.iv357 = phi i64 [ %indvars.iv.next358, %.lr.ph291 ], [ 0, %.preheader228 ]
  %indvars.iv.next358 = add nuw nsw i64 %indvars.iv357, 1
  %230 = getelementptr inbounds { float, float }, ptr %86, i64 %indvars.iv357
  %231 = load float, ptr %230, align 8
  %232 = getelementptr inbounds i8, ptr %230, i64 4
  %233 = fpext float %231 to double
  %234 = load float, ptr %232, align 4
  %235 = fpext float %234 to double
  %236 = trunc nuw i64 %indvars.iv.next358 to i32
  %237 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.32, i32 noundef %236, double noundef %233, double noundef %235) #13
  %exitcond361.not = icmp eq i64 %indvars.iv.next358, %85
  br i1 %exitcond361.not, label %.preheader227, label %.lr.ph291, !llvm.loop !22

.preheader:                                       ; preds = %.lr.ph293, %.preheader228, %.preheader227
  %.not300 = icmp eq i32 %.0209.lcssa, 0
  br i1 %.not300, label %._crit_edge296, label %.lr.ph295.preheader

.lr.ph295.preheader:                              ; preds = %.preheader
  %wide.trip.count370 = zext i32 %.0209.lcssa to i64
  br label %.lr.ph295

.lr.ph293:                                        ; preds = %.preheader227, %.lr.ph293
  %indvars.iv362 = phi i64 [ %indvars.iv.next363, %.lr.ph293 ], [ 0, %.preheader227 ]
  %indvars.iv.next363 = add nuw nsw i64 %indvars.iv362, 1
  %238 = getelementptr inbounds { float, float }, ptr %87, i64 %indvars.iv362
  %239 = load float, ptr %238, align 8
  %240 = getelementptr inbounds i8, ptr %238, i64 4
  %241 = fpext float %239 to double
  %242 = load float, ptr %240, align 4
  %243 = fpext float %242 to double
  %244 = trunc nuw i64 %indvars.iv.next363 to i32
  %245 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.33, i32 noundef %244, double noundef %241, double noundef %243) #13
  %exitcond366.not = icmp eq i64 %indvars.iv.next363, %85
  br i1 %exitcond366.not, label %.preheader, label %.lr.ph293, !llvm.loop !23

.lr.ph295:                                        ; preds = %.lr.ph295.preheader, %.lr.ph295
  %indvars.iv367 = phi i64 [ 0, %.lr.ph295.preheader ], [ %indvars.iv.next368, %.lr.ph295 ]
  %indvars.iv.next368 = add nuw nsw i64 %indvars.iv367, 1
  %246 = getelementptr inbounds { float, float }, ptr %90, i64 %indvars.iv367
  %247 = load float, ptr %246, align 8
  %248 = getelementptr inbounds i8, ptr %246, i64 4
  %249 = fpext float %247 to double
  %250 = load float, ptr %248, align 4
  %251 = fpext float %250 to double
  %252 = trunc nuw i64 %indvars.iv.next368 to i32
  %253 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.34, i32 noundef %252, double noundef %249, double noundef %251) #13
  %254 = getelementptr inbounds float, ptr %136, i64 %indvars.iv367
  %255 = load float, ptr %254, align 4, !tbaa !17
  %256 = fpext float %255 to double
  %257 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.35, i32 noundef %252, double noundef %256) #13
  %258 = getelementptr inbounds float, ptr %137, i64 %indvars.iv367
  %259 = load float, ptr %258, align 4, !tbaa !17
  %260 = fpext float %259 to double
  %261 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.36, i32 noundef %252, double noundef %260) #13
  %262 = getelementptr inbounds float, ptr %138, i64 %indvars.iv367
  %263 = load float, ptr %262, align 4, !tbaa !17
  %264 = fpext float %263 to double
  %265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.37, i32 noundef %252, double noundef %264) #13
  %exitcond371.not = icmp eq i64 %indvars.iv.next368, %wide.trip.count370
  br i1 %exitcond371.not, label %._crit_edge296, label %.lr.ph295, !llvm.loop !24

._crit_edge296:                                   ; preds = %.lr.ph295, %.preheader
  %266 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.38) #13
  %267 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.39) #13
  %268 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.40) #13
  %269 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.41) #13
  %270 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.42) #13
  %271 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.38) #13
  %272 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.43) #13
  %273 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.44) #13
  %274 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.45) #13
  %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.46) #13
  %276 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.47) #13
  %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.48) #13
  %278 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.49) #13
  %279 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.50) #13
  %280 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.51) #13
  %281 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef nonnull @.str.46) #13
  %282 = call i32 @fclose(ptr noundef %211)
  %283 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52, ptr noundef nonnull @.str.21)
  %284 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.53)
  call void @llvm.stackrestore.p0(ptr %83)
  br label %285

285:                                              ; preds = %._crit_edge296, %8
  ret i32 0
}

; Function Attrs: nounwind
declare void @srand(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind
declare i64 @time(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #4

; Function Attrs: nounwind
declare i32 @getopt(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #5

declare i32 @liquid_getopt_str2firfilt(ptr noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare double @atof(ptr nocapture noundef nonnull) local_unnamed_addr #8

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #9

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #3

declare ptr @firinterp_crcf_create_prototype(i32 noundef, i32 noundef, i32 noundef, float noundef, float noundef) local_unnamed_addr #6

declare i32 @firinterp_crcf_execute(ptr noundef, <2 x float> noundef, ptr noundef) local_unnamed_addr #6

declare i32 @firinterp_crcf_destroy(ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare float @powf(float noundef, float noundef) local_unnamed_addr #10

declare float @randnf(...) local_unnamed_addr #6

declare ptr @firpfb_crcf_create_rnyquist(i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) local_unnamed_addr #6

declare ptr @firpfb_crcf_create_drnyquist(i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) local_unnamed_addr #6

declare i32 @firpfb_crcf_push(ptr noundef, <2 x float> noundef) local_unnamed_addr #6

declare i32 @firpfb_crcf_execute(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

declare <2 x float> @__mulsc3(float, float, float, float) local_unnamed_addr

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #11

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.round.f32(float) #11

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #4

declare i32 @firpfb_crcf_destroy(ptr noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #12

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.copysign.f64(double, double) #12

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #12

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nocallback nofree nosync nounwind willreturn }
attributes #10 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #12 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #13 = { nounwind }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { cold nounwind }
attributes #16 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = !{!"branch_weights", i32 1, i32 1048575}
!15 = distinct !{!15, !10}
!16 = distinct !{!16, !10}
!17 = !{!18, !18, i64 0}
!18 = !{!"float", !7, i64 0}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass