; LLVM IR from jgaeddert/liquid-dsp :: src/multichannel/src (ofdmframesync)

; 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"

%struct.ofdmframesync_s = type { i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, float, float, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, float, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, float, float, i32, i32, i32, { float, float }, { float, float }, float, float, ptr, ptr }

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

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

; Function Attrs: nounwind
declare float @cosf(float noundef) #1

; Function Attrs: nounwind
declare float @sinf(float noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ofdmframesync_reset(ptr noundef) #2

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

; Function Attrs: nounwind uwtable
define dso_local i32 @ofdmframesync_execute_S1(ptr noundef %0) #3 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca { float, float }, align 4
  %6 = alloca i32, align 4
  %7 = alloca { float, float }, align 4
  %8 = alloca { float, float }, align 4
  %9 = alloca { float, float }, align 4
  %10 = alloca { float, float }, align 4
  %11 = alloca float, align 4
  %12 = alloca { float, float }, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca { float, float }, align 4
  %16 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %17 = load ptr, ptr %3, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.ofdmframesync_s, ptr %17, i32 0, i32 33
  %19 = load i32, ptr %18, align 8, !tbaa !9
  %20 = add i32 %19, -1
  store i32 %20, ptr %18, align 8, !tbaa !9
  %21 = load ptr, ptr %3, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.ofdmframesync_s, ptr %21, i32 0, i32 33
  %23 = load i32, ptr %22, align 8, !tbaa !9
  %24 = icmp ugt i32 %23, 0
  br i1 %24, label %25, label %26

25:                                               ; preds = %1
  store i32 0, ptr %2, align 4
  br label %394

26:                                               ; preds = %1
  %27 = load ptr, ptr %3, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.ofdmframesync_s, ptr %27, i32 0, i32 34
  %29 = load i32, ptr %28, align 4, !tbaa !13
  %30 = add i32 %29, 1
  store i32 %30, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  %31 = load ptr, ptr %3, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.ofdmframesync_s, ptr %31, i32 0, i32 16
  %33 = load ptr, ptr %32, align 8, !tbaa !14
  %34 = call i32 @windowcf_read(ptr noundef %33, ptr noundef %4)
  %35 = load ptr, ptr %3, align 8, !tbaa !5
  %36 = load ptr, ptr %4, align 8, !tbaa !5
  %37 = load ptr, ptr %3, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.ofdmframesync_s, ptr %37, i32 0, i32 2
  %39 = load i32, ptr %38, align 8, !tbaa !15
  %40 = zext i32 %39 to i64
  %41 = getelementptr inbounds { float, float }, ptr %36, i64 %40
  %42 = load ptr, ptr %3, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.ofdmframesync_s, ptr %42, i32 0, i32 25
  %44 = load ptr, ptr %43, align 8, !tbaa !16
  %45 = call i32 @ofdmframesync_estimate_gain_S1(ptr noundef %35, ptr noundef %41, ptr noundef %44)
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %46 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %47 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  store float 0.000000e+00, ptr %46, align 4
  store float 0.000000e+00, ptr %47, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  store i32 0, ptr %6, align 4, !tbaa !17
  br label %48

48:                                               ; preds = %107, %26
  %49 = load i32, ptr %6, align 4, !tbaa !17
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.ofdmframesync_s, ptr %50, i32 0, i32 0
  %52 = load i32, ptr %51, align 8, !tbaa !18
  %53 = icmp ult i32 %49, %52
  br i1 %53, label %54, label %110

54:                                               ; preds = %48
  %55 = load ptr, ptr %3, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.ofdmframesync_s, ptr %55, i32 0, i32 25
  %57 = load ptr, ptr %56, align 8, !tbaa !16
  %58 = load i32, ptr %6, align 4, !tbaa !17
  %59 = add i32 %58, 1
  %60 = load ptr, ptr %3, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.ofdmframesync_s, ptr %60, i32 0, i32 0
  %62 = load i32, ptr %61, align 8, !tbaa !18
  %63 = urem i32 %59, %62
  %64 = zext i32 %63 to i64
  %65 = getelementptr inbounds { float, float }, ptr %57, i64 %64
  %66 = getelementptr inbounds { float, float }, ptr %65, i32 0, i32 0
  %67 = load float, ptr %66, align 4
  %68 = getelementptr inbounds { float, float }, ptr %65, i32 0, i32 1
  %69 = load float, ptr %68, align 4
  %70 = load ptr, ptr %3, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.ofdmframesync_s, ptr %70, i32 0, i32 25
  %72 = load ptr, ptr %71, align 8, !tbaa !16
  %73 = load i32, ptr %6, align 4, !tbaa !17
  %74 = zext i32 %73 to i64
  %75 = getelementptr inbounds { float, float }, ptr %72, i64 %74
  %76 = getelementptr inbounds { float, float }, ptr %75, i32 0, i32 0
  %77 = load float, ptr %76, align 4
  %78 = getelementptr inbounds { float, float }, ptr %75, i32 0, i32 1
  %79 = load float, ptr %78, align 4
  %80 = fneg float %79
  %81 = fmul float %67, %77
  %82 = fmul float %69, %80
  %83 = fmul float %67, %80
  %84 = fmul float %69, %77
  %85 = fsub float %81, %82
  %86 = fadd float %83, %84
  %87 = fcmp uno float %85, %85
  br i1 %87, label %88, label %96, !prof !19

88:                                               ; preds = %54
  %89 = fcmp uno float %86, %86
  br i1 %89, label %90, label %96, !prof !19

90:                                               ; preds = %88
  %91 = call <2 x float> @__mulsc3(float noundef %67, float noundef %69, float noundef %77, float noundef %80) #6
  store <2 x float> %91, ptr %7, align 4
  %92 = getelementptr inbounds { float, float }, ptr %7, i32 0, i32 0
  %93 = load float, ptr %92, align 4
  %94 = getelementptr inbounds { float, float }, ptr %7, i32 0, i32 1
  %95 = load float, ptr %94, align 4
  br label %96

96:                                               ; preds = %90, %88, %54
  %97 = phi float [ %85, %54 ], [ %85, %88 ], [ %93, %90 ]
  %98 = phi float [ %86, %54 ], [ %86, %88 ], [ %95, %90 ]
  %99 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %100 = load float, ptr %99, align 4
  %101 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  %102 = load float, ptr %101, align 4
  %103 = fadd float %100, %97
  %104 = fadd float %102, %98
  %105 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %106 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  store float %103, ptr %105, align 4
  store float %104, ptr %106, align 4
  br label %107

107:                                              ; preds = %96
  %108 = load i32, ptr %6, align 4, !tbaa !17
  %109 = add i32 %108, 1
  store i32 %109, ptr %6, align 4, !tbaa !17
  br label %48, !llvm.loop !20

110:                                              ; preds = %48
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.ofdmframesync_s, ptr %111, i32 0, i32 9
  %113 = load i32, ptr %112, align 4, !tbaa !22
  %114 = uitofp i32 %113 to float
  %115 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %116 = load float, ptr %115, align 4
  %117 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  %118 = load float, ptr %117, align 4
  %119 = fdiv float %116, %114
  %120 = fdiv float %118, %114
  %121 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %122 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  store float %119, ptr %121, align 4
  store float %120, ptr %122, align 4
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.ofdmframesync_s, ptr %123, i32 0, i32 21
  %125 = load float, ptr %124, align 8, !tbaa !23
  %126 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %127 = load float, ptr %126, align 4
  %128 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  %129 = load float, ptr %128, align 4
  %130 = fmul float %127, %125
  %131 = fmul float %129, %125
  %132 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %133 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  store float %130, ptr %132, align 4
  store float %131, ptr %133, align 4
  %134 = load ptr, ptr %3, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.ofdmframesync_s, ptr %134, i32 0, i32 35
  %136 = load i32, ptr %135, align 8, !tbaa !24
  %137 = uitofp i32 %136 to float
  %138 = fmul float %137, 2.000000e+00
  %139 = fpext float %138 to double
  %140 = fmul double %139, 0x400921FB54442D18
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.ofdmframesync_s, ptr %141, i32 0, i32 0
  %143 = load i32, ptr %142, align 8, !tbaa !18
  %144 = uitofp i32 %143 to float
  %145 = fpext float %144 to double
  %146 = fdiv double %140, %145
  %147 = fptrunc double %146 to float
  %148 = call float @cosf(float noundef %147) #6
  %149 = load ptr, ptr %3, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.ofdmframesync_s, ptr %149, i32 0, i32 35
  %151 = load i32, ptr %150, align 8, !tbaa !24
  %152 = uitofp i32 %151 to float
  %153 = fmul float %152, 2.000000e+00
  %154 = fpext float %153 to double
  %155 = fmul double %154, 0x400921FB54442D18
  %156 = load ptr, ptr %3, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.ofdmframesync_s, ptr %156, i32 0, i32 0
  %158 = load i32, ptr %157, align 8, !tbaa !18
  %159 = uitofp i32 %158 to float
  %160 = fpext float %159 to double
  %161 = fdiv double %155, %160
  %162 = fptrunc double %161 to float
  %163 = call float @sinf(float noundef %162) #6
  %164 = fmul float 0.000000e+00, %163
  %165 = fmul float 1.000000e+00, %163
  %166 = fadd float %148, %164
  %167 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %168 = load float, ptr %167, align 4
  %169 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  %170 = load float, ptr %169, align 4
  %171 = fmul float %168, %166
  %172 = fmul float %170, %165
  %173 = fmul float %168, %165
  %174 = fmul float %170, %166
  %175 = fsub float %171, %172
  %176 = fadd float %173, %174
  %177 = fcmp uno float %175, %175
  br i1 %177, label %178, label %186, !prof !19

178:                                              ; preds = %110
  %179 = fcmp uno float %176, %176
  br i1 %179, label %180, label %186, !prof !19

180:                                              ; preds = %178
  %181 = call <2 x float> @__mulsc3(float noundef %168, float noundef %170, float noundef %166, float noundef %165) #6
  store <2 x float> %181, ptr %8, align 4
  %182 = getelementptr inbounds { float, float }, ptr %8, i32 0, i32 0
  %183 = load float, ptr %182, align 4
  %184 = getelementptr inbounds { float, float }, ptr %8, i32 0, i32 1
  %185 = load float, ptr %184, align 4
  br label %186

186:                                              ; preds = %180, %178, %110
  %187 = phi float [ %175, %110 ], [ %175, %178 ], [ %183, %180 ]
  %188 = phi float [ %176, %110 ], [ %176, %178 ], [ %185, %180 ]
  %189 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %190 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  store float %187, ptr %189, align 4
  store float %188, ptr %190, align 4
  %191 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %192 = load float, ptr %191, align 4
  %193 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  %194 = load float, ptr %193, align 4
  %195 = getelementptr inbounds { float, float }, ptr %9, i32 0, i32 0
  %196 = getelementptr inbounds { float, float }, ptr %9, i32 0, i32 1
  store float %192, ptr %195, align 4
  store float %194, ptr %196, align 4
  %197 = load <2 x float>, ptr %9, align 4
  %198 = call float @cabsf(<2 x float> noundef %197) #6
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.ofdmframesync_s, ptr %199, i32 0, i32 39
  %201 = load float, ptr %200, align 8, !tbaa !25
  %202 = fcmp ogt float %198, %201
  br i1 %202, label %203, label %379

203:                                              ; preds = %186
  %204 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 0
  %205 = load float, ptr %204, align 4
  %206 = getelementptr inbounds { float, float }, ptr %5, i32 0, i32 1
  %207 = load float, ptr %206, align 4
  %208 = getelementptr inbounds { float, float }, ptr %10, i32 0, i32 0
  %209 = getelementptr inbounds { float, float }, ptr %10, i32 0, i32 1
  store float %205, ptr %208, align 4
  store float %207, ptr %209, align 4
  %210 = load <2 x float>, ptr %10, align 4
  %211 = call float @cargf(<2 x float> noundef %210) #6
  %212 = call float @llvm.fabs.f32(float %211)
  %213 = fpext float %212 to double
  %214 = fcmp olt double %213, 0x3FD41B2F7BA3BCBE
  br i1 %214, label %215, label %379

215:                                              ; preds = %203
  %216 = load ptr, ptr %3, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.ofdmframesync_s, ptr %216, i32 0, i32 28
  store i32 4, ptr %217, align 8, !tbaa !26
  %218 = load ptr, ptr %3, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.ofdmframesync_s, ptr %218, i32 0, i32 0
  %220 = load i32, ptr %219, align 8, !tbaa !18
  %221 = load ptr, ptr %3, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.ofdmframesync_s, ptr %221, i32 0, i32 2
  %223 = load i32, ptr %222, align 8, !tbaa !15
  %224 = add i32 %220, %223
  %225 = load ptr, ptr %3, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.ofdmframesync_s, ptr %225, i32 0, i32 35
  %227 = load i32, ptr %226, align 8, !tbaa !24
  %228 = add i32 %224, %227
  %229 = load ptr, ptr %3, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.ofdmframesync_s, ptr %229, i32 0, i32 33
  store i32 %228, ptr %230, align 8, !tbaa !9
  %231 = load ptr, ptr %3, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.ofdmframesync_s, ptr %231, i32 0, i32 34
  store i32 0, ptr %232, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  %233 = load ptr, ptr %3, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.ofdmframesync_s, ptr %233, i32 0, i32 0
  %235 = load i32, ptr %234, align 8, !tbaa !18
  %236 = uitofp i32 %235 to float
  %237 = load ptr, ptr %3, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.ofdmframesync_s, ptr %237, i32 0, i32 6
  %239 = load i32, ptr %238, align 8, !tbaa !27
  %240 = load ptr, ptr %3, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.ofdmframesync_s, ptr %240, i32 0, i32 7
  %242 = load i32, ptr %241, align 4, !tbaa !28
  %243 = add i32 %239, %242
  %244 = uitofp i32 %243 to float
  %245 = call float @sqrtf(float noundef %244) #6
  %246 = fdiv float %236, %245
  store float %246, ptr %11, align 4, !tbaa !29
  store i32 0, ptr %6, align 4, !tbaa !17
  br label %247

247:                                              ; preds = %309, %215
  %248 = load i32, ptr %6, align 4, !tbaa !17
  %249 = load ptr, ptr %3, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.ofdmframesync_s, ptr %249, i32 0, i32 0
  %251 = load i32, ptr %250, align 8, !tbaa !18
  %252 = icmp ult i32 %248, %251
  br i1 %252, label %253, label %312

253:                                              ; preds = %247
  %254 = load float, ptr %11, align 4, !tbaa !29
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.ofdmframesync_s, ptr %255, i32 0, i32 25
  %257 = load ptr, ptr %256, align 8, !tbaa !16
  %258 = load i32, ptr %6, align 4, !tbaa !17
  %259 = zext i32 %258 to i64
  %260 = getelementptr inbounds { float, float }, ptr %257, i64 %259
  %261 = getelementptr inbounds { float, float }, ptr %260, i32 0, i32 0
  %262 = load float, ptr %261, align 4
  %263 = getelementptr inbounds { float, float }, ptr %260, i32 0, i32 1
  %264 = load float, ptr %263, align 4
  %265 = fmul float %262, %254
  %266 = fmul float %264, %254
  %267 = getelementptr inbounds { float, float }, ptr %260, i32 0, i32 0
  %268 = getelementptr inbounds { float, float }, ptr %260, i32 0, i32 1
  store float %265, ptr %267, align 4
  store float %266, ptr %268, align 4
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.ofdmframesync_s, ptr %269, i32 0, i32 26
  %271 = load ptr, ptr %270, align 8, !tbaa !30
  %272 = load i32, ptr %6, align 4, !tbaa !17
  %273 = zext i32 %272 to i64
  %274 = getelementptr inbounds { float, float }, ptr %271, i64 %273
  %275 = getelementptr inbounds { float, float }, ptr %274, i32 0, i32 0
  %276 = load float, ptr %275, align 4
  %277 = getelementptr inbounds { float, float }, ptr %274, i32 0, i32 1
  %278 = load float, ptr %277, align 4
  %279 = load ptr, ptr %3, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.ofdmframesync_s, ptr %279, i32 0, i32 25
  %281 = load ptr, ptr %280, align 8, !tbaa !16
  %282 = load i32, ptr %6, align 4, !tbaa !17
  %283 = zext i32 %282 to i64
  %284 = getelementptr inbounds { float, float }, ptr %281, i64 %283
  %285 = getelementptr inbounds { float, float }, ptr %284, i32 0, i32 0
  %286 = load float, ptr %285, align 4
  %287 = getelementptr inbounds { float, float }, ptr %284, i32 0, i32 1
  %288 = load float, ptr %287, align 4
  %289 = fmul float %286, %276
  %290 = fmul float %288, %278
  %291 = fmul float %286, %278
  %292 = fmul float %288, %276
  %293 = fsub float %289, %290
  %294 = fadd float %291, %292
  %295 = fcmp uno float %293, %293
  br i1 %295, label %296, label %304, !prof !19

296:                                              ; preds = %253
  %297 = fcmp uno float %294, %294
  br i1 %297, label %298, label %304, !prof !19

298:                                              ; preds = %296
  %299 = call <2 x float> @__mulsc3(float noundef %286, float noundef %288, float noundef %276, float noundef %278) #6
  store <2 x float> %299, ptr %12, align 4
  %300 = getelementptr inbounds { float, float }, ptr %12, i32 0, i32 0
  %301 = load float, ptr %300, align 4
  %302 = getelementptr inbounds { float, float }, ptr %12, i32 0, i32 1
  %303 = load float, ptr %302, align 4
  br label %304

304:                                              ; preds = %298, %296, %253
  %305 = phi float [ %293, %253 ], [ %293, %296 ], [ %301, %298 ]
  %306 = phi float [ %294, %253 ], [ %294, %296 ], [ %303, %298 ]
  %307 = getelementptr inbounds { float, float }, ptr %284, i32 0, i32 0
  %308 = getelementptr inbounds { float, float }, ptr %284, i32 0, i32 1
  store float %305, ptr %307, align 4
  store float %306, ptr %308, align 4
  br label %309

309:                                              ; preds = %304
  %310 = load i32, ptr %6, align 4, !tbaa !17
  %311 = add i32 %310, 1
  store i32 %311, ptr %6, align 4, !tbaa !17
  br label %247, !llvm.loop !31

312:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 4, ptr %13, align 4, !tbaa !17
  %313 = load i32, ptr %13, align 4, !tbaa !17
  %314 = load ptr, ptr %3, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.ofdmframesync_s, ptr %314, i32 0, i32 6
  %316 = load i32, ptr %315, align 8, !tbaa !27
  %317 = load ptr, ptr %3, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.ofdmframesync_s, ptr %317, i32 0, i32 7
  %319 = load i32, ptr %318, align 4, !tbaa !28
  %320 = add i32 %316, %319
  %321 = icmp uge i32 %313, %320
  br i1 %321, label %322, label %331

322:                                              ; preds = %312
  %323 = load ptr, ptr %3, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.ofdmframesync_s, ptr %323, i32 0, i32 6
  %325 = load i32, ptr %324, align 8, !tbaa !27
  %326 = load ptr, ptr %3, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.ofdmframesync_s, ptr %326, i32 0, i32 7
  %328 = load i32, ptr %327, align 4, !tbaa !28
  %329 = add i32 %325, %328
  %330 = sub i32 %329, 1
  store i32 %330, ptr %13, align 4, !tbaa !17
  br label %331

331:                                              ; preds = %322, %312
  %332 = load ptr, ptr %3, align 8, !tbaa !5
  %333 = load i32, ptr %13, align 4, !tbaa !17
  %334 = call i32 @ofdmframesync_estimate_eqgain_poly(ptr noundef %332, i32 noundef %333)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !17
  br label %335

335:                                              ; preds = %375, %331
  %336 = load i32, ptr %14, align 4, !tbaa !17
  %337 = load ptr, ptr %3, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.ofdmframesync_s, ptr %337, i32 0, i32 0
  %339 = load i32, ptr %338, align 8, !tbaa !18
  %340 = icmp ult i32 %336, %339
  br i1 %340, label %341, label %378

341:                                              ; preds = %335
  %342 = load ptr, ptr %3, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.ofdmframesync_s, ptr %342, i32 0, i32 26
  %344 = load ptr, ptr %343, align 8, !tbaa !30
  %345 = load i32, ptr %14, align 4, !tbaa !17
  %346 = zext i32 %345 to i64
  %347 = getelementptr inbounds { float, float }, ptr %344, i64 %346
  %348 = getelementptr inbounds { float, float }, ptr %347, i32 0, i32 0
  %349 = load float, ptr %348, align 4
  %350 = getelementptr inbounds { float, float }, ptr %347, i32 0, i32 1
  %351 = load float, ptr %350, align 4
  %352 = load ptr, ptr %3, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.ofdmframesync_s, ptr %352, i32 0, i32 25
  %354 = load ptr, ptr %353, align 8, !tbaa !16
  %355 = load i32, ptr %14, align 4, !tbaa !17
  %356 = zext i32 %355 to i64
  %357 = getelementptr inbounds { float, float }, ptr %354, i64 %356
  %358 = getelementptr inbounds { float, float }, ptr %357, i32 0, i32 0
  %359 = load float, ptr %358, align 4
  %360 = getelementptr inbounds { float, float }, ptr %357, i32 0, i32 1
  %361 = load float, ptr %360, align 4
  %362 = call <2 x float> @__divsc3(float noundef %349, float noundef %351, float noundef %359, float noundef %361) #6
  store <2 x float> %362, ptr %15, align 4
  %363 = getelementptr inbounds { float, float }, ptr %15, i32 0, i32 0
  %364 = load float, ptr %363, align 4
  %365 = getelementptr inbounds { float, float }, ptr %15, i32 0, i32 1
  %366 = load float, ptr %365, align 4
  %367 = load ptr, ptr %3, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.ofdmframesync_s, ptr %367, i32 0, i32 27
  %369 = load ptr, ptr %368, align 8, !tbaa !32
  %370 = load i32, ptr %14, align 4, !tbaa !17
  %371 = zext i32 %370 to i64
  %372 = getelementptr inbounds { float, float }, ptr %369, i64 %371
  %373 = getelementptr inbounds { float, float }, ptr %372, i32 0, i32 0
  %374 = getelementptr inbounds { float, float }, ptr %372, i32 0, i32 1
  store float %364, ptr %373, align 4
  store float %366, ptr %374, align 4
  br label %375

375:                                              ; preds = %341
  %376 = load i32, ptr %14, align 4, !tbaa !17
  %377 = add i32 %376, 1
  store i32 %377, ptr %14, align 4, !tbaa !17
  br label %335, !llvm.loop !33

378:                                              ; preds = %335
  store i32 0, ptr %2, align 4
  store i32 1, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %393

379:                                              ; preds = %203, %186
  %380 = load ptr, ptr %3, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.ofdmframesync_s, ptr %380, i32 0, i32 34
  %382 = load i32, ptr %381, align 4, !tbaa !13
  %383 = icmp eq i32 %382, 16
  br i1 %383, label %384, label %387

384:                                              ; preds = %379
  %385 = load ptr, ptr %3, align 8, !tbaa !5
  %386 = call i32 @ofdmframesync_reset(ptr noundef %385)
  br label %387

387:                                              ; preds = %384, %379
  %388 = load ptr, ptr %3, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.ofdmframesync_s, ptr %388, i32 0, i32 1
  %390 = load i32, ptr %389, align 4, !tbaa !34
  %391 = load ptr, ptr %3, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.ofdmframesync_s, ptr %391, i32 0, i32 33
  store i32 %390, ptr %392, align 8, !tbaa !9
  store i32 0, ptr %2, align 4
  store i32 1, ptr %16, align 4
  br label %393

393:                                              ; preds = %387, %378
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  br label %394

394:                                              ; preds = %393, %25
  %395 = load i32, ptr %2, align 4
  ret i32 %395
}

declare i32 @windowcf_read(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind
declare float @cargf(<2 x float> noundef) #1

; Function Attrs: nounwind
declare float @cabsf(<2 x float> noundef) #1

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @ofdmframesync_estimate_gain_S1(ptr noundef, ptr noundef, ptr noundef) #3

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @ofdmframesync_estimate_eqgain_poly(ptr noundef, i32 noundef) #3

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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"="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 #3 = { 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 #4 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 = !{!10, !11, i64 216}
!10 = !{!"ofdmframesync_s", !11, i64 0, !11, i64 4, !11, i64 8, !6, i64 16, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !12, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !11, i64 184, !6, i64 192, !6, i64 200, !12, i64 208, !12, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !7, i64 228, !7, i64 236, !12, i64 244, !12, i64 248, !6, i64 256, !6, i64 264}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!10, !11, i64 220}
!14 = !{!10, !6, i64 88}
!15 = !{!10, !11, i64 8}
!16 = !{!10, !6, i64 160}
!17 = !{!11, !11, i64 0}
!18 = !{!10, !11, i64 0}
!19 = !{!"branch_weights", i32 1, i32 1048575}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!10, !11, i64 44}
!23 = !{!10, !12, i64 128}
!24 = !{!10, !11, i64 224}
!25 = !{!10, !12, i64 248}
!26 = !{!10, !11, i64 184}
!27 = !{!10, !11, i64 32}
!28 = !{!10, !11, i64 36}
!29 = !{!12, !12, i64 0}
!30 = !{!10, !6, i64 168}
!31 = distinct !{!31, !21}
!32 = !{!10, !6, i64 176}
!33 = distinct !{!33, !21}
!34 = !{!10, !11, i64 4}


; 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"

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @ofdmframesync_reset(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @ofdmframesync_execute_S1(ptr noundef %0) local_unnamed_addr #3 {
  %2 = alloca ptr, align 8
  %3 = getelementptr inbounds i8, ptr %0, i64 216
  %4 = load i32, ptr %3, align 8, !tbaa !5
  %5 = add i32 %4, -1
  store i32 %5, ptr %3, align 8, !tbaa !5
  %.not = icmp eq i32 %5, 0
  br i1 %.not, label %6, label %208

6:                                                ; preds = %1
  %7 = getelementptr inbounds i8, ptr %0, i64 220
  %8 = load i32, ptr %7, align 4, !tbaa !12
  %9 = add i32 %8, 1
  store i32 %9, ptr %7, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #8
  %10 = getelementptr inbounds i8, ptr %0, i64 88
  %11 = load ptr, ptr %10, align 8, !tbaa !13
  %12 = call i32 @windowcf_read(ptr noundef %11, ptr noundef nonnull %2) #8
  %13 = load ptr, ptr %2, align 8, !tbaa !14
  %14 = getelementptr inbounds i8, ptr %0, i64 8
  %15 = load i32, ptr %14, align 8, !tbaa !15
  %16 = zext i32 %15 to i64
  %17 = getelementptr inbounds { float, float }, ptr %13, i64 %16
  %18 = getelementptr inbounds i8, ptr %0, i64 160
  %19 = load ptr, ptr %18, align 8, !tbaa !16
  %20 = call i32 @ofdmframesync_estimate_gain_S1(ptr noundef nonnull %0, ptr noundef %17, ptr noundef %19)
  %21 = load i32, ptr %0, align 8, !tbaa !17
  %.not96 = icmp eq i32 %21, 0
  br i1 %.not96, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %6, %54
  %22 = phi i32 [ %55, %54 ], [ %21, %6 ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %54 ], [ 0, %6 ]
  %23 = phi <2 x float> [ %57, %54 ], [ zeroinitializer, %6 ]
  %24 = load ptr, ptr %18, align 8, !tbaa !16
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %25 = zext i32 %22 to i64
  %26 = icmp eq i64 %indvars.iv.next, %25
  %27 = select i1 %26, i64 0, i64 %indvars.iv.next
  %28 = getelementptr inbounds { float, float }, ptr %24, i64 %27
  %29 = load float, ptr %28, align 4
  %30 = getelementptr inbounds i8, ptr %28, i64 4
  %31 = load float, ptr %30, align 4
  %32 = getelementptr inbounds { float, float }, ptr %24, i64 %indvars.iv
  %33 = load <2 x float>, ptr %32, align 4
  %34 = extractelement <2 x float> %33, i64 1
  %35 = fneg float %34
  %36 = insertelement <2 x float> poison, float %31, i64 0
  %37 = shufflevector <2 x float> %36, <2 x float> poison, <2 x i32> zeroinitializer
  %38 = fmul <2 x float> %37, %33
  %39 = shufflevector <2 x float> %38, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %40 = insertelement <2 x float> poison, float %29, i64 0
  %41 = shufflevector <2 x float> %40, <2 x float> poison, <2 x i32> zeroinitializer
  %42 = fmul <2 x float> %41, %33
  %43 = fsub <2 x float> %39, %42
  %44 = fadd <2 x float> %39, %42
  %45 = shufflevector <2 x float> %44, <2 x float> %43, <2 x i32> <i32 0, i32 3>
  %46 = extractelement <2 x float> %44, i64 0
  %47 = fcmp uno float %46, 0.000000e+00
  br i1 %47, label %48, label %54, !prof !18

48:                                               ; preds = %.lr.ph
  %49 = extractelement <2 x float> %43, i64 1
  %50 = fcmp uno float %49, 0.000000e+00
  br i1 %50, label %51, label %54, !prof !18

51:                                               ; preds = %48
  %52 = extractelement <2 x float> %33, i64 0
  %53 = call <2 x float> @__mulsc3(float noundef %29, float noundef %31, float noundef %52, float noundef %35) #8
  %.pre = load i32, ptr %0, align 8, !tbaa !17
  br label %54

54:                                               ; preds = %51, %48, %.lr.ph
  %55 = phi i32 [ %22, %.lr.ph ], [ %22, %48 ], [ %.pre, %51 ]
  %56 = phi <2 x float> [ %45, %.lr.ph ], [ %45, %48 ], [ %53, %51 ]
  %57 = fadd <2 x float> %23, %56
  %58 = zext i32 %55 to i64
  %59 = icmp ult i64 %indvars.iv.next, %58
  br i1 %59, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !19

._crit_edge.loopexit:                             ; preds = %54
  %60 = uitofp i32 %55 to float
  %61 = fpext float %60 to double
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %6
  %.lcssa = phi double [ 0.000000e+00, %6 ], [ %61, %._crit_edge.loopexit ]
  %62 = phi <2 x float> [ zeroinitializer, %6 ], [ %57, %._crit_edge.loopexit ]
  %63 = getelementptr inbounds i8, ptr %0, i64 44
  %64 = load i32, ptr %63, align 4, !tbaa !21
  %65 = uitofp i32 %64 to float
  %66 = getelementptr inbounds i8, ptr %0, i64 128
  %67 = load float, ptr %66, align 8, !tbaa !22
  %68 = getelementptr inbounds i8, ptr %0, i64 224
  %69 = load i32, ptr %68, align 8, !tbaa !23
  %70 = uitofp i32 %69 to float
  %71 = fmul float %70, 2.000000e+00
  %72 = fpext float %71 to double
  %73 = fmul double %72, 0x400921FB54442D18
  %74 = fdiv double %73, %.lcssa
  %75 = fptrunc double %74 to float
  %76 = call float @cosf(float noundef %75) #8
  %77 = load i32, ptr %68, align 8, !tbaa !23
  %78 = uitofp i32 %77 to float
  %79 = fmul float %78, 2.000000e+00
  %80 = fpext float %79 to double
  %81 = fmul double %80, 0x400921FB54442D18
  %82 = load i32, ptr %0, align 8, !tbaa !17
  %83 = uitofp i32 %82 to float
  %84 = fpext float %83 to double
  %85 = fdiv double %81, %84
  %86 = fptrunc double %85 to float
  %87 = call float @sinf(float noundef %86) #8
  %88 = fmul float %87, 0.000000e+00
  %89 = fadd float %76, %88
  %90 = insertelement <2 x float> poison, float %65, i64 0
  %91 = shufflevector <2 x float> %90, <2 x float> poison, <2 x i32> zeroinitializer
  %92 = fdiv <2 x float> %62, %91
  %93 = insertelement <2 x float> poison, float %67, i64 0
  %94 = shufflevector <2 x float> %93, <2 x float> poison, <2 x i32> zeroinitializer
  %95 = fmul <2 x float> %94, %92
  %96 = insertelement <2 x float> poison, float %87, i64 0
  %97 = shufflevector <2 x float> %96, <2 x float> poison, <2 x i32> zeroinitializer
  %98 = fmul <2 x float> %95, %97
  %99 = shufflevector <2 x float> %98, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %100 = insertelement <2 x float> poison, float %89, i64 0
  %101 = shufflevector <2 x float> %100, <2 x float> poison, <2 x i32> zeroinitializer
  %102 = fmul <2 x float> %95, %101
  %103 = fadd <2 x float> %102, %99
  %104 = fsub <2 x float> %102, %99
  %105 = shufflevector <2 x float> %104, <2 x float> %103, <2 x i32> <i32 0, i32 3>
  %106 = extractelement <2 x float> %104, i64 0
  %107 = fcmp uno float %106, 0.000000e+00
  br i1 %107, label %108, label %115, !prof !18

108:                                              ; preds = %._crit_edge
  %109 = extractelement <2 x float> %103, i64 1
  %110 = fcmp uno float %109, 0.000000e+00
  br i1 %110, label %111, label %115, !prof !18

111:                                              ; preds = %108
  %112 = extractelement <2 x float> %95, i64 0
  %113 = extractelement <2 x float> %95, i64 1
  %114 = call <2 x float> @__mulsc3(float noundef %112, float noundef %113, float noundef %89, float noundef %87) #8
  br label %115

115:                                              ; preds = %111, %108, %._crit_edge
  %116 = phi <2 x float> [ %105, %._crit_edge ], [ %105, %108 ], [ %114, %111 ]
  %117 = call float @cabsf(<2 x float> noundef %116) #8
  %118 = getelementptr inbounds i8, ptr %0, i64 248
  %119 = load float, ptr %118, align 8, !tbaa !24
  %120 = fcmp ogt float %117, %119
  br i1 %120, label %121, label %200

121:                                              ; preds = %115
  %122 = call float @cargf(<2 x float> noundef %116) #8
  %123 = call float @llvm.fabs.f32(float %122)
  %124 = fpext float %123 to double
  %125 = fcmp olt double %124, 0x3FD41B2F7BA3BCBE
  br i1 %125, label %126, label %200

126:                                              ; preds = %121
  %127 = getelementptr inbounds i8, ptr %0, i64 184
  store i32 4, ptr %127, align 8, !tbaa !25
  %128 = load i32, ptr %0, align 8, !tbaa !17
  %129 = load i32, ptr %14, align 8, !tbaa !15
  %130 = add i32 %129, %128
  %131 = load i32, ptr %68, align 8, !tbaa !23
  %132 = add i32 %130, %131
  store i32 %132, ptr %3, align 8, !tbaa !5
  store i32 0, ptr %7, align 4, !tbaa !12
  %133 = getelementptr inbounds i8, ptr %0, i64 32
  %134 = load i32, ptr %133, align 8, !tbaa !26
  %135 = getelementptr inbounds i8, ptr %0, i64 36
  %136 = load i32, ptr %135, align 4, !tbaa !27
  %137 = add i32 %136, %134
  %.not97 = icmp eq i32 %128, 0
  br i1 %.not97, label %._crit_edge92, label %.lr.ph91

.lr.ph91:                                         ; preds = %126
  %138 = uitofp i32 %128 to float
  %139 = uitofp i32 %137 to float
  %sqrt = call float @llvm.sqrt.f32(float %139)
  %140 = fdiv float %138, %sqrt
  %141 = getelementptr inbounds i8, ptr %0, i64 168
  %142 = insertelement <2 x float> poison, float %140, i64 0
  %143 = shufflevector <2 x float> %142, <2 x float> poison, <2 x i32> zeroinitializer
  br label %144

144:                                              ; preds = %.lr.ph91, %172
  %indvars.iv103 = phi i64 [ 0, %.lr.ph91 ], [ %indvars.iv.next104, %172 ]
  %145 = load ptr, ptr %18, align 8, !tbaa !16
  %146 = getelementptr inbounds { float, float }, ptr %145, i64 %indvars.iv103
  %147 = load <2 x float>, ptr %146, align 4
  %148 = fmul <2 x float> %143, %147
  store <2 x float> %148, ptr %146, align 4
  %149 = load ptr, ptr %141, align 8, !tbaa !28
  %150 = getelementptr inbounds { float, float }, ptr %149, i64 %indvars.iv103
  %151 = load ptr, ptr %18, align 8, !tbaa !16
  %152 = getelementptr inbounds { float, float }, ptr %151, i64 %indvars.iv103
  %153 = getelementptr inbounds i8, ptr %152, i64 4
  %154 = load <2 x float>, ptr %150, align 4
  %155 = load <2 x float>, ptr %152, align 4
  %156 = fmul <2 x float> %154, %155
  %157 = shufflevector <2 x float> %154, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %158 = fmul <2 x float> %157, %155
  %shift = shufflevector <2 x float> %156, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %159 = fsub <2 x float> %156, %shift
  %160 = extractelement <2 x float> %159, i64 0
  %shift118 = shufflevector <2 x float> %158, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %161 = fadd <2 x float> %158, %shift118
  %162 = extractelement <2 x float> %161, i64 0
  %163 = fcmp uno float %160, 0.000000e+00
  br i1 %163, label %164, label %172, !prof !18

164:                                              ; preds = %144
  %165 = fcmp uno float %162, 0.000000e+00
  br i1 %165, label %166, label %172, !prof !18

166:                                              ; preds = %164
  %167 = extractelement <2 x float> %154, i64 0
  %168 = extractelement <2 x float> %154, i64 1
  %169 = extractelement <2 x float> %155, i64 0
  %170 = extractelement <2 x float> %155, i64 1
  %171 = call <2 x float> @__mulsc3(float noundef %169, float noundef %170, float noundef %167, float noundef %168) #8
  %.sroa.07.0.vec.extract = extractelement <2 x float> %171, i64 0
  %.sroa.07.4.vec.extract = extractelement <2 x float> %171, i64 1
  br label %172

172:                                              ; preds = %166, %164, %144
  %173 = phi float [ %160, %144 ], [ %160, %164 ], [ %.sroa.07.0.vec.extract, %166 ]
  %174 = phi float [ %162, %144 ], [ %162, %164 ], [ %.sroa.07.4.vec.extract, %166 ]
  store float %173, ptr %152, align 4
  store float %174, ptr %153, align 4
  %indvars.iv.next104 = add nuw nsw i64 %indvars.iv103, 1
  %175 = load i32, ptr %0, align 8, !tbaa !17
  %176 = zext i32 %175 to i64
  %177 = icmp ult i64 %indvars.iv.next104, %176
  br i1 %177, label %144, label %._crit_edge92.loopexit, !llvm.loop !29

._crit_edge92.loopexit:                           ; preds = %172
  %.pre109 = load i32, ptr %133, align 8, !tbaa !26
  %.pre110 = load i32, ptr %135, align 4, !tbaa !27
  %.pre111 = add i32 %.pre110, %.pre109
  br label %._crit_edge92

._crit_edge92:                                    ; preds = %._crit_edge92.loopexit, %126
  %.pre-phi = phi i32 [ %.pre111, %._crit_edge92.loopexit ], [ %137, %126 ]
  %178 = add nsw i32 %.pre-phi, -1
  %.inv = icmp ugt i32 %.pre-phi, 4
  %spec.select = select i1 %.inv, i32 4, i32 %178
  %179 = call i32 @ofdmframesync_estimate_eqgain_poly(ptr noundef nonnull %0, i32 noundef %spec.select)
  %180 = load i32, ptr %0, align 8, !tbaa !17
  %.not98 = icmp eq i32 %180, 0
  br i1 %.not98, label %.loopexit, label %.lr.ph95

.lr.ph95:                                         ; preds = %._crit_edge92
  %181 = getelementptr inbounds i8, ptr %0, i64 168
  %182 = getelementptr inbounds i8, ptr %0, i64 176
  br label %183

183:                                              ; preds = %.lr.ph95, %183
  %indvars.iv106 = phi i64 [ 0, %.lr.ph95 ], [ %indvars.iv.next107, %183 ]
  %184 = load ptr, ptr %181, align 8, !tbaa !28
  %185 = getelementptr inbounds { float, float }, ptr %184, i64 %indvars.iv106
  %186 = load float, ptr %185, align 4
  %187 = getelementptr inbounds i8, ptr %185, i64 4
  %188 = load float, ptr %187, align 4
  %189 = load ptr, ptr %18, align 8, !tbaa !16
  %190 = getelementptr inbounds { float, float }, ptr %189, i64 %indvars.iv106
  %191 = load float, ptr %190, align 4
  %192 = getelementptr inbounds i8, ptr %190, i64 4
  %193 = load float, ptr %192, align 4
  %194 = call <2 x float> @__divsc3(float noundef %186, float noundef %188, float noundef %191, float noundef %193) #8
  %195 = load ptr, ptr %182, align 8, !tbaa !30
  %196 = getelementptr inbounds { float, float }, ptr %195, i64 %indvars.iv106
  store <2 x float> %194, ptr %196, align 4
  %indvars.iv.next107 = add nuw nsw i64 %indvars.iv106, 1
  %197 = load i32, ptr %0, align 8, !tbaa !17
  %198 = zext i32 %197 to i64
  %199 = icmp ult i64 %indvars.iv.next107, %198
  br i1 %199, label %183, label %.loopexit, !llvm.loop !31

200:                                              ; preds = %121, %115
  %201 = load i32, ptr %7, align 4, !tbaa !12
  %202 = icmp eq i32 %201, 16
  br i1 %202, label %203, label %205

203:                                              ; preds = %200
  %204 = call i32 @ofdmframesync_reset(ptr noundef nonnull %0)
  br label %205

205:                                              ; preds = %203, %200
  %206 = getelementptr inbounds i8, ptr %0, i64 4
  %207 = load i32, ptr %206, align 4, !tbaa !32
  store i32 %207, ptr %3, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %183, %._crit_edge92, %205
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #8
  br label %208

208:                                              ; preds = %1, %.loopexit
  ret i32 0
}

declare i32 @windowcf_read(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind
declare float @cargf(<2 x float> noundef) local_unnamed_addr #5

; Function Attrs: nounwind
declare float @cabsf(<2 x float> noundef) local_unnamed_addr #5

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { 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 #4 = { "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 = { 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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, !7, i64 216}
!6 = !{!"ofdmframesync_s", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !11, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !7, i64 184, !10, i64 192, !10, i64 200, !11, i64 208, !11, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !8, i64 228, !8, i64 236, !11, i64 244, !11, i64 248, !10, i64 256, !10, i64 264}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"float", !8, i64 0}
!12 = !{!6, !7, i64 220}
!13 = !{!6, !10, i64 88}
!14 = !{!10, !10, i64 0}
!15 = !{!6, !7, i64 8}
!16 = !{!6, !10, i64 160}
!17 = !{!6, !7, i64 0}
!18 = !{!"branch_weights", i32 1, i32 1048575}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!6, !7, i64 44}
!22 = !{!6, !11, i64 128}
!23 = !{!6, !7, i64 224}
!24 = !{!6, !11, i64 248}
!25 = !{!6, !7, i64 184}
!26 = !{!6, !7, i64 32}
!27 = !{!6, !7, i64 36}
!28 = !{!6, !10, i64 168}
!29 = distinct !{!29, !20}
!30 = !{!6, !10, i64 176}
!31 = distinct !{!31, !20}
!32 = !{!6, !7, i64 4}


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