; 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_ProcessCore = external hidden unnamed_addr constant [97 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [36 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @WebRtcNs_ProcessCore(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3) #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca [160 x float], align 16
  %19 = alloca [256 x float], align 16
  %20 = alloca [129 x float], align 16
  %21 = alloca [129 x float], align 16
  %22 = alloca [129 x float], align 16
  %23 = alloca [256 x float], align 16
  %24 = alloca [129 x float], align 16
  %25 = alloca float, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i64, align 8
  %39 = alloca i32, align 4
  %40 = alloca float, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i64 %2, ptr %7, align 8, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 8, 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 4, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 640, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 1024, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 1024, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 516, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store float 0x3F947AE140000000, ptr %25, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store i32 1, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 1, ptr %27, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store float 1.000000e+00, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  store float 1.000000e+00, ptr %29, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %41, i32 0, i32 11
  %43 = load i32, ptr %42, align 8, !tbaa !15
  %44 = icmp eq i32 1, %43
  br i1 %44, label %45, label %46

45:                                               ; preds = %4
  br label %47

46:                                               ; preds = %4
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1897, ptr noundef @__PRETTY_FUNCTION__.WebRtcNs_ProcessCore) #7
  unreachable

47:                                               ; preds = %45
  %48 = load i64, ptr %7, align 8, !tbaa !9
  %49 = sub i64 %48, 1
  %50 = icmp ule i64 %49, 2
  br i1 %50, label %51, label %52

51:                                               ; preds = %47
  br label %53

52:                                               ; preds = %47
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 1898, ptr noundef @__PRETTY_FUNCTION__.WebRtcNs_ProcessCore) #7
  unreachable

53:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  store ptr null, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  store ptr null, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  store i64 0, ptr %38, align 8, !tbaa !9
  %54 = load i64, ptr %7, align 8, !tbaa !9
  %55 = icmp ugt i64 %54, 1
  br i1 %55, label %56, label %69

56:                                               ; preds = %53
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = getelementptr inbounds ptr, ptr %57, i64 1
  store ptr %58, ptr %36, align 8, !tbaa !5
  %59 = load ptr, ptr %8, align 8, !tbaa !5
  %60 = getelementptr inbounds ptr, ptr %59, i64 1
  store ptr %60, ptr %37, align 8, !tbaa !5
  %61 = load i64, ptr %7, align 8, !tbaa !9
  %62 = sub i64 %61, 1
  store i64 %62, ptr %38, align 8, !tbaa !9
  store i32 1, ptr %9, align 4, !tbaa !11
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %63, i32 0, i32 4
  %65 = load i64, ptr %64, align 8, !tbaa !18
  %66 = trunc i64 %65 to i32
  %67 = sdiv i32 %66, 4
  store i32 %67, ptr %26, align 4, !tbaa !11
  %68 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %68, ptr %27, align 4, !tbaa !11
  br label %69

69:                                               ; preds = %56, %53
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = getelementptr inbounds ptr, ptr %70, i64 0
  %72 = load ptr, ptr %71, align 8, !tbaa !5
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %73, i32 0, i32 1
  %75 = load i64, ptr %74, align 8, !tbaa !19
  %76 = load ptr, ptr %5, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %76, i32 0, i32 3
  %78 = load i64, ptr %77, align 8, !tbaa !20
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %79, i32 0, i32 9
  %81 = getelementptr inbounds [256 x float], ptr %80, i64 0, i64 0
  call void @UpdateBuffer(ptr noundef %72, i64 noundef %75, i64 noundef %78, ptr noundef %81)
  %82 = load i32, ptr %9, align 4, !tbaa !11
  %83 = icmp eq i32 %82, 1
  br i1 %83, label %84, label %109

84:                                               ; preds = %69
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %85

85:                                               ; preds = %105, %84
  %86 = load i64, ptr %10, align 8, !tbaa !9
  %87 = load i64, ptr %38, align 8, !tbaa !9
  %88 = icmp ult i64 %86, %87
  br i1 %88, label %89, label %108

89:                                               ; preds = %85
  %90 = load ptr, ptr %36, align 8, !tbaa !5
  %91 = load i64, ptr %10, align 8, !tbaa !9
  %92 = getelementptr inbounds ptr, ptr %90, i64 %91
  %93 = load ptr, ptr %92, align 8, !tbaa !5
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %94, i32 0, i32 1
  %96 = load i64, ptr %95, align 8, !tbaa !19
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %97, i32 0, i32 3
  %99 = load i64, ptr %98, align 8, !tbaa !20
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %100, i32 0, i32 48
  %102 = load i64, ptr %10, align 8, !tbaa !9
  %103 = getelementptr inbounds [2 x [256 x float]], ptr %101, i64 0, i64 %102
  %104 = getelementptr inbounds [256 x float], ptr %103, i64 0, i64 0
  call void @UpdateBuffer(ptr noundef %93, i64 noundef %96, i64 noundef %99, ptr noundef %104)
  br label %105

105:                                              ; preds = %89
  %106 = load i64, ptr %10, align 8, !tbaa !9
  %107 = add i64 %106, 1
  store i64 %107, ptr %10, align 8, !tbaa !9
  br label %85, !llvm.loop !21

108:                                              ; preds = %85
  br label %109

109:                                              ; preds = %108, %69
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %110, i32 0, i32 7
  %112 = load ptr, ptr %111, align 8, !tbaa !23
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %113, i32 0, i32 9
  %115 = getelementptr inbounds [256 x float], ptr %114, i64 0, i64 0
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %116, i32 0, i32 3
  %118 = load i64, ptr %117, align 8, !tbaa !20
  %119 = getelementptr inbounds [256 x float], ptr %19, i64 0, i64 0
  %120 = call float @WindowingEnergy(ptr noundef %112, ptr noundef %115, i64 noundef %118, ptr noundef %119)
  store float %120, ptr %12, align 4, !tbaa !13
  %121 = load float, ptr %12, align 4, !tbaa !13
  %122 = fpext float %121 to double
  %123 = fcmp oeq double %122, 0.000000e+00
  br i1 %123, label %124, label %261

124:                                              ; preds = %109
  %125 = load ptr, ptr %5, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %125, i32 0, i32 2
  %127 = load i64, ptr %126, align 8, !tbaa !24
  store i64 %127, ptr %10, align 8, !tbaa !9
  br label %128

128:                                              ; preds = %150, %124
  %129 = load i64, ptr %10, align 8, !tbaa !9
  %130 = load ptr, ptr %5, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %130, i32 0, i32 1
  %132 = load i64, ptr %131, align 8, !tbaa !19
  %133 = load ptr, ptr %5, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %133, i32 0, i32 2
  %135 = load i64, ptr %134, align 8, !tbaa !24
  %136 = add i64 %132, %135
  %137 = icmp ult i64 %129, %136
  br i1 %137, label %138, label %153

138:                                              ; preds = %128
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %139, i32 0, i32 10
  %141 = load i64, ptr %10, align 8, !tbaa !9
  %142 = getelementptr inbounds [256 x float], ptr %140, i64 0, i64 %141
  %143 = load float, ptr %142, align 4, !tbaa !13
  %144 = load i64, ptr %10, align 8, !tbaa !9
  %145 = load ptr, ptr %5, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %145, i32 0, i32 2
  %147 = load i64, ptr %146, align 8, !tbaa !24
  %148 = sub i64 %144, %147
  %149 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %148
  store float %143, ptr %149, align 4, !tbaa !13
  br label %150

150:                                              ; preds = %138
  %151 = load i64, ptr %10, align 8, !tbaa !9
  %152 = add i64 %151, 1
  store i64 %152, ptr %10, align 8, !tbaa !9
  br label %128, !llvm.loop !25

153:                                              ; preds = %128
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %154, i32 0, i32 1
  %156 = load i64, ptr %155, align 8, !tbaa !19
  %157 = load ptr, ptr %5, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %157, i32 0, i32 3
  %159 = load i64, ptr %158, align 8, !tbaa !20
  %160 = load ptr, ptr %5, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %160, i32 0, i32 10
  %162 = getelementptr inbounds [256 x float], ptr %161, i64 0, i64 0
  call void @UpdateBuffer(ptr noundef null, i64 noundef %156, i64 noundef %159, ptr noundef %162)
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %195, %153
  %164 = load i64, ptr %10, align 8, !tbaa !9
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %165, i32 0, i32 1
  %167 = load i64, ptr %166, align 8, !tbaa !19
  %168 = icmp ult i64 %164, %167
  br i1 %168, label %169, label %198

169:                                              ; preds = %163
  %170 = load i64, ptr %10, align 8, !tbaa !9
  %171 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %170
  %172 = load float, ptr %171, align 4, !tbaa !13
  %173 = fcmp ogt float %172, 3.276700e+04
  br i1 %173, label %174, label %175

174:                                              ; preds = %169
  br label %187

175:                                              ; preds = %169
  %176 = load i64, ptr %10, align 8, !tbaa !9
  %177 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %176
  %178 = load float, ptr %177, align 4, !tbaa !13
  %179 = fcmp olt float %178, -3.276800e+04
  br i1 %179, label %180, label %181

180:                                              ; preds = %175
  br label %185

181:                                              ; preds = %175
  %182 = load i64, ptr %10, align 8, !tbaa !9
  %183 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !13
  br label %185

185:                                              ; preds = %181, %180
  %186 = phi float [ -3.276800e+04, %180 ], [ %184, %181 ]
  br label %187

187:                                              ; preds = %185, %174
  %188 = phi float [ 3.276700e+04, %174 ], [ %186, %185 ]
  %189 = fptosi float %188 to i16
  %190 = load ptr, ptr %8, align 8, !tbaa !5
  %191 = getelementptr inbounds ptr, ptr %190, i64 0
  %192 = load ptr, ptr %191, align 8, !tbaa !5
  %193 = load i64, ptr %10, align 8, !tbaa !9
  %194 = getelementptr inbounds i16, ptr %192, i64 %193
  store i16 %189, ptr %194, align 2, !tbaa !26
  br label %195

195:                                              ; preds = %187
  %196 = load i64, ptr %10, align 8, !tbaa !9
  %197 = add i64 %196, 1
  store i64 %197, ptr %10, align 8, !tbaa !9
  br label %163, !llvm.loop !28

198:                                              ; preds = %163
  %199 = load i32, ptr %9, align 4, !tbaa !11
  %200 = icmp eq i32 %199, 1
  br i1 %200, label %201, label %260

201:                                              ; preds = %198
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %202

202:                                              ; preds = %256, %201
  %203 = load i64, ptr %10, align 8, !tbaa !9
  %204 = load i64, ptr %38, align 8, !tbaa !9
  %205 = icmp ult i64 %203, %204
  br i1 %205, label %206, label %259

206:                                              ; preds = %202
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %207

207:                                              ; preds = %252, %206
  %208 = load i64, ptr %11, align 8, !tbaa !9
  %209 = load ptr, ptr %5, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %209, i32 0, i32 1
  %211 = load i64, ptr %210, align 8, !tbaa !19
  %212 = icmp ult i64 %208, %211
  br i1 %212, label %213, label %255

213:                                              ; preds = %207
  %214 = load ptr, ptr %5, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %214, i32 0, i32 48
  %216 = load i64, ptr %10, align 8, !tbaa !9
  %217 = getelementptr inbounds [2 x [256 x float]], ptr %215, i64 0, i64 %216
  %218 = load i64, ptr %11, align 8, !tbaa !9
  %219 = getelementptr inbounds [256 x float], ptr %217, i64 0, i64 %218
  %220 = load float, ptr %219, align 4, !tbaa !13
  %221 = fcmp ogt float %220, 3.276700e+04
  br i1 %221, label %222, label %223

222:                                              ; preds = %213
  br label %243

223:                                              ; preds = %213
  %224 = load ptr, ptr %5, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %224, i32 0, i32 48
  %226 = load i64, ptr %10, align 8, !tbaa !9
  %227 = getelementptr inbounds [2 x [256 x float]], ptr %225, i64 0, i64 %226
  %228 = load i64, ptr %11, align 8, !tbaa !9
  %229 = getelementptr inbounds [256 x float], ptr %227, i64 0, i64 %228
  %230 = load float, ptr %229, align 4, !tbaa !13
  %231 = fcmp olt float %230, -3.276800e+04
  br i1 %231, label %232, label %233

232:                                              ; preds = %223
  br label %241

233:                                              ; preds = %223
  %234 = load ptr, ptr %5, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %234, i32 0, i32 48
  %236 = load i64, ptr %10, align 8, !tbaa !9
  %237 = getelementptr inbounds [2 x [256 x float]], ptr %235, i64 0, i64 %236
  %238 = load i64, ptr %11, align 8, !tbaa !9
  %239 = getelementptr inbounds [256 x float], ptr %237, i64 0, i64 %238
  %240 = load float, ptr %239, align 4, !tbaa !13
  br label %241

241:                                              ; preds = %233, %232
  %242 = phi float [ -3.276800e+04, %232 ], [ %240, %233 ]
  br label %243

243:                                              ; preds = %241, %222
  %244 = phi float [ 3.276700e+04, %222 ], [ %242, %241 ]
  %245 = fptosi float %244 to i16
  %246 = load ptr, ptr %37, align 8, !tbaa !5
  %247 = load i64, ptr %10, align 8, !tbaa !9
  %248 = getelementptr inbounds ptr, ptr %246, i64 %247
  %249 = load ptr, ptr %248, align 8, !tbaa !5
  %250 = load i64, ptr %11, align 8, !tbaa !9
  %251 = getelementptr inbounds i16, ptr %249, i64 %250
  store i16 %245, ptr %251, align 2, !tbaa !26
  br label %252

252:                                              ; preds = %243
  %253 = load i64, ptr %11, align 8, !tbaa !9
  %254 = add i64 %253, 1
  store i64 %254, ptr %11, align 8, !tbaa !9
  br label %207, !llvm.loop !29

255:                                              ; preds = %207
  br label %256

256:                                              ; preds = %255
  %257 = load i64, ptr %10, align 8, !tbaa !9
  %258 = add i64 %257, 1
  store i64 %258, ptr %10, align 8, !tbaa !9
  br label %202, !llvm.loop !30

259:                                              ; preds = %202
  br label %260

260:                                              ; preds = %259, %198
  store i32 1, ptr %39, align 4
  br label %870

261:                                              ; preds = %109
  %262 = load ptr, ptr %5, align 8, !tbaa !5
  %263 = getelementptr inbounds [256 x float], ptr %19, i64 0, i64 0
  %264 = load ptr, ptr %5, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %264, i32 0, i32 3
  %266 = load i64, ptr %265, align 8, !tbaa !20
  %267 = load ptr, ptr %5, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %267, i32 0, i32 4
  %269 = load i64, ptr %268, align 8, !tbaa !18
  %270 = getelementptr inbounds [256 x float], ptr %23, i64 0, i64 0
  %271 = getelementptr inbounds [129 x float], ptr %24, i64 0, i64 0
  %272 = getelementptr inbounds [129 x float], ptr %20, i64 0, i64 0
  call void @FFT(ptr noundef %262, ptr noundef %263, i64 noundef %266, i64 noundef %269, ptr noundef %270, ptr noundef %271, ptr noundef %272, ptr noundef null, i32 noundef 0, ptr noundef null, ptr noundef null)
  %273 = load ptr, ptr %5, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %273, i32 0, i32 25
  %275 = load i32, ptr %274, align 8, !tbaa !31
  %276 = icmp slt i32 %275, 50
  br i1 %276, label %277, label %298

277:                                              ; preds = %261
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %278

278:                                              ; preds = %294, %277
  %279 = load i64, ptr %10, align 8, !tbaa !9
  %280 = load ptr, ptr %5, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %280, i32 0, i32 4
  %282 = load i64, ptr %281, align 8, !tbaa !18
  %283 = icmp ult i64 %279, %282
  br i1 %283, label %284, label %297

284:                                              ; preds = %278
  %285 = load i64, ptr %10, align 8, !tbaa !9
  %286 = getelementptr inbounds [129 x float], ptr %20, i64 0, i64 %285
  %287 = load float, ptr %286, align 4, !tbaa !13
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %288, i32 0, i32 39
  %290 = load i64, ptr %10, align 8, !tbaa !9
  %291 = getelementptr inbounds [129 x float], ptr %289, i64 0, i64 %290
  %292 = load float, ptr %291, align 4, !tbaa !13
  %293 = fadd float %292, %287
  store float %293, ptr %291, align 4, !tbaa !13
  br label %294

294:                                              ; preds = %284
  %295 = load i64, ptr %10, align 8, !tbaa !9
  %296 = add i64 %295, 1
  store i64 %296, ptr %10, align 8, !tbaa !9
  br label %278, !llvm.loop !32

297:                                              ; preds = %278
  br label %298

298:                                              ; preds = %297, %261
  %299 = load ptr, ptr %5, align 8, !tbaa !5
  %300 = getelementptr inbounds [129 x float], ptr %20, i64 0, i64 0
  %301 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 0
  call void @ComputeDdBasedWienerFilter(ptr noundef %299, ptr noundef %300, ptr noundef %301)
  %302 = load ptr, ptr %5, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %302, i32 0, i32 25
  %304 = load i32, ptr %303, align 8, !tbaa !31
  %305 = icmp slt i32 %304, 50
  br i1 %305, label %306, label %413

306:                                              ; preds = %298
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %307

307:                                              ; preds = %409, %306
  %308 = load i64, ptr %10, align 8, !tbaa !9
  %309 = load ptr, ptr %5, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %309, i32 0, i32 4
  %311 = load i64, ptr %310, align 8, !tbaa !18
  %312 = icmp ult i64 %308, %311
  br i1 %312, label %313, label %412

313:                                              ; preds = %307
  %314 = load ptr, ptr %5, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %314, i32 0, i32 20
  %316 = load float, ptr %315, align 4, !tbaa !33
  %317 = load ptr, ptr %5, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %317, i32 0, i32 42
  %319 = load i64, ptr %10, align 8, !tbaa !9
  %320 = getelementptr inbounds [129 x float], ptr %318, i64 0, i64 %319
  %321 = load float, ptr %320, align 4, !tbaa !13
  %322 = fmul float %316, %321
  %323 = load ptr, ptr %5, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %323, i32 0, i32 39
  %325 = load i64, ptr %10, align 8, !tbaa !9
  %326 = getelementptr inbounds [129 x float], ptr %324, i64 0, i64 %325
  %327 = load float, ptr %326, align 4, !tbaa !13
  %328 = fadd float %327, 0x3E7AD7F2A0000000
  %329 = fdiv float %322, %328
  %330 = fsub float 1.000000e+00, %329
  %331 = load i64, ptr %10, align 8, !tbaa !9
  %332 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 %331
  store float %330, ptr %332, align 4, !tbaa !13
  %333 = load i64, ptr %10, align 8, !tbaa !9
  %334 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 %333
  %335 = load float, ptr %334, align 4, !tbaa !13
  %336 = load ptr, ptr %5, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %336, i32 0, i32 21
  %338 = load float, ptr %337, align 8, !tbaa !34
  %339 = fcmp olt float %335, %338
  br i1 %339, label %340, label %346

340:                                              ; preds = %313
  %341 = load ptr, ptr %5, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %341, i32 0, i32 21
  %343 = load float, ptr %342, align 8, !tbaa !34
  %344 = load i64, ptr %10, align 8, !tbaa !9
  %345 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 %344
  store float %343, ptr %345, align 4, !tbaa !13
  br label %346

346:                                              ; preds = %340, %313
  %347 = load i64, ptr %10, align 8, !tbaa !9
  %348 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 %347
  %349 = load float, ptr %348, align 4, !tbaa !13
  %350 = fcmp ogt float %349, 1.000000e+00
  br i1 %350, label %351, label %354

351:                                              ; preds = %346
  %352 = load i64, ptr %10, align 8, !tbaa !9
  %353 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 %352
  store float 1.000000e+00, ptr %353, align 4, !tbaa !13
  br label %354

354:                                              ; preds = %351, %346
  %355 = load ptr, ptr %5, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %355, i32 0, i32 25
  %357 = load i32, ptr %356, align 8, !tbaa !31
  %358 = sitofp i32 %357 to float
  %359 = load i64, ptr %10, align 8, !tbaa !9
  %360 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %359
  %361 = load float, ptr %360, align 4, !tbaa !13
  %362 = fmul float %361, %358
  store float %362, ptr %360, align 4, !tbaa !13
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %363, i32 0, i32 25
  %365 = load i32, ptr %364, align 8, !tbaa !31
  %366 = sub nsw i32 50, %365
  %367 = sitofp i32 %366 to float
  %368 = load i64, ptr %10, align 8, !tbaa !9
  %369 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 %368
  %370 = load float, ptr %369, align 4, !tbaa !13
  %371 = fmul float %370, %367
  store float %371, ptr %369, align 4, !tbaa !13
  %372 = load i64, ptr %10, align 8, !tbaa !9
  %373 = getelementptr inbounds [129 x float], ptr %22, i64 0, i64 %372
  %374 = load float, ptr %373, align 4, !tbaa !13
  %375 = load i64, ptr %10, align 8, !tbaa !9
  %376 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %375
  %377 = load float, ptr %376, align 4, !tbaa !13
  %378 = fadd float %377, %374
  store float %378, ptr %376, align 4, !tbaa !13
  %379 = load float, ptr %25, align 4, !tbaa !13
  %380 = load i64, ptr %10, align 8, !tbaa !9
  %381 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %380
  %382 = load float, ptr %381, align 4, !tbaa !13
  %383 = fmul float %382, %379
  store float %383, ptr %381, align 4, !tbaa !13
  %384 = load i64, ptr %10, align 8, !tbaa !9
  %385 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %384
  %386 = load float, ptr %385, align 4, !tbaa !13
  %387 = load ptr, ptr %5, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %387, i32 0, i32 17
  %389 = load i64, ptr %10, align 8, !tbaa !9
  %390 = getelementptr inbounds [129 x float], ptr %388, i64 0, i64 %389
  store float %386, ptr %390, align 4, !tbaa !13
  %391 = load ptr, ptr %5, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %391, i32 0, i32 17
  %393 = load i64, ptr %10, align 8, !tbaa !9
  %394 = getelementptr inbounds [129 x float], ptr %392, i64 0, i64 %393
  %395 = load float, ptr %394, align 4, !tbaa !13
  %396 = load i64, ptr %10, align 8, !tbaa !9
  %397 = getelementptr inbounds [256 x float], ptr %23, i64 0, i64 %396
  %398 = load float, ptr %397, align 4, !tbaa !13
  %399 = fmul float %398, %395
  store float %399, ptr %397, align 4, !tbaa !13
  %400 = load ptr, ptr %5, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %400, i32 0, i32 17
  %402 = load i64, ptr %10, align 8, !tbaa !9
  %403 = getelementptr inbounds [129 x float], ptr %401, i64 0, i64 %402
  %404 = load float, ptr %403, align 4, !tbaa !13
  %405 = load i64, ptr %10, align 8, !tbaa !9
  %406 = getelementptr inbounds [129 x float], ptr %24, i64 0, i64 %405
  %407 = load float, ptr %406, align 4, !tbaa !13
  %408 = fmul float %407, %404
  store float %408, ptr %406, align 4, !tbaa !13
  br label %409

409:                                              ; preds = %354
  %410 = load i64, ptr %10, align 8, !tbaa !9
  %411 = add i64 %410, 1
  store i64 %411, ptr %10, align 8, !tbaa !9
  br label %307, !llvm.loop !35

412:                                              ; preds = %307
  br label %480

413:                                              ; preds = %298
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %414

414:                                              ; preds = %476, %413
  %415 = load i64, ptr %10, align 8, !tbaa !9
  %416 = load ptr, ptr %5, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %416, i32 0, i32 4
  %418 = load i64, ptr %417, align 8, !tbaa !18
  %419 = icmp ult i64 %415, %418
  br i1 %419, label %420, label %479

420:                                              ; preds = %414
  %421 = load i64, ptr %10, align 8, !tbaa !9
  %422 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %421
  %423 = load float, ptr %422, align 4, !tbaa !13
  %424 = load ptr, ptr %5, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %424, i32 0, i32 21
  %426 = load float, ptr %425, align 8, !tbaa !34
  %427 = fcmp olt float %423, %426
  br i1 %427, label %428, label %434

428:                                              ; preds = %420
  %429 = load ptr, ptr %5, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %429, i32 0, i32 21
  %431 = load float, ptr %430, align 8, !tbaa !34
  %432 = load i64, ptr %10, align 8, !tbaa !9
  %433 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %432
  store float %431, ptr %433, align 4, !tbaa !13
  br label %434

434:                                              ; preds = %428, %420
  %435 = load i64, ptr %10, align 8, !tbaa !9
  %436 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %435
  %437 = load float, ptr %436, align 4, !tbaa !13
  %438 = fcmp ogt float %437, 1.000000e+00
  br i1 %438, label %439, label %449

439:                                              ; preds = %434
  %440 = load i64, ptr %10, align 8, !tbaa !9
  %441 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %440
  store float 1.000000e+00, ptr %441, align 4, !tbaa !13
  %442 = load i64, ptr %10, align 8, !tbaa !9
  %443 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %442
  %444 = load float, ptr %443, align 4, !tbaa !13
  %445 = load ptr, ptr %5, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %445, i32 0, i32 17
  %447 = load i64, ptr %10, align 8, !tbaa !9
  %448 = getelementptr inbounds [129 x float], ptr %446, i64 0, i64 %447
  store float %444, ptr %448, align 4, !tbaa !13
  br label %475

449:                                              ; preds = %434
  %450 = load i64, ptr %10, align 8, !tbaa !9
  %451 = getelementptr inbounds [129 x float], ptr %21, i64 0, i64 %450
  %452 = load float, ptr %451, align 4, !tbaa !13
  %453 = load ptr, ptr %5, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %453, i32 0, i32 17
  %455 = load i64, ptr %10, align 8, !tbaa !9
  %456 = getelementptr inbounds [129 x float], ptr %454, i64 0, i64 %455
  store float %452, ptr %456, align 4, !tbaa !13
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %457, i32 0, i32 17
  %459 = load i64, ptr %10, align 8, !tbaa !9
  %460 = getelementptr inbounds [129 x float], ptr %458, i64 0, i64 %459
  %461 = load float, ptr %460, align 4, !tbaa !13
  %462 = load i64, ptr %10, align 8, !tbaa !9
  %463 = getelementptr inbounds [256 x float], ptr %23, i64 0, i64 %462
  %464 = load float, ptr %463, align 4, !tbaa !13
  %465 = fmul float %464, %461
  store float %465, ptr %463, align 4, !tbaa !13
  %466 = load ptr, ptr %5, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %466, i32 0, i32 17
  %468 = load i64, ptr %10, align 8, !tbaa !9
  %469 = getelementptr inbounds [129 x float], ptr %467, i64 0, i64 %468
  %470 = load float, ptr %469, align 4, !tbaa !13
  %471 = load i64, ptr %10, align 8, !tbaa !9
  %472 = getelementptr inbounds [129 x float], ptr %24, i64 0, i64 %471
  %473 = load float, ptr %472, align 4, !tbaa !13
  %474 = fmul float %473, %470
  store float %474, ptr %472, align 4, !tbaa !13
  br label %475

475:                                              ; preds = %449, %439
  br label %476

476:                                              ; preds = %475
  %477 = load i64, ptr %10, align 8, !tbaa !9
  %478 = add i64 %477, 1
  store i64 %478, ptr %10, align 8, !tbaa !9
  br label %414, !llvm.loop !36

479:                                              ; preds = %414
  br label %480

480:                                              ; preds = %479, %412
  %481 = load ptr, ptr %5, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %481, i32 0, i32 31
  %483 = getelementptr inbounds [129 x float], ptr %482, i64 0, i64 0
  %484 = getelementptr inbounds [129 x float], ptr %20, i64 0, i64 0
  %485 = load ptr, ptr %5, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %485, i32 0, i32 4
  %487 = load i64, ptr %486, align 8, !tbaa !18
  %488 = mul i64 4, %487
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %483, ptr align 16 %484, i64 %488, i1 false)
  %489 = load ptr, ptr %5, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %489, i32 0, i32 29
  %491 = getelementptr inbounds [129 x float], ptr %490, i64 0, i64 0
  %492 = load ptr, ptr %5, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %492, i32 0, i32 28
  %494 = getelementptr inbounds [129 x float], ptr %493, i64 0, i64 0
  %495 = load ptr, ptr %5, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %495, i32 0, i32 4
  %497 = load i64, ptr %496, align 8, !tbaa !18
  %498 = mul i64 4, %497
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %491, ptr align 8 %494, i64 %498, i1 false)
  %499 = load ptr, ptr %5, align 8, !tbaa !5
  %500 = getelementptr inbounds [256 x float], ptr %23, i64 0, i64 0
  %501 = getelementptr inbounds [129 x float], ptr %24, i64 0, i64 0
  %502 = load ptr, ptr %5, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %502, i32 0, i32 4
  %504 = load i64, ptr %503, align 8, !tbaa !18
  %505 = load ptr, ptr %5, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %505, i32 0, i32 3
  %507 = load i64, ptr %506, align 8, !tbaa !20
  %508 = getelementptr inbounds [256 x float], ptr %19, i64 0, i64 0
  call void @IFFT(ptr noundef %499, ptr noundef %500, ptr noundef %501, i64 noundef %504, i64 noundef %507, ptr noundef %508)
  store float 1.000000e+00, ptr %15, align 4, !tbaa !13
  %509 = load ptr, ptr %5, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %509, i32 0, i32 22
  %511 = load i32, ptr %510, align 4, !tbaa !37
  %512 = icmp eq i32 %511, 1
  br i1 %512, label %513, label %573

513:                                              ; preds = %480
  %514 = load ptr, ptr %5, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %514, i32 0, i32 25
  %516 = load i32, ptr %515, align 8, !tbaa !31
  %517 = icmp sgt i32 %516, 200
  br i1 %517, label %518, label %573

518:                                              ; preds = %513
  store float 1.000000e+00, ptr %16, align 4, !tbaa !13
  store float 1.000000e+00, ptr %17, align 4, !tbaa !13
  %519 = getelementptr inbounds [256 x float], ptr %19, i64 0, i64 0
  %520 = load ptr, ptr %5, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %520, i32 0, i32 3
  %522 = load i64, ptr %521, align 8, !tbaa !20
  %523 = call float @Energy(ptr noundef %519, i64 noundef %522)
  store float %523, ptr %13, align 4, !tbaa !13
  %524 = load float, ptr %13, align 4, !tbaa !13
  %525 = load float, ptr %12, align 4, !tbaa !13
  %526 = fadd float %525, 0x3E7AD7F2A0000000
  %527 = fdiv float %524, %526
  %528 = fadd float %527, 0x3D71979980000000
  %529 = call float @sqrtf(float noundef %528) #6
  store float %529, ptr %14, align 4, !tbaa !13
  %530 = load float, ptr %14, align 4, !tbaa !13
  %531 = fcmp ogt float %530, 5.000000e-01
  br i1 %531, label %532, label %544

532:                                              ; preds = %518
  %533 = load float, ptr %14, align 4, !tbaa !13
  %534 = fsub float %533, 5.000000e-01
  %535 = call float @llvm.fmuladd.f32(float 0x3FF4CCCCC0000000, float %534, float 1.000000e+00)
  store float %535, ptr %16, align 4, !tbaa !13
  %536 = load float, ptr %14, align 4, !tbaa !13
  %537 = load float, ptr %16, align 4, !tbaa !13
  %538 = fmul float %536, %537
  %539 = fcmp ogt float %538, 1.000000e+00
  br i1 %539, label %540, label %543

540:                                              ; preds = %532
  %541 = load float, ptr %14, align 4, !tbaa !13
  %542 = fdiv float 1.000000e+00, %541
  store float %542, ptr %16, align 4, !tbaa !13
  br label %543

543:                                              ; preds = %540, %532
  br label %544

544:                                              ; preds = %543, %518
  %545 = load float, ptr %14, align 4, !tbaa !13
  %546 = fcmp olt float %545, 5.000000e-01
  br i1 %546, label %547, label %561

547:                                              ; preds = %544
  %548 = load float, ptr %14, align 4, !tbaa !13
  %549 = load ptr, ptr %5, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %549, i32 0, i32 21
  %551 = load float, ptr %550, align 8, !tbaa !34
  %552 = fcmp ole float %548, %551
  br i1 %552, label %553, label %557

553:                                              ; preds = %547
  %554 = load ptr, ptr %5, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %554, i32 0, i32 21
  %556 = load float, ptr %555, align 8, !tbaa !34
  store float %556, ptr %14, align 4, !tbaa !13
  br label %557

557:                                              ; preds = %553, %547
  %558 = load float, ptr %14, align 4, !tbaa !13
  %559 = fsub float 5.000000e-01, %558
  %560 = call float @llvm.fmuladd.f32(float 0xBFD3333340000000, float %559, float 1.000000e+00)
  store float %560, ptr %17, align 4, !tbaa !13
  br label %561

561:                                              ; preds = %557, %544
  %562 = load ptr, ptr %5, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %562, i32 0, i32 33
  %564 = load float, ptr %563, align 4, !tbaa !38
  %565 = load float, ptr %16, align 4, !tbaa !13
  %566 = load ptr, ptr %5, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %566, i32 0, i32 33
  %568 = load float, ptr %567, align 4, !tbaa !38
  %569 = fsub float 1.000000e+00, %568
  %570 = load float, ptr %17, align 4, !tbaa !13
  %571 = fmul float %569, %570
  %572 = call float @llvm.fmuladd.f32(float %564, float %565, float %571)
  store float %572, ptr %15, align 4, !tbaa !13
  br label %573

573:                                              ; preds = %561, %513, %480
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %574

574:                                              ; preds = %598, %573
  %575 = load i64, ptr %10, align 8, !tbaa !9
  %576 = load ptr, ptr %5, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %576, i32 0, i32 3
  %578 = load i64, ptr %577, align 8, !tbaa !20
  %579 = icmp ult i64 %575, %578
  br i1 %579, label %580, label %601

580:                                              ; preds = %574
  %581 = load float, ptr %15, align 4, !tbaa !13
  %582 = load i64, ptr %10, align 8, !tbaa !9
  %583 = getelementptr inbounds [256 x float], ptr %19, i64 0, i64 %582
  %584 = load float, ptr %583, align 4, !tbaa !13
  %585 = fmul float %581, %584
  %586 = load ptr, ptr %5, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %586, i32 0, i32 7
  %588 = load ptr, ptr %587, align 8, !tbaa !23
  %589 = load i64, ptr %10, align 8, !tbaa !9
  %590 = getelementptr inbounds float, ptr %588, i64 %589
  %591 = load float, ptr %590, align 4, !tbaa !13
  %592 = load ptr, ptr %5, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %592, i32 0, i32 10
  %594 = load i64, ptr %10, align 8, !tbaa !9
  %595 = getelementptr inbounds [256 x float], ptr %593, i64 0, i64 %594
  %596 = load float, ptr %595, align 4, !tbaa !13
  %597 = call float @llvm.fmuladd.f32(float %585, float %591, float %596)
  store float %597, ptr %595, align 4, !tbaa !13
  br label %598

598:                                              ; preds = %580
  %599 = load i64, ptr %10, align 8, !tbaa !9
  %600 = add i64 %599, 1
  store i64 %600, ptr %10, align 8, !tbaa !9
  br label %574, !llvm.loop !39

601:                                              ; preds = %574
  %602 = load ptr, ptr %5, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %602, i32 0, i32 2
  %604 = load i64, ptr %603, align 8, !tbaa !24
  store i64 %604, ptr %10, align 8, !tbaa !9
  br label %605

605:                                              ; preds = %627, %601
  %606 = load i64, ptr %10, align 8, !tbaa !9
  %607 = load ptr, ptr %5, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %607, i32 0, i32 1
  %609 = load i64, ptr %608, align 8, !tbaa !19
  %610 = load ptr, ptr %5, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %610, i32 0, i32 2
  %612 = load i64, ptr %611, align 8, !tbaa !24
  %613 = add i64 %609, %612
  %614 = icmp ult i64 %606, %613
  br i1 %614, label %615, label %630

615:                                              ; preds = %605
  %616 = load ptr, ptr %5, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %616, i32 0, i32 10
  %618 = load i64, ptr %10, align 8, !tbaa !9
  %619 = getelementptr inbounds [256 x float], ptr %617, i64 0, i64 %618
  %620 = load float, ptr %619, align 4, !tbaa !13
  %621 = load i64, ptr %10, align 8, !tbaa !9
  %622 = load ptr, ptr %5, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %622, i32 0, i32 2
  %624 = load i64, ptr %623, align 8, !tbaa !24
  %625 = sub i64 %621, %624
  %626 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %625
  store float %620, ptr %626, align 4, !tbaa !13
  br label %627

627:                                              ; preds = %615
  %628 = load i64, ptr %10, align 8, !tbaa !9
  %629 = add i64 %628, 1
  store i64 %629, ptr %10, align 8, !tbaa !9
  br label %605, !llvm.loop !40

630:                                              ; preds = %605
  %631 = load ptr, ptr %5, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %631, i32 0, i32 1
  %633 = load i64, ptr %632, align 8, !tbaa !19
  %634 = load ptr, ptr %5, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %634, i32 0, i32 3
  %636 = load i64, ptr %635, align 8, !tbaa !20
  %637 = load ptr, ptr %5, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %637, i32 0, i32 10
  %639 = getelementptr inbounds [256 x float], ptr %638, i64 0, i64 0
  call void @UpdateBuffer(ptr noundef null, i64 noundef %633, i64 noundef %636, ptr noundef %639)
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %640

640:                                              ; preds = %672, %630
  %641 = load i64, ptr %10, align 8, !tbaa !9
  %642 = load ptr, ptr %5, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %642, i32 0, i32 1
  %644 = load i64, ptr %643, align 8, !tbaa !19
  %645 = icmp ult i64 %641, %644
  br i1 %645, label %646, label %675

646:                                              ; preds = %640
  %647 = load i64, ptr %10, align 8, !tbaa !9
  %648 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %647
  %649 = load float, ptr %648, align 4, !tbaa !13
  %650 = fcmp ogt float %649, 3.276700e+04
  br i1 %650, label %651, label %652

651:                                              ; preds = %646
  br label %664

652:                                              ; preds = %646
  %653 = load i64, ptr %10, align 8, !tbaa !9
  %654 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %653
  %655 = load float, ptr %654, align 4, !tbaa !13
  %656 = fcmp olt float %655, -3.276800e+04
  br i1 %656, label %657, label %658

657:                                              ; preds = %652
  br label %662

658:                                              ; preds = %652
  %659 = load i64, ptr %10, align 8, !tbaa !9
  %660 = getelementptr inbounds [160 x float], ptr %18, i64 0, i64 %659
  %661 = load float, ptr %660, align 4, !tbaa !13
  br label %662

662:                                              ; preds = %658, %657
  %663 = phi float [ -3.276800e+04, %657 ], [ %661, %658 ]
  br label %664

664:                                              ; preds = %662, %651
  %665 = phi float [ 3.276700e+04, %651 ], [ %663, %662 ]
  %666 = fptosi float %665 to i16
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = getelementptr inbounds ptr, ptr %667, i64 0
  %669 = load ptr, ptr %668, align 8, !tbaa !5
  %670 = load i64, ptr %10, align 8, !tbaa !9
  %671 = getelementptr inbounds i16, ptr %669, i64 %670
  store i16 %666, ptr %671, align 2, !tbaa !26
  br label %672

672:                                              ; preds = %664
  %673 = load i64, ptr %10, align 8, !tbaa !9
  %674 = add i64 %673, 1
  store i64 %674, ptr %10, align 8, !tbaa !9
  br label %640, !llvm.loop !41

675:                                              ; preds = %640
  %676 = load i32, ptr %9, align 4, !tbaa !11
  %677 = icmp eq i32 %676, 1
  br i1 %677, label %678, label %869

678:                                              ; preds = %675
  store float 0.000000e+00, ptr %30, align 4, !tbaa !13
  %679 = load ptr, ptr %5, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %679, i32 0, i32 4
  %681 = load i64, ptr %680, align 8, !tbaa !18
  %682 = load i32, ptr %26, align 4, !tbaa !11
  %683 = sext i32 %682 to i64
  %684 = sub i64 %681, %683
  %685 = sub i64 %684, 1
  store i64 %685, ptr %10, align 8, !tbaa !9
  br label %686

686:                                              ; preds = %701, %678
  %687 = load i64, ptr %10, align 8, !tbaa !9
  %688 = load ptr, ptr %5, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %688, i32 0, i32 4
  %690 = load i64, ptr %689, align 8, !tbaa !18
  %691 = sub i64 %690, 1
  %692 = icmp ult i64 %687, %691
  br i1 %692, label %693, label %704

693:                                              ; preds = %686
  %694 = load ptr, ptr %5, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %694, i32 0, i32 47
  %696 = load i64, ptr %10, align 8, !tbaa !9
  %697 = getelementptr inbounds [129 x float], ptr %695, i64 0, i64 %696
  %698 = load float, ptr %697, align 4, !tbaa !13
  %699 = load float, ptr %30, align 4, !tbaa !13
  %700 = fadd float %699, %698
  store float %700, ptr %30, align 4, !tbaa !13
  br label %701

701:                                              ; preds = %693
  %702 = load i64, ptr %10, align 8, !tbaa !9
  %703 = add i64 %702, 1
  store i64 %703, ptr %10, align 8, !tbaa !9
  br label %686, !llvm.loop !42

704:                                              ; preds = %686
  %705 = load float, ptr %30, align 4, !tbaa !13
  %706 = load i32, ptr %26, align 4, !tbaa !11
  %707 = sitofp i32 %706 to float
  %708 = fdiv float %705, %707
  store float %708, ptr %30, align 4, !tbaa !13
  store float 0.000000e+00, ptr %34, align 4, !tbaa !13
  store float 0.000000e+00, ptr %35, align 4, !tbaa !13
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %709

709:                                              ; preds = %730, %704
  %710 = load i64, ptr %10, align 8, !tbaa !9
  %711 = load ptr, ptr %5, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %711, i32 0, i32 4
  %713 = load i64, ptr %712, align 8, !tbaa !18
  %714 = icmp ult i64 %710, %713
  br i1 %714, label %715, label %733

715:                                              ; preds = %709
  %716 = load ptr, ptr %5, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %716, i32 0, i32 30
  %718 = load i64, ptr %10, align 8, !tbaa !9
  %719 = getelementptr inbounds [129 x float], ptr %717, i64 0, i64 %718
  %720 = load float, ptr %719, align 4, !tbaa !13
  %721 = load float, ptr %34, align 4, !tbaa !13
  %722 = fadd float %721, %720
  store float %722, ptr %34, align 4, !tbaa !13
  %723 = load ptr, ptr %5, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %723, i32 0, i32 31
  %725 = load i64, ptr %10, align 8, !tbaa !9
  %726 = getelementptr inbounds [129 x float], ptr %724, i64 0, i64 %725
  %727 = load float, ptr %726, align 4, !tbaa !13
  %728 = load float, ptr %35, align 4, !tbaa !13
  %729 = fadd float %728, %727
  store float %729, ptr %35, align 4, !tbaa !13
  br label %730

730:                                              ; preds = %715
  %731 = load i64, ptr %10, align 8, !tbaa !9
  %732 = add i64 %731, 1
  store i64 %732, ptr %10, align 8, !tbaa !9
  br label %709, !llvm.loop !43

733:                                              ; preds = %709
  %734 = load float, ptr %35, align 4, !tbaa !13
  %735 = load float, ptr %34, align 4, !tbaa !13
  %736 = fdiv float %734, %735
  %737 = load float, ptr %30, align 4, !tbaa !13
  %738 = fmul float %737, %736
  store float %738, ptr %30, align 4, !tbaa !13
  store float 0.000000e+00, ptr %32, align 4, !tbaa !13
  %739 = load ptr, ptr %5, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %739, i32 0, i32 4
  %741 = load i64, ptr %740, align 8, !tbaa !18
  %742 = load i32, ptr %27, align 4, !tbaa !11
  %743 = sext i32 %742 to i64
  %744 = sub i64 %741, %743
  %745 = sub i64 %744, 1
  store i64 %745, ptr %10, align 8, !tbaa !9
  br label %746

746:                                              ; preds = %761, %733
  %747 = load i64, ptr %10, align 8, !tbaa !9
  %748 = load ptr, ptr %5, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %748, i32 0, i32 4
  %750 = load i64, ptr %749, align 8, !tbaa !18
  %751 = sub i64 %750, 1
  %752 = icmp ult i64 %747, %751
  br i1 %752, label %753, label %764

753:                                              ; preds = %746
  %754 = load ptr, ptr %5, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %754, i32 0, i32 17
  %756 = load i64, ptr %10, align 8, !tbaa !9
  %757 = getelementptr inbounds [129 x float], ptr %755, i64 0, i64 %756
  %758 = load float, ptr %757, align 4, !tbaa !13
  %759 = load float, ptr %32, align 4, !tbaa !13
  %760 = fadd float %759, %758
  store float %760, ptr %32, align 4, !tbaa !13
  br label %761

761:                                              ; preds = %753
  %762 = load i64, ptr %10, align 8, !tbaa !9
  %763 = add i64 %762, 1
  store i64 %763, ptr %10, align 8, !tbaa !9
  br label %746, !llvm.loop !44

764:                                              ; preds = %746
  %765 = load float, ptr %32, align 4, !tbaa !13
  %766 = load i32, ptr %27, align 4, !tbaa !11
  %767 = sitofp i32 %766 to float
  %768 = fdiv float %765, %767
  store float %768, ptr %32, align 4, !tbaa !13
  %769 = load float, ptr %30, align 4, !tbaa !13
  %770 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %769, float -1.000000e+00)
  store float %770, ptr %31, align 4, !tbaa !13
  %771 = load float, ptr %29, align 4, !tbaa !13
  %772 = load float, ptr %31, align 4, !tbaa !13
  %773 = fmul float %771, %772
  %774 = call float @tanhf(float noundef %773) #6
  %775 = call float @llvm.fmuladd.f32(float 5.000000e-01, float %774, float 5.000000e-01)
  store float %775, ptr %33, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  %776 = load float, ptr %33, align 4, !tbaa !13
  %777 = load float, ptr %32, align 4, !tbaa !13
  %778 = fadd float %776, %777
  %779 = fmul float 5.000000e-01, %778
  store float %779, ptr %40, align 4, !tbaa !13
  %780 = load float, ptr %30, align 4, !tbaa !13
  %781 = fcmp oge float %780, 5.000000e-01
  br i1 %781, label %782, label %787

782:                                              ; preds = %764
  %783 = load float, ptr %33, align 4, !tbaa !13
  %784 = load float, ptr %32, align 4, !tbaa !13
  %785 = fmul float 7.500000e-01, %784
  %786 = call float @llvm.fmuladd.f32(float 2.500000e-01, float %783, float %785)
  store float %786, ptr %40, align 4, !tbaa !13
  br label %787

787:                                              ; preds = %782, %764
  %788 = load float, ptr %40, align 4, !tbaa !13
  %789 = load float, ptr %28, align 4, !tbaa !13
  %790 = fmul float %788, %789
  store float %790, ptr %40, align 4, !tbaa !13
  %791 = load float, ptr %40, align 4, !tbaa !13
  %792 = load ptr, ptr %5, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %792, i32 0, i32 21
  %794 = load float, ptr %793, align 8, !tbaa !34
  %795 = fcmp olt float %791, %794
  br i1 %795, label %796, label %800

796:                                              ; preds = %787
  %797 = load ptr, ptr %5, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %797, i32 0, i32 21
  %799 = load float, ptr %798, align 8, !tbaa !34
  store float %799, ptr %40, align 4, !tbaa !13
  br label %800

800:                                              ; preds = %796, %787
  %801 = load float, ptr %40, align 4, !tbaa !13
  %802 = fcmp ogt float %801, 1.000000e+00
  br i1 %802, label %803, label %804

803:                                              ; preds = %800
  store float 1.000000e+00, ptr %40, align 4, !tbaa !13
  br label %804

804:                                              ; preds = %803, %800
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %805

805:                                              ; preds = %865, %804
  %806 = load i64, ptr %10, align 8, !tbaa !9
  %807 = load i64, ptr %38, align 8, !tbaa !9
  %808 = icmp ult i64 %806, %807
  br i1 %808, label %809, label %868

809:                                              ; preds = %805
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %810

810:                                              ; preds = %861, %809
  %811 = load i64, ptr %11, align 8, !tbaa !9
  %812 = load ptr, ptr %5, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %812, i32 0, i32 1
  %814 = load i64, ptr %813, align 8, !tbaa !19
  %815 = icmp ult i64 %811, %814
  br i1 %815, label %816, label %864

816:                                              ; preds = %810
  %817 = load float, ptr %40, align 4, !tbaa !13
  %818 = load ptr, ptr %5, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %818, i32 0, i32 48
  %820 = load i64, ptr %10, align 8, !tbaa !9
  %821 = getelementptr inbounds [2 x [256 x float]], ptr %819, i64 0, i64 %820
  %822 = load i64, ptr %11, align 8, !tbaa !9
  %823 = getelementptr inbounds [256 x float], ptr %821, i64 0, i64 %822
  %824 = load float, ptr %823, align 4, !tbaa !13
  %825 = fmul float %817, %824
  %826 = fcmp ogt float %825, 3.276700e+04
  br i1 %826, label %827, label %828

827:                                              ; preds = %816
  br label %852

828:                                              ; preds = %816
  %829 = load float, ptr %40, align 4, !tbaa !13
  %830 = load ptr, ptr %5, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %830, i32 0, i32 48
  %832 = load i64, ptr %10, align 8, !tbaa !9
  %833 = getelementptr inbounds [2 x [256 x float]], ptr %831, i64 0, i64 %832
  %834 = load i64, ptr %11, align 8, !tbaa !9
  %835 = getelementptr inbounds [256 x float], ptr %833, i64 0, i64 %834
  %836 = load float, ptr %835, align 4, !tbaa !13
  %837 = fmul float %829, %836
  %838 = fcmp olt float %837, -3.276800e+04
  br i1 %838, label %839, label %840

839:                                              ; preds = %828
  br label %850

840:                                              ; preds = %828
  %841 = load float, ptr %40, align 4, !tbaa !13
  %842 = load ptr, ptr %5, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.NoiseSuppressionC_, ptr %842, i32 0, i32 48
  %844 = load i64, ptr %10, align 8, !tbaa !9
  %845 = getelementptr inbounds [2 x [256 x float]], ptr %843, i64 0, i64 %844
  %846 = load i64, ptr %11, align 8, !tbaa !9
  %847 = getelementptr inbounds [256 x float], ptr %845, i64 0, i64 %846
  %848 = load float, ptr %847, align 4, !tbaa !13
  %849 = fmul float %841, %848
  br label %850

850:                                              ; preds = %840, %839
  %851 = phi float [ -3.276800e+04, %839 ], [ %849, %840 ]
  br label %852

852:                                              ; preds = %850, %827
  %853 = phi float [ 3.276700e+04, %827 ], [ %851, %850 ]
  %854 = fptosi float %853 to i16
  %855 = load ptr, ptr %37, align 8, !tbaa !5
  %856 = load i64, ptr %10, align 8, !tbaa !9
  %857 = getelementptr inbounds ptr, ptr %855, i64 %856
  %858 = load ptr, ptr %857, align 8, !tbaa !5
  %859 = load i64, ptr %11, align 8, !tbaa !9
  %860 = getelementptr inbounds i16, ptr %858, i64 %859
  store i16 %854, ptr %860, align 2, !tbaa !26
  br label %861

861:                                              ; preds = %852
  %862 = load i64, ptr %11, align 8, !tbaa !9
  %863 = add i64 %862, 1
  store i64 %863, ptr %11, align 8, !tbaa !9
  br label %810, !llvm.loop !45

864:                                              ; preds = %810
  br label %865

865:                                              ; preds = %864
  %866 = load i64, ptr %10, align 8, !tbaa !9
  %867 = add i64 %866, 1
  store i64 %867, ptr %10, align 8, !tbaa !9
  br label %805, !llvm.loop !46

868:                                              ; preds = %805
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  br label %869

869:                                              ; preds = %868, %675
  store i32 0, ptr %39, align 4
  br label %870

870:                                              ; preds = %869, %260
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  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 516, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 1024, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 516, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 1024, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 640, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  %871 = load i32, ptr %39, align 4
  switch i32 %871, label %873 [
    i32 0, label %872
    i32 1, label %872
  ]

872:                                              ; preds = %870, %870
  ret void

873:                                              ; preds = %870
  unreachable
}

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

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

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

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

; Function Attrs: nounwind
declare float @tanhf(float noundef) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!16, !12, i64 3128}
!16 = !{!"NoiseSuppressionC_", !12, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !14, i64 40, !12, i64 44, !6, i64 48, !7, i64 56, !7, i64 1080, !7, i64 2104, !12, i64 3128, !7, i64 3132, !7, i64 4680, !7, i64 6228, !7, i64 6744, !12, i64 6756, !7, i64 6760, !7, i64 7276, !7, i64 7792, !14, i64 8308, !14, i64 8312, !12, i64 8316, !7, i64 8320, !7, i64 9344, !12, i64 9856, !7, i64 9860, !7, i64 9876, !7, i64 9904, !7, i64 10420, !7, i64 10936, !7, i64 11452, !7, i64 11968, !14, i64 12484, !7, i64 12488, !7, i64 12516, !14, i64 13032, !14, i64 13036, !14, i64 13040, !7, i64 13044, !14, i64 13560, !14, i64 13564, !7, i64 13568, !17, i64 14084, !7, i64 14164, !7, i64 18164, !7, i64 22164, !7, i64 26164, !7, i64 26680}
!17 = !{!"NSParaExtract_", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !14, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !12, i64 72, !12, i64 76}
!18 = !{!16, !10, i64 32}
!19 = !{!16, !10, i64 8}
!20 = !{!16, !10, i64 24}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!16, !6, i64 48}
!24 = !{!16, !10, i64 16}
!25 = distinct !{!25, !22}
!26 = !{!27, !27, i64 0}
!27 = !{!"short", !7, i64 0}
!28 = distinct !{!28, !22}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = !{!16, !12, i64 9856}
!32 = distinct !{!32, !22}
!33 = !{!16, !14, i64 8308}
!34 = !{!16, !14, i64 8312}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !22}
!37 = !{!16, !12, i64 8316}
!38 = !{!16, !14, i64 12484}
!39 = distinct !{!39, !22}
!40 = distinct !{!40, !22}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !22}
!43 = distinct !{!43, !22}
!44 = distinct !{!44, !22}
!45 = distinct !{!45, !22}
!46 = distinct !{!46, !22}


; 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_ProcessCore = external hidden unnamed_addr constant [97 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [36 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

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

; 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 #2

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

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

; Function Attrs: nounwind uwtable
define dso_local void @WebRtcNs_ProcessCore(ptr noundef %0, ptr nocapture noundef readonly %1, i64 noundef %2, ptr nocapture noundef readonly %3) local_unnamed_addr #2 {
  %5 = alloca [160 x float], align 16
  %6 = alloca [256 x float], align 16
  %7 = alloca [129 x float], align 16
  %8 = alloca [129 x float], align 16
  %9 = alloca [256 x float], align 16
  %10 = alloca [129 x float], align 16
  call void @llvm.lifetime.start.p0(i64 640, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 1024, 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 1024, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %10) #7
  %11 = getelementptr inbounds i8, ptr %0, i64 3128
  %12 = load i32, ptr %11, align 8, !tbaa !5
  %13 = icmp eq i32 %12, 1
  br i1 %13, label %15, label %14

14:                                               ; preds = %4
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1897, ptr noundef nonnull @__PRETTY_FUNCTION__.WebRtcNs_ProcessCore) #8
  unreachable

15:                                               ; preds = %4
  %16 = add i64 %2, -1
  %17 = icmp ult i64 %16, 3
  br i1 %17, label %19, label %18

18:                                               ; preds = %15
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 1898, ptr noundef nonnull @__PRETTY_FUNCTION__.WebRtcNs_ProcessCore) #8
  unreachable

19:                                               ; preds = %15
  %20 = icmp ugt i64 %2, 1
  br i1 %20, label %21, label %28

21:                                               ; preds = %19
  %22 = getelementptr inbounds i8, ptr %1, i64 8
  %23 = getelementptr inbounds i8, ptr %3, i64 8
  %24 = getelementptr inbounds i8, ptr %0, i64 32
  %25 = load i64, ptr %24, align 8, !tbaa !14
  %26 = trunc i64 %25 to i32
  %27 = sdiv i32 %26, 4
  br label %28

28:                                               ; preds = %21, %19
  %.0267 = phi i32 [ %27, %21 ], [ 1, %19 ]
  %.0255 = phi ptr [ %22, %21 ], [ null, %19 ]
  %.0254 = phi ptr [ %23, %21 ], [ null, %19 ]
  %29 = load ptr, ptr %1, align 8, !tbaa !15
  %30 = getelementptr inbounds i8, ptr %0, i64 8
  %31 = load i64, ptr %30, align 8, !tbaa !16
  %32 = getelementptr inbounds i8, ptr %0, i64 24
  %33 = load i64, ptr %32, align 8, !tbaa !17
  %34 = getelementptr inbounds i8, ptr %0, i64 1080
  tail call void @UpdateBuffer(ptr noundef %29, i64 noundef %31, i64 noundef %33, ptr noundef nonnull %34)
  br i1 %20, label %.lr.ph, label %.loopexit295

.lr.ph:                                           ; preds = %28
  %35 = getelementptr inbounds i8, ptr %0, i64 26680
  br label %36

36:                                               ; preds = %.lr.ph, %36
  %.0260300 = phi i64 [ 0, %.lr.ph ], [ %42, %36 ]
  %37 = getelementptr inbounds ptr, ptr %.0255, i64 %.0260300
  %38 = load ptr, ptr %37, align 8, !tbaa !15
  %39 = load i64, ptr %30, align 8, !tbaa !16
  %40 = load i64, ptr %32, align 8, !tbaa !17
  %41 = getelementptr inbounds [2 x [256 x float]], ptr %35, i64 0, i64 %.0260300
  tail call void @UpdateBuffer(ptr noundef %38, i64 noundef %39, i64 noundef %40, ptr noundef nonnull %41)
  %42 = add nuw i64 %.0260300, 1
  %exitcond.not = icmp eq i64 %42, %16
  br i1 %exitcond.not, label %.loopexit295, label %36, !llvm.loop !18

.loopexit295:                                     ; preds = %36, %28
  %43 = getelementptr inbounds i8, ptr %0, i64 48
  %44 = load ptr, ptr %43, align 8, !tbaa !20
  %45 = load i64, ptr %32, align 8, !tbaa !17
  %46 = call float @WindowingEnergy(ptr noundef %44, ptr noundef nonnull %34, i64 noundef %45, ptr noundef nonnull %6)
  %47 = fcmp oeq float %46, 0.000000e+00
  br i1 %47, label %48, label %129

48:                                               ; preds = %.loopexit295
  %49 = getelementptr inbounds i8, ptr %0, i64 16
  %50 = load i64, ptr %49, align 8, !tbaa !21
  %51 = load i64, ptr %30, align 8, !tbaa !16
  %52 = add i64 %51, %50
  %53 = icmp ult i64 %50, %52
  br i1 %53, label %.lr.ph345, label %._crit_edge346

.lr.ph345:                                        ; preds = %48
  %54 = shl i64 %50, 2
  %55 = getelementptr i8, ptr %0, i64 %54
  %scevgep382 = getelementptr i8, ptr %55, i64 2104
  %56 = shl nuw i64 %51, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %5, ptr align 4 %scevgep382, i64 %56, i1 false), !tbaa !22
  br label %._crit_edge346

._crit_edge346:                                   ; preds = %.lr.ph345, %48
  %57 = load i64, ptr %32, align 8, !tbaa !17
  %58 = getelementptr inbounds i8, ptr %0, i64 2104
  call void @UpdateBuffer(ptr noundef null, i64 noundef %51, i64 noundef %57, ptr noundef nonnull %58)
  %59 = load i64, ptr %30, align 8, !tbaa !16
  %.not365 = icmp eq i64 %59, 0
  br i1 %.not365, label %.loopexit, label %.lr.ph350

.lr.ph350:                                        ; preds = %._crit_edge346
  %60 = load ptr, ptr %3, align 8, !tbaa !15
  %min.iters.check459 = icmp ult i64 %59, 8
  br i1 %min.iters.check459, label %scalar.ph458.preheader, label %vector.ph460

vector.ph460:                                     ; preds = %.lr.ph350
  %n.vec462 = and i64 %59, -8
  br label %vector.body464

vector.body464:                                   ; preds = %vector.body464, %vector.ph460
  %index465 = phi i64 [ 0, %vector.ph460 ], [ %index.next472, %vector.body464 ]
  %61 = getelementptr inbounds [160 x float], ptr %5, i64 0, i64 %index465
  %62 = getelementptr inbounds i8, ptr %61, i64 16
  %wide.load466 = load <4 x float>, ptr %61, align 16, !tbaa !22
  %wide.load467 = load <4 x float>, ptr %62, align 16, !tbaa !22
  %63 = fcmp ule <4 x float> %wide.load466, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %64 = fcmp ule <4 x float> %wide.load467, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %65 = fcmp olt <4 x float> %wide.load466, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %66 = fcmp olt <4 x float> %wide.load467, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %67 = xor <4 x i1> %65, <i1 true, i1 true, i1 true, i1 true>
  %68 = xor <4 x i1> %66, <i1 true, i1 true, i1 true, i1 true>
  %69 = and <4 x i1> %63, %67
  %70 = and <4 x i1> %64, %68
  %71 = and <4 x i1> %63, %65
  %72 = and <4 x i1> %64, %66
  %73 = fptosi <4 x float> %wide.load466 to <4 x i16>
  %74 = fptosi <4 x float> %wide.load467 to <4 x i16>
  %75 = select <4 x i1> %69, <4 x i16> %73, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %76 = select <4 x i1> %70, <4 x i16> %74, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %77 = select <4 x i1> %71, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %75
  %78 = select <4 x i1> %72, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %76
  %79 = getelementptr inbounds i16, ptr %60, i64 %index465
  %80 = getelementptr inbounds i8, ptr %79, i64 8
  store <4 x i16> %77, ptr %79, align 2, !tbaa !23
  store <4 x i16> %78, ptr %80, align 2, !tbaa !23
  %index.next472 = add nuw i64 %index465, 8
  %81 = icmp eq i64 %index.next472, %n.vec462
  br i1 %81, label %middle.block457, label %vector.body464, !llvm.loop !25

middle.block457:                                  ; preds = %vector.body464
  %cmp.n473 = icmp eq i64 %59, %n.vec462
  br i1 %cmp.n473, label %._crit_edge351, label %scalar.ph458.preheader

scalar.ph458.preheader:                           ; preds = %middle.block457, %.lr.ph350
  %.2262348.ph = phi i64 [ 0, %.lr.ph350 ], [ %n.vec462, %middle.block457 ]
  br label %scalar.ph458

scalar.ph458:                                     ; preds = %scalar.ph458.preheader, %88
  %.2262348 = phi i64 [ %92, %88 ], [ %.2262348.ph, %scalar.ph458.preheader ]
  %82 = getelementptr inbounds [160 x float], ptr %5, i64 0, i64 %.2262348
  %83 = load float, ptr %82, align 4, !tbaa !22
  %84 = fcmp ogt float %83, 3.276700e+04
  br i1 %84, label %88, label %85

85:                                               ; preds = %scalar.ph458
  %86 = fcmp olt float %83, -3.276800e+04
  br i1 %86, label %88, label %87

87:                                               ; preds = %85
  br label %88

88:                                               ; preds = %87, %85, %scalar.ph458
  %89 = phi float [ 3.276700e+04, %scalar.ph458 ], [ %83, %87 ], [ -3.276800e+04, %85 ]
  %90 = fptosi float %89 to i16
  %91 = getelementptr inbounds i16, ptr %60, i64 %.2262348
  store i16 %90, ptr %91, align 2, !tbaa !23
  %92 = add nuw i64 %.2262348, 1
  %exitcond383.not = icmp eq i64 %92, %59
  br i1 %exitcond383.not, label %._crit_edge351, label %scalar.ph458, !llvm.loop !28

._crit_edge351:                                   ; preds = %88, %middle.block457
  br i1 %20, label %.preheader.us.preheader, label %.loopexit

.preheader.us.preheader:                          ; preds = %._crit_edge351
  %93 = getelementptr inbounds i8, ptr %0, i64 26680
  %min.iters.check476 = icmp ult i64 %59, 8
  %n.vec479 = and i64 %59, -8
  %cmp.n490 = icmp eq i64 %59, %n.vec479
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge355.us
  %.3356.us = phi i64 [ %128, %._crit_edge355.us ], [ 0, %.preheader.us.preheader ]
  %94 = getelementptr inbounds ptr, ptr %.0254, i64 %.3356.us
  %95 = load ptr, ptr %94, align 8, !tbaa !15
  br i1 %min.iters.check476, label %scalar.ph475.preheader, label %vector.body481

vector.body481:                                   ; preds = %.preheader.us, %vector.body481
  %index482 = phi i64 [ %index.next489, %vector.body481 ], [ 0, %.preheader.us ]
  %96 = getelementptr inbounds [2 x [256 x float]], ptr %93, i64 0, i64 %.3356.us, i64 %index482
  %97 = getelementptr inbounds i8, ptr %96, i64 16
  %wide.load483 = load <4 x float>, ptr %96, align 4, !tbaa !22
  %wide.load484 = load <4 x float>, ptr %97, align 4, !tbaa !22
  %98 = fcmp ule <4 x float> %wide.load483, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %99 = fcmp ule <4 x float> %wide.load484, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %100 = fcmp olt <4 x float> %wide.load483, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %101 = fcmp olt <4 x float> %wide.load484, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %102 = xor <4 x i1> %100, <i1 true, i1 true, i1 true, i1 true>
  %103 = xor <4 x i1> %101, <i1 true, i1 true, i1 true, i1 true>
  %104 = and <4 x i1> %98, %102
  %105 = and <4 x i1> %99, %103
  %106 = and <4 x i1> %98, %100
  %107 = and <4 x i1> %99, %101
  %108 = fptosi <4 x float> %wide.load483 to <4 x i16>
  %109 = fptosi <4 x float> %wide.load484 to <4 x i16>
  %110 = select <4 x i1> %104, <4 x i16> %108, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %111 = select <4 x i1> %105, <4 x i16> %109, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %112 = select <4 x i1> %106, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %110
  %113 = select <4 x i1> %107, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %111
  %114 = getelementptr inbounds i16, ptr %95, i64 %index482
  %115 = getelementptr inbounds i8, ptr %114, i64 8
  store <4 x i16> %112, ptr %114, align 2, !tbaa !23
  store <4 x i16> %113, ptr %115, align 2, !tbaa !23
  %index.next489 = add nuw i64 %index482, 8
  %116 = icmp eq i64 %index.next489, %n.vec479
  br i1 %116, label %middle.block474, label %vector.body481, !llvm.loop !29

middle.block474:                                  ; preds = %vector.body481
  br i1 %cmp.n490, label %._crit_edge355.us, label %scalar.ph475.preheader

scalar.ph475.preheader:                           ; preds = %middle.block474, %.preheader.us
  %.0264353.us.ph = phi i64 [ 0, %.preheader.us ], [ %n.vec479, %middle.block474 ]
  br label %scalar.ph475

scalar.ph475:                                     ; preds = %scalar.ph475.preheader, %123
  %.0264353.us = phi i64 [ %127, %123 ], [ %.0264353.us.ph, %scalar.ph475.preheader ]
  %117 = getelementptr inbounds [2 x [256 x float]], ptr %93, i64 0, i64 %.3356.us, i64 %.0264353.us
  %118 = load float, ptr %117, align 4, !tbaa !22
  %119 = fcmp ogt float %118, 3.276700e+04
  br i1 %119, label %123, label %120

120:                                              ; preds = %scalar.ph475
  %121 = fcmp olt float %118, -3.276800e+04
  br i1 %121, label %123, label %122

122:                                              ; preds = %120
  br label %123

123:                                              ; preds = %122, %120, %scalar.ph475
  %124 = phi float [ 3.276700e+04, %scalar.ph475 ], [ %118, %122 ], [ -3.276800e+04, %120 ]
  %125 = fptosi float %124 to i16
  %126 = getelementptr inbounds i16, ptr %95, i64 %.0264353.us
  store i16 %125, ptr %126, align 2, !tbaa !23
  %127 = add nuw i64 %.0264353.us, 1
  %exitcond384.not = icmp eq i64 %127, %59
  br i1 %exitcond384.not, label %._crit_edge355.us, label %scalar.ph475, !llvm.loop !30

._crit_edge355.us:                                ; preds = %123, %middle.block474
  %128 = add nuw nsw i64 %.3356.us, 1
  %exitcond385.not = icmp eq i64 %128, %16
  br i1 %exitcond385.not, label %.loopexit, label %.preheader.us, !llvm.loop !31

129:                                              ; preds = %.loopexit295
  %130 = load i64, ptr %32, align 8, !tbaa !17
  %131 = getelementptr inbounds i8, ptr %0, i64 32
  %132 = load i64, ptr %131, align 8, !tbaa !14
  call void @FFT(ptr noundef nonnull %0, ptr noundef nonnull %6, i64 noundef %130, i64 noundef %132, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %7, ptr noundef null, i32 noundef 0, ptr noundef null, ptr noundef null)
  %133 = getelementptr inbounds i8, ptr %0, i64 9856
  %134 = load i32, ptr %133, align 8, !tbaa !32
  %135 = icmp slt i32 %134, 50
  br i1 %135, label %.preheader292, label %.loopexit293

.preheader292:                                    ; preds = %129
  %136 = load i64, ptr %131, align 8, !tbaa !14
  %.not = icmp eq i64 %136, 0
  br i1 %.not, label %.loopexit293, label %.lr.ph302

.lr.ph302:                                        ; preds = %.preheader292
  %137 = getelementptr inbounds i8, ptr %0, i64 13044
  %min.iters.check = icmp ult i64 %136, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph302
  %n.vec = and i64 %136, -8
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %138 = getelementptr inbounds [129 x float], ptr %7, i64 0, i64 %index
  %139 = getelementptr inbounds i8, ptr %138, i64 16
  %wide.load = load <4 x float>, ptr %138, align 16, !tbaa !22
  %wide.load396 = load <4 x float>, ptr %139, align 16, !tbaa !22
  %140 = getelementptr inbounds [129 x float], ptr %137, i64 0, i64 %index
  %141 = getelementptr inbounds i8, ptr %140, i64 16
  %wide.load397 = load <4 x float>, ptr %140, align 4, !tbaa !22
  %wide.load398 = load <4 x float>, ptr %141, align 4, !tbaa !22
  %142 = fadd <4 x float> %wide.load, %wide.load397
  %143 = fadd <4 x float> %wide.load396, %wide.load398
  store <4 x float> %142, ptr %140, align 4, !tbaa !22
  store <4 x float> %143, ptr %141, align 4, !tbaa !22
  %index.next = add nuw i64 %index, 8
  %144 = icmp eq i64 %index.next, %n.vec
  br i1 %144, label %middle.block, label %vector.body, !llvm.loop !33

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %136, %n.vec
  br i1 %cmp.n, label %.loopexit293, label %scalar.ph.preheader

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

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.4301 = phi i64 [ %150, %scalar.ph ], [ %.4301.ph, %scalar.ph.preheader ]
  %145 = getelementptr inbounds [129 x float], ptr %7, i64 0, i64 %.4301
  %146 = load float, ptr %145, align 4, !tbaa !22
  %147 = getelementptr inbounds [129 x float], ptr %137, i64 0, i64 %.4301
  %148 = load float, ptr %147, align 4, !tbaa !22
  %149 = fadd float %146, %148
  store float %149, ptr %147, align 4, !tbaa !22
  %150 = add nuw i64 %.4301, 1
  %exitcond374.not = icmp eq i64 %150, %136
  br i1 %exitcond374.not, label %.loopexit293, label %scalar.ph, !llvm.loop !34

.loopexit293:                                     ; preds = %scalar.ph, %middle.block, %.preheader292, %129
  call void @ComputeDdBasedWienerFilter(ptr noundef nonnull %0, ptr noundef nonnull %7, ptr noundef nonnull %8)
  %151 = load i32, ptr %133, align 8, !tbaa !32
  %152 = icmp slt i32 %151, 50
  %153 = load i64, ptr %131, align 8, !tbaa !14
  %.not359 = icmp eq i64 %153, 0
  br i1 %152, label %.preheader288, label %.preheader290

.preheader290:                                    ; preds = %.loopexit293
  br i1 %.not359, label %.loopexit289, label %.lr.ph304

.lr.ph304:                                        ; preds = %.preheader290
  %154 = getelementptr inbounds i8, ptr %0, i64 8312
  %155 = getelementptr inbounds i8, ptr %0, i64 6760
  br label %193

.preheader288:                                    ; preds = %.loopexit293
  br i1 %.not359, label %.loopexit289, label %.lr.ph306

.lr.ph306:                                        ; preds = %.preheader288
  %156 = getelementptr inbounds i8, ptr %0, i64 8308
  %157 = getelementptr inbounds i8, ptr %0, i64 13568
  %158 = getelementptr inbounds i8, ptr %0, i64 13044
  %159 = getelementptr inbounds i8, ptr %0, i64 8312
  %160 = sitofp i32 %151 to float
  %161 = sub nsw i32 50, %151
  %162 = uitofp nneg i32 %161 to float
  %163 = getelementptr inbounds i8, ptr %0, i64 6760
  br label %164

164:                                              ; preds = %.lr.ph306, %164
  %.5305 = phi i64 [ 0, %.lr.ph306 ], [ %192, %164 ]
  %165 = load float, ptr %156, align 4, !tbaa !35
  %166 = getelementptr inbounds [129 x float], ptr %157, i64 0, i64 %.5305
  %167 = load float, ptr %166, align 4, !tbaa !22
  %168 = fmul float %165, %167
  %169 = getelementptr inbounds [129 x float], ptr %158, i64 0, i64 %.5305
  %170 = load float, ptr %169, align 4, !tbaa !22
  %171 = fadd float %170, 0x3E7AD7F2A0000000
  %172 = fdiv float %168, %171
  %173 = fsub float 1.000000e+00, %172
  %174 = load float, ptr %159, align 8, !tbaa !36
  %175 = fcmp olt float %173, %174
  %176 = select i1 %175, float %174, float %173
  %177 = fcmp ogt float %176, 1.000000e+00
  %simplifycfg.merge = select i1 %175, float %174, float %173
  %178 = select i1 %177, float 1.000000e+00, float %simplifycfg.merge
  %179 = getelementptr inbounds [129 x float], ptr %8, i64 0, i64 %.5305
  %180 = load float, ptr %179, align 4, !tbaa !22
  %181 = fmul float %180, %160
  %182 = fmul float %178, %162
  %183 = fadd float %181, %182
  %184 = fmul float %183, 0x3F947AE140000000
  store float %184, ptr %179, align 4, !tbaa !22
  %185 = getelementptr inbounds [129 x float], ptr %163, i64 0, i64 %.5305
  store float %184, ptr %185, align 4, !tbaa !22
  %186 = getelementptr inbounds [256 x float], ptr %9, i64 0, i64 %.5305
  %187 = load float, ptr %186, align 4, !tbaa !22
  %188 = fmul float %184, %187
  store float %188, ptr %186, align 4, !tbaa !22
  %189 = getelementptr inbounds [129 x float], ptr %10, i64 0, i64 %.5305
  %190 = load float, ptr %189, align 4, !tbaa !22
  %191 = fmul float %184, %190
  store float %191, ptr %189, align 4, !tbaa !22
  %192 = add nuw i64 %.5305, 1
  %exitcond376.not = icmp eq i64 %192, %153
  br i1 %exitcond376.not, label %.loopexit289, label %164, !llvm.loop !37

193:                                              ; preds = %.lr.ph304, %212
  %.6303 = phi i64 [ 0, %.lr.ph304 ], [ %213, %212 ]
  %194 = getelementptr inbounds [129 x float], ptr %8, i64 0, i64 %.6303
  %195 = load float, ptr %194, align 4, !tbaa !22
  %196 = load float, ptr %154, align 8, !tbaa !36
  %197 = fcmp olt float %195, %196
  br i1 %197, label %198, label %199

198:                                              ; preds = %193
  store float %196, ptr %194, align 4, !tbaa !22
  br label %199

199:                                              ; preds = %198, %193
  %200 = phi float [ %196, %198 ], [ %195, %193 ]
  %201 = fcmp ogt float %200, 1.000000e+00
  br i1 %201, label %202, label %204

202:                                              ; preds = %199
  store float 1.000000e+00, ptr %194, align 4, !tbaa !22
  %203 = getelementptr inbounds [129 x float], ptr %155, i64 0, i64 %.6303
  store float 1.000000e+00, ptr %203, align 4, !tbaa !22
  br label %212

204:                                              ; preds = %199
  %205 = getelementptr inbounds [129 x float], ptr %155, i64 0, i64 %.6303
  store float %200, ptr %205, align 4, !tbaa !22
  %206 = getelementptr inbounds [256 x float], ptr %9, i64 0, i64 %.6303
  %207 = load float, ptr %206, align 4, !tbaa !22
  %208 = fmul float %200, %207
  store float %208, ptr %206, align 4, !tbaa !22
  %209 = getelementptr inbounds [129 x float], ptr %10, i64 0, i64 %.6303
  %210 = load float, ptr %209, align 4, !tbaa !22
  %211 = fmul float %200, %210
  store float %211, ptr %209, align 4, !tbaa !22
  br label %212

212:                                              ; preds = %202, %204
  %213 = add nuw i64 %.6303, 1
  %exitcond375.not = icmp eq i64 %213, %153
  br i1 %exitcond375.not, label %.loopexit289, label %193, !llvm.loop !38

.loopexit289:                                     ; preds = %212, %164, %.preheader290, %.preheader288
  %214 = phi i64 [ 0, %.preheader290 ], [ 0, %.preheader288 ], [ %153, %164 ], [ %153, %212 ]
  %215 = getelementptr inbounds i8, ptr %0, i64 11452
  %216 = shl i64 %214, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %215, ptr nonnull align 16 %7, i64 %216, i1 false)
  %217 = getelementptr inbounds i8, ptr %0, i64 10420
  %218 = getelementptr inbounds i8, ptr %0, i64 9904
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %217, ptr nonnull align 8 %218, i64 %216, i1 false)
  %219 = load i64, ptr %32, align 8, !tbaa !17
  call void @IFFT(ptr noundef nonnull %0, ptr noundef nonnull %9, ptr noundef nonnull %10, i64 noundef %214, i64 noundef %219, ptr noundef nonnull %6)
  %220 = getelementptr inbounds i8, ptr %0, i64 8316
  %221 = load i32, ptr %220, align 4, !tbaa !39
  %222 = icmp eq i32 %221, 1
  br i1 %222, label %223, label %254

223:                                              ; preds = %.loopexit289
  %224 = load i32, ptr %133, align 8, !tbaa !32
  %225 = icmp sgt i32 %224, 200
  br i1 %225, label %226, label %254

226:                                              ; preds = %223
  %227 = load i64, ptr %32, align 8, !tbaa !17
  %228 = call float @Energy(ptr noundef nonnull %6, i64 noundef %227)
  %229 = fadd float %46, 0x3E7AD7F2A0000000
  %230 = fdiv float %228, %229
  %231 = fadd float %230, 0x3D71979980000000
  %232 = call float @sqrtf(float noundef %231) #7
  %233 = fcmp ogt float %232, 5.000000e-01
  br i1 %233, label %234, label %241

234:                                              ; preds = %226
  %235 = fadd float %232, -5.000000e-01
  %236 = call float @llvm.fmuladd.f32(float %235, float 0x3FF4CCCCC0000000, float 1.000000e+00)
  %237 = fmul float %232, %236
  %238 = fcmp ogt float %237, 1.000000e+00
  br i1 %238, label %239, label %241

239:                                              ; preds = %234
  %240 = fdiv float 1.000000e+00, %232
  br label %241

241:                                              ; preds = %234, %239, %226
  %.0271 = phi float [ %240, %239 ], [ %236, %234 ], [ 1.000000e+00, %226 ]
  %242 = fcmp olt float %232, 5.000000e-01
  br i1 %242, label %243, label %248

243:                                              ; preds = %241
  %244 = getelementptr inbounds i8, ptr %0, i64 8312
  %245 = load float, ptr %244, align 8, !tbaa !36
  %.inv = fcmp ole float %232, %245
  %.0266 = select i1 %.inv, float %245, float %232
  %246 = fsub float 5.000000e-01, %.0266
  %247 = call float @llvm.fmuladd.f32(float %246, float 0xBFD3333340000000, float 1.000000e+00)
  br label %248

248:                                              ; preds = %243, %241
  %.0270 = phi float [ %247, %243 ], [ 1.000000e+00, %241 ]
  %249 = getelementptr inbounds i8, ptr %0, i64 12484
  %250 = load float, ptr %249, align 4, !tbaa !40
  %251 = fsub float 1.000000e+00, %250
  %252 = fmul float %.0270, %251
  %253 = call float @llvm.fmuladd.f32(float %250, float %.0271, float %252)
  br label %254

254:                                              ; preds = %248, %223, %.loopexit289
  %.0269 = phi float [ %253, %248 ], [ 1.000000e+00, %223 ], [ 1.000000e+00, %.loopexit289 ]
  %255 = load i64, ptr %32, align 8, !tbaa !17
  %.not360 = icmp eq i64 %255, 0
  br i1 %.not360, label %._crit_edge, label %.lr.ph308

.lr.ph308:                                        ; preds = %254
  %256 = load ptr, ptr %43, align 8, !tbaa !20
  %257 = getelementptr inbounds i8, ptr %0, i64 2104
  %min.iters.check407 = icmp ult i64 %255, 8
  br i1 %min.iters.check407, label %scalar.ph406.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph308
  %258 = shl i64 %255, 2
  %259 = getelementptr i8, ptr %0, i64 %258
  %scevgep399 = getelementptr i8, ptr %259, i64 2104
  %scevgep400 = getelementptr i8, ptr %6, i64 %258
  %scevgep401 = getelementptr i8, ptr %256, i64 %258
  %bound0 = icmp ult ptr %257, %scevgep400
  %bound1 = icmp ult ptr %6, %scevgep399
  %found.conflict = and i1 %bound0, %bound1
  %bound0402 = icmp ult ptr %257, %scevgep401
  %bound1403 = icmp ult ptr %256, %scevgep399
  %found.conflict404 = and i1 %bound0402, %bound1403
  %conflict.rdx = or i1 %found.conflict, %found.conflict404
  br i1 %conflict.rdx, label %scalar.ph406.preheader, label %vector.ph408

vector.ph408:                                     ; preds = %vector.memcheck
  %n.vec410 = and i64 %255, -8
  %broadcast.splatinsert = insertelement <4 x float> poison, float %.0269, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body412

vector.body412:                                   ; preds = %vector.body412, %vector.ph408
  %index413 = phi i64 [ 0, %vector.ph408 ], [ %index.next420, %vector.body412 ]
  %260 = getelementptr inbounds [256 x float], ptr %6, i64 0, i64 %index413
  %261 = getelementptr inbounds i8, ptr %260, i64 16
  %wide.load414 = load <4 x float>, ptr %260, align 16, !tbaa !22, !alias.scope !41
  %wide.load415 = load <4 x float>, ptr %261, align 16, !tbaa !22, !alias.scope !41
  %262 = fmul <4 x float> %broadcast.splat, %wide.load414
  %263 = fmul <4 x float> %broadcast.splat, %wide.load415
  %264 = getelementptr inbounds float, ptr %256, i64 %index413
  %265 = getelementptr inbounds i8, ptr %264, i64 16
  %wide.load416 = load <4 x float>, ptr %264, align 4, !tbaa !22, !alias.scope !44
  %wide.load417 = load <4 x float>, ptr %265, align 4, !tbaa !22, !alias.scope !44
  %266 = getelementptr inbounds [256 x float], ptr %257, i64 0, i64 %index413
  %267 = getelementptr inbounds i8, ptr %266, i64 16
  %wide.load418 = load <4 x float>, ptr %266, align 4, !tbaa !22, !alias.scope !46, !noalias !48
  %wide.load419 = load <4 x float>, ptr %267, align 4, !tbaa !22, !alias.scope !46, !noalias !48
  %268 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %262, <4 x float> %wide.load416, <4 x float> %wide.load418)
  %269 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %263, <4 x float> %wide.load417, <4 x float> %wide.load419)
  store <4 x float> %268, ptr %266, align 4, !tbaa !22, !alias.scope !46, !noalias !48
  store <4 x float> %269, ptr %267, align 4, !tbaa !22, !alias.scope !46, !noalias !48
  %index.next420 = add nuw i64 %index413, 8
  %270 = icmp eq i64 %index.next420, %n.vec410
  br i1 %270, label %middle.block405, label %vector.body412, !llvm.loop !49

middle.block405:                                  ; preds = %vector.body412
  %cmp.n421 = icmp eq i64 %255, %n.vec410
  br i1 %cmp.n421, label %._crit_edge, label %scalar.ph406.preheader

scalar.ph406.preheader:                           ; preds = %middle.block405, %vector.memcheck, %.lr.ph308
  %.7307.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph308 ], [ %n.vec410, %middle.block405 ]
  %.neg = or disjoint i64 %.7307.ph, 1
  %xtraiter = and i64 %255, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph406.prol.loopexit, label %scalar.ph406.prol

scalar.ph406.prol:                                ; preds = %scalar.ph406.preheader
  %271 = getelementptr inbounds [256 x float], ptr %6, i64 0, i64 %.7307.ph
  %272 = load float, ptr %271, align 16, !tbaa !22
  %273 = fmul float %.0269, %272
  %274 = getelementptr inbounds float, ptr %256, i64 %.7307.ph
  %275 = load float, ptr %274, align 4, !tbaa !22
  %276 = getelementptr inbounds [256 x float], ptr %257, i64 0, i64 %.7307.ph
  %277 = load float, ptr %276, align 4, !tbaa !22
  %278 = call float @llvm.fmuladd.f32(float %273, float %275, float %277)
  store float %278, ptr %276, align 4, !tbaa !22
  %279 = or disjoint i64 %.7307.ph, 1
  br label %scalar.ph406.prol.loopexit

scalar.ph406.prol.loopexit:                       ; preds = %scalar.ph406.prol, %scalar.ph406.preheader
  %.7307.unr = phi i64 [ %.7307.ph, %scalar.ph406.preheader ], [ %279, %scalar.ph406.prol ]
  %280 = icmp eq i64 %255, %.neg
  br i1 %280, label %._crit_edge, label %scalar.ph406

scalar.ph406:                                     ; preds = %scalar.ph406.prol.loopexit, %scalar.ph406
  %.7307 = phi i64 [ %298, %scalar.ph406 ], [ %.7307.unr, %scalar.ph406.prol.loopexit ]
  %281 = getelementptr inbounds [256 x float], ptr %6, i64 0, i64 %.7307
  %282 = load float, ptr %281, align 4, !tbaa !22
  %283 = fmul float %.0269, %282
  %284 = getelementptr inbounds float, ptr %256, i64 %.7307
  %285 = load float, ptr %284, align 4, !tbaa !22
  %286 = getelementptr inbounds [256 x float], ptr %257, i64 0, i64 %.7307
  %287 = load float, ptr %286, align 4, !tbaa !22
  %288 = call float @llvm.fmuladd.f32(float %283, float %285, float %287)
  store float %288, ptr %286, align 4, !tbaa !22
  %289 = add nuw i64 %.7307, 1
  %290 = getelementptr inbounds [256 x float], ptr %6, i64 0, i64 %289
  %291 = load float, ptr %290, align 4, !tbaa !22
  %292 = fmul float %.0269, %291
  %293 = getelementptr inbounds float, ptr %256, i64 %289
  %294 = load float, ptr %293, align 4, !tbaa !22
  %295 = getelementptr inbounds [256 x float], ptr %257, i64 0, i64 %289
  %296 = load float, ptr %295, align 4, !tbaa !22
  %297 = call float @llvm.fmuladd.f32(float %292, float %294, float %296)
  store float %297, ptr %295, align 4, !tbaa !22
  %298 = add nuw i64 %.7307, 2
  %exitcond377.not.1 = icmp eq i64 %298, %255
  br i1 %exitcond377.not.1, label %._crit_edge, label %scalar.ph406, !llvm.loop !50

._crit_edge:                                      ; preds = %scalar.ph406.prol.loopexit, %scalar.ph406, %middle.block405, %254
  %299 = getelementptr inbounds i8, ptr %0, i64 16
  %300 = load i64, ptr %299, align 8, !tbaa !21
  %301 = load i64, ptr %30, align 8, !tbaa !16
  %302 = add i64 %301, %300
  %303 = icmp ult i64 %300, %302
  br i1 %303, label %.lr.ph311, label %._crit_edge312

.lr.ph311:                                        ; preds = %._crit_edge
  %304 = shl i64 %300, 2
  %305 = getelementptr i8, ptr %0, i64 %304
  %scevgep = getelementptr i8, ptr %305, i64 2104
  %306 = shl nuw i64 %301, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %5, ptr align 4 %scevgep, i64 %306, i1 false), !tbaa !22
  br label %._crit_edge312

._crit_edge312:                                   ; preds = %.lr.ph311, %._crit_edge
  %307 = getelementptr inbounds i8, ptr %0, i64 2104
  call void @UpdateBuffer(ptr noundef null, i64 noundef %301, i64 noundef %255, ptr noundef nonnull %307)
  %308 = load i64, ptr %30, align 8, !tbaa !16
  %.not361 = icmp eq i64 %308, 0
  br i1 %.not361, label %._crit_edge317, label %.lr.ph316

.lr.ph316:                                        ; preds = %._crit_edge312
  %309 = load ptr, ptr %3, align 8, !tbaa !15
  %min.iters.check424 = icmp ult i64 %308, 8
  br i1 %min.iters.check424, label %scalar.ph423.preheader, label %vector.ph425

vector.ph425:                                     ; preds = %.lr.ph316
  %n.vec427 = and i64 %308, -8
  br label %vector.body429

vector.body429:                                   ; preds = %vector.body429, %vector.ph425
  %index430 = phi i64 [ 0, %vector.ph425 ], [ %index.next436, %vector.body429 ]
  %310 = getelementptr inbounds [160 x float], ptr %5, i64 0, i64 %index430
  %311 = getelementptr inbounds i8, ptr %310, i64 16
  %wide.load431 = load <4 x float>, ptr %310, align 16, !tbaa !22
  %wide.load432 = load <4 x float>, ptr %311, align 16, !tbaa !22
  %312 = fcmp ule <4 x float> %wide.load431, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %313 = fcmp ule <4 x float> %wide.load432, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %314 = fcmp olt <4 x float> %wide.load431, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %315 = fcmp olt <4 x float> %wide.load432, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %316 = xor <4 x i1> %314, <i1 true, i1 true, i1 true, i1 true>
  %317 = xor <4 x i1> %315, <i1 true, i1 true, i1 true, i1 true>
  %318 = and <4 x i1> %312, %316
  %319 = and <4 x i1> %313, %317
  %320 = and <4 x i1> %312, %314
  %321 = and <4 x i1> %313, %315
  %322 = fptosi <4 x float> %wide.load431 to <4 x i16>
  %323 = fptosi <4 x float> %wide.load432 to <4 x i16>
  %324 = select <4 x i1> %318, <4 x i16> %322, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %325 = select <4 x i1> %319, <4 x i16> %323, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %326 = select <4 x i1> %320, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %324
  %327 = select <4 x i1> %321, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %325
  %328 = getelementptr inbounds i16, ptr %309, i64 %index430
  %329 = getelementptr inbounds i8, ptr %328, i64 8
  store <4 x i16> %326, ptr %328, align 2, !tbaa !23
  store <4 x i16> %327, ptr %329, align 2, !tbaa !23
  %index.next436 = add nuw i64 %index430, 8
  %330 = icmp eq i64 %index.next436, %n.vec427
  br i1 %330, label %middle.block422, label %vector.body429, !llvm.loop !51

middle.block422:                                  ; preds = %vector.body429
  %cmp.n437 = icmp eq i64 %308, %n.vec427
  br i1 %cmp.n437, label %._crit_edge317, label %scalar.ph423.preheader

scalar.ph423.preheader:                           ; preds = %middle.block422, %.lr.ph316
  %.9314.ph = phi i64 [ 0, %.lr.ph316 ], [ %n.vec427, %middle.block422 ]
  br label %scalar.ph423

scalar.ph423:                                     ; preds = %scalar.ph423.preheader, %337
  %.9314 = phi i64 [ %341, %337 ], [ %.9314.ph, %scalar.ph423.preheader ]
  %331 = getelementptr inbounds [160 x float], ptr %5, i64 0, i64 %.9314
  %332 = load float, ptr %331, align 4, !tbaa !22
  %333 = fcmp ogt float %332, 3.276700e+04
  br i1 %333, label %337, label %334

334:                                              ; preds = %scalar.ph423
  %335 = fcmp olt float %332, -3.276800e+04
  br i1 %335, label %337, label %336

336:                                              ; preds = %334
  br label %337

337:                                              ; preds = %336, %334, %scalar.ph423
  %338 = phi float [ 3.276700e+04, %scalar.ph423 ], [ %332, %336 ], [ -3.276800e+04, %334 ]
  %339 = fptosi float %338 to i16
  %340 = getelementptr inbounds i16, ptr %309, i64 %.9314
  store i16 %339, ptr %340, align 2, !tbaa !23
  %341 = add nuw i64 %.9314, 1
  %exitcond378.not = icmp eq i64 %341, %308
  br i1 %exitcond378.not, label %._crit_edge317, label %scalar.ph423, !llvm.loop !52

._crit_edge317:                                   ; preds = %337, %middle.block422, %._crit_edge312
  br i1 %20, label %342, label %.loopexit

342:                                              ; preds = %._crit_edge317
  %343 = load i64, ptr %131, align 8, !tbaa !14
  %344 = xor i32 %.0267, -1
  %345 = sext i32 %344 to i64
  %346 = add i64 %343, %345
  %347 = add i64 %343, -1
  %348 = icmp ult i64 %346, %347
  br i1 %348, label %.lr.ph321, label %._crit_edge322

.lr.ph321:                                        ; preds = %342
  %349 = getelementptr inbounds i8, ptr %0, i64 26164
  %350 = and i32 %.0267, 7
  %xtraiter496 = zext nneg i32 %350 to i64
  %lcmp.mod497.not = icmp eq i32 %350, 0
  br i1 %lcmp.mod497.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph321, %.prol.preheader
  %.10319.prol = phi i64 [ %354, %.prol.preheader ], [ %346, %.lr.ph321 ]
  %.0263318.prol = phi float [ %353, %.prol.preheader ], [ 0.000000e+00, %.lr.ph321 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.prol.preheader ], [ 0, %.lr.ph321 ]
  %351 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %.10319.prol
  %352 = load float, ptr %351, align 4, !tbaa !22
  %353 = fadd float %.0263318.prol, %352
  %354 = add nuw i64 %.10319.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter496
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !53

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph321
  %.10319.unr = phi i64 [ %346, %.lr.ph321 ], [ %354, %.prol.preheader ]
  %.0263318.unr = phi float [ 0.000000e+00, %.lr.ph321 ], [ %353, %.prol.preheader ]
  %.lcssa494.unr = phi float [ poison, %.lr.ph321 ], [ %353, %.prol.preheader ]
  %notsub = add nsw i32 %.0267, -1
  %355 = icmp ult i32 %notsub, 7
  br i1 %355, label %._crit_edge322, label %.lr.ph321.new

.lr.ph321.new:                                    ; preds = %.prol.loopexit, %.lr.ph321.new
  %.10319 = phi i64 [ %387, %.lr.ph321.new ], [ %.10319.unr, %.prol.loopexit ]
  %.0263318 = phi float [ %386, %.lr.ph321.new ], [ %.0263318.unr, %.prol.loopexit ]
  %356 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %.10319
  %357 = load float, ptr %356, align 4, !tbaa !22
  %358 = fadd float %.0263318, %357
  %359 = add nuw i64 %.10319, 1
  %360 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %359
  %361 = load float, ptr %360, align 4, !tbaa !22
  %362 = fadd float %358, %361
  %363 = add nuw i64 %.10319, 2
  %364 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %363
  %365 = load float, ptr %364, align 4, !tbaa !22
  %366 = fadd float %362, %365
  %367 = add nuw i64 %.10319, 3
  %368 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %367
  %369 = load float, ptr %368, align 4, !tbaa !22
  %370 = fadd float %366, %369
  %371 = add nuw i64 %.10319, 4
  %372 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %371
  %373 = load float, ptr %372, align 4, !tbaa !22
  %374 = fadd float %370, %373
  %375 = add nuw i64 %.10319, 5
  %376 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %375
  %377 = load float, ptr %376, align 4, !tbaa !22
  %378 = fadd float %374, %377
  %379 = add nuw i64 %.10319, 6
  %380 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %379
  %381 = load float, ptr %380, align 4, !tbaa !22
  %382 = fadd float %378, %381
  %383 = add nuw i64 %.10319, 7
  %384 = getelementptr inbounds [129 x float], ptr %349, i64 0, i64 %383
  %385 = load float, ptr %384, align 4, !tbaa !22
  %386 = fadd float %382, %385
  %387 = add nuw i64 %.10319, 8
  %388 = icmp ult i64 %387, %347
  br i1 %388, label %.lr.ph321.new, label %._crit_edge322, !llvm.loop !55

._crit_edge322:                                   ; preds = %.prol.loopexit, %.lr.ph321.new, %342
  %.0263.lcssa = phi float [ 0.000000e+00, %342 ], [ %.lcssa494.unr, %.prol.loopexit ], [ %386, %.lr.ph321.new ]
  %389 = sitofp i32 %.0267 to float
  %390 = fdiv float %.0263.lcssa, %389
  %.not362 = icmp eq i64 %343, 0
  br i1 %.not362, label %._crit_edge330, label %.lr.ph329

.lr.ph329:                                        ; preds = %._crit_edge322
  %391 = getelementptr inbounds i8, ptr %0, i64 10936
  %xtraiter498 = and i64 %343, 3
  %392 = icmp ult i64 %343, 4
  br i1 %392, label %._crit_edge330.loopexit.unr-lcssa, label %.lr.ph329.new

.lr.ph329.new:                                    ; preds = %.lr.ph329
  %unroll_iter = and i64 %343, -4
  br label %393

393:                                              ; preds = %393, %.lr.ph329.new
  %.0256327 = phi float [ 0.000000e+00, %.lr.ph329.new ], [ %420, %393 ]
  %.0257326 = phi float [ 0.000000e+00, %.lr.ph329.new ], [ %417, %393 ]
  %.11325 = phi i64 [ 0, %.lr.ph329.new ], [ %421, %393 ]
  %niter = phi i64 [ 0, %.lr.ph329.new ], [ %niter.next.3, %393 ]
  %394 = getelementptr inbounds [129 x float], ptr %391, i64 0, i64 %.11325
  %395 = load float, ptr %394, align 4, !tbaa !22
  %396 = fadd float %.0257326, %395
  %397 = getelementptr inbounds [129 x float], ptr %215, i64 0, i64 %.11325
  %398 = load float, ptr %397, align 4, !tbaa !22
  %399 = fadd float %.0256327, %398
  %400 = or disjoint i64 %.11325, 1
  %401 = getelementptr inbounds [129 x float], ptr %391, i64 0, i64 %400
  %402 = load float, ptr %401, align 4, !tbaa !22
  %403 = fadd float %396, %402
  %404 = getelementptr inbounds [129 x float], ptr %215, i64 0, i64 %400
  %405 = load float, ptr %404, align 4, !tbaa !22
  %406 = fadd float %399, %405
  %407 = or disjoint i64 %.11325, 2
  %408 = getelementptr inbounds [129 x float], ptr %391, i64 0, i64 %407
  %409 = load float, ptr %408, align 4, !tbaa !22
  %410 = fadd float %403, %409
  %411 = getelementptr inbounds [129 x float], ptr %215, i64 0, i64 %407
  %412 = load float, ptr %411, align 4, !tbaa !22
  %413 = fadd float %406, %412
  %414 = or disjoint i64 %.11325, 3
  %415 = getelementptr inbounds [129 x float], ptr %391, i64 0, i64 %414
  %416 = load float, ptr %415, align 4, !tbaa !22
  %417 = fadd float %410, %416
  %418 = getelementptr inbounds [129 x float], ptr %215, i64 0, i64 %414
  %419 = load float, ptr %418, align 4, !tbaa !22
  %420 = fadd float %413, %419
  %421 = add nuw i64 %.11325, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge330.loopexit.unr-lcssa, label %393, !llvm.loop !56

._crit_edge330.loopexit.unr-lcssa:                ; preds = %393, %.lr.ph329
  %.lcssa493.ph = phi float [ poison, %.lr.ph329 ], [ %417, %393 ]
  %.lcssa492.ph = phi float [ poison, %.lr.ph329 ], [ %420, %393 ]
  %.0256327.unr = phi float [ 0.000000e+00, %.lr.ph329 ], [ %420, %393 ]
  %.0257326.unr = phi float [ 0.000000e+00, %.lr.ph329 ], [ %417, %393 ]
  %.11325.unr = phi i64 [ 0, %.lr.ph329 ], [ %421, %393 ]
  %lcmp.mod499.not = icmp eq i64 %xtraiter498, 0
  br i1 %lcmp.mod499.not, label %._crit_edge330.loopexit, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge330.loopexit.unr-lcssa, %.epil.preheader
  %.0256327.epil = phi float [ %427, %.epil.preheader ], [ %.0256327.unr, %._crit_edge330.loopexit.unr-lcssa ]
  %.0257326.epil = phi float [ %424, %.epil.preheader ], [ %.0257326.unr, %._crit_edge330.loopexit.unr-lcssa ]
  %.11325.epil = phi i64 [ %428, %.epil.preheader ], [ %.11325.unr, %._crit_edge330.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge330.loopexit.unr-lcssa ]
  %422 = getelementptr inbounds [129 x float], ptr %391, i64 0, i64 %.11325.epil
  %423 = load float, ptr %422, align 4, !tbaa !22
  %424 = fadd float %.0257326.epil, %423
  %425 = getelementptr inbounds [129 x float], ptr %215, i64 0, i64 %.11325.epil
  %426 = load float, ptr %425, align 4, !tbaa !22
  %427 = fadd float %.0256327.epil, %426
  %428 = add nuw i64 %.11325.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter498
  br i1 %epil.iter.cmp.not, label %._crit_edge330.loopexit, label %.epil.preheader, !llvm.loop !57

._crit_edge330.loopexit:                          ; preds = %.epil.preheader, %._crit_edge330.loopexit.unr-lcssa
  %.lcssa493 = phi float [ %.lcssa493.ph, %._crit_edge330.loopexit.unr-lcssa ], [ %424, %.epil.preheader ]
  %.lcssa492 = phi float [ %.lcssa492.ph, %._crit_edge330.loopexit.unr-lcssa ], [ %427, %.epil.preheader ]
  %429 = fdiv float %.lcssa492, %.lcssa493
  br label %._crit_edge330

._crit_edge330:                                   ; preds = %._crit_edge330.loopexit, %._crit_edge322
  %430 = phi float [ 0x7FF8000000000000, %._crit_edge322 ], [ %429, %._crit_edge330.loopexit ]
  %431 = fmul float %390, %430
  br i1 %348, label %.lr.ph336, label %._crit_edge337

.lr.ph336:                                        ; preds = %._crit_edge330
  %432 = getelementptr inbounds i8, ptr %0, i64 6760
  %433 = and i32 %.0267, 7
  %xtraiter504 = zext nneg i32 %433 to i64
  %lcmp.mod505.not = icmp eq i32 %433, 0
  br i1 %lcmp.mod505.not, label %.prol.loopexit503, label %.prol.preheader502

.prol.preheader502:                               ; preds = %.lr.ph336, %.prol.preheader502
  %.0259334.prol = phi float [ %436, %.prol.preheader502 ], [ 0.000000e+00, %.lr.ph336 ]
  %.12333.prol = phi i64 [ %437, %.prol.preheader502 ], [ %346, %.lr.ph336 ]
  %prol.iter506 = phi i64 [ %prol.iter506.next, %.prol.preheader502 ], [ 0, %.lr.ph336 ]
  %434 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %.12333.prol
  %435 = load float, ptr %434, align 4, !tbaa !22
  %436 = fadd float %.0259334.prol, %435
  %437 = add nuw i64 %.12333.prol, 1
  %prol.iter506.next = add i64 %prol.iter506, 1
  %prol.iter506.cmp.not = icmp eq i64 %prol.iter506.next, %xtraiter504
  br i1 %prol.iter506.cmp.not, label %.prol.loopexit503, label %.prol.preheader502, !llvm.loop !58

.prol.loopexit503:                                ; preds = %.prol.preheader502, %.lr.ph336
  %.0259334.unr = phi float [ 0.000000e+00, %.lr.ph336 ], [ %436, %.prol.preheader502 ]
  %.12333.unr = phi i64 [ %346, %.lr.ph336 ], [ %437, %.prol.preheader502 ]
  %.lcssa.unr = phi float [ poison, %.lr.ph336 ], [ %436, %.prol.preheader502 ]
  %notsub507 = add nsw i32 %.0267, -1
  %438 = icmp ult i32 %notsub507, 7
  br i1 %438, label %._crit_edge337, label %.lr.ph336.new

.lr.ph336.new:                                    ; preds = %.prol.loopexit503, %.lr.ph336.new
  %.0259334 = phi float [ %469, %.lr.ph336.new ], [ %.0259334.unr, %.prol.loopexit503 ]
  %.12333 = phi i64 [ %470, %.lr.ph336.new ], [ %.12333.unr, %.prol.loopexit503 ]
  %439 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %.12333
  %440 = load float, ptr %439, align 4, !tbaa !22
  %441 = fadd float %.0259334, %440
  %442 = add nuw i64 %.12333, 1
  %443 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %442
  %444 = load float, ptr %443, align 4, !tbaa !22
  %445 = fadd float %441, %444
  %446 = add nuw i64 %.12333, 2
  %447 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %446
  %448 = load float, ptr %447, align 4, !tbaa !22
  %449 = fadd float %445, %448
  %450 = add nuw i64 %.12333, 3
  %451 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %450
  %452 = load float, ptr %451, align 4, !tbaa !22
  %453 = fadd float %449, %452
  %454 = add nuw i64 %.12333, 4
  %455 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %454
  %456 = load float, ptr %455, align 4, !tbaa !22
  %457 = fadd float %453, %456
  %458 = add nuw i64 %.12333, 5
  %459 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %458
  %460 = load float, ptr %459, align 4, !tbaa !22
  %461 = fadd float %457, %460
  %462 = add nuw i64 %.12333, 6
  %463 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %462
  %464 = load float, ptr %463, align 4, !tbaa !22
  %465 = fadd float %461, %464
  %466 = add nuw i64 %.12333, 7
  %467 = getelementptr inbounds [129 x float], ptr %432, i64 0, i64 %466
  %468 = load float, ptr %467, align 4, !tbaa !22
  %469 = fadd float %465, %468
  %470 = add nuw i64 %.12333, 8
  %471 = icmp ult i64 %470, %347
  br i1 %471, label %.lr.ph336.new, label %._crit_edge337, !llvm.loop !59

._crit_edge337:                                   ; preds = %.prol.loopexit503, %.lr.ph336.new, %._crit_edge330
  %.0259.lcssa = phi float [ 0.000000e+00, %._crit_edge330 ], [ %.lcssa.unr, %.prol.loopexit503 ], [ %469, %.lr.ph336.new ]
  %472 = fdiv float %.0259.lcssa, %389
  %473 = call float @llvm.fmuladd.f32(float %431, float 2.000000e+00, float -1.000000e+00)
  %474 = call float @tanhf(float noundef %473) #7
  %475 = call float @llvm.fmuladd.f32(float %474, float 5.000000e-01, float 5.000000e-01)
  %476 = fadd float %472, %475
  %477 = fmul float %476, 5.000000e-01
  %478 = fcmp ult float %431, 5.000000e-01
  %479 = fmul float %472, 7.500000e-01
  %480 = call float @llvm.fmuladd.f32(float %475, float 2.500000e-01, float %479)
  %.0 = select i1 %478, float %477, float %480
  %481 = getelementptr inbounds i8, ptr %0, i64 8312
  %482 = load float, ptr %481, align 8, !tbaa !36
  %483 = fcmp olt float %.0, %482
  %.1 = select i1 %483, float %482, float %.0
  %484 = fcmp ogt float %.1, 1.000000e+00
  %.2 = select i1 %484, float 1.000000e+00, float %.1
  %.not363 = icmp eq i64 %16, 0
  br i1 %.not363, label %.loopexit, label %.preheader286.lr.ph

.preheader286.lr.ph:                              ; preds = %._crit_edge337
  %485 = load i64, ptr %30, align 8, !tbaa !16
  %.not364 = icmp eq i64 %485, 0
  %486 = getelementptr inbounds i8, ptr %0, i64 26680
  br i1 %.not364, label %.loopexit, label %.preheader286.us.preheader

.preheader286.us.preheader:                       ; preds = %.preheader286.lr.ph
  %min.iters.check440 = icmp ult i64 %485, 8
  %n.vec443 = and i64 %485, -8
  %broadcast.splatinsert449 = insertelement <4 x float> poison, float %.2, i64 0
  %broadcast.splat450 = shufflevector <4 x float> %broadcast.splatinsert449, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n456 = icmp eq i64 %485, %n.vec443
  br label %.preheader286.us

.preheader286.us:                                 ; preds = %.preheader286.us.preheader, %._crit_edge341.us
  %.13342.us = phi i64 [ %524, %._crit_edge341.us ], [ 0, %.preheader286.us.preheader ]
  %487 = getelementptr inbounds ptr, ptr %.0254, i64 %.13342.us
  %488 = load ptr, ptr %487, align 8, !tbaa !15
  br i1 %min.iters.check440, label %scalar.ph439.preheader, label %vector.body445

vector.body445:                                   ; preds = %.preheader286.us, %vector.body445
  %index446 = phi i64 [ %index.next455, %vector.body445 ], [ 0, %.preheader286.us ]
  %489 = getelementptr inbounds [2 x [256 x float]], ptr %486, i64 0, i64 %.13342.us, i64 %index446
  %490 = getelementptr inbounds i8, ptr %489, i64 16
  %wide.load447 = load <4 x float>, ptr %489, align 4, !tbaa !22
  %wide.load448 = load <4 x float>, ptr %490, align 4, !tbaa !22
  %491 = fmul <4 x float> %broadcast.splat450, %wide.load447
  %492 = fmul <4 x float> %broadcast.splat450, %wide.load448
  %493 = fcmp ule <4 x float> %491, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %494 = fcmp ule <4 x float> %492, <float 3.276700e+04, float 3.276700e+04, float 3.276700e+04, float 3.276700e+04>
  %495 = fcmp olt <4 x float> %491, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %496 = fcmp olt <4 x float> %492, <float -3.276800e+04, float -3.276800e+04, float -3.276800e+04, float -3.276800e+04>
  %497 = xor <4 x i1> %495, <i1 true, i1 true, i1 true, i1 true>
  %498 = xor <4 x i1> %496, <i1 true, i1 true, i1 true, i1 true>
  %499 = and <4 x i1> %493, %497
  %500 = and <4 x i1> %494, %498
  %501 = and <4 x i1> %493, %495
  %502 = and <4 x i1> %494, %496
  %503 = fptosi <4 x float> %491 to <4 x i16>
  %504 = fptosi <4 x float> %492 to <4 x i16>
  %505 = select <4 x i1> %499, <4 x i16> %503, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %506 = select <4 x i1> %500, <4 x i16> %504, <4 x i16> <i16 32767, i16 32767, i16 32767, i16 32767>
  %507 = select <4 x i1> %501, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %505
  %508 = select <4 x i1> %502, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> %506
  %509 = getelementptr inbounds i16, ptr %488, i64 %index446
  %510 = getelementptr inbounds i8, ptr %509, i64 8
  store <4 x i16> %507, ptr %509, align 2, !tbaa !23
  store <4 x i16> %508, ptr %510, align 2, !tbaa !23
  %index.next455 = add nuw i64 %index446, 8
  %511 = icmp eq i64 %index.next455, %n.vec443
  br i1 %511, label %middle.block438, label %vector.body445, !llvm.loop !60

middle.block438:                                  ; preds = %vector.body445
  br i1 %cmp.n456, label %._crit_edge341.us, label %scalar.ph439.preheader

scalar.ph439.preheader:                           ; preds = %middle.block438, %.preheader286.us
  %.1265339.us.ph = phi i64 [ 0, %.preheader286.us ], [ %n.vec443, %middle.block438 ]
  br label %scalar.ph439

scalar.ph439:                                     ; preds = %scalar.ph439.preheader, %519
  %.1265339.us = phi i64 [ %523, %519 ], [ %.1265339.us.ph, %scalar.ph439.preheader ]
  %512 = getelementptr inbounds [2 x [256 x float]], ptr %486, i64 0, i64 %.13342.us, i64 %.1265339.us
  %513 = load float, ptr %512, align 4, !tbaa !22
  %514 = fmul float %.2, %513
  %515 = fcmp ogt float %514, 3.276700e+04
  br i1 %515, label %519, label %516

516:                                              ; preds = %scalar.ph439
  %517 = fcmp olt float %514, -3.276800e+04
  br i1 %517, label %519, label %518

518:                                              ; preds = %516
  br label %519

519:                                              ; preds = %518, %516, %scalar.ph439
  %520 = phi float [ 3.276700e+04, %scalar.ph439 ], [ %514, %518 ], [ -3.276800e+04, %516 ]
  %521 = fptosi float %520 to i16
  %522 = getelementptr inbounds i16, ptr %488, i64 %.1265339.us
  store i16 %521, ptr %522, align 2, !tbaa !23
  %523 = add nuw i64 %.1265339.us, 1
  %exitcond380.not = icmp eq i64 %523, %485
  br i1 %exitcond380.not, label %._crit_edge341.us, label %scalar.ph439, !llvm.loop !61

._crit_edge341.us:                                ; preds = %519, %middle.block438
  %524 = add nuw nsw i64 %.13342.us, 1
  %exitcond381.not = icmp eq i64 %524, %16
  br i1 %exitcond381.not, label %.loopexit, label %.preheader286.us, !llvm.loop !62

.loopexit:                                        ; preds = %._crit_edge341.us, %._crit_edge355.us, %._crit_edge346, %.preheader286.lr.ph, %._crit_edge337, %._crit_edge317, %._crit_edge351
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 1024, 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 1024, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 640, ptr nonnull %5) #7
  ret void
}

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare float @tanhf(float noundef) local_unnamed_addr #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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 }
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, !7, i64 3128}
!6 = !{!"NoiseSuppressionC_", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !11, i64 40, !7, i64 44, !12, i64 48, !8, i64 56, !8, i64 1080, !8, i64 2104, !7, i64 3128, !8, i64 3132, !8, i64 4680, !8, i64 6228, !8, i64 6744, !7, i64 6756, !8, i64 6760, !8, i64 7276, !8, i64 7792, !11, i64 8308, !11, i64 8312, !7, i64 8316, !8, i64 8320, !8, i64 9344, !7, i64 9856, !8, i64 9860, !8, i64 9876, !8, i64 9904, !8, i64 10420, !8, i64 10936, !8, i64 11452, !8, i64 11968, !11, i64 12484, !8, i64 12488, !8, i64 12516, !11, i64 13032, !11, i64 13036, !11, i64 13040, !8, i64 13044, !11, i64 13560, !11, i64 13564, !8, i64 13568, !13, i64 14084, !8, i64 14164, !8, i64 18164, !8, i64 22164, !8, i64 26164, !8, i64 26680}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"float", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"NSParaExtract_", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !7, i64 72, !7, i64 76}
!14 = !{!6, !10, i64 32}
!15 = !{!12, !12, i64 0}
!16 = !{!6, !10, i64 8}
!17 = !{!6, !10, i64 24}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!6, !12, i64 48}
!21 = !{!6, !10, i64 16}
!22 = !{!11, !11, i64 0}
!23 = !{!24, !24, i64 0}
!24 = !{!"short", !8, i64 0}
!25 = distinct !{!25, !19, !26, !27}
!26 = !{!"llvm.loop.isvectorized", i32 1}
!27 = !{!"llvm.loop.unroll.runtime.disable"}
!28 = distinct !{!28, !19, !27, !26}
!29 = distinct !{!29, !19, !26, !27}
!30 = distinct !{!30, !19, !27, !26}
!31 = distinct !{!31, !19}
!32 = !{!6, !7, i64 9856}
!33 = distinct !{!33, !19, !26, !27}
!34 = distinct !{!34, !19, !27, !26}
!35 = !{!6, !11, i64 8308}
!36 = !{!6, !11, i64 8312}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = !{!6, !7, i64 8316}
!40 = !{!6, !11, i64 12484}
!41 = !{!42}
!42 = distinct !{!42, !43}
!43 = distinct !{!43, !"LVerDomain"}
!44 = !{!45}
!45 = distinct !{!45, !43}
!46 = !{!47}
!47 = distinct !{!47, !43}
!48 = !{!42, !45}
!49 = distinct !{!49, !19, !26, !27}
!50 = distinct !{!50, !19, !26}
!51 = distinct !{!51, !19, !26, !27}
!52 = distinct !{!52, !19, !27, !26}
!53 = distinct !{!53, !54}
!54 = !{!"llvm.loop.unroll.disable"}
!55 = distinct !{!55, !19}
!56 = distinct !{!56, !19}
!57 = distinct !{!57, !54}
!58 = distinct !{!58, !54}
!59 = distinct !{!59, !19}
!60 = distinct !{!60, !19, !26, !27}
!61 = distinct !{!61, !19, !27, !26}
!62 = distinct !{!62, !19}


; Effective O3 passes: ADCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass