; LLVM IR from jgaeddert/liquid-dsp :: sandbox (firdes_gmskrx_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.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@optarg = external global ptr, align 8
@stderr = external global ptr, align 8
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [24 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) #0 {
  %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 i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, 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 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
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  store i32 4, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  store i32 3, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store float 0x3FD3333340000000, ptr %8, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  br label %37

37:                                               ; preds = %56, %2
  %38 = load i32, ptr %4, align 4, !tbaa !5
  %39 = load ptr, ptr %5, align 8, !tbaa !9
  %40 = call i32 @getopt(i32 noundef %38, ptr noundef %39, ptr noundef @.str.7) #8
  store i32 %40, ptr %9, align 4, !tbaa !5
  %41 = icmp ne i32 %40, -1
  br i1 %41, label %42, label %57

42:                                               ; preds = %37
  %43 = load i32, ptr %9, align 4, !tbaa !5
  switch i32 %43, label %55 [
    i32 117, label %44
    i32 104, label %44
    i32 107, label %45
    i32 109, label %48
    i32 98, label %51
  ]

44:                                               ; preds = %42, %42
  call void @usage()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %622

45:                                               ; preds = %42
  %46 = load ptr, ptr @optarg, align 8, !tbaa !9
  %47 = call i32 @atoi(ptr noundef %46) #9
  store i32 %47, ptr %6, align 4, !tbaa !5
  br label %56

48:                                               ; preds = %42
  %49 = load ptr, ptr @optarg, align 8, !tbaa !9
  %50 = call i32 @atoi(ptr noundef %49) #9
  store i32 %50, ptr %7, align 4, !tbaa !5
  br label %56

51:                                               ; preds = %42
  %52 = load ptr, ptr @optarg, align 8, !tbaa !9
  %53 = call double @atof(ptr noundef %52) #9
  %54 = fptrunc double %53 to float
  store float %54, ptr %8, align 4, !tbaa !11
  br label %56

55:                                               ; preds = %42
  call void @exit(i32 noundef 1) #10
  unreachable

56:                                               ; preds = %51, %48, %45
  br label %37, !llvm.loop !13

57:                                               ; preds = %37
  %58 = load i32, ptr %6, align 4, !tbaa !5
  %59 = icmp ult i32 %58, 2
  br i1 %59, label %60, label %66

60:                                               ; preds = %57
  %61 = load ptr, ptr @stderr, align 8, !tbaa !9
  %62 = load ptr, ptr %5, align 8, !tbaa !9
  %63 = getelementptr inbounds ptr, ptr %62, i64 0
  %64 = load ptr, ptr %63, align 8, !tbaa !9
  %65 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef @.str.8, ptr noundef %64) #8
  call void @exit(i32 noundef 1) #10
  unreachable

66:                                               ; preds = %57
  %67 = load i32, ptr %7, align 4, !tbaa !5
  %68 = icmp ult i32 %67, 1
  br i1 %68, label %69, label %75

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

75:                                               ; preds = %66
  %76 = load float, ptr %8, align 4, !tbaa !11
  %77 = fcmp ole float %76, 0.000000e+00
  br i1 %77, label %81, label %78

78:                                               ; preds = %75
  %79 = load float, ptr %8, align 4, !tbaa !11
  %80 = fcmp oge float %79, 1.000000e+00
  br i1 %80, label %81, label %87

81:                                               ; preds = %78, %75
  %82 = load ptr, ptr @stderr, align 8, !tbaa !9
  %83 = load ptr, ptr %5, align 8, !tbaa !9
  %84 = getelementptr inbounds ptr, ptr %83, i64 0
  %85 = load ptr, ptr %84, align 8, !tbaa !9
  %86 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %82, ptr noundef @.str.10, ptr noundef %85) #8
  call void @exit(i32 noundef 1) #10
  unreachable

87:                                               ; preds = %78
  br label %88

88:                                               ; preds = %87
  br label %89

89:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %90 = load i32, ptr %6, align 4, !tbaa !5
  %91 = mul i32 2, %90
  %92 = load i32, ptr %7, align 4, !tbaa !5
  %93 = mul i32 %91, %92
  %94 = add i32 %93, 1
  store i32 %94, ptr %12, align 4, !tbaa !5
  %95 = load i32, ptr %12, align 4, !tbaa !5
  %96 = zext i32 %95 to i64
  %97 = call ptr @llvm.stacksave.p0()
  store ptr %97, ptr %13, align 8
  %98 = alloca float, i64 %96, align 16
  store i64 %96, ptr %14, align 8
  %99 = load i32, ptr %12, align 4, !tbaa !5
  %100 = zext i32 %99 to i64
  %101 = alloca float, i64 %100, align 16
  store i64 %100, ptr %15, align 8
  %102 = load i32, ptr %6, align 4, !tbaa !5
  %103 = load i32, ptr %7, align 4, !tbaa !5
  %104 = load float, ptr %8, align 4, !tbaa !11
  %105 = call i32 @liquid_firdes_gmsktx(i32 noundef %102, i32 noundef %103, float noundef %104, float noundef 0.000000e+00, ptr noundef %98)
  %106 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %107

107:                                              ; preds = %120, %89
  %108 = load i32, ptr %11, align 4, !tbaa !5
  %109 = load i32, ptr %12, align 4, !tbaa !5
  %110 = icmp ult i32 %108, %109
  br i1 %110, label %111, label %123

111:                                              ; preds = %107
  %112 = load i32, ptr %11, align 4, !tbaa !5
  %113 = add i32 %112, 1
  %114 = load i32, ptr %11, align 4, !tbaa !5
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds float, ptr %98, i64 %115
  %117 = load float, ptr %116, align 4, !tbaa !11
  %118 = fpext float %117 to double
  %119 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef %113, double noundef %118)
  br label %120

120:                                              ; preds = %111
  %121 = load i32, ptr %11, align 4, !tbaa !5
  %122 = add i32 %121, 1
  store i32 %122, ptr %11, align 4, !tbaa !5
  br label %107, !llvm.loop !15

123:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %124 = load float, ptr %8, align 4, !tbaa !11
  store float %124, ptr %16, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  store float 0x3F847AE140000000, ptr %17, align 4, !tbaa !11
  %125 = load i32, ptr %12, align 4, !tbaa !5
  %126 = zext i32 %125 to i64
  %127 = alloca float, i64 %126, align 16
  store i64 %126, ptr %18, align 8
  %128 = load i32, ptr %12, align 4, !tbaa !5
  %129 = zext i32 %128 to i64
  %130 = alloca float, i64 %129, align 16
  store i64 %129, ptr %19, align 8
  %131 = load i32, ptr %12, align 4, !tbaa !5
  %132 = zext i32 %131 to i64
  %133 = alloca { float, float }, i64 %132, align 16
  store i64 %132, ptr %20, align 8
  %134 = load i32, ptr %12, align 4, !tbaa !5
  %135 = zext i32 %134 to i64
  %136 = alloca { float, float }, i64 %135, align 16
  store i64 %135, ptr %21, align 8
  %137 = load i32, ptr %12, align 4, !tbaa !5
  %138 = zext i32 %137 to i64
  %139 = alloca { float, float }, i64 %138, align 16
  store i64 %138, ptr %22, align 8
  %140 = load i32, ptr %12, align 4, !tbaa !5
  %141 = zext i32 %140 to i64
  %142 = alloca { float, float }, i64 %141, align 16
  store i64 %141, ptr %23, align 8
  %143 = load i32, ptr %12, align 4, !tbaa !5
  %144 = zext i32 %143 to i64
  %145 = alloca { float, float }, i64 %144, align 16
  store i64 %144, ptr %24, align 8
  %146 = load i32, ptr %12, align 4, !tbaa !5
  %147 = zext i32 %146 to i64
  %148 = alloca { float, float }, i64 %147, align 16
  store i64 %147, ptr %25, align 8
  %149 = load i32, ptr %12, align 4, !tbaa !5
  %150 = zext i32 %149 to i64
  %151 = alloca { float, float }, i64 %150, align 16
  store i64 %150, ptr %26, align 8
  %152 = load i32, ptr %12, align 4, !tbaa !5
  %153 = zext i32 %152 to i64
  %154 = alloca { float, float }, i64 %153, align 16
  store i64 %153, ptr %27, align 8
  %155 = load i32, ptr %6, align 4, !tbaa !5
  %156 = load i32, ptr %7, align 4, !tbaa !5
  %157 = load float, ptr %16, align 4, !tbaa !11
  %158 = call i32 @liquid_firdes_prototype(i32 noundef 3, i32 noundef %155, i32 noundef %156, float noundef %157, float noundef 0.000000e+00, ptr noundef %127)
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %159 = load float, ptr %16, align 4, !tbaa !11
  %160 = fpext float %159 to double
  %161 = call double @llvm.fmuladd.f64(double 1.000000e-01, double %160, double 0x3FE6666660000000)
  %162 = load i32, ptr %6, align 4, !tbaa !5
  %163 = uitofp i32 %162 to float
  %164 = fpext float %163 to double
  %165 = fdiv double %161, %164
  %166 = fptrunc double %165 to float
  store float %166, ptr %28, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  store float 6.000000e+01, ptr %29, align 4, !tbaa !11
  %167 = load i32, ptr %12, align 4, !tbaa !5
  %168 = load float, ptr %28, align 4, !tbaa !11
  %169 = load float, ptr %29, align 4, !tbaa !11
  %170 = call i32 @liquid_firdes_kaiser(i32 noundef %167, float noundef %168, float noundef %169, float noundef 0.000000e+00, ptr noundef %130)
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %171

171:                                              ; preds = %221, %123
  %172 = load i32, ptr %11, align 4, !tbaa !5
  %173 = load i32, ptr %12, align 4, !tbaa !5
  %174 = icmp ult i32 %172, %173
  br i1 %174, label %175, label %224

175:                                              ; preds = %171
  %176 = load i32, ptr %11, align 4, !tbaa !5
  %177 = load i32, ptr %6, align 4, !tbaa !5
  %178 = load i32, ptr %7, align 4, !tbaa !5
  %179 = mul i32 %177, %178
  %180 = add i32 %176, %179
  %181 = load i32, ptr %12, align 4, !tbaa !5
  %182 = urem i32 %180, %181
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds float, ptr %127, i64 %183
  %185 = load float, ptr %184, align 4, !tbaa !11
  %186 = load i32, ptr %11, align 4, !tbaa !5
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds { float, float }, ptr %136, i64 %187
  %189 = getelementptr inbounds { float, float }, ptr %188, i32 0, i32 0
  %190 = getelementptr inbounds { float, float }, ptr %188, i32 0, i32 1
  store float %185, ptr %189, align 8
  store float 0.000000e+00, ptr %190, align 4
  %191 = load i32, ptr %11, align 4, !tbaa !5
  %192 = load i32, ptr %6, align 4, !tbaa !5
  %193 = load i32, ptr %7, align 4, !tbaa !5
  %194 = mul i32 %192, %193
  %195 = add i32 %191, %194
  %196 = load i32, ptr %12, align 4, !tbaa !5
  %197 = urem i32 %195, %196
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds float, ptr %130, i64 %198
  %200 = load float, ptr %199, align 4, !tbaa !11
  %201 = load i32, ptr %11, align 4, !tbaa !5
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds { float, float }, ptr %139, i64 %202
  %204 = getelementptr inbounds { float, float }, ptr %203, i32 0, i32 0
  %205 = getelementptr inbounds { float, float }, ptr %203, i32 0, i32 1
  store float %200, ptr %204, align 8
  store float 0.000000e+00, ptr %205, align 4
  %206 = load i32, ptr %11, align 4, !tbaa !5
  %207 = load i32, ptr %6, align 4, !tbaa !5
  %208 = load i32, ptr %7, align 4, !tbaa !5
  %209 = mul i32 %207, %208
  %210 = add i32 %206, %209
  %211 = load i32, ptr %12, align 4, !tbaa !5
  %212 = urem i32 %210, %211
  %213 = zext i32 %212 to i64
  %214 = getelementptr inbounds float, ptr %98, i64 %213
  %215 = load float, ptr %214, align 4, !tbaa !11
  %216 = load i32, ptr %11, align 4, !tbaa !5
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds { float, float }, ptr %133, i64 %217
  %219 = getelementptr inbounds { float, float }, ptr %218, i32 0, i32 0
  %220 = getelementptr inbounds { float, float }, ptr %218, i32 0, i32 1
  store float %215, ptr %219, align 8
  store float 0.000000e+00, ptr %220, align 4
  br label %221

221:                                              ; preds = %175
  %222 = load i32, ptr %11, align 4, !tbaa !5
  %223 = add i32 %222, 1
  store i32 %223, ptr %11, align 4, !tbaa !5
  br label %171, !llvm.loop !16

224:                                              ; preds = %171
  %225 = load i32, ptr %12, align 4, !tbaa !5
  %226 = call i32 @fft_run(i32 noundef %225, ptr noundef %136, ptr noundef %148, i32 noundef 1, i32 noundef 0)
  %227 = load i32, ptr %12, align 4, !tbaa !5
  %228 = call i32 @fft_run(i32 noundef %227, ptr noundef %139, ptr noundef %151, i32 noundef 1, i32 noundef 0)
  %229 = load i32, ptr %12, align 4, !tbaa !5
  %230 = call i32 @fft_run(i32 noundef %229, ptr noundef %133, ptr noundef %145, i32 noundef 1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store float 0.000000e+00, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  store float 0.000000e+00, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  store float 0.000000e+00, ptr %32, align 4, !tbaa !11
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %231

231:                                              ; preds = %299, %224
  %232 = load i32, ptr %11, align 4, !tbaa !5
  %233 = load i32, ptr %12, align 4, !tbaa !5
  %234 = icmp ult i32 %232, %233
  br i1 %234, label %235, label %302

235:                                              ; preds = %231
  %236 = load i32, ptr %11, align 4, !tbaa !5
  %237 = icmp eq i32 %236, 0
  br i1 %237, label %248, label %238

238:                                              ; preds = %235
  %239 = load i32, ptr %11, align 4, !tbaa !5
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds { float, float }, ptr %145, i64 %240
  %242 = getelementptr inbounds { float, float }, ptr %241, i32 0, i32 0
  %243 = load float, ptr %242, align 8
  %244 = getelementptr inbounds { float, float }, ptr %241, i32 0, i32 1
  %245 = load float, ptr %244, align 4
  %246 = load float, ptr %30, align 4, !tbaa !11
  %247 = fcmp olt float %243, %246
  br i1 %247, label %248, label %256

248:                                              ; preds = %238, %235
  %249 = load i32, ptr %11, align 4, !tbaa !5
  %250 = zext i32 %249 to i64
  %251 = getelementptr inbounds { float, float }, ptr %145, i64 %250
  %252 = getelementptr inbounds { float, float }, ptr %251, i32 0, i32 0
  %253 = load float, ptr %252, align 8
  %254 = getelementptr inbounds { float, float }, ptr %251, i32 0, i32 1
  %255 = load float, ptr %254, align 4
  store float %253, ptr %30, align 4, !tbaa !11
  br label %256

256:                                              ; preds = %248, %238
  %257 = load i32, ptr %11, align 4, !tbaa !5
  %258 = icmp eq i32 %257, 0
  br i1 %258, label %269, label %259

259:                                              ; preds = %256
  %260 = load i32, ptr %11, align 4, !tbaa !5
  %261 = zext i32 %260 to i64
  %262 = getelementptr inbounds { float, float }, ptr %148, i64 %261
  %263 = getelementptr inbounds { float, float }, ptr %262, i32 0, i32 0
  %264 = load float, ptr %263, align 8
  %265 = getelementptr inbounds { float, float }, ptr %262, i32 0, i32 1
  %266 = load float, ptr %265, align 4
  %267 = load float, ptr %31, align 4, !tbaa !11
  %268 = fcmp olt float %264, %267
  br i1 %268, label %269, label %277

269:                                              ; preds = %259, %256
  %270 = load i32, ptr %11, align 4, !tbaa !5
  %271 = zext i32 %270 to i64
  %272 = getelementptr inbounds { float, float }, ptr %148, i64 %271
  %273 = getelementptr inbounds { float, float }, ptr %272, i32 0, i32 0
  %274 = load float, ptr %273, align 8
  %275 = getelementptr inbounds { float, float }, ptr %272, i32 0, i32 1
  %276 = load float, ptr %275, align 4
  store float %274, ptr %31, align 4, !tbaa !11
  br label %277

277:                                              ; preds = %269, %259
  %278 = load i32, ptr %11, align 4, !tbaa !5
  %279 = icmp eq i32 %278, 0
  br i1 %279, label %290, label %280

280:                                              ; preds = %277
  %281 = load i32, ptr %11, align 4, !tbaa !5
  %282 = zext i32 %281 to i64
  %283 = getelementptr inbounds { float, float }, ptr %151, i64 %282
  %284 = getelementptr inbounds { float, float }, ptr %283, i32 0, i32 0
  %285 = load float, ptr %284, align 8
  %286 = getelementptr inbounds { float, float }, ptr %283, i32 0, i32 1
  %287 = load float, ptr %286, align 4
  %288 = load float, ptr %32, align 4, !tbaa !11
  %289 = fcmp olt float %285, %288
  br i1 %289, label %290, label %298

290:                                              ; preds = %280, %277
  %291 = load i32, ptr %11, align 4, !tbaa !5
  %292 = zext i32 %291 to i64
  %293 = getelementptr inbounds { float, float }, ptr %151, i64 %292
  %294 = getelementptr inbounds { float, float }, ptr %293, i32 0, i32 0
  %295 = load float, ptr %294, align 8
  %296 = getelementptr inbounds { float, float }, ptr %293, i32 0, i32 1
  %297 = load float, ptr %296, align 4
  store float %295, ptr %32, align 4, !tbaa !11
  br label %298

298:                                              ; preds = %290, %280
  br label %299

299:                                              ; preds = %298
  %300 = load i32, ptr %11, align 4, !tbaa !5
  %301 = add i32 %300, 1
  store i32 %301, ptr %11, align 4, !tbaa !5
  br label %231, !llvm.loop !17

302:                                              ; preds = %231
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %303

303:                                              ; preds = %362, %302
  %304 = load i32, ptr %11, align 4, !tbaa !5
  %305 = load i32, ptr %12, align 4, !tbaa !5
  %306 = icmp ult i32 %304, %305
  br i1 %306, label %307, label %365

307:                                              ; preds = %303
  %308 = load i32, ptr %11, align 4, !tbaa !5
  %309 = zext i32 %308 to i64
  %310 = getelementptr inbounds { float, float }, ptr %148, i64 %309
  %311 = getelementptr inbounds { float, float }, ptr %310, i32 0, i32 0
  %312 = load float, ptr %311, align 8
  %313 = getelementptr inbounds { float, float }, ptr %310, i32 0, i32 1
  %314 = load float, ptr %313, align 4
  %315 = load float, ptr %31, align 4, !tbaa !11
  %316 = fsub float %312, %315
  %317 = load float, ptr %17, align 4, !tbaa !11
  %318 = fadd float %316, %317
  %319 = load i32, ptr %11, align 4, !tbaa !5
  %320 = zext i32 %319 to i64
  %321 = getelementptr inbounds { float, float }, ptr %145, i64 %320
  %322 = getelementptr inbounds { float, float }, ptr %321, i32 0, i32 0
  %323 = load float, ptr %322, align 8
  %324 = getelementptr inbounds { float, float }, ptr %321, i32 0, i32 1
  %325 = load float, ptr %324, align 4
  %326 = load float, ptr %30, align 4, !tbaa !11
  %327 = fsub float %323, %326
  %328 = load float, ptr %17, align 4, !tbaa !11
  %329 = fadd float %327, %328
  %330 = fdiv float %318, %329
  %331 = load i32, ptr %11, align 4, !tbaa !5
  %332 = zext i32 %331 to i64
  %333 = getelementptr inbounds { float, float }, ptr %154, i64 %332
  %334 = getelementptr inbounds { float, float }, ptr %333, i32 0, i32 0
  %335 = getelementptr inbounds { float, float }, ptr %333, i32 0, i32 1
  store float %330, ptr %334, align 8
  store float 0.000000e+00, ptr %335, align 4
  %336 = load i32, ptr %11, align 4, !tbaa !5
  %337 = zext i32 %336 to i64
  %338 = getelementptr inbounds { float, float }, ptr %151, i64 %337
  %339 = getelementptr inbounds { float, float }, ptr %338, i32 0, i32 0
  %340 = load float, ptr %339, align 8
  %341 = getelementptr inbounds { float, float }, ptr %338, i32 0, i32 1
  %342 = load float, ptr %341, align 4
  %343 = load float, ptr %32, align 4, !tbaa !11
  %344 = fsub float %340, %343
  %345 = getelementptr inbounds { float, float }, ptr %151, i64 0
  %346 = getelementptr inbounds { float, float }, ptr %345, i32 0, i32 0
  %347 = load float, ptr %346, align 16
  %348 = getelementptr inbounds { float, float }, ptr %345, i32 0, i32 1
  %349 = load float, ptr %348, align 4
  %350 = fdiv float %344, %347
  %351 = load i32, ptr %11, align 4, !tbaa !5
  %352 = zext i32 %351 to i64
  %353 = getelementptr inbounds { float, float }, ptr %154, i64 %352
  %354 = getelementptr inbounds { float, float }, ptr %353, i32 0, i32 0
  %355 = load float, ptr %354, align 8
  %356 = getelementptr inbounds { float, float }, ptr %353, i32 0, i32 1
  %357 = load float, ptr %356, align 4
  %358 = fmul float %355, %350
  %359 = fmul float %357, %350
  %360 = getelementptr inbounds { float, float }, ptr %353, i32 0, i32 0
  %361 = getelementptr inbounds { float, float }, ptr %353, i32 0, i32 1
  store float %358, ptr %360, align 8
  store float %359, ptr %361, align 4
  br label %362

362:                                              ; preds = %307
  %363 = load i32, ptr %11, align 4, !tbaa !5
  %364 = add i32 %363, 1
  store i32 %364, ptr %11, align 4, !tbaa !5
  br label %303, !llvm.loop !18

365:                                              ; preds = %303
  %366 = load i32, ptr %12, align 4, !tbaa !5
  %367 = call i32 @fft_run(i32 noundef %366, ptr noundef %154, ptr noundef %142, i32 noundef -1, i32 noundef 0)
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %368

368:                                              ; preds = %395, %365
  %369 = load i32, ptr %11, align 4, !tbaa !5
  %370 = load i32, ptr %12, align 4, !tbaa !5
  %371 = icmp ult i32 %369, %370
  br i1 %371, label %372, label %398

372:                                              ; preds = %368
  %373 = load i32, ptr %11, align 4, !tbaa !5
  %374 = load i32, ptr %6, align 4, !tbaa !5
  %375 = load i32, ptr %7, align 4, !tbaa !5
  %376 = mul i32 %374, %375
  %377 = add i32 %373, %376
  %378 = add i32 %377, 1
  %379 = load i32, ptr %12, align 4, !tbaa !5
  %380 = urem i32 %378, %379
  %381 = zext i32 %380 to i64
  %382 = getelementptr inbounds { float, float }, ptr %142, i64 %381
  %383 = getelementptr inbounds { float, float }, ptr %382, i32 0, i32 0
  %384 = load float, ptr %383, align 8
  %385 = getelementptr inbounds { float, float }, ptr %382, i32 0, i32 1
  %386 = load float, ptr %385, align 4
  %387 = load i32, ptr %6, align 4, !tbaa !5
  %388 = load i32, ptr %12, align 4, !tbaa !5
  %389 = mul i32 %387, %388
  %390 = uitofp i32 %389 to float
  %391 = fdiv float %384, %390
  %392 = load i32, ptr %11, align 4, !tbaa !5
  %393 = zext i32 %392 to i64
  %394 = getelementptr inbounds float, ptr %101, i64 %393
  store float %391, ptr %394, align 4, !tbaa !11
  br label %395

395:                                              ; preds = %372
  %396 = load i32, ptr %11, align 4, !tbaa !5
  %397 = add i32 %396, 1
  store i32 %397, ptr %11, align 4, !tbaa !5
  br label %368, !llvm.loop !19

398:                                              ; preds = %368
  %399 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %400

400:                                              ; preds = %413, %398
  %401 = load i32, ptr %11, align 4, !tbaa !5
  %402 = load i32, ptr %12, align 4, !tbaa !5
  %403 = icmp ult i32 %401, %402
  br i1 %403, label %404, label %416

404:                                              ; preds = %400
  %405 = load i32, ptr %11, align 4, !tbaa !5
  %406 = add i32 %405, 1
  %407 = load i32, ptr %11, align 4, !tbaa !5
  %408 = zext i32 %407 to i64
  %409 = getelementptr inbounds float, ptr %101, i64 %408
  %410 = load float, ptr %409, align 4, !tbaa !11
  %411 = fpext float %410 to double
  %412 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef %406, double noundef %411)
  br label %413

413:                                              ; preds = %404
  %414 = load i32, ptr %11, align 4, !tbaa !5
  %415 = add i32 %414, 1
  store i32 %415, ptr %11, align 4, !tbaa !5
  br label %400, !llvm.loop !20

416:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %417 = load i32, ptr %12, align 4, !tbaa !5
  %418 = load i32, ptr %12, align 4, !tbaa !5
  %419 = call float @liquid_filter_crosscorr(ptr noundef %98, i32 noundef %417, ptr noundef %101, i32 noundef %418, i32 noundef 0)
  store float %419, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  store float 0.000000e+00, ptr %34, align 4, !tbaa !11
  store i32 1, ptr %11, align 4, !tbaa !5
  br label %420

420:                                              ; preds = %438, %416
  %421 = load i32, ptr %11, align 4, !tbaa !5
  %422 = load i32, ptr %7, align 4, !tbaa !5
  %423 = mul i32 2, %422
  %424 = icmp ult i32 %421, %423
  br i1 %424, label %425, label %441

425:                                              ; preds = %420
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  %426 = load i32, ptr %12, align 4, !tbaa !5
  %427 = load i32, ptr %12, align 4, !tbaa !5
  %428 = load i32, ptr %11, align 4, !tbaa !5
  %429 = load i32, ptr %6, align 4, !tbaa !5
  %430 = mul i32 %428, %429
  %431 = call float @liquid_filter_crosscorr(ptr noundef %98, i32 noundef %426, ptr noundef %101, i32 noundef %427, i32 noundef %430)
  %432 = load float, ptr %33, align 4, !tbaa !11
  %433 = fdiv float %431, %432
  store float %433, ptr %35, align 4, !tbaa !11
  %434 = load float, ptr %35, align 4, !tbaa !11
  %435 = load float, ptr %35, align 4, !tbaa !11
  %436 = load float, ptr %34, align 4, !tbaa !11
  %437 = call float @llvm.fmuladd.f32(float %434, float %435, float %436)
  store float %437, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %438

438:                                              ; preds = %425
  %439 = load i32, ptr %11, align 4, !tbaa !5
  %440 = add i32 %439, 1
  store i32 %440, ptr %11, align 4, !tbaa !5
  br label %420, !llvm.loop !21

441:                                              ; preds = %420
  %442 = load float, ptr %34, align 4, !tbaa !11
  %443 = load i32, ptr %7, align 4, !tbaa !5
  %444 = mul i32 2, %443
  %445 = sub i32 %444, 1
  %446 = uitofp i32 %445 to float
  %447 = fdiv float %442, %446
  %448 = call float @sqrtf(float noundef %447) #8
  store float %448, ptr %34, align 4, !tbaa !11
  %449 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %450 = load float, ptr %34, align 4, !tbaa !11
  %451 = call float @log10f(float noundef %450) #8
  %452 = fmul float 2.000000e+01, %451
  %453 = fpext float %452 to double
  %454 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %453)
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %455 = call noalias ptr @fopen(ptr noundef @.str.16, ptr noundef @.str.17)
  store ptr %455, ptr %36, align 8, !tbaa !9
  %456 = load ptr, ptr %36, align 8, !tbaa !9
  %457 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %456, ptr noundef @.str.18, ptr noundef @.str.16) #8
  %458 = load ptr, ptr %36, align 8, !tbaa !9
  %459 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %458, ptr noundef @.str.19) #8
  %460 = load ptr, ptr %36, align 8, !tbaa !9
  %461 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %460, ptr noundef @.str.20) #8
  %462 = load ptr, ptr %36, align 8, !tbaa !9
  %463 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %462, ptr noundef @.str.21) #8
  %464 = load ptr, ptr %36, align 8, !tbaa !9
  %465 = load i32, ptr %6, align 4, !tbaa !5
  %466 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %464, ptr noundef @.str.22, i32 noundef %465) #8
  %467 = load ptr, ptr %36, align 8, !tbaa !9
  %468 = load i32, ptr %7, align 4, !tbaa !5
  %469 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %467, ptr noundef @.str.23, i32 noundef %468) #8
  %470 = load ptr, ptr %36, align 8, !tbaa !9
  %471 = load float, ptr %8, align 4, !tbaa !11
  %472 = fpext float %471 to double
  %473 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %470, ptr noundef @.str.24, double noundef %472) #8
  %474 = load ptr, ptr %36, align 8, !tbaa !9
  %475 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %474, ptr noundef @.str.25) #8
  %476 = load ptr, ptr %36, align 8, !tbaa !9
  %477 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %476, ptr noundef @.str.26) #8
  %478 = load ptr, ptr %36, align 8, !tbaa !9
  %479 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %478, ptr noundef @.str.27) #8
  %480 = load ptr, ptr %36, align 8, !tbaa !9
  %481 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %480, ptr noundef @.str.28) #8
  %482 = load ptr, ptr %36, align 8, !tbaa !9
  %483 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %482, ptr noundef @.str.29) #8
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %484

484:                                              ; preds = %501, %441
  %485 = load i32, ptr %11, align 4, !tbaa !5
  %486 = load i32, ptr %12, align 4, !tbaa !5
  %487 = icmp ult i32 %485, %486
  br i1 %487, label %488, label %504

488:                                              ; preds = %484
  %489 = load ptr, ptr %36, align 8, !tbaa !9
  %490 = load i32, ptr %11, align 4, !tbaa !5
  %491 = add i32 %490, 1
  %492 = load i32, ptr %11, align 4, !tbaa !5
  %493 = zext i32 %492 to i64
  %494 = getelementptr inbounds float, ptr %98, i64 %493
  %495 = load float, ptr %494, align 4, !tbaa !11
  %496 = load i32, ptr %6, align 4, !tbaa !5
  %497 = uitofp i32 %496 to float
  %498 = fdiv float %495, %497
  %499 = fpext float %498 to double
  %500 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %489, ptr noundef @.str.30, i32 noundef %491, double noundef %499) #8
  br label %501

501:                                              ; preds = %488
  %502 = load i32, ptr %11, align 4, !tbaa !5
  %503 = add i32 %502, 1
  store i32 %503, ptr %11, align 4, !tbaa !5
  br label %484, !llvm.loop !22

504:                                              ; preds = %484
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %505

505:                                              ; preds = %522, %504
  %506 = load i32, ptr %11, align 4, !tbaa !5
  %507 = load i32, ptr %12, align 4, !tbaa !5
  %508 = icmp ult i32 %506, %507
  br i1 %508, label %509, label %525

509:                                              ; preds = %505
  %510 = load ptr, ptr %36, align 8, !tbaa !9
  %511 = load i32, ptr %11, align 4, !tbaa !5
  %512 = add i32 %511, 1
  %513 = load i32, ptr %11, align 4, !tbaa !5
  %514 = zext i32 %513 to i64
  %515 = getelementptr inbounds float, ptr %101, i64 %514
  %516 = load float, ptr %515, align 4, !tbaa !11
  %517 = load i32, ptr %6, align 4, !tbaa !5
  %518 = uitofp i32 %517 to float
  %519 = fmul float %516, %518
  %520 = fpext float %519 to double
  %521 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %510, ptr noundef @.str.31, i32 noundef %512, double noundef %520) #8
  br label %522

522:                                              ; preds = %509
  %523 = load i32, ptr %11, align 4, !tbaa !5
  %524 = add i32 %523, 1
  store i32 %524, ptr %11, align 4, !tbaa !5
  br label %505, !llvm.loop !23

525:                                              ; preds = %505
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %526

526:                                              ; preds = %540, %525
  %527 = load i32, ptr %11, align 4, !tbaa !5
  %528 = load i32, ptr %12, align 4, !tbaa !5
  %529 = icmp ult i32 %527, %528
  br i1 %529, label %530, label %543

530:                                              ; preds = %526
  %531 = load ptr, ptr %36, align 8, !tbaa !9
  %532 = load i32, ptr %11, align 4, !tbaa !5
  %533 = add i32 %532, 1
  %534 = load i32, ptr %11, align 4, !tbaa !5
  %535 = zext i32 %534 to i64
  %536 = getelementptr inbounds float, ptr %127, i64 %535
  %537 = load float, ptr %536, align 4, !tbaa !11
  %538 = fpext float %537 to double
  %539 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %531, ptr noundef @.str.32, i32 noundef %533, double noundef %538) #8
  br label %540

540:                                              ; preds = %530
  %541 = load i32, ptr %11, align 4, !tbaa !5
  %542 = add i32 %541, 1
  store i32 %542, ptr %11, align 4, !tbaa !5
  br label %526, !llvm.loop !24

543:                                              ; preds = %526
  %544 = load ptr, ptr %36, align 8, !tbaa !9
  %545 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %544, ptr noundef @.str.33) #8
  %546 = load ptr, ptr %36, align 8, !tbaa !9
  %547 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %546, ptr noundef @.str.34) #8
  %548 = load ptr, ptr %36, align 8, !tbaa !9
  %549 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %548, ptr noundef @.str.35) #8
  %550 = load ptr, ptr %36, align 8, !tbaa !9
  %551 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %550, ptr noundef @.str.36) #8
  %552 = load ptr, ptr %36, align 8, !tbaa !9
  %553 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %552, ptr noundef @.str.37) #8
  %554 = load ptr, ptr %36, align 8, !tbaa !9
  %555 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %554, ptr noundef @.str.38) #8
  %556 = load ptr, ptr %36, align 8, !tbaa !9
  %557 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %556, ptr noundef @.str.2) #8
  %558 = load ptr, ptr %36, align 8, !tbaa !9
  %559 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %558, ptr noundef @.str.39) #8
  %560 = load ptr, ptr %36, align 8, !tbaa !9
  %561 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %560, ptr noundef @.str.40) #8
  %562 = load ptr, ptr %36, align 8, !tbaa !9
  %563 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %562, ptr noundef @.str.41) #8
  %564 = load ptr, ptr %36, align 8, !tbaa !9
  %565 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %564, ptr noundef @.str.42) #8
  %566 = load ptr, ptr %36, align 8, !tbaa !9
  %567 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %566, ptr noundef @.str.43) #8
  %568 = load ptr, ptr %36, align 8, !tbaa !9
  %569 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %568, ptr noundef @.str.44) #8
  %570 = load ptr, ptr %36, align 8, !tbaa !9
  %571 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %570, ptr noundef @.str.45) #8
  %572 = load ptr, ptr %36, align 8, !tbaa !9
  %573 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %572, ptr noundef @.str.46) #8
  %574 = load ptr, ptr %36, align 8, !tbaa !9
  %575 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %574, ptr noundef @.str.47) #8
  %576 = load ptr, ptr %36, align 8, !tbaa !9
  %577 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %576, ptr noundef @.str.48) #8
  %578 = load ptr, ptr %36, align 8, !tbaa !9
  %579 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %578, ptr noundef @.str.49) #8
  %580 = load ptr, ptr %36, align 8, !tbaa !9
  %581 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %580, ptr noundef @.str.2) #8
  %582 = load ptr, ptr %36, align 8, !tbaa !9
  %583 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %582, ptr noundef @.str.39) #8
  %584 = load ptr, ptr %36, align 8, !tbaa !9
  %585 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %584, ptr noundef @.str.50) #8
  %586 = load ptr, ptr %36, align 8, !tbaa !9
  %587 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %586, ptr noundef @.str.51) #8
  %588 = load ptr, ptr %36, align 8, !tbaa !9
  %589 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %588, ptr noundef @.str.52) #8
  %590 = load ptr, ptr %36, align 8, !tbaa !9
  %591 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %590, ptr noundef @.str.53) #8
  %592 = load ptr, ptr %36, align 8, !tbaa !9
  %593 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %592, ptr noundef @.str.54) #8
  %594 = load ptr, ptr %36, align 8, !tbaa !9
  %595 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %594, ptr noundef @.str.55) #8
  %596 = load ptr, ptr %36, align 8, !tbaa !9
  %597 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %596, ptr noundef @.str.56) #8
  %598 = load ptr, ptr %36, align 8, !tbaa !9
  %599 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %598, ptr noundef @.str.57) #8
  %600 = load ptr, ptr %36, align 8, !tbaa !9
  %601 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %600, ptr noundef @.str.58) #8
  %602 = load ptr, ptr %36, align 8, !tbaa !9
  %603 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %602, ptr noundef @.str.59) #8
  %604 = load ptr, ptr %36, align 8, !tbaa !9
  %605 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %604, ptr noundef @.str.60) #8
  %606 = load ptr, ptr %36, align 8, !tbaa !9
  %607 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %606, ptr noundef @.str.61) #8
  %608 = load ptr, ptr %36, align 8, !tbaa !9
  %609 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %608, ptr noundef @.str.56) #8
  %610 = load ptr, ptr %36, align 8, !tbaa !9
  %611 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %610, ptr noundef @.str.62) #8
  %612 = load ptr, ptr %36, align 8, !tbaa !9
  %613 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %612, ptr noundef @.str.58) #8
  %614 = load ptr, ptr %36, align 8, !tbaa !9
  %615 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %614, ptr noundef @.str.63) #8
  %616 = load ptr, ptr %36, align 8, !tbaa !9
  %617 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %616, ptr noundef @.str.64) #8
  %618 = load ptr, ptr %36, align 8, !tbaa !9
  %619 = call i32 @fclose(ptr noundef %618)
  %620 = call i32 (ptr, ...) @printf(ptr noundef @.str.65, ptr noundef @.str.16)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  %621 = load ptr, ptr %13, align 8
  call void @llvm.stackrestore.p0(ptr %621)
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  br label %622

622:                                              ; preds = %543, %44
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  %623 = load i32, ptr %3, align 4
  ret i32 %623
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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) #6

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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 #5 = { 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 #6 = { nocallback nofree nosync nounwind willreturn }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { 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 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !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.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@optarg = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [24 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 #0 {
  br label %.outer

.outer:                                           ; preds = %12, %2
  %.0207.ph = phi float [ %15, %12 ], [ 0x3FD3333340000000, %2 ]
  %.0199.ph = phi i32 [ %.0199.ph351, %12 ], [ 3, %2 ]
  %.0197.ph = phi i32 [ %.0197, %12 ], [ 4, %2 ]
  br label %.outer350

.outer350:                                        ; preds = %.outer, %9
  %.0199.ph351 = phi i32 [ %.0199.ph, %.outer ], [ %11, %9 ]
  %.0197.ph352 = phi i32 [ %.0197.ph, %.outer ], [ %.0197, %9 ]
  br label %3

3:                                                ; preds = %.outer350, %6
  %.0197 = phi i32 [ %8, %6 ], [ %.0197.ph352, %.outer350 ]
  %4 = tail call i32 @getopt(i32 noundef %0, ptr noundef %1, ptr noundef nonnull @.str.7) #9
  switch i32 %4, label %16 [
    i32 -1, label %17
    i32 117, label %5
    i32 104, label %5
    i32 107, label %6
    i32 109, label %9
    i32 98, label %12
  ]

5:                                                ; preds = %3, %3
  tail call void @usage()
  br label %286

6:                                                ; preds = %3
  %7 = load ptr, ptr @optarg, align 8, !tbaa !5
  %8 = tail call i32 @atoi(ptr nocapture noundef %7) #10
  br label %3, !llvm.loop !9

9:                                                ; preds = %3
  %10 = load ptr, ptr @optarg, align 8, !tbaa !5
  %11 = tail call i32 @atoi(ptr nocapture noundef %10) #10
  br label %.outer350, !llvm.loop !9

12:                                               ; preds = %3
  %13 = load ptr, ptr @optarg, align 8, !tbaa !5
  %14 = tail call double @atof(ptr noundef %13) #10
  %15 = fptrunc double %14 to float
  br label %.outer, !llvm.loop !9

16:                                               ; preds = %3
  tail call void @exit(i32 noundef 1) #11
  unreachable

17:                                               ; preds = %3
  %18 = icmp ult i32 %.0197, 2
  br i1 %18, label %19, label %23

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

23:                                               ; preds = %17
  %24 = icmp eq i32 %.0199.ph351, 0
  br i1 %24, label %25, label %29

25:                                               ; preds = %23
  %26 = load ptr, ptr @stderr, align 8, !tbaa !5
  %27 = load ptr, ptr %1, align 8, !tbaa !5
  %28 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %26, ptr noundef nonnull @.str.9, ptr noundef %27) #12
  tail call void @exit(i32 noundef 1) #11
  unreachable

29:                                               ; preds = %23
  %30 = fcmp ole float %.0207.ph, 0.000000e+00
  %31 = fcmp oge float %.0207.ph, 1.000000e+00
  %or.cond = or i1 %30, %31
  br i1 %or.cond, label %32, label %36

32:                                               ; preds = %29
  %33 = load ptr, ptr @stderr, align 8, !tbaa !5
  %34 = load ptr, ptr %1, align 8, !tbaa !5
  %35 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %33, ptr noundef nonnull @.str.10, ptr noundef %34) #12
  tail call void @exit(i32 noundef 1) #11
  unreachable

36:                                               ; preds = %29
  %37 = shl i32 %.0197, 1
  %38 = mul i32 %37, %.0199.ph351
  %39 = or disjoint i32 %38, 1
  %40 = zext i32 %39 to i64
  %41 = tail call ptr @llvm.stacksave.p0()
  %42 = alloca float, i64 %40, align 16
  %43 = alloca float, i64 %40, align 16
  %44 = call i32 @liquid_firdes_gmsktx(i32 noundef %.0197, i32 noundef %.0199.ph351, float noundef %.0207.ph, float noundef 0.000000e+00, ptr noundef nonnull %42) #9
  %45 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %46 = or disjoint i32 %38, 1
  %wide.trip.count = zext i32 %46 to i64
  br label %47

47:                                               ; preds = %36, %47
  %indvars.iv = phi i64 [ 0, %36 ], [ %indvars.iv.next, %47 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %48 = getelementptr inbounds float, ptr %42, i64 %indvars.iv
  %49 = load float, ptr %48, align 4, !tbaa !11
  %50 = fpext float %49 to double
  %51 = trunc nuw i64 %indvars.iv.next to i32
  %52 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef %51, double noundef %50)
  %exitcond = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond, label %53, label %47, !llvm.loop !13

53:                                               ; preds = %47
  %54 = alloca float, i64 %40, align 16
  %55 = alloca float, i64 %40, align 16
  %56 = alloca { float, float }, i64 %40, align 16
  %57 = alloca { float, float }, i64 %40, align 16
  %58 = alloca { float, float }, i64 %40, align 16
  %59 = alloca { float, float }, i64 %40, align 16
  %60 = alloca { float, float }, i64 %40, align 16
  %61 = alloca { float, float }, i64 %40, align 16
  %62 = alloca { float, float }, i64 %40, align 16
  %63 = alloca { float, float }, i64 %40, align 16
  %64 = call i32 @liquid_firdes_prototype(i32 noundef 3, i32 noundef %.0197, i32 noundef %.0199.ph351, float noundef %.0207.ph, float noundef 0.000000e+00, ptr noundef nonnull %54) #9
  %65 = fpext float %.0207.ph to double
  %66 = call double @llvm.fmuladd.f64(double %65, double 1.000000e-01, double 0x3FE6666660000000)
  %67 = uitofp i32 %.0197 to float
  %68 = fpext float %67 to double
  %69 = fdiv double %66, %68
  %70 = fptrunc double %69 to float
  %71 = call i32 @liquid_firdes_kaiser(i32 noundef %39, float noundef %70, float noundef 6.000000e+01, float noundef 0.000000e+00, ptr noundef nonnull %55) #9
  %72 = mul i32 %.0197, %.0199.ph351
  br label %73

73:                                               ; preds = %53, %73
  %indvars.iv268 = phi i64 [ 0, %53 ], [ %indvars.iv.next269, %73 ]
  %74 = trunc nuw i64 %indvars.iv268 to i32
  %75 = add i32 %72, %74
  %76 = urem i32 %75, %39
  %77 = zext i32 %76 to i64
  %78 = getelementptr inbounds float, ptr %54, i64 %77
  %79 = load float, ptr %78, align 4, !tbaa !11
  %80 = getelementptr inbounds { float, float }, ptr %57, i64 %indvars.iv268
  %81 = getelementptr inbounds i8, ptr %80, i64 4
  store float %79, ptr %80, align 8
  store float 0.000000e+00, ptr %81, align 4
  %82 = getelementptr inbounds float, ptr %55, i64 %77
  %83 = load float, ptr %82, align 4, !tbaa !11
  %84 = getelementptr inbounds { float, float }, ptr %58, i64 %indvars.iv268
  %85 = getelementptr inbounds i8, ptr %84, i64 4
  store float %83, ptr %84, align 8
  store float 0.000000e+00, ptr %85, align 4
  %86 = getelementptr inbounds float, ptr %42, i64 %77
  %87 = load float, ptr %86, align 4, !tbaa !11
  %88 = getelementptr inbounds { float, float }, ptr %56, i64 %indvars.iv268
  %89 = getelementptr inbounds i8, ptr %88, i64 4
  store float %87, ptr %88, align 8
  store float 0.000000e+00, ptr %89, align 4
  %indvars.iv.next269 = add nuw nsw i64 %indvars.iv268, 1
  %exitcond272 = icmp eq i64 %indvars.iv.next269, %wide.trip.count
  br i1 %exitcond272, label %90, label %73, !llvm.loop !14

90:                                               ; preds = %73
  %91 = call i32 @fft_run(i32 noundef %39, ptr noundef nonnull %57, ptr noundef nonnull %61, i32 noundef 1, i32 noundef 0) #9
  %92 = call i32 @fft_run(i32 noundef %39, ptr noundef nonnull %58, ptr noundef nonnull %62, i32 noundef 1, i32 noundef 0) #9
  %93 = call i32 @fft_run(i32 noundef %39, ptr noundef nonnull %56, ptr noundef nonnull %60, i32 noundef 1, i32 noundef 0) #9
  %94 = load float, ptr %60, align 16
  %95 = load float, ptr %61, align 16
  %.pre = load float, ptr %62, align 16
  %exitcond277.peel = icmp eq i32 %38, 0
  %96 = insertelement <2 x float> poison, float %95, i64 0
  %97 = insertelement <2 x float> %96, float %94, i64 1
  br i1 %exitcond277.peel, label %.preheader239, label %.peel.next

.preheader239:                                    ; preds = %.peel.next, %90
  %.1202.lcssa = phi float [ %.pre, %90 ], [ %.1202, %.peel.next ]
  %98 = phi <2 x float> [ %97, %90 ], [ %123, %.peel.next ]
  %99 = or disjoint i32 %38, 1
  %100 = zext i32 %99 to i64
  %min.iters.check = icmp ult i32 %99, 5
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %vector.body, %.preheader239
  %indvars.iv279.ph = phi i64 [ 0, %.preheader239 ], [ %n.vec, %vector.body ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.preheader239
  %n.vec = and i64 %100, 4294967292
  %broadcast.splat = shufflevector <2 x float> %98, <2 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splat329 = shufflevector <2 x float> %98, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
  %broadcast.splatinsert332 = insertelement <4 x float> poison, float %.1202.lcssa, i64 0
  %broadcast.splat333 = shufflevector <4 x float> %broadcast.splatinsert332, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert334 = insertelement <4 x float> poison, float %.pre, i64 0
  %broadcast.splat335 = shufflevector <4 x float> %broadcast.splatinsert334, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %101 = getelementptr inbounds { float, float }, ptr %61, i64 %index
  %wide.vec = load <8 x float>, ptr %101, align 16
  %strided.vec = shufflevector <8 x float> %wide.vec, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %102 = fsub <4 x float> %strided.vec, %broadcast.splat
  %103 = fadd <4 x float> %102, <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>
  %104 = getelementptr inbounds { float, float }, ptr %60, i64 %index
  %wide.vec326 = load <8 x float>, ptr %104, align 16
  %strided.vec327 = shufflevector <8 x float> %wide.vec326, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %105 = fsub <4 x float> %strided.vec327, %broadcast.splat329
  %106 = fadd <4 x float> %105, <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>
  %107 = fdiv <4 x float> %103, %106
  %108 = getelementptr inbounds { float, float }, ptr %62, i64 %index
  %wide.vec330 = load <8 x float>, ptr %108, align 16
  %strided.vec331 = shufflevector <8 x float> %wide.vec330, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %109 = fsub <4 x float> %strided.vec331, %broadcast.splat333
  %110 = fdiv <4 x float> %109, %broadcast.splat335
  %111 = fmul <4 x float> %107, %110
  %112 = fmul <4 x float> %110, zeroinitializer
  %113 = getelementptr inbounds { float, float }, ptr %63, i64 %index
  %interleaved.vec = shufflevector <4 x float> %111, <4 x float> %112, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x float> %interleaved.vec, ptr %113, align 16
  %index.next = add nuw i64 %index, 4
  %114 = icmp eq i64 %index.next, %n.vec
  br i1 %114, label %scalar.ph.preheader, label %vector.body, !llvm.loop !15

.peel.next:                                       ; preds = %90, %.peel.next
  %indvars.iv273 = phi i64 [ %indvars.iv.next274, %.peel.next ], [ 1, %90 ]
  %.0201251 = phi float [ %.1202, %.peel.next ], [ %.pre, %90 ]
  %115 = phi <2 x float> [ %123, %.peel.next ], [ %97, %90 ]
  %116 = getelementptr inbounds { float, float }, ptr %60, i64 %indvars.iv273
  %117 = load float, ptr %116, align 8
  %118 = getelementptr inbounds { float, float }, ptr %61, i64 %indvars.iv273
  %119 = load float, ptr %118, align 8
  %120 = insertelement <2 x float> poison, float %119, i64 0
  %121 = insertelement <2 x float> %120, float %117, i64 1
  %122 = fcmp olt <2 x float> %121, %115
  %123 = select <2 x i1> %122, <2 x float> %121, <2 x float> %115
  %124 = getelementptr inbounds { float, float }, ptr %62, i64 %indvars.iv273
  %125 = load float, ptr %124, align 8
  %126 = fcmp olt float %125, %.0201251
  %.1202 = select i1 %126, float %125, float %.0201251
  %indvars.iv.next274 = add nuw nsw i64 %indvars.iv273, 1
  %exitcond277 = icmp eq i64 %indvars.iv.next274, %wide.trip.count
  br i1 %exitcond277, label %.preheader239, label %.peel.next, !llvm.loop !18

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv279 = phi i64 [ %indvars.iv.next280, %scalar.ph ], [ %indvars.iv279.ph, %scalar.ph.preheader ]
  %127 = getelementptr inbounds { float, float }, ptr %61, i64 %indvars.iv279
  %128 = load float, ptr %127, align 8
  %129 = getelementptr inbounds { float, float }, ptr %60, i64 %indvars.iv279
  %130 = load float, ptr %129, align 8
  %131 = insertelement <2 x float> poison, float %128, i64 0
  %132 = insertelement <2 x float> %131, float %130, i64 1
  %133 = fsub <2 x float> %132, %98
  %134 = fadd <2 x float> %133, <float 0x3F847AE140000000, float 0x3F847AE140000000>
  %135 = extractelement <2 x float> %134, i64 0
  %136 = extractelement <2 x float> %134, i64 1
  %137 = fdiv float %135, %136
  %138 = getelementptr inbounds { float, float }, ptr %63, i64 %indvars.iv279
  %139 = getelementptr inbounds { float, float }, ptr %62, i64 %indvars.iv279
  %140 = load float, ptr %139, align 8
  %141 = fsub float %140, %.1202.lcssa
  %142 = fdiv float %141, %.pre
  %143 = insertelement <2 x float> poison, float %142, i64 0
  %144 = shufflevector <2 x float> %143, <2 x float> poison, <2 x i32> zeroinitializer
  %145 = insertelement <2 x float> <float poison, float 0.000000e+00>, float %137, i64 0
  %146 = fmul <2 x float> %144, %145
  store <2 x float> %146, ptr %138, align 8
  %indvars.iv.next280 = add nuw nsw i64 %indvars.iv279, 1
  %exitcond283 = icmp eq i64 %indvars.iv.next280, %wide.trip.count
  br i1 %exitcond283, label %147, label %scalar.ph, !llvm.loop !20

147:                                              ; preds = %scalar.ph
  %148 = call i32 @fft_run(i32 noundef %39, ptr noundef nonnull %63, ptr noundef nonnull %59, i32 noundef -1, i32 noundef 0) #9
  %149 = add i32 %72, 1
  %150 = mul i32 %39, %.0197
  %151 = uitofp i32 %150 to float
  %min.iters.check338 = icmp ult i32 %38, 4
  br i1 %min.iters.check338, label %scalar.ph337.preheader, label %vector.ph339

vector.ph339:                                     ; preds = %147
  %n.vec341 = and i64 %100, 4294967292
  %broadcast.splatinsert345 = insertelement <4 x float> poison, float %151, i64 0
  %broadcast.splat346 = shufflevector <4 x float> %broadcast.splatinsert345, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body343

vector.body343:                                   ; preds = %vector.body343, %vector.ph339
  %index344 = phi i64 [ 0, %vector.ph339 ], [ %index.next347, %vector.body343 ]
  %152 = trunc i64 %index344 to i32
  %153 = or disjoint i32 %152, 1
  %154 = or disjoint i32 %152, 2
  %155 = or disjoint i32 %152, 3
  %156 = add i32 %149, %152
  %157 = add i32 %149, %153
  %158 = add i32 %149, %154
  %159 = add i32 %149, %155
  %160 = urem i32 %156, %39
  %161 = urem i32 %157, %39
  %162 = urem i32 %158, %39
  %163 = urem i32 %159, %39
  %164 = zext i32 %160 to i64
  %165 = zext i32 %161 to i64
  %166 = zext i32 %162 to i64
  %167 = zext i32 %163 to i64
  %168 = getelementptr inbounds { float, float }, ptr %59, i64 %164
  %169 = getelementptr inbounds { float, float }, ptr %59, i64 %165
  %170 = getelementptr inbounds { float, float }, ptr %59, i64 %166
  %171 = getelementptr inbounds { float, float }, ptr %59, i64 %167
  %172 = load float, ptr %168, align 8
  %173 = load float, ptr %169, align 8
  %174 = load float, ptr %170, align 8
  %175 = load float, ptr %171, align 8
  %176 = insertelement <4 x float> poison, float %172, i64 0
  %177 = insertelement <4 x float> %176, float %173, i64 1
  %178 = insertelement <4 x float> %177, float %174, i64 2
  %179 = insertelement <4 x float> %178, float %175, i64 3
  %180 = fdiv <4 x float> %179, %broadcast.splat346
  %181 = getelementptr inbounds float, ptr %43, i64 %index344
  store <4 x float> %180, ptr %181, align 16, !tbaa !11
  %index.next347 = add nuw i64 %index344, 4
  %182 = icmp eq i64 %index.next347, %n.vec341
  br i1 %182, label %scalar.ph337.preheader, label %vector.body343, !llvm.loop !21

scalar.ph337.preheader:                           ; preds = %vector.body343, %147
  %indvars.iv284.ph = phi i64 [ 0, %147 ], [ %n.vec341, %vector.body343 ]
  br label %scalar.ph337

scalar.ph337:                                     ; preds = %scalar.ph337.preheader, %scalar.ph337
  %indvars.iv284 = phi i64 [ %indvars.iv.next285, %scalar.ph337 ], [ %indvars.iv284.ph, %scalar.ph337.preheader ]
  %183 = trunc nuw i64 %indvars.iv284 to i32
  %184 = add i32 %149, %183
  %185 = urem i32 %184, %39
  %186 = zext i32 %185 to i64
  %187 = getelementptr inbounds { float, float }, ptr %59, i64 %186
  %188 = load float, ptr %187, align 8
  %189 = fdiv float %188, %151
  %190 = getelementptr inbounds float, ptr %43, i64 %indvars.iv284
  store float %189, ptr %190, align 4, !tbaa !11
  %indvars.iv.next285 = add nuw nsw i64 %indvars.iv284, 1
  %exitcond288 = icmp eq i64 %indvars.iv.next285, %wide.trip.count
  br i1 %exitcond288, label %.loopexit, label %scalar.ph337, !llvm.loop !22

.loopexit:                                        ; preds = %scalar.ph337
  %191 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  br label %192

192:                                              ; preds = %.loopexit, %192
  %indvars.iv289 = phi i64 [ 0, %.loopexit ], [ %indvars.iv.next290, %192 ]
  %indvars.iv.next290 = add nuw nsw i64 %indvars.iv289, 1
  %193 = getelementptr inbounds float, ptr %43, i64 %indvars.iv289
  %194 = load float, ptr %193, align 4, !tbaa !11
  %195 = fpext float %194 to double
  %196 = trunc nuw i64 %indvars.iv.next290 to i32
  %197 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef %196, double noundef %195)
  %exitcond293 = icmp eq i64 %indvars.iv.next290, %wide.trip.count
  br i1 %exitcond293, label %198, label %192, !llvm.loop !23

198:                                              ; preds = %192
  %199 = call float @liquid_filter_crosscorr(ptr noundef nonnull %42, i32 noundef %39, ptr noundef nonnull %43, i32 noundef %39, i32 noundef 0) #9
  %200 = shl i32 %.0199.ph351, 1
  %.not = icmp eq i32 %200, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %198, %.lr.ph
  %.0198256 = phi float [ %204, %.lr.ph ], [ 0.000000e+00, %198 ]
  %.6255 = phi i32 [ %205, %.lr.ph ], [ 1, %198 ]
  %201 = mul i32 %.6255, %.0197
  %202 = call float @liquid_filter_crosscorr(ptr noundef nonnull %42, i32 noundef %39, ptr noundef nonnull %43, i32 noundef %39, i32 noundef %201) #9
  %203 = fdiv float %202, %199
  %204 = call float @llvm.fmuladd.f32(float %203, float %203, float %.0198256)
  %205 = add nuw i32 %.6255, 1
  %exitcond294.not = icmp eq i32 %205, %200
  br i1 %exitcond294.not, label %._crit_edge, label %.lr.ph, !llvm.loop !24

._crit_edge:                                      ; preds = %.lr.ph, %198
  %.0198.lcssa = phi float [ 0.000000e+00, %198 ], [ %204, %.lr.ph ]
  %206 = add i32 %200, -1
  %207 = uitofp i32 %206 to float
  %208 = fdiv float %.0198.lcssa, %207
  %209 = call float @sqrtf(float noundef %208) #9
  %210 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %211 = call float @log10f(float noundef %209) #9
  %212 = fmul float %211, 2.000000e+01
  %213 = fpext float %212 to double
  %214 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %213)
  %215 = call noalias ptr @fopen(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.17)
  %216 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.16) #9
  %217 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.19) #9
  %218 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.20) #9
  %219 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.21) #9
  %220 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.22, i32 noundef %.0197) #9
  %221 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.23, i32 noundef %.0199.ph351) #9
  %222 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.24, double noundef %65) #9
  %223 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.25) #9
  %224 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.26) #9
  %225 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.27) #9
  %226 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.28) #9
  %227 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.29) #9
  br label %228

228:                                              ; preds = %._crit_edge, %228
  %indvars.iv295 = phi i64 [ 0, %._crit_edge ], [ %indvars.iv.next296, %228 ]
  %indvars.iv.next296 = add nuw nsw i64 %indvars.iv295, 1
  %229 = getelementptr inbounds float, ptr %42, i64 %indvars.iv295
  %230 = load float, ptr %229, align 4, !tbaa !11
  %231 = fdiv float %230, %67
  %232 = fpext float %231 to double
  %233 = trunc nuw i64 %indvars.iv.next296 to i32
  %234 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.30, i32 noundef %233, double noundef %232) #9
  %exitcond299 = icmp eq i64 %indvars.iv.next296, %wide.trip.count
  br i1 %exitcond299, label %.preheader238, label %228, !llvm.loop !25

.preheader238:                                    ; preds = %228, %.preheader238
  %indvars.iv300 = phi i64 [ %indvars.iv.next301, %.preheader238 ], [ 0, %228 ]
  %indvars.iv.next301 = add nuw nsw i64 %indvars.iv300, 1
  %235 = getelementptr inbounds float, ptr %43, i64 %indvars.iv300
  %236 = load float, ptr %235, align 4, !tbaa !11
  %237 = fmul float %236, %67
  %238 = fpext float %237 to double
  %239 = trunc nuw i64 %indvars.iv.next301 to i32
  %240 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.31, i32 noundef %239, double noundef %238) #9
  %exitcond304 = icmp eq i64 %indvars.iv.next301, %wide.trip.count
  br i1 %exitcond304, label %.preheader, label %.preheader238, !llvm.loop !26

.preheader:                                       ; preds = %.preheader238, %.preheader
  %indvars.iv305 = phi i64 [ %indvars.iv.next306, %.preheader ], [ 0, %.preheader238 ]
  %indvars.iv.next306 = add nuw nsw i64 %indvars.iv305, 1
  %241 = getelementptr inbounds float, ptr %54, i64 %indvars.iv305
  %242 = load float, ptr %241, align 4, !tbaa !11
  %243 = fpext float %242 to double
  %244 = trunc nuw i64 %indvars.iv.next306 to i32
  %245 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.32, i32 noundef %244, double noundef %243) #9
  %exitcond309 = icmp eq i64 %indvars.iv.next306, %wide.trip.count
  br i1 %exitcond309, label %246, label %.preheader, !llvm.loop !27

246:                                              ; preds = %.preheader
  %247 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.33) #9
  %248 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.34) #9
  %249 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.35) #9
  %250 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.36) #9
  %251 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.37) #9
  %252 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.38) #9
  %253 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.2) #9
  %254 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.39) #9
  %255 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.40) #9
  %256 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.41) #9
  %257 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.42) #9
  %258 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.43) #9
  %259 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.44) #9
  %260 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.45) #9
  %261 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.46) #9
  %262 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.47) #9
  %263 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.48) #9
  %264 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.49) #9
  %265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.2) #9
  %266 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.39) #9
  %267 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.50) #9
  %268 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.51) #9
  %269 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.52) #9
  %270 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.53) #9
  %271 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.54) #9
  %272 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.55) #9
  %273 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.56) #9
  %274 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.57) #9
  %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.58) #9
  %276 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.59) #9
  %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.60) #9
  %278 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.61) #9
  %279 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.56) #9
  %280 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.62) #9
  %281 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.58) #9
  %282 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.63) #9
  %283 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.64) #9
  %284 = call i32 @fclose(ptr noundef %215)
  %285 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.65, ptr noundef nonnull @.str.16)
  call void @llvm.stackrestore.p0(ptr %41)
  br label %286

286:                                              ; preds = %246, %5
  ret i32 0
}

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare float @sqrtf(float noundef) local_unnamed_addr #8

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare float @log10f(float noundef) local_unnamed_addr #8

; 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) #5

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 "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 = { 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 #4 = { 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 #5 = { mustprogress nocallback nofree nosync nounwind willreturn }
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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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 #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { noreturn nounwind }
attributes #12 = { cold 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 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}
!15 = distinct !{!15, !10, !16, !17}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !10, !19}
!19 = !{!"llvm.loop.peeled.count", i32 1}
!20 = distinct !{!20, !10, !17, !16}
!21 = distinct !{!21, !10, !16, !17}
!22 = distinct !{!22, !10, !17, !16}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !10}
!27 = distinct !{!27, !10}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass