; LLVM IR from jgaeddert/liquid-dsp :: src/framing/src (framing_cccf)

; 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.qdetector_cccf_s = type { i32, ptr, ptr, float, ptr, ptr, ptr, ptr, i32, ptr, ptr, i32, float, float, i32, i32, float, float, float, i32, float, float, float, float, i32, i32 }

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #2

declare i32 @fft_execute(ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local i32 @qdetector_cccf_execute_seek(ptr noundef %0, <2 x float> noundef %1) #4 {
  %3 = alloca i32, align 4
  %4 = alloca { float, float }, align 4
  %5 = alloca ptr, align 8
  %6 = alloca float, align 4
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca float, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca { float, float }, align 4
  %16 = alloca { float, float }, align 4
  %17 = alloca float, align 4
  %18 = alloca { float, float }, align 4
  store <2 x float> %1, ptr %4, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  %19 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 0
  %20 = load float, ptr %19, align 4
  %21 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 1
  %22 = load float, ptr %21, align 4
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %23, i32 0, i32 4
  %25 = load ptr, ptr %24, align 8, !tbaa !9
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %26, i32 0, i32 11
  %28 = load i32, ptr %27, align 8, !tbaa !13
  %29 = add i32 %28, 1
  store i32 %29, ptr %27, align 8, !tbaa !13
  %30 = zext i32 %28 to i64
  %31 = getelementptr inbounds { float, float }, ptr %25, i64 %30
  %32 = getelementptr inbounds { float, float }, ptr %31, i32 0, i32 0
  %33 = getelementptr inbounds { float, float }, ptr %31, i32 0, i32 1
  store float %20, ptr %32, align 4
  store float %22, ptr %33, align 4
  %34 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 0
  %35 = load float, ptr %34, align 4
  %36 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 1
  %37 = load float, ptr %36, align 4
  %38 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 0
  %39 = load float, ptr %38, align 4
  %40 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 1
  %41 = load float, ptr %40, align 4
  %42 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 0
  %43 = load float, ptr %42, align 4
  %44 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 1
  %45 = load float, ptr %44, align 4
  %46 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 0
  %47 = load float, ptr %46, align 4
  %48 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 1
  %49 = load float, ptr %48, align 4
  %50 = fmul float %45, %49
  %51 = call float @llvm.fmuladd.f32(float %35, float %39, float %50)
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %52, i32 0, i32 17
  %54 = load float, ptr %53, align 8, !tbaa !14
  %55 = fadd float %54, %51
  store float %55, ptr %53, align 8, !tbaa !14
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %56, i32 0, i32 11
  %58 = load i32, ptr %57, align 8, !tbaa !13
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %59, i32 0, i32 8
  %61 = load i32, ptr %60, align 8, !tbaa !15
  %62 = icmp ult i32 %58, %61
  br i1 %62, label %63, label %64

63:                                               ; preds = %2
  store i32 0, ptr %3, align 4
  br label %372

64:                                               ; preds = %2
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %65, i32 0, i32 8
  %67 = load i32, ptr %66, align 8, !tbaa !15
  %68 = udiv i32 %67, 2
  %69 = load ptr, ptr %5, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %69, i32 0, i32 11
  store i32 %68, ptr %70, align 8, !tbaa !13
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %71, i32 0, i32 9
  %73 = load ptr, ptr %72, align 8, !tbaa !16
  %74 = call i32 @fft_execute(ptr noundef %73)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %75, i32 0, i32 16
  %77 = load float, ptr %76, align 4, !tbaa !17
  %78 = fcmp oeq float %77, 0.000000e+00
  br i1 %78, label %79, label %96

79:                                               ; preds = %64
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %80, i32 0, i32 17
  %82 = load float, ptr %81, align 8, !tbaa !14
  %83 = call float @sqrtf(float noundef %82) #6
  %84 = load ptr, ptr %5, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %84, i32 0, i32 0
  %86 = load i32, ptr %85, align 8, !tbaa !18
  %87 = uitofp i32 %86 to float
  %88 = load ptr, ptr %5, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %88, i32 0, i32 8
  %90 = load i32, ptr %89, align 8, !tbaa !15
  %91 = udiv i32 %90, 2
  %92 = uitofp i32 %91 to float
  %93 = fdiv float %87, %92
  %94 = call float @sqrtf(float noundef %93) #6
  %95 = fmul float %83, %94
  store float %95, ptr %6, align 4, !tbaa !19
  br label %116

96:                                               ; preds = %64
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %97, i32 0, i32 16
  %99 = load float, ptr %98, align 4, !tbaa !17
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %100, i32 0, i32 17
  %102 = load float, ptr %101, align 8, !tbaa !14
  %103 = fadd float %99, %102
  %104 = call float @sqrtf(float noundef %103) #6
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %105, i32 0, i32 0
  %107 = load i32, ptr %106, align 8, !tbaa !18
  %108 = uitofp i32 %107 to float
  %109 = load ptr, ptr %5, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %109, i32 0, i32 8
  %111 = load i32, ptr %110, align 8, !tbaa !15
  %112 = uitofp i32 %111 to float
  %113 = fdiv float %108, %112
  %114 = call float @sqrtf(float noundef %113) #6
  %115 = fmul float %104, %114
  store float %115, ptr %6, align 4, !tbaa !19
  br label %116

116:                                              ; preds = %96, %79
  %117 = load float, ptr %6, align 4, !tbaa !19
  %118 = fpext float %117 to double
  %119 = fcmp olt double %118, 1.000000e-10
  br i1 %119, label %120, label %146

120:                                              ; preds = %116
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %121, i32 0, i32 4
  %123 = load ptr, ptr %122, align 8, !tbaa !9
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %124, i32 0, i32 4
  %126 = load ptr, ptr %125, align 8, !tbaa !9
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %127, i32 0, i32 8
  %129 = load i32, ptr %128, align 8, !tbaa !15
  %130 = udiv i32 %129, 2
  %131 = zext i32 %130 to i64
  %132 = getelementptr inbounds { float, float }, ptr %126, i64 %131
  %133 = load ptr, ptr %5, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %133, i32 0, i32 8
  %135 = load i32, ptr %134, align 8, !tbaa !15
  %136 = udiv i32 %135, 2
  %137 = zext i32 %136 to i64
  %138 = mul i64 %137, 8
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %123, ptr align 4 %132, i64 %138, i1 false)
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %139, i32 0, i32 17
  %141 = load float, ptr %140, align 8, !tbaa !14
  %142 = load ptr, ptr %5, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %142, i32 0, i32 16
  store float %141, ptr %143, align 4, !tbaa !17
  %144 = load ptr, ptr %5, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %144, i32 0, i32 17
  store float 0.000000e+00, ptr %145, align 8, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %371

146:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  %147 = load ptr, ptr %5, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %147, i32 0, i32 8
  %149 = load i32, ptr %148, align 8, !tbaa !15
  %150 = uitofp i32 %149 to float
  %151 = load float, ptr %6, align 4, !tbaa !19
  %152 = fmul float %150, %151
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %153, i32 0, i32 3
  %155 = load float, ptr %154, align 8, !tbaa !20
  %156 = call float @sqrtf(float noundef %155) #6
  %157 = fmul float %152, %156
  %158 = fdiv float 1.000000e+00, %157
  store float %158, ptr %8, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store float 0.000000e+00, ptr %11, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 0, ptr %13, align 4, !tbaa !21
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %159, i32 0, i32 14
  %161 = load i32, ptr %160, align 4, !tbaa !22
  %162 = sub nsw i32 0, %161
  store i32 %162, ptr %9, align 4, !tbaa !21
  br label %163

163:                                              ; preds = %289, %146
  %164 = load i32, ptr %9, align 4, !tbaa !21
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %165, i32 0, i32 14
  %167 = load i32, ptr %166, align 4, !tbaa !22
  %168 = icmp sle i32 %164, %167
  br i1 %168, label %169, label %292

169:                                              ; preds = %163
  store i32 0, ptr %10, align 4, !tbaa !21
  br label %170

170:                                              ; preds = %235, %169
  %171 = load i32, ptr %10, align 4, !tbaa !21
  %172 = load ptr, ptr %5, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %172, i32 0, i32 8
  %174 = load i32, ptr %173, align 8, !tbaa !15
  %175 = icmp ult i32 %171, %174
  br i1 %175, label %176, label %238

176:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %177 = load i32, ptr %10, align 4, !tbaa !21
  %178 = load ptr, ptr %5, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %178, i32 0, i32 8
  %180 = load i32, ptr %179, align 8, !tbaa !15
  %181 = add i32 %177, %180
  %182 = load i32, ptr %9, align 4, !tbaa !21
  %183 = sub i32 %181, %182
  %184 = load ptr, ptr %5, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %184, i32 0, i32 8
  %186 = load i32, ptr %185, align 8, !tbaa !15
  %187 = urem i32 %183, %186
  store i32 %187, ptr %14, align 4, !tbaa !21
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %188, i32 0, i32 5
  %190 = load ptr, ptr %189, align 8, !tbaa !23
  %191 = load i32, ptr %10, align 4, !tbaa !21
  %192 = zext i32 %191 to i64
  %193 = getelementptr inbounds { float, float }, ptr %190, i64 %192
  %194 = getelementptr inbounds { float, float }, ptr %193, i32 0, i32 0
  %195 = load float, ptr %194, align 4
  %196 = getelementptr inbounds { float, float }, ptr %193, i32 0, i32 1
  %197 = load float, ptr %196, align 4
  %198 = load ptr, ptr %5, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %198, i32 0, i32 2
  %200 = load ptr, ptr %199, align 8, !tbaa !24
  %201 = load i32, ptr %14, align 4, !tbaa !21
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds { float, float }, ptr %200, i64 %202
  %204 = getelementptr inbounds { float, float }, ptr %203, i32 0, i32 0
  %205 = load float, ptr %204, align 4
  %206 = getelementptr inbounds { float, float }, ptr %203, i32 0, i32 1
  %207 = load float, ptr %206, align 4
  %208 = fneg float %207
  %209 = fmul float %195, %205
  %210 = fmul float %197, %208
  %211 = fmul float %195, %208
  %212 = fmul float %197, %205
  %213 = fsub float %209, %210
  %214 = fadd float %211, %212
  %215 = fcmp uno float %213, %213
  br i1 %215, label %216, label %224, !prof !25

216:                                              ; preds = %176
  %217 = fcmp uno float %214, %214
  br i1 %217, label %218, label %224, !prof !25

218:                                              ; preds = %216
  %219 = call <2 x float> @__mulsc3(float noundef %195, float noundef %197, float noundef %205, float noundef %208) #6
  store <2 x float> %219, ptr %15, align 4
  %220 = getelementptr inbounds { float, float }, ptr %15, i32 0, i32 0
  %221 = load float, ptr %220, align 4
  %222 = getelementptr inbounds { float, float }, ptr %15, i32 0, i32 1
  %223 = load float, ptr %222, align 4
  br label %224

224:                                              ; preds = %218, %216, %176
  %225 = phi float [ %213, %176 ], [ %213, %216 ], [ %221, %218 ]
  %226 = phi float [ %214, %176 ], [ %214, %216 ], [ %223, %218 ]
  %227 = load ptr, ptr %5, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %227, i32 0, i32 6
  %229 = load ptr, ptr %228, align 8, !tbaa !26
  %230 = load i32, ptr %10, align 4, !tbaa !21
  %231 = zext i32 %230 to i64
  %232 = getelementptr inbounds { float, float }, ptr %229, i64 %231
  %233 = getelementptr inbounds { float, float }, ptr %232, i32 0, i32 0
  %234 = getelementptr inbounds { float, float }, ptr %232, i32 0, i32 1
  store float %225, ptr %233, align 4
  store float %226, ptr %234, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %235

235:                                              ; preds = %224
  %236 = load i32, ptr %10, align 4, !tbaa !21
  %237 = add i32 %236, 1
  store i32 %237, ptr %10, align 4, !tbaa !21
  br label %170, !llvm.loop !27

238:                                              ; preds = %170
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %239, i32 0, i32 10
  %241 = load ptr, ptr %240, align 8, !tbaa !29
  %242 = call i32 @fft_execute(ptr noundef %241)
  %243 = load ptr, ptr %5, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %243, i32 0, i32 7
  %245 = load ptr, ptr %244, align 8, !tbaa !30
  %246 = load ptr, ptr %5, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %246, i32 0, i32 8
  %248 = load i32, ptr %247, align 8, !tbaa !15
  %249 = load float, ptr %8, align 4, !tbaa !19
  %250 = load ptr, ptr %5, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %250, i32 0, i32 7
  %252 = load ptr, ptr %251, align 8, !tbaa !30
  %253 = getelementptr inbounds { float, float }, ptr %16, i32 0, i32 0
  %254 = getelementptr inbounds { float, float }, ptr %16, i32 0, i32 1
  store float %249, ptr %253, align 4
  store float 0.000000e+00, ptr %254, align 4
  %255 = load <2 x float>, ptr %16, align 4
  call void @liquid_vectorcf_mulscalar(ptr noundef %245, i32 noundef %248, <2 x float> noundef %255, ptr noundef %252)
  store i32 0, ptr %10, align 4, !tbaa !21
  br label %256

256:                                              ; preds = %285, %238
  %257 = load i32, ptr %10, align 4, !tbaa !21
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %258, i32 0, i32 8
  %260 = load i32, ptr %259, align 8, !tbaa !15
  %261 = icmp ult i32 %257, %260
  br i1 %261, label %262, label %288

262:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %263 = load ptr, ptr %5, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %263, i32 0, i32 7
  %265 = load ptr, ptr %264, align 8, !tbaa !30
  %266 = load i32, ptr %10, align 4, !tbaa !21
  %267 = zext i32 %266 to i64
  %268 = getelementptr inbounds { float, float }, ptr %265, i64 %267
  %269 = getelementptr inbounds { float, float }, ptr %268, i32 0, i32 0
  %270 = load float, ptr %269, align 4
  %271 = getelementptr inbounds { float, float }, ptr %268, i32 0, i32 1
  %272 = load float, ptr %271, align 4
  %273 = getelementptr inbounds { float, float }, ptr %18, i32 0, i32 0
  %274 = getelementptr inbounds { float, float }, ptr %18, i32 0, i32 1
  store float %270, ptr %273, align 4
  store float %272, ptr %274, align 4
  %275 = load <2 x float>, ptr %18, align 4
  %276 = call float @cabsf(<2 x float> noundef %275) #6
  store float %276, ptr %17, align 4, !tbaa !19
  %277 = load float, ptr %17, align 4, !tbaa !19
  %278 = load float, ptr %11, align 4, !tbaa !19
  %279 = fcmp ogt float %277, %278
  br i1 %279, label %280, label %284

280:                                              ; preds = %262
  %281 = load float, ptr %17, align 4, !tbaa !19
  store float %281, ptr %11, align 4, !tbaa !19
  %282 = load i32, ptr %10, align 4, !tbaa !21
  store i32 %282, ptr %12, align 4, !tbaa !21
  %283 = load i32, ptr %9, align 4, !tbaa !21
  store i32 %283, ptr %13, align 4, !tbaa !21
  br label %284

284:                                              ; preds = %280, %262
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %285

285:                                              ; preds = %284
  %286 = load i32, ptr %10, align 4, !tbaa !21
  %287 = add i32 %286, 1
  store i32 %287, ptr %10, align 4, !tbaa !21
  br label %256, !llvm.loop !31

288:                                              ; preds = %256
  br label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %9, align 4, !tbaa !21
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %9, align 4, !tbaa !21
  br label %163, !llvm.loop !32

292:                                              ; preds = %163
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %293, i32 0, i32 15
  %295 = load i32, ptr %294, align 8, !tbaa !33
  %296 = add i32 %295, 1
  store i32 %296, ptr %294, align 8, !tbaa !33
  %297 = load float, ptr %11, align 4, !tbaa !19
  %298 = load ptr, ptr %5, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %298, i32 0, i32 12
  %300 = load float, ptr %299, align 4, !tbaa !34
  %301 = fcmp ogt float %297, %300
  br i1 %301, label %302, label %344

302:                                              ; preds = %292
  %303 = load i32, ptr %12, align 4, !tbaa !21
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %304, i32 0, i32 8
  %306 = load i32, ptr %305, align 8, !tbaa !15
  %307 = load ptr, ptr %5, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %307, i32 0, i32 0
  %309 = load i32, ptr %308, align 8, !tbaa !18
  %310 = sub i32 %306, %309
  %311 = icmp ult i32 %303, %310
  br i1 %311, label %312, label %344

312:                                              ; preds = %302
  %313 = load ptr, ptr %5, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %313, i32 0, i32 24
  store i32 1, ptr %314, align 4, !tbaa !35
  %315 = load i32, ptr %13, align 4, !tbaa !21
  %316 = load ptr, ptr %5, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %316, i32 0, i32 19
  store i32 %315, ptr %317, align 8, !tbaa !36
  %318 = load float, ptr %11, align 4, !tbaa !19
  %319 = load ptr, ptr %5, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %319, i32 0, i32 18
  store float %318, ptr %320, align 4, !tbaa !37
  %321 = load ptr, ptr %5, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %321, i32 0, i32 4
  %323 = load ptr, ptr %322, align 8, !tbaa !9
  %324 = load ptr, ptr %5, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %324, i32 0, i32 4
  %326 = load ptr, ptr %325, align 8, !tbaa !9
  %327 = load i32, ptr %12, align 4, !tbaa !21
  %328 = zext i32 %327 to i64
  %329 = getelementptr inbounds { float, float }, ptr %326, i64 %328
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %330, i32 0, i32 8
  %332 = load i32, ptr %331, align 8, !tbaa !15
  %333 = load i32, ptr %12, align 4, !tbaa !21
  %334 = sub i32 %332, %333
  %335 = zext i32 %334 to i64
  %336 = mul i64 %335, 8
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %323, ptr align 4 %329, i64 %336, i1 false)
  %337 = load ptr, ptr %5, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %337, i32 0, i32 8
  %339 = load i32, ptr %338, align 8, !tbaa !15
  %340 = load i32, ptr %12, align 4, !tbaa !21
  %341 = sub i32 %339, %340
  %342 = load ptr, ptr %5, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %342, i32 0, i32 11
  store i32 %341, ptr %343, align 8, !tbaa !13
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %370

344:                                              ; preds = %302, %292
  %345 = load ptr, ptr %5, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %345, i32 0, i32 4
  %347 = load ptr, ptr %346, align 8, !tbaa !9
  %348 = load ptr, ptr %5, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %348, i32 0, i32 4
  %350 = load ptr, ptr %349, align 8, !tbaa !9
  %351 = load ptr, ptr %5, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %351, i32 0, i32 8
  %353 = load i32, ptr %352, align 8, !tbaa !15
  %354 = udiv i32 %353, 2
  %355 = zext i32 %354 to i64
  %356 = getelementptr inbounds { float, float }, ptr %350, i64 %355
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %357, i32 0, i32 8
  %359 = load i32, ptr %358, align 8, !tbaa !15
  %360 = udiv i32 %359, 2
  %361 = zext i32 %360 to i64
  %362 = mul i64 %361, 8
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %347, ptr align 4 %356, i64 %362, i1 false)
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %363, i32 0, i32 17
  %365 = load float, ptr %364, align 8, !tbaa !14
  %366 = load ptr, ptr %5, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %366, i32 0, i32 16
  store float %365, ptr %367, align 4, !tbaa !17
  %368 = load ptr, ptr %5, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.qdetector_cccf_s, ptr %368, i32 0, i32 17
  store float 0.000000e+00, ptr %369, align 8, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %370

370:                                              ; preds = %344, %312
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %371

371:                                              ; preds = %370, %120
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  br label %372

372:                                              ; preds = %371, %63
  %373 = load i32, ptr %3, align 4
  ret i32 %373
}

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

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

declare void @liquid_vectorcf_mulscalar(ptr noundef, i32 noundef, <2 x float> noundef, ptr noundef) #3

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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 = { 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 #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, !6, i64 32}
!10 = !{!"qdetector_cccf_s", !11, i64 0, !6, i64 8, !6, i64 16, !12, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !11, i64 64, !6, i64 72, !6, i64 80, !11, i64 88, !12, i64 92, !12, i64 96, !11, i64 100, !11, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !11, i64 120, !12, i64 124, !12, i64 128, !12, i64 132, !12, i64 136, !11, i64 140, !11, i64 144}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!10, !11, i64 88}
!14 = !{!10, !12, i64 112}
!15 = !{!10, !11, i64 64}
!16 = !{!10, !6, i64 72}
!17 = !{!10, !12, i64 108}
!18 = !{!10, !11, i64 0}
!19 = !{!12, !12, i64 0}
!20 = !{!10, !12, i64 24}
!21 = !{!11, !11, i64 0}
!22 = !{!10, !11, i64 100}
!23 = !{!10, !6, i64 40}
!24 = !{!10, !6, i64 16}
!25 = !{!"branch_weights", i32 1, i32 1048575}
!26 = !{!10, !6, i64 48}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!10, !6, i64 80}
!30 = !{!10, !6, i64 56}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28}
!33 = !{!10, !11, i64 104}
!34 = !{!10, !12, i64 92}
!35 = !{!10, !11, i64 140}
!36 = !{!10, !11, i64 120}
!37 = !{!10, !12, i64 116}


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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #1

declare i32 @fft_execute(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @qdetector_cccf_execute_seek(ptr nocapture noundef %0, <2 x float> noundef %1) local_unnamed_addr #3 {
  %3 = extractelement <2 x float> %1, i64 0
  %4 = getelementptr inbounds i8, ptr %0, i64 32
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 88
  %7 = load i32, ptr %6, align 8, !tbaa !12
  %8 = add i32 %7, 1
  store i32 %8, ptr %6, align 8, !tbaa !12
  %9 = zext i32 %7 to i64
  %10 = getelementptr inbounds { float, float }, ptr %5, i64 %9
  store <2 x float> %1, ptr %10, align 4
  %11 = fmul <2 x float> %1, %1
  %12 = extractelement <2 x float> %11, i64 1
  %13 = tail call float @llvm.fmuladd.f32(float %3, float %3, float %12)
  %14 = getelementptr inbounds i8, ptr %0, i64 112
  %15 = load float, ptr %14, align 8, !tbaa !13
  %16 = fadd float %13, %15
  store float %16, ptr %14, align 8, !tbaa !13
  %17 = load i32, ptr %6, align 8, !tbaa !12
  %18 = getelementptr inbounds i8, ptr %0, i64 64
  %19 = load i32, ptr %18, align 8, !tbaa !14
  %20 = icmp ult i32 %17, %19
  br i1 %20, label %152, label %21

21:                                               ; preds = %2
  %22 = lshr i32 %19, 1
  store i32 %22, ptr %6, align 8, !tbaa !12
  %23 = getelementptr inbounds i8, ptr %0, i64 72
  %24 = load ptr, ptr %23, align 8, !tbaa !15
  %25 = tail call i32 @fft_execute(ptr noundef %24) #7
  %26 = getelementptr inbounds i8, ptr %0, i64 108
  %27 = load float, ptr %26, align 4, !tbaa !16
  %28 = fcmp oeq float %27, 0.000000e+00
  %29 = load float, ptr %14, align 8, !tbaa !13
  br i1 %28, label %30, label %34

30:                                               ; preds = %21
  %31 = tail call float @sqrtf(float noundef %29) #7
  %32 = load i32, ptr %18, align 8, !tbaa !14
  %33 = lshr i32 %32, 1
  br label %38

34:                                               ; preds = %21
  %35 = fadd float %27, %29
  %36 = tail call float @sqrtf(float noundef %35) #7
  %37 = load i32, ptr %18, align 8, !tbaa !14
  br label %38

38:                                               ; preds = %34, %30
  %.sink154 = phi i32 [ %37, %34 ], [ %33, %30 ]
  %.sink = phi float [ %36, %34 ], [ %31, %30 ]
  %39 = phi i32 [ %37, %34 ], [ %32, %30 ]
  %.sink152.in = load i32, ptr %0, align 8, !tbaa !17
  %.sink152 = uitofp i32 %.sink152.in to float
  %40 = uitofp i32 %.sink154 to float
  %41 = fdiv float %.sink152, %40
  %sqrt122 = tail call float @llvm.sqrt.f32(float %41)
  %42 = fmul float %.sink, %sqrt122
  %43 = fpext float %42 to double
  %44 = fcmp olt double %43, 1.000000e-10
  br i1 %44, label %45, label %52

45:                                               ; preds = %38
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = lshr i32 %39, 1
  %48 = zext nneg i32 %47 to i64
  %49 = getelementptr inbounds { float, float }, ptr %46, i64 %48
  %50 = shl nuw nsw i64 %48, 3
  tail call void @llvm.memmove.p0.p0.i64(ptr align 4 %46, ptr align 4 %49, i64 %50, i1 false)
  %51 = load float, ptr %14, align 8, !tbaa !13
  store float %51, ptr %26, align 4, !tbaa !16
  store float 0.000000e+00, ptr %14, align 8, !tbaa !13
  br label %152

52:                                               ; preds = %38
  %53 = getelementptr inbounds i8, ptr %0, i64 24
  %54 = load float, ptr %53, align 8, !tbaa !18
  %55 = tail call float @sqrtf(float noundef %54) #7
  %56 = getelementptr inbounds i8, ptr %0, i64 100
  %57 = load i32, ptr %56, align 4, !tbaa !19
  %.not133 = icmp slt i32 %57, 0
  %.pre148.pre = load i32, ptr %18, align 8, !tbaa !14
  br i1 %.not133, label %._crit_edge138, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %52
  %58 = sub nsw i32 0, %57
  %59 = uitofp i32 %39 to float
  %60 = fmul float %42, %59
  %61 = fmul float %60, %55
  %62 = fdiv float 1.000000e+00, %61
  %63 = getelementptr inbounds i8, ptr %0, i64 40
  %64 = getelementptr inbounds i8, ptr %0, i64 16
  %65 = getelementptr inbounds i8, ptr %0, i64 48
  %66 = getelementptr inbounds i8, ptr %0, i64 80
  %67 = getelementptr inbounds i8, ptr %0, i64 56
  %.sroa.03.4.vec.insert = insertelement <2 x float> <float poison, float 0.000000e+00>, float %62, i64 0
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge130
  %68 = phi i32 [ %.pre148.pre, %.preheader.lr.ph ], [ %.pre148150, %._crit_edge130 ]
  %.0107137 = phi i32 [ 0, %.preheader.lr.ph ], [ %.1108.lcssa, %._crit_edge130 ]
  %.0110136 = phi i32 [ 0, %.preheader.lr.ph ], [ %.1111.lcssa, %._crit_edge130 ]
  %.0113135 = phi float [ 0.000000e+00, %.preheader.lr.ph ], [ %.1114.lcssa, %._crit_edge130 ]
  %.0118134 = phi i32 [ %58, %.preheader.lr.ph ], [ %121, %._crit_edge130 ]
  %.not142 = icmp eq i32 %68, 0
  br i1 %.not142, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %98
  %indvars.iv = phi i64 [ %indvars.iv.next, %98 ], [ 0, %.preheader ]
  %69 = phi i32 [ %104, %98 ], [ %68, %.preheader ]
  %70 = trunc nuw i64 %indvars.iv to i32
  %71 = sub i32 %70, %.0118134
  %72 = add i32 %71, %69
  %73 = urem i32 %72, %69
  %74 = load ptr, ptr %63, align 8, !tbaa !20
  %75 = getelementptr inbounds { float, float }, ptr %74, i64 %indvars.iv
  %76 = load ptr, ptr %64, align 8, !tbaa !21
  %77 = zext i32 %73 to i64
  %78 = getelementptr inbounds { float, float }, ptr %76, i64 %77
  %79 = load <2 x float>, ptr %75, align 4
  %80 = load <2 x float>, ptr %78, align 4
  %81 = extractelement <2 x float> %80, i64 1
  %82 = fneg float %81
  %83 = shufflevector <2 x float> %79, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %84 = fmul <2 x float> %79, %80
  %shift = shufflevector <2 x float> %84, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %85 = fadd <2 x float> %84, %shift
  %86 = extractelement <2 x float> %85, i64 0
  %87 = fmul <2 x float> %83, %80
  %shift155 = shufflevector <2 x float> %87, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %88 = fsub <2 x float> %87, %shift155
  %89 = extractelement <2 x float> %88, i64 0
  %90 = fcmp uno float %86, 0.000000e+00
  br i1 %90, label %91, label %98, !prof !22

91:                                               ; preds = %.lr.ph
  %92 = fcmp uno float %89, 0.000000e+00
  br i1 %92, label %93, label %98, !prof !22

93:                                               ; preds = %91
  %94 = extractelement <2 x float> %79, i64 0
  %95 = extractelement <2 x float> %79, i64 1
  %96 = extractelement <2 x float> %80, i64 0
  %97 = tail call <2 x float> @__mulsc3(float noundef %94, float noundef %95, float noundef %96, float noundef %82) #7
  %.sroa.05.0.vec.extract = extractelement <2 x float> %97, i64 0
  %.sroa.05.4.vec.extract = extractelement <2 x float> %97, i64 1
  br label %98

98:                                               ; preds = %93, %91, %.lr.ph
  %99 = phi float [ %86, %.lr.ph ], [ %86, %91 ], [ %.sroa.05.0.vec.extract, %93 ]
  %100 = phi float [ %89, %.lr.ph ], [ %89, %91 ], [ %.sroa.05.4.vec.extract, %93 ]
  %101 = load ptr, ptr %65, align 8, !tbaa !23
  %102 = getelementptr inbounds { float, float }, ptr %101, i64 %indvars.iv
  %103 = getelementptr inbounds i8, ptr %102, i64 4
  store float %99, ptr %102, align 4
  store float %100, ptr %103, align 4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %104 = load i32, ptr %18, align 8, !tbaa !14
  %105 = zext i32 %104 to i64
  %106 = icmp ult i64 %indvars.iv.next, %105
  br i1 %106, label %.lr.ph, label %._crit_edge, !llvm.loop !24

._crit_edge:                                      ; preds = %98, %.preheader
  %107 = load ptr, ptr %66, align 8, !tbaa !26
  %108 = tail call i32 @fft_execute(ptr noundef %107) #7
  %109 = load ptr, ptr %67, align 8, !tbaa !27
  %110 = load i32, ptr %18, align 8, !tbaa !14
  tail call void @liquid_vectorcf_mulscalar(ptr noundef %109, i32 noundef %110, <2 x float> noundef %.sroa.03.4.vec.insert, ptr noundef %109) #7
  %111 = load i32, ptr %18, align 8, !tbaa !14
  %.not143 = icmp eq i32 %111, 0
  br i1 %.not143, label %._crit_edge130, label %.lr.ph129

.lr.ph129:                                        ; preds = %._crit_edge, %.lr.ph129
  %indvars.iv145 = phi i64 [ %indvars.iv.next146, %.lr.ph129 ], [ 0, %._crit_edge ]
  %.1108127 = phi i32 [ %.2109, %.lr.ph129 ], [ %.0107137, %._crit_edge ]
  %.1111126 = phi i32 [ %.2112, %.lr.ph129 ], [ %.0110136, %._crit_edge ]
  %.1114125 = phi float [ %.2115, %.lr.ph129 ], [ %.0113135, %._crit_edge ]
  %112 = load ptr, ptr %67, align 8, !tbaa !27
  %113 = getelementptr inbounds { float, float }, ptr %112, i64 %indvars.iv145
  %114 = load <2 x float>, ptr %113, align 4
  %115 = tail call float @cabsf(<2 x float> noundef %114) #7
  %116 = fcmp ogt float %115, %.1114125
  %.2115 = select i1 %116, float %115, float %.1114125
  %117 = trunc nuw i64 %indvars.iv145 to i32
  %.2112 = select i1 %116, i32 %117, i32 %.1111126
  %.2109 = select i1 %116, i32 %.0118134, i32 %.1108127
  %indvars.iv.next146 = add nuw nsw i64 %indvars.iv145, 1
  %118 = load i32, ptr %18, align 8, !tbaa !14
  %119 = zext i32 %118 to i64
  %120 = icmp ult i64 %indvars.iv.next146, %119
  br i1 %120, label %.lr.ph129, label %._crit_edge130, !llvm.loop !28

._crit_edge130:                                   ; preds = %.lr.ph129, %._crit_edge
  %.pre148150 = phi i32 [ 0, %._crit_edge ], [ %118, %.lr.ph129 ]
  %.1114.lcssa = phi float [ %.0113135, %._crit_edge ], [ %.2115, %.lr.ph129 ]
  %.1111.lcssa = phi i32 [ %.0110136, %._crit_edge ], [ %.2112, %.lr.ph129 ]
  %.1108.lcssa = phi i32 [ %.0107137, %._crit_edge ], [ %.2109, %.lr.ph129 ]
  %121 = add nsw i32 %.0118134, 1
  %122 = load i32, ptr %56, align 4, !tbaa !19
  %.not.not = icmp slt i32 %.0118134, %122
  br i1 %.not.not, label %.preheader, label %._crit_edge138, !llvm.loop !29

._crit_edge138:                                   ; preds = %._crit_edge130, %52
  %.pre148 = phi i32 [ %.pre148.pre, %52 ], [ %.pre148150, %._crit_edge130 ]
  %.0113.lcssa = phi float [ 0.000000e+00, %52 ], [ %.1114.lcssa, %._crit_edge130 ]
  %.0110.lcssa = phi i32 [ 0, %52 ], [ %.1111.lcssa, %._crit_edge130 ]
  %.0107.lcssa = phi i32 [ 0, %52 ], [ %.1108.lcssa, %._crit_edge130 ]
  %123 = getelementptr inbounds i8, ptr %0, i64 104
  %124 = load i32, ptr %123, align 8, !tbaa !30
  %125 = add i32 %124, 1
  store i32 %125, ptr %123, align 8, !tbaa !30
  %126 = getelementptr inbounds i8, ptr %0, i64 92
  %127 = load float, ptr %126, align 4, !tbaa !31
  %128 = fcmp ogt float %.0113.lcssa, %127
  br i1 %128, label %129, label %145

129:                                              ; preds = %._crit_edge138
  %130 = load i32, ptr %0, align 8, !tbaa !17
  %131 = sub i32 %.pre148, %130
  %132 = icmp ult i32 %.0110.lcssa, %131
  br i1 %132, label %133, label %145

133:                                              ; preds = %129
  %134 = getelementptr inbounds i8, ptr %0, i64 140
  store i32 1, ptr %134, align 4, !tbaa !32
  %135 = getelementptr inbounds i8, ptr %0, i64 120
  store i32 %.0107.lcssa, ptr %135, align 8, !tbaa !33
  %136 = getelementptr inbounds i8, ptr %0, i64 116
  store float %.0113.lcssa, ptr %136, align 4, !tbaa !34
  %137 = load ptr, ptr %4, align 8, !tbaa !5
  %138 = zext i32 %.0110.lcssa to i64
  %139 = getelementptr inbounds { float, float }, ptr %137, i64 %138
  %140 = sub i32 %.pre148, %.0110.lcssa
  %141 = zext i32 %140 to i64
  %142 = shl nuw nsw i64 %141, 3
  tail call void @llvm.memmove.p0.p0.i64(ptr align 4 %137, ptr align 4 %139, i64 %142, i1 false)
  %143 = load i32, ptr %18, align 8, !tbaa !14
  %144 = sub i32 %143, %.0110.lcssa
  store i32 %144, ptr %6, align 8, !tbaa !12
  br label %152

145:                                              ; preds = %129, %._crit_edge138
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  %147 = lshr i32 %.pre148, 1
  %148 = zext nneg i32 %147 to i64
  %149 = getelementptr inbounds { float, float }, ptr %146, i64 %148
  %150 = shl nuw nsw i64 %148, 3
  tail call void @llvm.memmove.p0.p0.i64(ptr align 4 %146, ptr align 4 %149, i64 %150, i1 false)
  %151 = load float, ptr %14, align 8, !tbaa !13
  store float %151, ptr %26, align 4, !tbaa !16
  store float 0.000000e+00, ptr %14, align 8, !tbaa !13
  br label %152

152:                                              ; preds = %45, %145, %133, %2
  ret i32 0
}

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

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

declare void @liquid_vectorcf_mulscalar(ptr noundef, i32 noundef, <2 x float> noundef, ptr noundef) local_unnamed_addr #2

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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, !10, i64 32}
!6 = !{!"qdetector_cccf_s", !7, i64 0, !10, i64 8, !10, i64 16, !11, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !10, i64 72, !10, i64 80, !7, i64 88, !11, i64 92, !11, i64 96, !7, i64 100, !7, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !7, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !7, i64 140, !7, i64 144}
!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 88}
!13 = !{!6, !11, i64 112}
!14 = !{!6, !7, i64 64}
!15 = !{!6, !10, i64 72}
!16 = !{!6, !11, i64 108}
!17 = !{!6, !7, i64 0}
!18 = !{!6, !11, i64 24}
!19 = !{!6, !7, i64 100}
!20 = !{!6, !10, i64 40}
!21 = !{!6, !10, i64 16}
!22 = !{!"branch_weights", i32 1, i32 1048575}
!23 = !{!6, !10, i64 48}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!6, !10, i64 80}
!27 = !{!6, !10, i64 56}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = !{!6, !7, i64 104}
!31 = !{!6, !11, i64 92}
!32 = !{!6, !7, i64 140}
!33 = !{!6, !7, i64 120}
!34 = !{!6, !11, i64 116}


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