; LLVM IR from Ryuk17/SpeechAlgorithms :: WebRTC_ANR/src (noise_suppression)

; 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.NoiseSuppressionC_ = type { i32, i64, i64, i64, i64, float, i32, ptr, [256 x float], [256 x float], [256 x float], i32, [387 x float], [387 x float], [129 x float], [3 x i32], i32, [129 x float], [129 x float], [129 x float], float, float, i32, [128 x i64], [128 x float], i32, [4 x i32], [7 x float], [129 x float], [129 x float], [129 x float], [129 x float], [129 x float], float, [7 x float], [129 x float], float, float, float, [129 x float], float, float, [129 x float], %struct.NSParaExtract_, [1000 x i32], [1000 x i32], [1000 x i32], [129 x float], [2 x [256 x float]] }
%struct.NSParaExtract_ = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, i32, i32 }

@.str = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [92 x i8], align 1
@__PRETTY_FUNCTION__.WebRtcNs_AnalyzeCore = external hidden unnamed_addr constant [64 x i8], align 1

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

; 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 void @WebRtcNs_AnalyzeCore(ptr noundef %0, ptr noundef %1) #1 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca [256 x float], align 16
  %15 = alloca [129 x float], align 16
  %16 = alloca [129 x float], align 16
  %17 = alloca [129 x float], align 16
  %18 = alloca [129 x float], align 16
  %19 = alloca [129 x float], align 16
  %20 = alloca [129 x float], align 16
  %21 = alloca [256 x float], align 16
  %22 = alloca [129 x float], align 16
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca i32, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  store i64 5, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store float 0.000000e+00, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store float 0.000000e+00, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 1024, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 1024, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store float 0.000000e+00, ptr %23, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store float 0.000000e+00, ptr %24, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store float 0.000000e+00, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store float 0.000000e+00, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store float 0.000000e+00, ptr %27, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store float 0.000000e+00, ptr %28, align 4, !tbaa !11
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %33, i32 0, i32 11
  %35 = load i32, ptr %34, align 8, !tbaa !13
  %36 = icmp eq i32 1, %35
  br i1 %36, label %37, label %38

37:                                               ; preds = %2
  br label %39

38:                                               ; preds = %2
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1750, ptr noundef @__PRETTY_FUNCTION__.WebRtcNs_AnalyzeCore) #7
  unreachable

39:                                               ; preds = %37
  %40 = load ptr, ptr %3, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %40, i32 0, i32 26
  %42 = getelementptr inbounds [4 x i32], ptr %41, i64 0, i64 0
  %43 = load i32, ptr %42, align 4, !tbaa !17
  store i32 %43, ptr %7, align 4, !tbaa !17
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %45, i32 0, i32 1
  %47 = load i64, ptr %46, align 8, !tbaa !18
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %48, i32 0, i32 3
  %50 = load i64, ptr %49, align 8, !tbaa !19
  %51 = load ptr, ptr %3, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %51, i32 0, i32 8
  %53 = getelementptr inbounds [256 x float], ptr %52, i64 0, i64 0
  call void @UpdateBuffer(ptr noundef %44, i64 noundef %47, i64 noundef %50, ptr noundef %53)
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %54, i32 0, i32 7
  %56 = load ptr, ptr %55, align 8, !tbaa !20
  %57 = load ptr, ptr %3, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %57, i32 0, i32 8
  %59 = getelementptr inbounds [256 x float], ptr %58, i64 0, i64 0
  %60 = load ptr, ptr %3, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %60, i32 0, i32 3
  %62 = load i64, ptr %61, align 8, !tbaa !19
  %63 = getelementptr inbounds [256 x float], ptr %14, i64 0, i64 0
  %64 = call float @WindowingEnergy(ptr noundef %56, ptr noundef %59, i64 noundef %62, ptr noundef %63)
  store float %64, ptr %8, align 4, !tbaa !11
  %65 = load float, ptr %8, align 4, !tbaa !11
  %66 = fpext float %65 to double
  %67 = fcmp oeq double %66, 0.000000e+00
  br i1 %67, label %68, label %69

68:                                               ; preds = %39
  store i32 1, ptr %29, align 4
  br label %421

69:                                               ; preds = %39
  %70 = load ptr, ptr %3, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %70, i32 0, i32 25
  %72 = load i32, ptr %71, align 8, !tbaa !21
  %73 = add nsw i32 %72, 1
  store i32 %73, ptr %71, align 8, !tbaa !21
  %74 = load ptr, ptr %3, align 8, !tbaa !5
  %75 = getelementptr inbounds [256 x float], ptr %14, i64 0, i64 0
  %76 = load ptr, ptr %3, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %76, i32 0, i32 3
  %78 = load i64, ptr %77, align 8, !tbaa !19
  %79 = load ptr, ptr %3, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %79, i32 0, i32 4
  %81 = load i64, ptr %80, align 8, !tbaa !22
  %82 = getelementptr inbounds [256 x float], ptr %21, i64 0, i64 0
  %83 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 0
  %84 = getelementptr inbounds [129 x float], ptr %16, i64 0, i64 0
  %85 = getelementptr inbounds [129 x float], ptr %15, i64 0, i64 0
  call void @FFT(ptr noundef %74, ptr noundef %75, i64 noundef %78, i64 noundef %81, ptr noundef %82, ptr noundef %83, ptr noundef %84, ptr noundef %85, i32 noundef 1, ptr noundef %9, ptr noundef %10)
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %86, i32 0, i32 25
  %88 = load i32, ptr %87, align 8, !tbaa !21
  %89 = icmp slt i32 %88, 50
  br i1 %89, label %90, label %131

90:                                               ; preds = %69
  store i64 5, ptr %5, align 8, !tbaa !9
  br label %91

91:                                               ; preds = %127, %90
  %92 = load i64, ptr %5, align 8, !tbaa !9
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %93, i32 0, i32 4
  %95 = load i64, ptr %94, align 8, !tbaa !22
  %96 = icmp ult i64 %92, %95
  br i1 %96, label %97, label %130

97:                                               ; preds = %91
  %98 = load ptr, ptr %3, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %98, i32 0, i32 18
  %100 = load i64, ptr %5, align 8, !tbaa !9
  %101 = getelementptr inbounds [129 x float], ptr %99, i64 0, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !11
  %103 = load float, ptr %23, align 4, !tbaa !11
  %104 = fadd float %103, %102
  store float %104, ptr %23, align 4, !tbaa !11
  %105 = load ptr, ptr %3, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %105, i32 0, i32 19
  %107 = load i64, ptr %5, align 8, !tbaa !9
  %108 = getelementptr inbounds [129 x float], ptr %106, i64 0, i64 %107
  %109 = load float, ptr %108, align 4, !tbaa !11
  %110 = load float, ptr %24, align 4, !tbaa !11
  %111 = fadd float %110, %109
  store float %111, ptr %24, align 4, !tbaa !11
  %112 = load i64, ptr %5, align 8, !tbaa !9
  %113 = getelementptr inbounds [129 x float], ptr %15, i64 0, i64 %112
  %114 = load float, ptr %113, align 4, !tbaa !11
  %115 = load float, ptr %25, align 4, !tbaa !11
  %116 = fadd float %115, %114
  store float %116, ptr %25, align 4, !tbaa !11
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %117, i32 0, i32 18
  %119 = load i64, ptr %5, align 8, !tbaa !9
  %120 = getelementptr inbounds [129 x float], ptr %118, i64 0, i64 %119
  %121 = load float, ptr %120, align 4, !tbaa !11
  %122 = load i64, ptr %5, align 8, !tbaa !9
  %123 = getelementptr inbounds [129 x float], ptr %15, i64 0, i64 %122
  %124 = load float, ptr %123, align 4, !tbaa !11
  %125 = load float, ptr %26, align 4, !tbaa !11
  %126 = call float @llvm.fmuladd.f32(float %121, float %124, float %125)
  store float %126, ptr %26, align 4, !tbaa !11
  br label %127

127:                                              ; preds = %97
  %128 = load i64, ptr %5, align 8, !tbaa !9
  %129 = add i64 %128, 1
  store i64 %129, ptr %5, align 8, !tbaa !9
  br label %91, !llvm.loop !23

130:                                              ; preds = %91
  br label %131

131:                                              ; preds = %130, %69
  %132 = load ptr, ptr %3, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %132, i32 0, i32 5
  %134 = load float, ptr %133, align 8, !tbaa !25
  %135 = load float, ptr %9, align 4, !tbaa !11
  %136 = fmul float %135, %134
  store float %136, ptr %9, align 4, !tbaa !11
  %137 = load float, ptr %9, align 4, !tbaa !11
  %138 = load ptr, ptr %3, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %138, i32 0, i32 36
  store float %137, ptr %139, align 8, !tbaa !26
  %140 = load float, ptr %10, align 4, !tbaa !11
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %141, i32 0, i32 37
  store float %140, ptr %142, align 4, !tbaa !27
  %143 = load ptr, ptr %3, align 8, !tbaa !5
  %144 = getelementptr inbounds [129 x float], ptr %15, i64 0, i64 0
  %145 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 0
  call void @NoiseEstimation(ptr noundef %143, ptr noundef %144, ptr noundef %145)
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %146, i32 0, i32 25
  %148 = load i32, ptr %147, align 8, !tbaa !21
  %149 = sitofp i32 %148 to float
  %150 = fadd float %149, 1.000000e+00
  %151 = fdiv float 1.000000e+00, %150
  store float %151, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store float 0x3F947AE140000000, ptr %31, align 4, !tbaa !11
  %152 = load ptr, ptr %3, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %152, i32 0, i32 25
  %154 = load i32, ptr %153, align 8, !tbaa !21
  %155 = icmp slt i32 %154, 50
  br i1 %155, label %156, label %357

156:                                              ; preds = %131
  %157 = load float, ptr %10, align 4, !tbaa !11
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %158, i32 0, i32 5
  %160 = load float, ptr %159, align 8, !tbaa !25
  %161 = fmul float %157, %160
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %162, i32 0, i32 20
  %164 = load float, ptr %163, align 4, !tbaa !28
  %165 = load ptr, ptr %3, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %165, i32 0, i32 38
  %167 = load float, ptr %166, align 8, !tbaa !29
  %168 = call float @llvm.fmuladd.f32(float %161, float %164, float %167)
  store float %168, ptr %166, align 8, !tbaa !29
  %169 = load float, ptr %24, align 4, !tbaa !11
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %170, i32 0, i32 4
  %172 = load i64, ptr %171, align 8, !tbaa !22
  %173 = sub i64 %172, 5
  %174 = uitofp i64 %173 to float
  %175 = fmul float %169, %174
  store float %175, ptr %11, align 4, !tbaa !11
  %176 = load float, ptr %23, align 4, !tbaa !11
  %177 = load float, ptr %23, align 4, !tbaa !11
  %178 = load float, ptr %11, align 4, !tbaa !11
  %179 = fneg float %176
  %180 = call float @llvm.fmuladd.f32(float %179, float %177, float %178)
  store float %180, ptr %11, align 4, !tbaa !11
  %181 = load float, ptr %24, align 4, !tbaa !11
  %182 = load float, ptr %25, align 4, !tbaa !11
  %183 = load float, ptr %23, align 4, !tbaa !11
  %184 = load float, ptr %26, align 4, !tbaa !11
  %185 = fmul float %183, %184
  %186 = fneg float %185
  %187 = call float @llvm.fmuladd.f32(float %181, float %182, float %186)
  store float %187, ptr %12, align 4, !tbaa !11
  %188 = load float, ptr %12, align 4, !tbaa !11
  %189 = load float, ptr %11, align 4, !tbaa !11
  %190 = fdiv float %188, %189
  store float %190, ptr %13, align 4, !tbaa !11
  %191 = load float, ptr %13, align 4, !tbaa !11
  %192 = fcmp olt float %191, 0.000000e+00
  br i1 %192, label %193, label %194

193:                                              ; preds = %156
  store float 0.000000e+00, ptr %13, align 4, !tbaa !11
  br label %194

194:                                              ; preds = %193, %156
  %195 = load float, ptr %13, align 4, !tbaa !11
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %196, i32 0, i32 40
  %198 = load float, ptr %197, align 8, !tbaa !30
  %199 = fadd float %198, %195
  store float %199, ptr %197, align 8, !tbaa !30
  %200 = load float, ptr %23, align 4, !tbaa !11
  %201 = load float, ptr %25, align 4, !tbaa !11
  %202 = fmul float %200, %201
  store float %202, ptr %12, align 4, !tbaa !11
  %203 = load ptr, ptr %3, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %203, i32 0, i32 4
  %205 = load i64, ptr %204, align 8, !tbaa !22
  %206 = sub i64 %205, 5
  %207 = uitofp i64 %206 to float
  %208 = load float, ptr %26, align 4, !tbaa !11
  %209 = load float, ptr %12, align 4, !tbaa !11
  %210 = fneg float %207
  %211 = call float @llvm.fmuladd.f32(float %210, float %208, float %209)
  store float %211, ptr %12, align 4, !tbaa !11
  %212 = load float, ptr %12, align 4, !tbaa !11
  %213 = load float, ptr %11, align 4, !tbaa !11
  %214 = fdiv float %212, %213
  store float %214, ptr %13, align 4, !tbaa !11
  %215 = load float, ptr %13, align 4, !tbaa !11
  %216 = fcmp olt float %215, 0.000000e+00
  br i1 %216, label %217, label %218

217:                                              ; preds = %194
  store float 0.000000e+00, ptr %13, align 4, !tbaa !11
  br label %218

218:                                              ; preds = %217, %194
  %219 = load float, ptr %13, align 4, !tbaa !11
  %220 = fcmp ogt float %219, 1.000000e+00
  br i1 %220, label %221, label %222

221:                                              ; preds = %218
  store float 1.000000e+00, ptr %13, align 4, !tbaa !11
  br label %222

222:                                              ; preds = %221, %218
  %223 = load float, ptr %13, align 4, !tbaa !11
  %224 = load ptr, ptr %3, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %224, i32 0, i32 41
  %226 = load float, ptr %225, align 4, !tbaa !31
  %227 = fadd float %226, %223
  store float %227, ptr %225, align 4, !tbaa !31
  %228 = load ptr, ptr %3, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %228, i32 0, i32 41
  %230 = load float, ptr %229, align 4, !tbaa !31
  %231 = fcmp oeq float %230, 0.000000e+00
  br i1 %231, label %232, label %280

232:                                              ; preds = %222
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %233

233:                                              ; preds = %276, %232
  %234 = load i64, ptr %5, align 8, !tbaa !9
  %235 = load ptr, ptr %3, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %235, i32 0, i32 4
  %237 = load i64, ptr %236, align 8, !tbaa !22
  %238 = icmp ult i64 %234, %237
  br i1 %238, label %239, label %279

239:                                              ; preds = %233
  %240 = load ptr, ptr %3, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %240, i32 0, i32 38
  %242 = load float, ptr %241, align 8, !tbaa !29
  %243 = load ptr, ptr %3, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %243, i32 0, i32 42
  %245 = load i64, ptr %5, align 8, !tbaa !9
  %246 = getelementptr inbounds [129 x float], ptr %244, i64 0, i64 %245
  store float %242, ptr %246, align 4, !tbaa !11
  %247 = load ptr, ptr %3, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %247, i32 0, i32 25
  %249 = load i32, ptr %248, align 8, !tbaa !21
  %250 = sitofp i32 %249 to float
  %251 = load i64, ptr %5, align 8, !tbaa !9
  %252 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 %251
  %253 = load float, ptr %252, align 4, !tbaa !11
  %254 = fmul float %253, %250
  store float %254, ptr %252, align 4, !tbaa !11
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %255, i32 0, i32 42
  %257 = load i64, ptr %5, align 8, !tbaa !9
  %258 = getelementptr inbounds [129 x float], ptr %256, i64 0, i64 %257
  %259 = load float, ptr %258, align 4, !tbaa !11
  %260 = load ptr, ptr %3, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %260, i32 0, i32 25
  %262 = load i32, ptr %261, align 8, !tbaa !21
  %263 = sub nsw i32 50, %262
  %264 = sitofp i32 %263 to float
  %265 = fmul float %259, %264
  store float %265, ptr %12, align 4, !tbaa !11
  %266 = load float, ptr %12, align 4, !tbaa !11
  %267 = load float, ptr %30, align 4, !tbaa !11
  %268 = load i64, ptr %5, align 8, !tbaa !9
  %269 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 %268
  %270 = load float, ptr %269, align 4, !tbaa !11
  %271 = call float @llvm.fmuladd.f32(float %266, float %267, float %270)
  store float %271, ptr %269, align 4, !tbaa !11
  %272 = load i64, ptr %5, align 8, !tbaa !9
  %273 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 %272
  %274 = load float, ptr %273, align 4, !tbaa !11
  %275 = fmul float %274, 0x3F947AE140000000
  store float %275, ptr %273, align 4, !tbaa !11
  br label %276

276:                                              ; preds = %239
  %277 = load i64, ptr %5, align 8, !tbaa !9
  %278 = add i64 %277, 1
  store i64 %278, ptr %5, align 8, !tbaa !9
  br label %233, !llvm.loop !32

279:                                              ; preds = %233
  br label %356

280:                                              ; preds = %222
  %281 = load ptr, ptr %3, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %281, i32 0, i32 40
  %283 = load float, ptr %282, align 8, !tbaa !30
  %284 = load float, ptr %30, align 4, !tbaa !11
  %285 = fmul float %283, %284
  %286 = call float @expf(float noundef %285) #6, !tbaa !17
  store float %286, ptr %28, align 4, !tbaa !11
  %287 = load ptr, ptr %3, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %287, i32 0, i32 25
  %289 = load i32, ptr %288, align 8, !tbaa !21
  %290 = add nsw i32 %289, 1
  %291 = sitofp i32 %290 to float
  %292 = load float, ptr %28, align 4, !tbaa !11
  %293 = fmul float %292, %291
  store float %293, ptr %28, align 4, !tbaa !11
  %294 = load ptr, ptr %3, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %294, i32 0, i32 41
  %296 = load float, ptr %295, align 4, !tbaa !31
  %297 = load float, ptr %30, align 4, !tbaa !11
  %298 = fmul float %296, %297
  store float %298, ptr %27, align 4, !tbaa !11
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %299

299:                                              ; preds = %352, %280
  %300 = load i64, ptr %5, align 8, !tbaa !9
  %301 = load ptr, ptr %3, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %301, i32 0, i32 4
  %303 = load i64, ptr %302, align 8, !tbaa !22
  %304 = icmp ult i64 %300, %303
  br i1 %304, label %305, label %355

305:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %306 = load i64, ptr %5, align 8, !tbaa !9
  %307 = icmp ult i64 %306, 5
  br i1 %307, label %308, label %309

308:                                              ; preds = %305
  br label %311

309:                                              ; preds = %305
  %310 = load i64, ptr %5, align 8, !tbaa !9
  br label %311

311:                                              ; preds = %309, %308
  %312 = phi i64 [ 5, %308 ], [ %310, %309 ]
  %313 = uitofp i64 %312 to float
  store float %313, ptr %32, align 4, !tbaa !11
  %314 = load float, ptr %28, align 4, !tbaa !11
  %315 = load float, ptr %32, align 4, !tbaa !11
  %316 = load float, ptr %27, align 4, !tbaa !11
  %317 = call float @powf(float noundef %315, float noundef %316) #6
  %318 = fdiv float %314, %317
  %319 = load ptr, ptr %3, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %319, i32 0, i32 42
  %321 = load i64, ptr %5, align 8, !tbaa !9
  %322 = getelementptr inbounds [129 x float], ptr %320, i64 0, i64 %321
  store float %318, ptr %322, align 4, !tbaa !11
  %323 = load ptr, ptr %3, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %323, i32 0, i32 25
  %325 = load i32, ptr %324, align 8, !tbaa !21
  %326 = sitofp i32 %325 to float
  %327 = load i64, ptr %5, align 8, !tbaa !9
  %328 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 %327
  %329 = load float, ptr %328, align 4, !tbaa !11
  %330 = fmul float %329, %326
  store float %330, ptr %328, align 4, !tbaa !11
  %331 = load ptr, ptr %3, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %331, i32 0, i32 42
  %333 = load i64, ptr %5, align 8, !tbaa !9
  %334 = getelementptr inbounds [129 x float], ptr %332, i64 0, i64 %333
  %335 = load float, ptr %334, align 4, !tbaa !11
  %336 = load ptr, ptr %3, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %336, i32 0, i32 25
  %338 = load i32, ptr %337, align 8, !tbaa !21
  %339 = sub nsw i32 50, %338
  %340 = sitofp i32 %339 to float
  %341 = fmul float %335, %340
  store float %341, ptr %12, align 4, !tbaa !11
  %342 = load float, ptr %12, align 4, !tbaa !11
  %343 = load float, ptr %30, align 4, !tbaa !11
  %344 = load i64, ptr %5, align 8, !tbaa !9
  %345 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 %344
  %346 = load float, ptr %345, align 4, !tbaa !11
  %347 = call float @llvm.fmuladd.f32(float %342, float %343, float %346)
  store float %347, ptr %345, align 4, !tbaa !11
  %348 = load i64, ptr %5, align 8, !tbaa !9
  %349 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 %348
  %350 = load float, ptr %349, align 4, !tbaa !11
  %351 = fmul float %350, 0x3F947AE140000000
  store float %351, ptr %349, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %352

352:                                              ; preds = %311
  %353 = load i64, ptr %5, align 8, !tbaa !9
  %354 = add i64 %353, 1
  store i64 %354, ptr %5, align 8, !tbaa !9
  br label %299, !llvm.loop !33

355:                                              ; preds = %299
  br label %356

356:                                              ; preds = %355, %279
  br label %357

357:                                              ; preds = %356, %131
  %358 = load ptr, ptr %3, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %358, i32 0, i32 25
  %360 = load i32, ptr %359, align 8, !tbaa !21
  %361 = icmp slt i32 %360, 200
  br i1 %361, label %362, label %384

362:                                              ; preds = %357
  %363 = load ptr, ptr %3, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %363, i32 0, i32 25
  %365 = load i32, ptr %364, align 8, !tbaa !21
  %366 = sitofp i32 %365 to float
  %367 = load ptr, ptr %3, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %367, i32 0, i32 34
  %369 = getelementptr inbounds [7 x float], ptr %368, i64 0, i64 5
  %370 = load float, ptr %369, align 4, !tbaa !11
  %371 = fmul float %370, %366
  store float %371, ptr %369, align 4, !tbaa !11
  %372 = load float, ptr %9, align 4, !tbaa !11
  %373 = load ptr, ptr %3, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %373, i32 0, i32 34
  %375 = getelementptr inbounds [7 x float], ptr %374, i64 0, i64 5
  %376 = load float, ptr %375, align 4, !tbaa !11
  %377 = fadd float %376, %372
  store float %377, ptr %375, align 4, !tbaa !11
  %378 = load float, ptr %30, align 4, !tbaa !11
  %379 = load ptr, ptr %3, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %379, i32 0, i32 34
  %381 = getelementptr inbounds [7 x float], ptr %380, i64 0, i64 5
  %382 = load float, ptr %381, align 4, !tbaa !11
  %383 = fmul float %382, %378
  store float %383, ptr %381, align 4, !tbaa !11
  br label %384

384:                                              ; preds = %362, %357
  %385 = load ptr, ptr %3, align 8, !tbaa !5
  %386 = getelementptr inbounds [129 x float], ptr %16, i64 0, i64 0
  %387 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 0
  %388 = getelementptr inbounds [129 x float], ptr %19, i64 0, i64 0
  %389 = getelementptr inbounds [129 x float], ptr %20, i64 0, i64 0
  %390 = getelementptr inbounds [129 x float], ptr %18, i64 0, i64 0
  call void @ComputeSnr(ptr noundef %385, ptr noundef %386, ptr noundef %387, ptr noundef %388, ptr noundef %389, ptr noundef %390)
  %391 = load ptr, ptr %3, align 8, !tbaa !5
  %392 = getelementptr inbounds [129 x float], ptr %16, i64 0, i64 0
  %393 = getelementptr inbounds [129 x float], ptr %15, i64 0, i64 0
  %394 = load i32, ptr %7, align 4, !tbaa !17
  call void @FeatureUpdate(ptr noundef %391, ptr noundef %392, ptr noundef %393, i32 noundef %394)
  %395 = load ptr, ptr %3, align 8, !tbaa !5
  %396 = load ptr, ptr %3, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %396, i32 0, i32 47
  %398 = getelementptr inbounds [129 x float], ptr %397, i64 0, i64 0
  %399 = getelementptr inbounds [129 x float], ptr %19, i64 0, i64 0
  %400 = getelementptr inbounds [129 x float], ptr %20, i64 0, i64 0
  %401 = getelementptr inbounds [129 x float], ptr %18, i64 0, i64 0
  call void @SpeechNoiseProb(ptr noundef %395, ptr noundef %398, ptr noundef %399, ptr noundef %400, ptr noundef %401)
  %402 = load ptr, ptr %3, align 8, !tbaa !5
  %403 = getelementptr inbounds [129 x float], ptr %16, i64 0, i64 0
  %404 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 0
  call void @UpdateNoiseEstimate(ptr noundef %402, ptr noundef %403, ptr noundef %404)
  %405 = load ptr, ptr %3, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %405, i32 0, i32 28
  %407 = getelementptr inbounds [129 x float], ptr %406, i64 0, i64 0
  %408 = getelementptr inbounds [129 x float], ptr %17, i64 0, i64 0
  %409 = load ptr, ptr %3, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %409, i32 0, i32 4
  %411 = load i64, ptr %410, align 8, !tbaa !22
  %412 = mul i64 4, %411
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %407, ptr align 16 %408, i64 %412, i1 false)
  %413 = load ptr, ptr %3, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %413, i32 0, i32 30
  %415 = getelementptr inbounds [129 x float], ptr %414, i64 0, i64 0
  %416 = getelementptr inbounds [129 x float], ptr %16, i64 0, i64 0
  %417 = load ptr, ptr %3, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %417, i32 0, i32 4
  %419 = load i64, ptr %418, align 8, !tbaa !22
  %420 = mul i64 4, %419
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %415, ptr align 16 %416, i64 %420, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  store i32 0, ptr %29, align 4
  br label %421

421:                                              ; preds = %384, %68
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 1024, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 1024, ptr %14) #6
  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
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  %422 = load i32, ptr %29, align 4
  switch i32 %422, label %424 [
    i32 0, label %423
    i32 1, label %423
  ]

423:                                              ; preds = %421, %421
  ret void

424:                                              ; preds = %421
  unreachable
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @UpdateBuffer(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden float @WindowingEnergy(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @FFT(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #1

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

; Function Attrs: nounwind uwtable
declare hidden void @NoiseEstimation(ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind
declare float @expf(float noundef) #4

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

; Function Attrs: nounwind uwtable
declare hidden void @ComputeSnr(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @FeatureUpdate(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @SpeechNoiseProb(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @UpdateNoiseEstimate(ptr noundef, ptr noundef, ptr noundef) #1

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nounwind }
attributes #7 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !15, i64 3128}
!14 = !{!"NoiseSuppressionC_", !15, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !12, i64 40, !15, i64 44, !6, i64 48, !7, i64 56, !7, i64 1080, !7, i64 2104, !15, i64 3128, !7, i64 3132, !7, i64 4680, !7, i64 6228, !7, i64 6744, !15, i64 6756, !7, i64 6760, !7, i64 7276, !7, i64 7792, !12, i64 8308, !12, i64 8312, !15, i64 8316, !7, i64 8320, !7, i64 9344, !15, i64 9856, !7, i64 9860, !7, i64 9876, !7, i64 9904, !7, i64 10420, !7, i64 10936, !7, i64 11452, !7, i64 11968, !12, i64 12484, !7, i64 12488, !7, i64 12516, !12, i64 13032, !12, i64 13036, !12, i64 13040, !7, i64 13044, !12, i64 13560, !12, i64 13564, !7, i64 13568, !16, i64 14084, !7, i64 14164, !7, i64 18164, !7, i64 22164, !7, i64 26164, !7, i64 26680}
!15 = !{!"int", !7, i64 0}
!16 = !{!"NSParaExtract_", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !15, i64 72, !15, i64 76}
!17 = !{!15, !15, i64 0}
!18 = !{!14, !10, i64 8}
!19 = !{!14, !10, i64 24}
!20 = !{!14, !6, i64 48}
!21 = !{!14, !15, i64 9856}
!22 = !{!14, !10, i64 32}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!14, !12, i64 40}
!26 = !{!14, !12, i64 13032}
!27 = !{!14, !12, i64 13036}
!28 = !{!14, !12, i64 8308}
!29 = !{!14, !12, i64 13040}
!30 = !{!14, !12, i64 13560}
!31 = !{!14, !12, i64 13564}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}


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

@.str = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [92 x i8], align 1
@__PRETTY_FUNCTION__.WebRtcNs_AnalyzeCore = external hidden unnamed_addr constant [64 x i8], align 1

; 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 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 void @WebRtcNs_AnalyzeCore(ptr noundef %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = alloca float, align 4
  %4 = alloca float, align 4
  %5 = alloca [256 x float], align 16
  %6 = alloca [129 x float], align 16
  %7 = alloca [129 x float], align 16
  %8 = alloca [129 x float], align 16
  %9 = alloca [129 x float], align 16
  %10 = alloca [129 x float], align 16
  %11 = alloca [129 x float], align 16
  %12 = alloca [256 x float], align 16
  %13 = alloca [129 x float], align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #7
  store float 0.000000e+00, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #7
  store float 0.000000e+00, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %13) #7
  %14 = getelementptr inbounds i8, ptr %0, i64 3128
  %15 = load i32, ptr %14, align 8, !tbaa !9
  %16 = icmp eq i32 %15, 1
  br i1 %16, label %18, label %17

17:                                               ; preds = %2
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1750, ptr noundef nonnull @__PRETTY_FUNCTION__.WebRtcNs_AnalyzeCore) #8
  unreachable

18:                                               ; preds = %2
  %19 = getelementptr inbounds i8, ptr %0, i64 9860
  %20 = load i32, ptr %19, align 4, !tbaa !15
  %21 = getelementptr inbounds i8, ptr %0, i64 8
  %22 = load i64, ptr %21, align 8, !tbaa !16
  %23 = getelementptr inbounds i8, ptr %0, i64 24
  %24 = load i64, ptr %23, align 8, !tbaa !17
  %25 = getelementptr inbounds i8, ptr %0, i64 56
  tail call void @UpdateBuffer(ptr noundef %1, i64 noundef %22, i64 noundef %24, ptr noundef nonnull %25)
  %26 = getelementptr inbounds i8, ptr %0, i64 48
  %27 = load ptr, ptr %26, align 8, !tbaa !18
  %28 = load i64, ptr %23, align 8, !tbaa !17
  %29 = call float @WindowingEnergy(ptr noundef %27, ptr noundef nonnull %25, i64 noundef %28, ptr noundef nonnull %5)
  %30 = fcmp oeq float %29, 0.000000e+00
  br i1 %30, label %278, label %31

31:                                               ; preds = %18
  %32 = getelementptr inbounds i8, ptr %0, i64 9856
  %33 = load i32, ptr %32, align 8, !tbaa !19
  %34 = add nsw i32 %33, 1
  store i32 %34, ptr %32, align 8, !tbaa !19
  %35 = load i64, ptr %23, align 8, !tbaa !17
  %36 = getelementptr inbounds i8, ptr %0, i64 32
  %37 = load i64, ptr %36, align 8, !tbaa !20
  call void @FFT(ptr noundef nonnull %0, ptr noundef nonnull %5, i64 noundef %35, i64 noundef %37, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %7, ptr noundef nonnull %6, i32 noundef 1, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %38 = load i32, ptr %32, align 8, !tbaa !19
  %39 = icmp slt i32 %38, 50
  br i1 %39, label %.preheader135, label %.loopexit

.preheader135:                                    ; preds = %31
  %40 = load i64, ptr %36, align 8, !tbaa !20
  %41 = icmp ugt i64 %40, 5
  br i1 %41, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.preheader135
  %42 = getelementptr inbounds i8, ptr %0, i64 7276
  %43 = getelementptr inbounds i8, ptr %0, i64 7792
  %44 = add i64 %40, -5
  %xtraiter = and i64 %44, 1
  %45 = icmp eq i64 %40, 6
  br i1 %45, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %44, -2
  br label %46

46:                                               ; preds = %46, %.lr.ph.new
  %.0140 = phi i64 [ 5, %.lr.ph.new ], [ %71, %46 ]
  %.0120139 = phi float [ 0.000000e+00, %.lr.ph.new ], [ %70, %46 ]
  %.0124137 = phi float [ 0.000000e+00, %.lr.ph.new ], [ %64, %46 ]
  %47 = phi <2 x float> [ zeroinitializer, %.lr.ph.new ], [ %69, %46 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %46 ]
  %48 = getelementptr inbounds [129 x float], ptr %42, i64 0, i64 %.0140
  %49 = load float, ptr %48, align 4, !tbaa !5
  %50 = getelementptr inbounds [129 x float], ptr %43, i64 0, i64 %.0140
  %51 = load float, ptr %50, align 4, !tbaa !5
  %52 = fadd float %.0124137, %51
  %53 = getelementptr inbounds [129 x float], ptr %6, i64 0, i64 %.0140
  %54 = load float, ptr %53, align 4, !tbaa !5
  %55 = insertelement <2 x float> poison, float %54, i64 0
  %56 = insertelement <2 x float> %55, float %49, i64 1
  %57 = fadd <2 x float> %47, %56
  %58 = call float @llvm.fmuladd.f32(float %49, float %54, float %.0120139)
  %59 = add nuw i64 %.0140, 1
  %60 = getelementptr inbounds [129 x float], ptr %42, i64 0, i64 %59
  %61 = load float, ptr %60, align 4, !tbaa !5
  %62 = getelementptr inbounds [129 x float], ptr %43, i64 0, i64 %59
  %63 = load float, ptr %62, align 4, !tbaa !5
  %64 = fadd float %52, %63
  %65 = getelementptr inbounds [129 x float], ptr %6, i64 0, i64 %59
  %66 = load float, ptr %65, align 4, !tbaa !5
  %67 = insertelement <2 x float> poison, float %66, i64 0
  %68 = insertelement <2 x float> %67, float %61, i64 1
  %69 = fadd <2 x float> %57, %68
  %70 = call float @llvm.fmuladd.f32(float %61, float %66, float %58)
  %71 = add nuw i64 %.0140, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit.unr-lcssa.loopexit, label %46, !llvm.loop !21

.loopexit.loopexit.unr-lcssa.loopexit:            ; preds = %46
  %72 = insertelement <2 x float> poison, float %70, i64 0
  %73 = insertelement <2 x float> %72, float %64, i64 1
  br label %.loopexit.loopexit.unr-lcssa

.loopexit.loopexit.unr-lcssa:                     ; preds = %.loopexit.loopexit.unr-lcssa.loopexit, %.lr.ph
  %.lcssa180.ph = phi <2 x float> [ poison, %.lr.ph ], [ %69, %.loopexit.loopexit.unr-lcssa.loopexit ]
  %.lcssa179.ph = phi <2 x float> [ poison, %.lr.ph ], [ %73, %.loopexit.loopexit.unr-lcssa.loopexit ]
  %.0140.unr = phi i64 [ 5, %.lr.ph ], [ %71, %.loopexit.loopexit.unr-lcssa.loopexit ]
  %.0120139.unr = phi float [ 0.000000e+00, %.lr.ph ], [ %70, %.loopexit.loopexit.unr-lcssa.loopexit ]
  %.0124137.unr = phi float [ 0.000000e+00, %.lr.ph ], [ %64, %.loopexit.loopexit.unr-lcssa.loopexit ]
  %.unr = phi <2 x float> [ zeroinitializer, %.lr.ph ], [ %69, %.loopexit.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.loopexit.loopexit.epilog-lcssa

.loopexit.loopexit.epilog-lcssa:                  ; preds = %.loopexit.loopexit.unr-lcssa
  %74 = getelementptr inbounds [129 x float], ptr %42, i64 0, i64 %.0140.unr
  %75 = load float, ptr %74, align 4, !tbaa !5
  %76 = getelementptr inbounds [129 x float], ptr %43, i64 0, i64 %.0140.unr
  %77 = load float, ptr %76, align 4, !tbaa !5
  %78 = fadd float %.0124137.unr, %77
  %79 = getelementptr inbounds [129 x float], ptr %6, i64 0, i64 %.0140.unr
  %80 = load float, ptr %79, align 4, !tbaa !5
  %81 = insertelement <2 x float> poison, float %80, i64 0
  %82 = insertelement <2 x float> %81, float %75, i64 1
  %83 = fadd <2 x float> %.unr, %82
  %84 = call float @llvm.fmuladd.f32(float %75, float %80, float %.0120139.unr)
  %85 = insertelement <2 x float> poison, float %84, i64 0
  %86 = insertelement <2 x float> %85, float %78, i64 1
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit.epilog-lcssa, %.loopexit.loopexit.unr-lcssa, %.preheader135, %31
  %87 = phi <2 x float> [ zeroinitializer, %31 ], [ zeroinitializer, %.preheader135 ], [ %.lcssa180.ph, %.loopexit.loopexit.unr-lcssa ], [ %83, %.loopexit.loopexit.epilog-lcssa ]
  %88 = phi <2 x float> [ zeroinitializer, %31 ], [ zeroinitializer, %.preheader135 ], [ %.lcssa179.ph, %.loopexit.loopexit.unr-lcssa ], [ %86, %.loopexit.loopexit.epilog-lcssa ]
  %89 = getelementptr inbounds i8, ptr %0, i64 40
  %90 = load float, ptr %89, align 8, !tbaa !23
  %91 = load float, ptr %3, align 4, !tbaa !5
  %92 = fmul float %90, %91
  store float %92, ptr %3, align 4, !tbaa !5
  %93 = getelementptr inbounds i8, ptr %0, i64 13032
  store float %92, ptr %93, align 8, !tbaa !24
  %94 = load float, ptr %4, align 4, !tbaa !5
  %95 = getelementptr inbounds i8, ptr %0, i64 13036
  store float %94, ptr %95, align 4, !tbaa !25
  call void @NoiseEstimation(ptr noundef nonnull %0, ptr noundef nonnull %6, ptr noundef nonnull %8)
  %96 = load i32, ptr %32, align 8, !tbaa !19
  %97 = sitofp i32 %96 to float
  %98 = fadd float %97, 1.000000e+00
  %99 = fdiv float 1.000000e+00, %98
  %100 = icmp slt i32 %96, 50
  br i1 %100, label %101, label %thread-pre-split

101:                                              ; preds = %.loopexit
  %102 = load float, ptr %4, align 4, !tbaa !5
  %103 = load float, ptr %89, align 8, !tbaa !23
  %104 = fmul float %102, %103
  %105 = getelementptr inbounds i8, ptr %0, i64 8308
  %106 = load float, ptr %105, align 4, !tbaa !26
  %107 = getelementptr inbounds i8, ptr %0, i64 13040
  %108 = load float, ptr %107, align 8, !tbaa !27
  %109 = call float @llvm.fmuladd.f32(float %104, float %106, float %108)
  store float %109, ptr %107, align 8, !tbaa !27
  %110 = load i64, ptr %36, align 8, !tbaa !20
  %111 = add i64 %110, -5
  %112 = uitofp i64 %111 to float
  %113 = extractelement <2 x float> %87, i64 1
  %114 = fneg float %113
  %115 = insertelement <2 x float> poison, float %114, i64 0
  %116 = insertelement <2 x float> %115, float %112, i64 1
  %117 = fmul <2 x float> %88, %116
  %118 = shufflevector <2 x float> %88, <2 x float> %115, <2 x i32> <i32 1, i32 2>
  %119 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %118, <2 x float> %87, <2 x float> %117)
  %120 = extractelement <2 x float> %119, i64 0
  %121 = extractelement <2 x float> %119, i64 1
  %122 = fdiv float %120, %121
  %123 = getelementptr inbounds i8, ptr %0, i64 13560
  %124 = extractelement <2 x float> %87, i64 0
  %125 = fmul float %113, %124
  %126 = fneg float %112
  %127 = extractelement <2 x float> %88, i64 0
  %128 = call float @llvm.fmuladd.f32(float %126, float %127, float %125)
  %129 = fdiv float %128, %121
  %130 = fcmp olt float %129, 0.000000e+00
  %.1129 = select i1 %130, float 0.000000e+00, float %129
  %131 = insertelement <2 x float> <float poison, float 1.000000e+00>, float %122, i64 0
  %132 = insertelement <2 x float> <float 0.000000e+00, float poison>, float %.1129, i64 1
  %133 = fcmp olt <2 x float> %131, %132
  %134 = insertelement <2 x float> %132, float %122, i64 0
  %135 = select <2 x i1> %133, <2 x float> <float 0.000000e+00, float 1.000000e+00>, <2 x float> %134
  %136 = load <2 x float>, ptr %123, align 8, !tbaa !5
  %137 = fadd <2 x float> %136, %135
  store <2 x float> %137, ptr %123, align 8, !tbaa !5
  %138 = extractelement <2 x float> %137, i64 1
  %139 = fcmp oeq float %138, 0.000000e+00
  br i1 %139, label %.preheader, label %162

.preheader:                                       ; preds = %101
  %.not148 = icmp eq i64 %110, 0
  br i1 %.not148, label %thread-pre-split.thread, label %.lr.ph147

.lr.ph147:                                        ; preds = %.preheader
  %140 = getelementptr inbounds i8, ptr %0, i64 13568
  %141 = sub nsw i32 50, %96
  %142 = uitofp nneg i32 %141 to float
  %143 = fmul float %109, %142
  %min.iters.check = icmp ult i64 %110, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph147
  %n.vec = and i64 %110, -8
  %broadcast.splatinsert = insertelement <4 x float> poison, float %109, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert172 = insertelement <4 x float> poison, float %97, i64 0
  %broadcast.splat173 = shufflevector <4 x float> %broadcast.splatinsert172, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert174 = insertelement <4 x float> poison, float %143, i64 0
  %broadcast.splat175 = shufflevector <4 x float> %broadcast.splatinsert174, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert176 = insertelement <4 x float> poison, float %99, i64 0
  %broadcast.splat177 = shufflevector <4 x float> %broadcast.splatinsert176, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %144 = getelementptr inbounds [129 x float], ptr %140, i64 0, i64 %index
  %145 = getelementptr inbounds i8, ptr %144, i64 16
  store <4 x float> %broadcast.splat, ptr %144, align 4, !tbaa !5
  store <4 x float> %broadcast.splat, ptr %145, align 4, !tbaa !5
  %146 = getelementptr inbounds [129 x float], ptr %8, i64 0, i64 %index
  %147 = getelementptr inbounds i8, ptr %146, i64 16
  %wide.load = load <4 x float>, ptr %146, align 16, !tbaa !5
  %wide.load171 = load <4 x float>, ptr %147, align 16, !tbaa !5
  %148 = fmul <4 x float> %wide.load, %broadcast.splat173
  %149 = fmul <4 x float> %wide.load171, %broadcast.splat173
  %150 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat175, <4 x float> %broadcast.splat177, <4 x float> %148)
  %151 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat175, <4 x float> %broadcast.splat177, <4 x float> %149)
  %152 = fmul <4 x float> %150, <float 0x3F947AE140000000, float 0x3F947AE140000000, float 0x3F947AE140000000, float 0x3F947AE140000000>
  %153 = fmul <4 x float> %151, <float 0x3F947AE140000000, float 0x3F947AE140000000, float 0x3F947AE140000000, float 0x3F947AE140000000>
  store <4 x float> %152, ptr %146, align 16, !tbaa !5
  store <4 x float> %153, ptr %147, align 16, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %154 = icmp eq i64 %index.next, %n.vec
  br i1 %154, label %middle.block, label %vector.body, !llvm.loop !28

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %110, %n.vec
  br i1 %cmp.n, label %thread-pre-split, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph147
  %.1146.ph = phi i64 [ 0, %.lr.ph147 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.1146 = phi i64 [ %161, %scalar.ph ], [ %.1146.ph, %scalar.ph.preheader ]
  %155 = getelementptr inbounds [129 x float], ptr %140, i64 0, i64 %.1146
  store float %109, ptr %155, align 4, !tbaa !5
  %156 = getelementptr inbounds [129 x float], ptr %8, i64 0, i64 %.1146
  %157 = load float, ptr %156, align 4, !tbaa !5
  %158 = fmul float %157, %97
  %159 = call float @llvm.fmuladd.f32(float %143, float %99, float %158)
  %160 = fmul float %159, 0x3F947AE140000000
  store float %160, ptr %156, align 4, !tbaa !5
  %161 = add nuw i64 %.1146, 1
  %exitcond158.not = icmp eq i64 %161, %110
  br i1 %exitcond158.not, label %thread-pre-split, label %scalar.ph, !llvm.loop !31

162:                                              ; preds = %101
  %163 = extractelement <2 x float> %137, i64 0
  %164 = fmul float %99, %163
  %165 = call float @expf(float noundef %164) #7, !tbaa !15
  %166 = load i32, ptr %32, align 8, !tbaa !19
  %167 = add nsw i32 %166, 1
  %168 = sitofp i32 %167 to float
  %169 = fmul float %165, %168
  %170 = fmul float %99, %138
  %.not = icmp eq i64 %110, 0
  br i1 %.not, label %thread-pre-split, label %.lr.ph145

.lr.ph145:                                        ; preds = %162
  %171 = getelementptr inbounds i8, ptr %0, i64 13568
  %172 = call float @powf(float noundef 5.000000e+00, float noundef %170) #7
  %173 = fdiv float %169, %172
  store float %173, ptr %171, align 4, !tbaa !5
  %174 = load i32, ptr %32, align 8, !tbaa !19
  %175 = sitofp i32 %174 to float
  %176 = load float, ptr %8, align 16, !tbaa !5
  %177 = fmul float %176, %175
  %178 = sub nsw i32 50, %174
  %179 = sitofp i32 %178 to float
  %180 = fmul float %173, %179
  %181 = call float @llvm.fmuladd.f32(float %180, float %99, float %177)
  %182 = fmul float %181, 0x3F947AE140000000
  store float %182, ptr %8, align 16, !tbaa !5
  %183 = load i64, ptr %36, align 8, !tbaa !20
  %184 = icmp ugt i64 %183, 1
  br i1 %184, label %.peel.next, label %thread-pre-split

.peel.next:                                       ; preds = %.lr.ph145
  %185 = call float @powf(float noundef 5.000000e+00, float noundef %170) #7
  %186 = fdiv float %169, %185
  %187 = getelementptr inbounds i8, ptr %0, i64 13572
  store float %186, ptr %187, align 4, !tbaa !5
  %188 = load i32, ptr %32, align 8, !tbaa !19
  %189 = sitofp i32 %188 to float
  %190 = getelementptr inbounds i8, ptr %8, i64 4
  %191 = load float, ptr %190, align 4, !tbaa !5
  %192 = fmul float %191, %189
  %193 = sub nsw i32 50, %188
  %194 = sitofp i32 %193 to float
  %195 = fmul float %186, %194
  %196 = call float @llvm.fmuladd.f32(float %195, float %99, float %192)
  %197 = fmul float %196, 0x3F947AE140000000
  store float %197, ptr %190, align 4, !tbaa !5
  %198 = load i64, ptr %36, align 8, !tbaa !20
  %199 = icmp ugt i64 %198, 2
  br i1 %199, label %.peel.next153, label %thread-pre-split

.peel.next153:                                    ; preds = %.peel.next
  %200 = call float @powf(float noundef 5.000000e+00, float noundef %170) #7
  %201 = fdiv float %169, %200
  %202 = getelementptr inbounds i8, ptr %0, i64 13576
  store float %201, ptr %202, align 4, !tbaa !5
  %203 = load i32, ptr %32, align 8, !tbaa !19
  %204 = sitofp i32 %203 to float
  %205 = getelementptr inbounds i8, ptr %8, i64 8
  %206 = load float, ptr %205, align 8, !tbaa !5
  %207 = fmul float %206, %204
  %208 = sub nsw i32 50, %203
  %209 = sitofp i32 %208 to float
  %210 = fmul float %201, %209
  %211 = call float @llvm.fmuladd.f32(float %210, float %99, float %207)
  %212 = fmul float %211, 0x3F947AE140000000
  store float %212, ptr %205, align 8, !tbaa !5
  %213 = load i64, ptr %36, align 8, !tbaa !20
  %214 = icmp ugt i64 %213, 3
  br i1 %214, label %.peel.next154, label %thread-pre-split

.peel.next154:                                    ; preds = %.peel.next153
  %215 = call float @powf(float noundef 5.000000e+00, float noundef %170) #7
  %216 = fdiv float %169, %215
  %217 = getelementptr inbounds i8, ptr %0, i64 13580
  store float %216, ptr %217, align 4, !tbaa !5
  %218 = load i32, ptr %32, align 8, !tbaa !19
  %219 = sitofp i32 %218 to float
  %220 = getelementptr inbounds i8, ptr %8, i64 12
  %221 = load float, ptr %220, align 4, !tbaa !5
  %222 = fmul float %221, %219
  %223 = sub nsw i32 50, %218
  %224 = sitofp i32 %223 to float
  %225 = fmul float %216, %224
  %226 = call float @llvm.fmuladd.f32(float %225, float %99, float %222)
  %227 = fmul float %226, 0x3F947AE140000000
  store float %227, ptr %220, align 4, !tbaa !5
  %228 = load i64, ptr %36, align 8, !tbaa !20
  %229 = icmp ugt i64 %228, 4
  br i1 %229, label %.peel.next155, label %thread-pre-split

.peel.next155:                                    ; preds = %.peel.next154
  %230 = call float @powf(float noundef 5.000000e+00, float noundef %170) #7
  %231 = fdiv float %169, %230
  %232 = getelementptr inbounds i8, ptr %0, i64 13584
  store float %231, ptr %232, align 4, !tbaa !5
  %233 = load i32, ptr %32, align 8, !tbaa !19
  %234 = sitofp i32 %233 to float
  %235 = getelementptr inbounds i8, ptr %8, i64 16
  %236 = load float, ptr %235, align 16, !tbaa !5
  %237 = fmul float %236, %234
  %238 = sub nsw i32 50, %233
  %239 = sitofp i32 %238 to float
  %240 = fmul float %231, %239
  %241 = call float @llvm.fmuladd.f32(float %240, float %99, float %237)
  %242 = fmul float %241, 0x3F947AE140000000
  store float %242, ptr %235, align 16, !tbaa !5
  %243 = load i64, ptr %36, align 8, !tbaa !20
  %244 = icmp ugt i64 %243, 5
  br i1 %244, label %.peel.next156, label %thread-pre-split

.peel.next156:                                    ; preds = %.peel.next155, %.peel.next156
  %.2144 = phi i64 [ %259, %.peel.next156 ], [ 5, %.peel.next155 ]
  %245 = uitofp i64 %.2144 to float
  %246 = call float @powf(float noundef %245, float noundef %170) #7
  %247 = fdiv float %169, %246
  %248 = getelementptr inbounds [129 x float], ptr %171, i64 0, i64 %.2144
  store float %247, ptr %248, align 4, !tbaa !5
  %249 = load i32, ptr %32, align 8, !tbaa !19
  %250 = sitofp i32 %249 to float
  %251 = getelementptr inbounds [129 x float], ptr %8, i64 0, i64 %.2144
  %252 = load float, ptr %251, align 4, !tbaa !5
  %253 = fmul float %252, %250
  %254 = sub nsw i32 50, %249
  %255 = sitofp i32 %254 to float
  %256 = fmul float %247, %255
  %257 = call float @llvm.fmuladd.f32(float %256, float %99, float %253)
  %258 = fmul float %257, 0x3F947AE140000000
  store float %258, ptr %251, align 4, !tbaa !5
  %259 = add nuw i64 %.2144, 1
  %260 = load i64, ptr %36, align 8, !tbaa !20
  %261 = icmp ult i64 %259, %260
  br i1 %261, label %.peel.next156, label %thread-pre-split, !llvm.loop !32

thread-pre-split:                                 ; preds = %.peel.next156, %scalar.ph, %middle.block, %162, %.peel.next155, %.peel.next154, %.peel.next153, %.peel.next, %.lr.ph145, %.loopexit
  %262 = phi i32 [ %96, %.loopexit ], [ %166, %162 ], [ %233, %.peel.next155 ], [ %218, %.peel.next154 ], [ %203, %.peel.next153 ], [ %188, %.peel.next ], [ %174, %.lr.ph145 ], [ %96, %middle.block ], [ %96, %scalar.ph ], [ %249, %.peel.next156 ]
  %263 = icmp slt i32 %262, 200
  br i1 %263, label %thread-pre-split.thread, label %272

thread-pre-split.thread:                          ; preds = %.preheader, %thread-pre-split
  %264 = phi i32 [ %262, %thread-pre-split ], [ %96, %.preheader ]
  %265 = sitofp i32 %264 to float
  %266 = getelementptr inbounds i8, ptr %0, i64 12508
  %267 = load float, ptr %266, align 4, !tbaa !5
  %268 = fmul float %267, %265
  %269 = load float, ptr %3, align 4, !tbaa !5
  %270 = fadd float %268, %269
  %271 = fmul float %99, %270
  store float %271, ptr %266, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %thread-pre-split.thread, %thread-pre-split
  call void @ComputeSnr(ptr noundef nonnull %0, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %9)
  call void @FeatureUpdate(ptr noundef nonnull %0, ptr noundef nonnull %7, ptr noundef nonnull %6, i32 noundef %20)
  %273 = getelementptr inbounds i8, ptr %0, i64 26164
  call void @SpeechNoiseProb(ptr noundef nonnull %0, ptr noundef nonnull %273, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %9)
  call void @UpdateNoiseEstimate(ptr noundef nonnull %0, ptr noundef nonnull %7, ptr noundef nonnull %8)
  %274 = getelementptr inbounds i8, ptr %0, i64 9904
  %275 = load i64, ptr %36, align 8, !tbaa !20
  %276 = shl i64 %275, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %274, ptr nonnull align 16 %8, i64 %276, i1 false)
  %277 = getelementptr inbounds i8, ptr %0, i64 10936
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %277, ptr nonnull align 16 %7, i64 %276, i1 false)
  br label %278

278:                                              ; preds = %18, %272
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #7
  ret void
}

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

; Function Attrs: nounwind uwtable
declare hidden void @UpdateBuffer(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden float @WindowingEnergy(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @FFT(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare hidden void @NoiseEstimation(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

; Function Attrs: nounwind uwtable
declare hidden void @ComputeSnr(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @FeatureUpdate(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @SpeechNoiseProb(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @UpdateNoiseEstimate(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.fmuladd.v2f32(<2 x float>, <2 x float>, <2 x float>) #6

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 3128}
!10 = !{!"NoiseSuppressionC_", !11, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !6, i64 40, !11, i64 44, !13, i64 48, !7, i64 56, !7, i64 1080, !7, i64 2104, !11, i64 3128, !7, i64 3132, !7, i64 4680, !7, i64 6228, !7, i64 6744, !11, i64 6756, !7, i64 6760, !7, i64 7276, !7, i64 7792, !6, i64 8308, !6, i64 8312, !11, i64 8316, !7, i64 8320, !7, i64 9344, !11, i64 9856, !7, i64 9860, !7, i64 9876, !7, i64 9904, !7, i64 10420, !7, i64 10936, !7, i64 11452, !7, i64 11968, !6, i64 12484, !7, i64 12488, !7, i64 12516, !6, i64 13032, !6, i64 13036, !6, i64 13040, !7, i64 13044, !6, i64 13560, !6, i64 13564, !7, i64 13568, !14, i64 14084, !7, i64 14164, !7, i64 18164, !7, i64 22164, !7, i64 26164, !7, i64 26680}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"NSParaExtract_", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !11, i64 72, !11, i64 76}
!15 = !{!11, !11, i64 0}
!16 = !{!10, !12, i64 8}
!17 = !{!10, !12, i64 24}
!18 = !{!10, !13, i64 48}
!19 = !{!10, !11, i64 9856}
!20 = !{!10, !12, i64 32}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!10, !6, i64 40}
!24 = !{!10, !6, i64 13032}
!25 = !{!10, !6, i64 13036}
!26 = !{!10, !6, i64 8308}
!27 = !{!10, !6, i64 13040}
!28 = distinct !{!28, !22, !29, !30}
!29 = !{!"llvm.loop.isvectorized", i32 1}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = distinct !{!31, !22, !30, !29}
!32 = distinct !{!32, !22, !33}
!33 = !{!"llvm.loop.peeled.count", i32 5}


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