; LLVM IR from Ryuk17/SpeechAlgorithms :: WebRTC_AEC/src (aec_core)

; 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.AecCore = type { i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, [128 x float], [128 x float], [128 x float], [65 x float], [65 x float], [65 x float], [65 x float], ptr, [2 x [2080 x float]], [2 x [2080 x float]], [65 x [2 x float]], [65 x [2 x float]], [2080 x [2 x float]], [65 x float], [65 x float], [65 x float], [65 x float], float, float, float, i32, i32, float, float, i32, [64 x float], i32, i16, i16, i16, i32, ptr, ptr, i32, i32, i32, i32, float, float, i32, %struct.PowerLevel, %struct.PowerLevel, %struct.PowerLevel, %struct.PowerLevel, i32, i32, %struct.Stats, %struct.Stats, %struct.Stats, %struct.Stats, i32, i32, float, [75 x i32], i32, ptr, ptr, i32, i32 }
%struct.PowerLevel = type { float, i32, float, float, i32, float, float }
%struct.Stats = type { float, float, float, float, float, float, float, i32, i32 }

@WebRtcAec_FilterFar = external dso_local global ptr, align 8
@WebRtcAec_ScaleErrorSignal = external dso_local global ptr, align 8
@WebRtcAec_FilterAdaptation = external dso_local global ptr, align 8
@WebRtcAec_OverdriveAndSuppress = external dso_local global ptr, align 8

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @WebRtcAec_InitAec(ptr noundef %0, i32 noundef %1) #1 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  %8 = load i32, ptr %5, align 4, !tbaa !9
  %9 = load ptr, ptr %4, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct.AecCore, ptr %9, i32 0, i32 45
  store i32 %8, ptr %10, align 8, !tbaa !11
  %11 = load i32, ptr %5, align 4, !tbaa !9
  %12 = icmp eq i32 %11, 8000
  br i1 %12, label %13, label %18

13:                                               ; preds = %2
  %14 = load ptr, ptr %4, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.AecCore, ptr %14, i32 0, i32 47
  store float 0x3FE3333340000000, ptr %15, align 8, !tbaa !17
  %16 = load ptr, ptr %4, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.AecCore, ptr %16, i32 0, i32 48
  store float 0x3EC0C6F7A0000000, ptr %17, align 4, !tbaa !18
  br label %23

18:                                               ; preds = %2
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.AecCore, ptr %19, i32 0, i32 47
  store float 5.000000e-01, ptr %20, align 8, !tbaa !17
  %21 = load ptr, ptr %4, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.AecCore, ptr %21, i32 0, i32 48
  store float 0x3EB92A7380000000, ptr %22, align 4, !tbaa !18
  br label %23

23:                                               ; preds = %18, %13
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.AecCore, ptr %24, i32 0, i32 6
  %26 = load ptr, ptr %25, align 8, !tbaa !19
  %27 = call i32 @WebRtc_InitBuffer(ptr noundef %26)
  %28 = icmp eq i32 %27, -1
  br i1 %28, label %29, label %30

29:                                               ; preds = %23
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

30:                                               ; preds = %23
  %31 = load ptr, ptr %4, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.AecCore, ptr %31, i32 0, i32 7
  %33 = load ptr, ptr %32, align 8, !tbaa !20
  %34 = call i32 @WebRtc_InitBuffer(ptr noundef %33)
  %35 = icmp eq i32 %34, -1
  br i1 %35, label %36, label %37

36:                                               ; preds = %30
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

37:                                               ; preds = %30
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.AecCore, ptr %38, i32 0, i32 8
  %40 = load ptr, ptr %39, align 8, !tbaa !21
  %41 = call i32 @WebRtc_InitBuffer(ptr noundef %40)
  %42 = icmp eq i32 %41, -1
  br i1 %42, label %43, label %44

43:                                               ; preds = %37
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

44:                                               ; preds = %37
  %45 = load ptr, ptr %4, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.AecCore, ptr %45, i32 0, i32 9
  %47 = load ptr, ptr %46, align 8, !tbaa !22
  %48 = call i32 @WebRtc_InitBuffer(ptr noundef %47)
  %49 = icmp eq i32 %48, -1
  br i1 %49, label %50, label %51

50:                                               ; preds = %44
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

51:                                               ; preds = %44
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.AecCore, ptr %52, i32 0, i32 41
  %54 = load ptr, ptr %53, align 8, !tbaa !23
  %55 = call i32 @WebRtc_InitBuffer(ptr noundef %54)
  %56 = icmp eq i32 %55, -1
  br i1 %56, label %57, label %58

57:                                               ; preds = %51
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

58:                                               ; preds = %51
  %59 = load ptr, ptr %4, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.AecCore, ptr %59, i32 0, i32 42
  %61 = load ptr, ptr %60, align 8, !tbaa !24
  %62 = call i32 @WebRtc_InitBuffer(ptr noundef %61)
  %63 = icmp eq i32 %62, -1
  br i1 %63, label %64, label %65

64:                                               ; preds = %58
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

65:                                               ; preds = %58
  %66 = load ptr, ptr %4, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.AecCore, ptr %66, i32 0, i32 43
  store i32 0, ptr %67, align 8, !tbaa !25
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.AecCore, ptr %68, i32 0, i32 65
  %70 = load ptr, ptr %69, align 8, !tbaa !26
  %71 = call i32 @WebRtc_InitDelayEstimatorFarend(ptr noundef %70)
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %74

73:                                               ; preds = %65
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

74:                                               ; preds = %65
  %75 = load ptr, ptr %4, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.AecCore, ptr %75, i32 0, i32 66
  %77 = load ptr, ptr %76, align 8, !tbaa !27
  %78 = call i32 @WebRtc_InitDelayEstimator(ptr noundef %77)
  %79 = icmp ne i32 %78, 0
  br i1 %79, label %80, label %81

80:                                               ; preds = %74
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

81:                                               ; preds = %74
  %82 = load ptr, ptr %4, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.AecCore, ptr %82, i32 0, i32 64
  store i32 0, ptr %83, align 4, !tbaa !28
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.AecCore, ptr %84, i32 0, i32 63
  %86 = getelementptr inbounds [75 x i32], ptr %85, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %86, i8 0, i64 300, i1 false)
  %87 = load ptr, ptr %4, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.AecCore, ptr %87, i32 0, i32 67
  store i32 0, ptr %88, align 8, !tbaa !29
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.AecCore, ptr %89, i32 0, i32 68
  store i32 12, ptr %90, align 4, !tbaa !30
  %91 = load ptr, ptr %4, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.AecCore, ptr %91, i32 0, i32 34
  store i32 1, ptr %92, align 4, !tbaa !31
  %93 = load ptr, ptr %4, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.AecCore, ptr %93, i32 0, i32 45
  %95 = load i32, ptr %94, align 8, !tbaa !11
  %96 = icmp eq i32 %95, 32000
  br i1 %96, label %97, label %106

97:                                               ; preds = %81
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.AecCore, ptr %98, i32 0, i32 45
  %100 = load i32, ptr %99, align 8, !tbaa !11
  %101 = trunc i32 %100 to i16
  %102 = sext i16 %101 to i32
  %103 = sdiv i32 %102, 16000
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.AecCore, ptr %104, i32 0, i32 44
  store i32 %103, ptr %105, align 4, !tbaa !32
  br label %115

106:                                              ; preds = %81
  %107 = load ptr, ptr %4, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.AecCore, ptr %107, i32 0, i32 45
  %109 = load i32, ptr %108, align 8, !tbaa !11
  %110 = trunc i32 %109 to i16
  %111 = sext i16 %110 to i32
  %112 = sdiv i32 %111, 8000
  %113 = load ptr, ptr %4, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.AecCore, ptr %113, i32 0, i32 44
  store i32 %112, ptr %114, align 4, !tbaa !32
  br label %115

115:                                              ; preds = %106, %97
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.AecCore, ptr %116, i32 0, i32 0
  store i32 0, ptr %117, align 8, !tbaa !33
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.AecCore, ptr %118, i32 0, i32 1
  store i32 0, ptr %119, align 4, !tbaa !34
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.AecCore, ptr %120, i32 0, i32 3
  store i32 0, ptr %121, align 4, !tbaa !35
  %122 = load ptr, ptr %4, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.AecCore, ptr %122, i32 0, i32 4
  store i32 0, ptr %123, align 8, !tbaa !36
  %124 = load ptr, ptr %4, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.AecCore, ptr %124, i32 0, i32 2
  store i32 0, ptr %125, align 8, !tbaa !37
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.AecCore, ptr %126, i32 0, i32 10
  %128 = getelementptr inbounds [128 x float], ptr %127, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %128, i8 0, i64 512, i1 false)
  %129 = load ptr, ptr %4, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.AecCore, ptr %129, i32 0, i32 11
  %131 = getelementptr inbounds [128 x float], ptr %130, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %131, i8 0, i64 512, i1 false)
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.AecCore, ptr %132, i32 0, i32 12
  %134 = getelementptr inbounds [128 x float], ptr %133, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %134, i8 0, i64 512, i1 false)
  %135 = load ptr, ptr %4, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.AecCore, ptr %135, i32 0, i32 13
  %137 = getelementptr inbounds [65 x float], ptr %136, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %137, i8 0, i64 260, i1 false)
  %138 = load ptr, ptr %4, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.AecCore, ptr %138, i32 0, i32 14
  %140 = getelementptr inbounds [65 x float], ptr %139, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 4 %140, i8 0, i64 260, i1 false)
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.AecCore, ptr %141, i32 0, i32 16
  %143 = getelementptr inbounds [65 x float], ptr %142, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 4 %143, i8 0, i64 260, i1 false)
  %144 = load ptr, ptr %4, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.AecCore, ptr %144, i32 0, i32 16
  %146 = getelementptr inbounds [65 x float], ptr %145, i64 0, i64 0
  %147 = load ptr, ptr %4, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.AecCore, ptr %147, i32 0, i32 17
  store ptr %146, ptr %148, align 8, !tbaa !38
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.AecCore, ptr %149, i32 0, i32 49
  store i32 0, ptr %150, align 8, !tbaa !39
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %151

151:                                              ; preds = %160, %115
  %152 = load i32, ptr %6, align 4, !tbaa !9
  %153 = icmp slt i32 %152, 65
  br i1 %153, label %154, label %163

154:                                              ; preds = %151
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.AecCore, ptr %155, i32 0, i32 15
  %157 = load i32, ptr %6, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [65 x float], ptr %156, i64 0, i64 %158
  store float 1.000000e+06, ptr %159, align 4, !tbaa !40
  br label %160

160:                                              ; preds = %154
  %161 = load i32, ptr %6, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr %6, align 4, !tbaa !9
  br label %151, !llvm.loop !41

163:                                              ; preds = %151
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.AecCore, ptr %164, i32 0, i32 40
  store i32 0, ptr %165, align 4, !tbaa !43
  %166 = load ptr, ptr %4, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.AecCore, ptr %166, i32 0, i32 18
  %168 = getelementptr inbounds [2 x [2080 x float]], ptr %167, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %168, i8 0, i64 16640, i1 false)
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.AecCore, ptr %169, i32 0, i32 19
  %171 = getelementptr inbounds [2 x [2080 x float]], ptr %170, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %171, i8 0, i64 16640, i1 false)
  %172 = load ptr, ptr %4, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.AecCore, ptr %172, i32 0, i32 20
  %174 = getelementptr inbounds [65 x [2 x float]], ptr %173, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %174, i8 0, i64 520, i1 false)
  %175 = load ptr, ptr %4, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.AecCore, ptr %175, i32 0, i32 21
  %177 = getelementptr inbounds [65 x [2 x float]], ptr %176, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %177, i8 0, i64 520, i1 false)
  %178 = load ptr, ptr %4, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.AecCore, ptr %178, i32 0, i32 22
  %180 = getelementptr inbounds [2080 x [2 x float]], ptr %179, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %180, i8 0, i64 16640, i1 false)
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.AecCore, ptr %181, i32 0, i32 25
  %183 = getelementptr inbounds [65 x float], ptr %182, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %183, i8 0, i64 260, i1 false)
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %193, %163
  %185 = load i32, ptr %6, align 4, !tbaa !9
  %186 = icmp slt i32 %185, 65
  br i1 %186, label %187, label %196

187:                                              ; preds = %184
  %188 = load ptr, ptr %4, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.AecCore, ptr %188, i32 0, i32 24
  %190 = load i32, ptr %6, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds [65 x float], ptr %189, i64 0, i64 %191
  store float 1.000000e+00, ptr %192, align 4, !tbaa !40
  br label %193

193:                                              ; preds = %187
  %194 = load i32, ptr %6, align 4, !tbaa !9
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr %6, align 4, !tbaa !9
  br label %184, !llvm.loop !44

196:                                              ; preds = %184
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %206, %196
  %198 = load i32, ptr %6, align 4, !tbaa !9
  %199 = icmp slt i32 %198, 65
  br i1 %199, label %200, label %209

200:                                              ; preds = %197
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.AecCore, ptr %201, i32 0, i32 23
  %203 = load i32, ptr %6, align 4, !tbaa !9
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds [65 x float], ptr %202, i64 0, i64 %204
  store float 1.000000e+00, ptr %205, align 4, !tbaa !40
  br label %206

206:                                              ; preds = %200
  %207 = load i32, ptr %6, align 4, !tbaa !9
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %6, align 4, !tbaa !9
  br label %197, !llvm.loop !45

209:                                              ; preds = %197
  %210 = load ptr, ptr %4, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.AecCore, ptr %210, i32 0, i32 26
  %212 = getelementptr inbounds [65 x float], ptr %211, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 4 %212, i8 0, i64 260, i1 false)
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.AecCore, ptr %213, i32 0, i32 35
  %215 = getelementptr inbounds [64 x float], ptr %214, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %215, i8 0, i64 256, i1 false)
  %216 = load ptr, ptr %4, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.AecCore, ptr %216, i32 0, i32 27
  store float 1.000000e+00, ptr %217, align 8, !tbaa !46
  %218 = load ptr, ptr %4, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.AecCore, ptr %218, i32 0, i32 28
  store float 1.000000e+00, ptr %219, align 4, !tbaa !47
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.AecCore, ptr %220, i32 0, i32 29
  store float 1.000000e+00, ptr %221, align 8, !tbaa !48
  %222 = load ptr, ptr %4, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.AecCore, ptr %222, i32 0, i32 30
  store i32 0, ptr %223, align 4, !tbaa !49
  %224 = load ptr, ptr %4, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.AecCore, ptr %224, i32 0, i32 31
  store i32 0, ptr %225, align 8, !tbaa !50
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.AecCore, ptr %226, i32 0, i32 32
  store float 2.000000e+00, ptr %227, align 4, !tbaa !51
  %228 = load ptr, ptr %4, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.AecCore, ptr %228, i32 0, i32 33
  store float 2.000000e+00, ptr %229, align 8, !tbaa !52
  %230 = load ptr, ptr %4, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.AecCore, ptr %230, i32 0, i32 36
  store i32 0, ptr %231, align 8, !tbaa !53
  %232 = load ptr, ptr %4, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.AecCore, ptr %232, i32 0, i32 37
  store i16 0, ptr %233, align 4, !tbaa !54
  %234 = load ptr, ptr %4, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.AecCore, ptr %234, i32 0, i32 38
  store i16 0, ptr %235, align 2, !tbaa !55
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.AecCore, ptr %236, i32 0, i32 39
  store i16 0, ptr %237, align 8, !tbaa !56
  %238 = load ptr, ptr %4, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.AecCore, ptr %238, i32 0, i32 46
  store i32 777, ptr %239, align 4, !tbaa !57
  %240 = load ptr, ptr %4, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.AecCore, ptr %240, i32 0, i32 5
  store i32 0, ptr %241, align 4, !tbaa !58
  %242 = load ptr, ptr %4, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.AecCore, ptr %242, i32 0, i32 54
  store i32 0, ptr %243, align 4, !tbaa !59
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  call void @InitMetrics(ptr noundef %244)
  store ptr @FilterFar, ptr @WebRtcAec_FilterFar, align 8, !tbaa !5
  store ptr @ScaleErrorSignal, ptr @WebRtcAec_ScaleErrorSignal, align 8, !tbaa !5
  store ptr @FilterAdaptation, ptr @WebRtcAec_FilterAdaptation, align 8, !tbaa !5
  store ptr @OverdriveAndSuppress, ptr @WebRtcAec_OverdriveAndSuppress, align 8, !tbaa !5
  call void @aec_rdft_init()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %245

245:                                              ; preds = %209, %80, %73, %64, %57, %50, %43, %36, %29
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  %246 = load i32, ptr %3, align 4
  ret i32 %246
}

declare i32 @WebRtc_InitBuffer(ptr noundef) #2

declare i32 @WebRtc_InitDelayEstimatorFarend(ptr noundef) #2

declare i32 @WebRtc_InitDelayEstimator(ptr noundef) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #3

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

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

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

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

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

declare void @aec_rdft_init() #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "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 nounwind willreturn memory(argmem: write) }
attributes #4 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 54968}
!12 = !{!"AecCore", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !7, i64 56, !7, i64 568, !7, i64 1080, !7, i64 1592, !7, i64 1852, !7, i64 2112, !7, i64 2372, !6, i64 2632, !7, i64 2640, !7, i64 19280, !7, i64 35920, !7, i64 36440, !7, i64 36960, !7, i64 53600, !7, i64 53860, !7, i64 54120, !7, i64 54380, !13, i64 54640, !13, i64 54644, !13, i64 54648, !10, i64 54652, !10, i64 54656, !13, i64 54660, !13, i64 54664, !10, i64 54668, !7, i64 54672, !10, i64 54928, !14, i64 54932, !14, i64 54934, !14, i64 54936, !10, i64 54940, !6, i64 54944, !6, i64 54952, !10, i64 54960, !10, i64 54964, !10, i64 54968, !10, i64 54972, !13, i64 54976, !13, i64 54980, !10, i64 54984, !15, i64 54988, !15, i64 55016, !15, i64 55044, !15, i64 55072, !10, i64 55100, !10, i64 55104, !16, i64 55108, !16, i64 55144, !16, i64 55180, !16, i64 55216, !10, i64 55252, !10, i64 55256, !13, i64 55260, !7, i64 55264, !10, i64 55564, !6, i64 55568, !6, i64 55576, !10, i64 55584, !10, i64 55588}
!13 = !{!"float", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!"PowerLevel", !13, i64 0, !10, i64 4, !13, i64 8, !13, i64 12, !10, i64 16, !13, i64 20, !13, i64 24}
!16 = !{!"Stats", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !10, i64 28, !10, i64 32}
!17 = !{!12, !13, i64 54976}
!18 = !{!12, !13, i64 54980}
!19 = !{!12, !6, i64 24}
!20 = !{!12, !6, i64 32}
!21 = !{!12, !6, i64 40}
!22 = !{!12, !6, i64 48}
!23 = !{!12, !6, i64 54944}
!24 = !{!12, !6, i64 54952}
!25 = !{!12, !10, i64 54960}
!26 = !{!12, !6, i64 55568}
!27 = !{!12, !6, i64 55576}
!28 = !{!12, !10, i64 55564}
!29 = !{!12, !10, i64 55584}
!30 = !{!12, !10, i64 55588}
!31 = !{!12, !10, i64 54668}
!32 = !{!12, !10, i64 54964}
!33 = !{!12, !10, i64 0}
!34 = !{!12, !10, i64 4}
!35 = !{!12, !10, i64 12}
!36 = !{!12, !10, i64 16}
!37 = !{!12, !10, i64 8}
!38 = !{!12, !6, i64 2632}
!39 = !{!12, !10, i64 54984}
!40 = !{!13, !13, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{!12, !10, i64 54940}
!44 = distinct !{!44, !42}
!45 = distinct !{!45, !42}
!46 = !{!12, !13, i64 54640}
!47 = !{!12, !13, i64 54644}
!48 = !{!12, !13, i64 54648}
!49 = !{!12, !10, i64 54652}
!50 = !{!12, !10, i64 54656}
!51 = !{!12, !13, i64 54660}
!52 = !{!12, !13, i64 54664}
!53 = !{!12, !10, i64 54928}
!54 = !{!12, !14, i64 54932}
!55 = !{!12, !14, i64 54934}
!56 = !{!12, !14, i64 54936}
!57 = !{!12, !10, i64 54972}
!58 = !{!12, !10, i64 20}
!59 = !{!12, !10, i64 55100}


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

@WebRtcAec_FilterFar = external dso_local local_unnamed_addr global ptr, align 8
@WebRtcAec_ScaleErrorSignal = external dso_local local_unnamed_addr global ptr, align 8
@WebRtcAec_FilterAdaptation = external dso_local local_unnamed_addr global ptr, align 8
@WebRtcAec_OverdriveAndSuppress = external dso_local local_unnamed_addr global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @WebRtcAec_InitAec(ptr noundef %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 54968
  store i32 %1, ptr %3, align 8, !tbaa !5
  %4 = icmp eq i32 %1, 8000
  %5 = getelementptr inbounds i8, ptr %0, i64 54976
  %6 = insertelement <2 x i1> poison, i1 %4, i64 0
  %7 = shufflevector <2 x i1> %6, <2 x i1> poison, <2 x i32> zeroinitializer
  %8 = select <2 x i1> %7, <2 x float> <float 0x3FE3333340000000, float 0x3EC0C6F7A0000000>, <2 x float> <float 5.000000e-01, float 0x3EB92A7380000000>
  store <2 x float> %8, ptr %5, align 8
  %9 = getelementptr inbounds i8, ptr %0, i64 24
  %10 = load ptr, ptr %9, align 8, !tbaa !15
  %11 = tail call i32 @WebRtc_InitBuffer(ptr noundef %10) #3
  %12 = icmp eq i32 %11, -1
  br i1 %12, label %125, label %13

13:                                               ; preds = %2
  %14 = getelementptr inbounds i8, ptr %0, i64 32
  %15 = load ptr, ptr %14, align 8, !tbaa !16
  %16 = tail call i32 @WebRtc_InitBuffer(ptr noundef %15) #3
  %17 = icmp eq i32 %16, -1
  br i1 %17, label %125, label %18

18:                                               ; preds = %13
  %19 = getelementptr inbounds i8, ptr %0, i64 40
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = tail call i32 @WebRtc_InitBuffer(ptr noundef %20) #3
  %22 = icmp eq i32 %21, -1
  br i1 %22, label %125, label %23

23:                                               ; preds = %18
  %24 = getelementptr inbounds i8, ptr %0, i64 48
  %25 = load ptr, ptr %24, align 8, !tbaa !18
  %26 = tail call i32 @WebRtc_InitBuffer(ptr noundef %25) #3
  %27 = icmp eq i32 %26, -1
  br i1 %27, label %125, label %28

28:                                               ; preds = %23
  %29 = getelementptr inbounds i8, ptr %0, i64 54944
  %30 = load ptr, ptr %29, align 8, !tbaa !19
  %31 = tail call i32 @WebRtc_InitBuffer(ptr noundef %30) #3
  %32 = icmp eq i32 %31, -1
  br i1 %32, label %125, label %33

33:                                               ; preds = %28
  %34 = getelementptr inbounds i8, ptr %0, i64 54952
  %35 = load ptr, ptr %34, align 8, !tbaa !20
  %36 = tail call i32 @WebRtc_InitBuffer(ptr noundef %35) #3
  %37 = icmp eq i32 %36, -1
  br i1 %37, label %125, label %38

38:                                               ; preds = %33
  %39 = getelementptr inbounds i8, ptr %0, i64 54960
  store i32 0, ptr %39, align 8, !tbaa !21
  %40 = getelementptr inbounds i8, ptr %0, i64 55568
  %41 = load ptr, ptr %40, align 8, !tbaa !22
  %42 = tail call i32 @WebRtc_InitDelayEstimatorFarend(ptr noundef %41) #3
  %.not = icmp eq i32 %42, 0
  br i1 %.not, label %43, label %125

43:                                               ; preds = %38
  %44 = getelementptr inbounds i8, ptr %0, i64 55576
  %45 = load ptr, ptr %44, align 8, !tbaa !23
  %46 = tail call i32 @WebRtc_InitDelayEstimator(ptr noundef %45) #3
  %.not79 = icmp eq i32 %46, 0
  br i1 %.not79, label %47, label %125

47:                                               ; preds = %43
  %48 = getelementptr inbounds i8, ptr %0, i64 55264
  %49 = getelementptr inbounds i8, ptr %0, i64 55584
  store i32 0, ptr %49, align 8, !tbaa !24
  %50 = getelementptr inbounds i8, ptr %0, i64 55588
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(304) %48, i8 0, i64 304, i1 false)
  store i32 12, ptr %50, align 4, !tbaa !25
  %51 = getelementptr inbounds i8, ptr %0, i64 54668
  store i32 1, ptr %51, align 4, !tbaa !26
  %52 = load i32, ptr %3, align 8, !tbaa !5
  %53 = icmp eq i32 %52, 32000
  br i1 %53, label %.preheader, label %54

54:                                               ; preds = %47
  %.lhs.trunc = trunc i32 %52 to i16
  %55 = sdiv i16 %.lhs.trunc, 8000
  %.sext = sext i16 %55 to i32
  br label %.preheader

.preheader:                                       ; preds = %47, %54
  %.sext.sink = phi i32 [ %.sext, %54 ], [ 2, %47 ]
  %56 = getelementptr inbounds i8, ptr %0, i64 54964
  store i32 %.sext.sink, ptr %56, align 4
  %57 = getelementptr inbounds i8, ptr %0, i64 56
  %58 = getelementptr inbounds i8, ptr %0, i64 2372
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(260) %58, i8 0, i64 260, i1 false)
  %59 = getelementptr inbounds i8, ptr %0, i64 2632
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20) %0, i8 0, i64 20, i1 false)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(2056) %57, i8 0, i64 2056, i1 false)
  store ptr %58, ptr %59, align 8, !tbaa !27
  %60 = getelementptr inbounds i8, ptr %0, i64 54984
  store i32 0, ptr %60, align 8, !tbaa !28
  %61 = getelementptr inbounds i8, ptr %0, i64 2112
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %61, align 4, !tbaa !29
  %62 = getelementptr inbounds i8, ptr %0, i64 2128
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %62, align 4, !tbaa !29
  %63 = getelementptr inbounds i8, ptr %0, i64 2144
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %63, align 4, !tbaa !29
  %64 = getelementptr inbounds i8, ptr %0, i64 2160
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %64, align 4, !tbaa !29
  %65 = getelementptr inbounds i8, ptr %0, i64 2176
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %65, align 4, !tbaa !29
  %66 = getelementptr inbounds i8, ptr %0, i64 2192
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %66, align 4, !tbaa !29
  %67 = getelementptr inbounds i8, ptr %0, i64 2208
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %67, align 4, !tbaa !29
  %68 = getelementptr inbounds i8, ptr %0, i64 2224
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %68, align 4, !tbaa !29
  %69 = getelementptr inbounds i8, ptr %0, i64 2240
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %69, align 4, !tbaa !29
  %70 = getelementptr inbounds i8, ptr %0, i64 2256
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %70, align 4, !tbaa !29
  %71 = getelementptr inbounds i8, ptr %0, i64 2272
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %71, align 4, !tbaa !29
  %72 = getelementptr inbounds i8, ptr %0, i64 2288
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %72, align 4, !tbaa !29
  %73 = getelementptr inbounds i8, ptr %0, i64 2304
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %73, align 4, !tbaa !29
  %74 = getelementptr inbounds i8, ptr %0, i64 2320
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %74, align 4, !tbaa !29
  %75 = getelementptr inbounds i8, ptr %0, i64 2336
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %75, align 4, !tbaa !29
  %76 = getelementptr inbounds i8, ptr %0, i64 2352
  store <4 x float> <float 1.000000e+06, float 1.000000e+06, float 1.000000e+06, float 1.000000e+06>, ptr %76, align 4, !tbaa !29
  %77 = getelementptr inbounds i8, ptr %0, i64 2368
  store float 1.000000e+06, ptr %77, align 4, !tbaa !29
  %78 = getelementptr inbounds i8, ptr %0, i64 54940
  store i32 0, ptr %78, align 4, !tbaa !30
  %79 = getelementptr inbounds i8, ptr %0, i64 2640
  %80 = getelementptr inbounds i8, ptr %0, i64 54120
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(260) %80, i8 0, i64 260, i1 false)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(50960) %79, i8 0, i64 50960, i1 false)
  %81 = getelementptr inbounds i8, ptr %0, i64 53872
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %81, align 4, !tbaa !29
  %82 = getelementptr inbounds i8, ptr %0, i64 53888
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %82, align 4, !tbaa !29
  %83 = getelementptr inbounds i8, ptr %0, i64 53904
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %83, align 4, !tbaa !29
  %84 = getelementptr inbounds i8, ptr %0, i64 53920
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %84, align 4, !tbaa !29
  %85 = getelementptr inbounds i8, ptr %0, i64 53936
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %85, align 4, !tbaa !29
  %86 = getelementptr inbounds i8, ptr %0, i64 53952
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %86, align 4, !tbaa !29
  %87 = getelementptr inbounds i8, ptr %0, i64 53968
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %87, align 4, !tbaa !29
  %88 = getelementptr inbounds i8, ptr %0, i64 53984
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %88, align 4, !tbaa !29
  %89 = getelementptr inbounds i8, ptr %0, i64 54000
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %89, align 4, !tbaa !29
  %90 = getelementptr inbounds i8, ptr %0, i64 54016
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %90, align 4, !tbaa !29
  %91 = getelementptr inbounds i8, ptr %0, i64 54032
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %91, align 4, !tbaa !29
  %92 = getelementptr inbounds i8, ptr %0, i64 54048
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %92, align 4, !tbaa !29
  %93 = getelementptr inbounds i8, ptr %0, i64 54064
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %93, align 4, !tbaa !29
  %94 = getelementptr inbounds i8, ptr %0, i64 54080
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %94, align 4, !tbaa !29
  %95 = getelementptr inbounds i8, ptr %0, i64 54096
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %95, align 4, !tbaa !29
  %96 = getelementptr inbounds i8, ptr %0, i64 54112
  store <2 x float> <float 1.000000e+00, float 1.000000e+00>, ptr %96, align 4, !tbaa !29
  %97 = getelementptr inbounds i8, ptr %0, i64 53600
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %97, align 4, !tbaa !29
  %98 = getelementptr inbounds i8, ptr %0, i64 53616
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %98, align 4, !tbaa !29
  %99 = getelementptr inbounds i8, ptr %0, i64 53632
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %99, align 4, !tbaa !29
  %100 = getelementptr inbounds i8, ptr %0, i64 53648
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %100, align 4, !tbaa !29
  %101 = getelementptr inbounds i8, ptr %0, i64 53664
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %101, align 4, !tbaa !29
  %102 = getelementptr inbounds i8, ptr %0, i64 53680
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %102, align 4, !tbaa !29
  %103 = getelementptr inbounds i8, ptr %0, i64 53696
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %103, align 4, !tbaa !29
  %104 = getelementptr inbounds i8, ptr %0, i64 53712
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %104, align 4, !tbaa !29
  %105 = getelementptr inbounds i8, ptr %0, i64 53728
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %105, align 4, !tbaa !29
  %106 = getelementptr inbounds i8, ptr %0, i64 53744
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %106, align 4, !tbaa !29
  %107 = getelementptr inbounds i8, ptr %0, i64 53760
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %107, align 4, !tbaa !29
  %108 = getelementptr inbounds i8, ptr %0, i64 53776
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %108, align 4, !tbaa !29
  %109 = getelementptr inbounds i8, ptr %0, i64 53792
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %109, align 4, !tbaa !29
  %110 = getelementptr inbounds i8, ptr %0, i64 53808
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %110, align 4, !tbaa !29
  %111 = getelementptr inbounds i8, ptr %0, i64 53824
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %111, align 4, !tbaa !29
  %112 = getelementptr inbounds i8, ptr %0, i64 53840
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %112, align 4, !tbaa !29
  %113 = getelementptr inbounds i8, ptr %0, i64 53856
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, ptr %113, align 4, !tbaa !29
  %114 = getelementptr inbounds i8, ptr %0, i64 54380
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(260) %114, i8 0, i64 260, i1 false)
  %115 = getelementptr inbounds i8, ptr %0, i64 54672
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(256) %115, i8 0, i64 256, i1 false)
  %116 = getelementptr inbounds i8, ptr %0, i64 54640
  store <2 x float> <float 1.000000e+00, float 1.000000e+00>, ptr %116, align 8, !tbaa !29
  %117 = getelementptr inbounds i8, ptr %0, i64 54648
  store float 1.000000e+00, ptr %117, align 8, !tbaa !31
  %118 = getelementptr inbounds i8, ptr %0, i64 54652
  store i32 0, ptr %118, align 4, !tbaa !32
  %119 = getelementptr inbounds i8, ptr %0, i64 54656
  store i32 0, ptr %119, align 8, !tbaa !33
  %120 = getelementptr inbounds i8, ptr %0, i64 54660
  store <2 x float> <float 2.000000e+00, float 2.000000e+00>, ptr %120, align 4, !tbaa !29
  %121 = getelementptr inbounds i8, ptr %0, i64 54928
  %122 = getelementptr inbounds i8, ptr %0, i64 54972
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(10) %121, i8 0, i64 10, i1 false)
  store i32 777, ptr %122, align 4, !tbaa !34
  %123 = getelementptr inbounds i8, ptr %0, i64 20
  store i32 0, ptr %123, align 4, !tbaa !35
  %124 = getelementptr inbounds i8, ptr %0, i64 55100
  store i32 0, ptr %124, align 4, !tbaa !36
  tail call void @InitMetrics(ptr noundef nonnull %0)
  store ptr @FilterFar, ptr @WebRtcAec_FilterFar, align 8, !tbaa !37
  store ptr @ScaleErrorSignal, ptr @WebRtcAec_ScaleErrorSignal, align 8, !tbaa !37
  store ptr @FilterAdaptation, ptr @WebRtcAec_FilterAdaptation, align 8, !tbaa !37
  store ptr @OverdriveAndSuppress, ptr @WebRtcAec_OverdriveAndSuppress, align 8, !tbaa !37
  tail call void @aec_rdft_init() #3
  br label %125

125:                                              ; preds = %43, %38, %33, %28, %23, %18, %13, %2, %.preheader
  %.076 = phi i32 [ 0, %.preheader ], [ -1, %2 ], [ -1, %13 ], [ -1, %18 ], [ -1, %23 ], [ -1, %28 ], [ -1, %33 ], [ -1, %38 ], [ -1, %43 ]
  ret i32 %.076
}

declare i32 @WebRtc_InitBuffer(ptr noundef) local_unnamed_addr #1

declare i32 @WebRtc_InitDelayEstimatorFarend(ptr noundef) local_unnamed_addr #1

declare i32 @WebRtc_InitDelayEstimator(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nounwind uwtable
declare hidden void @InitMetrics(ptr noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
declare hidden void @OverdriveAndSuppress(ptr noundef, ptr noundef, float noundef, ptr noundef) #0

declare void @aec_rdft_init() local_unnamed_addr #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 54968}
!6 = !{!"AecCore", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !8, i64 56, !8, i64 568, !8, i64 1080, !8, i64 1592, !8, i64 1852, !8, i64 2112, !8, i64 2372, !10, i64 2632, !8, i64 2640, !8, i64 19280, !8, i64 35920, !8, i64 36440, !8, i64 36960, !8, i64 53600, !8, i64 53860, !8, i64 54120, !8, i64 54380, !11, i64 54640, !11, i64 54644, !11, i64 54648, !7, i64 54652, !7, i64 54656, !11, i64 54660, !11, i64 54664, !7, i64 54668, !8, i64 54672, !7, i64 54928, !12, i64 54932, !12, i64 54934, !12, i64 54936, !7, i64 54940, !10, i64 54944, !10, i64 54952, !7, i64 54960, !7, i64 54964, !7, i64 54968, !7, i64 54972, !11, i64 54976, !11, i64 54980, !7, i64 54984, !13, i64 54988, !13, i64 55016, !13, i64 55044, !13, i64 55072, !7, i64 55100, !7, i64 55104, !14, i64 55108, !14, i64 55144, !14, i64 55180, !14, i64 55216, !7, i64 55252, !7, i64 55256, !11, i64 55260, !8, i64 55264, !7, i64 55564, !10, i64 55568, !10, i64 55576, !7, i64 55584, !7, i64 55588}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"float", !8, i64 0}
!12 = !{!"short", !8, i64 0}
!13 = !{!"PowerLevel", !11, i64 0, !7, i64 4, !11, i64 8, !11, i64 12, !7, i64 16, !11, i64 20, !11, i64 24}
!14 = !{!"Stats", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !7, i64 28, !7, i64 32}
!15 = !{!6, !10, i64 24}
!16 = !{!6, !10, i64 32}
!17 = !{!6, !10, i64 40}
!18 = !{!6, !10, i64 48}
!19 = !{!6, !10, i64 54944}
!20 = !{!6, !10, i64 54952}
!21 = !{!6, !7, i64 54960}
!22 = !{!6, !10, i64 55568}
!23 = !{!6, !10, i64 55576}
!24 = !{!6, !7, i64 55584}
!25 = !{!6, !7, i64 55588}
!26 = !{!6, !7, i64 54668}
!27 = !{!6, !10, i64 2632}
!28 = !{!6, !7, i64 54984}
!29 = !{!11, !11, i64 0}
!30 = !{!6, !7, i64 54940}
!31 = !{!6, !11, i64 54648}
!32 = !{!6, !7, i64 54652}
!33 = !{!6, !7, i64 54656}
!34 = !{!6, !7, i64 54972}
!35 = !{!6, !7, i64 20}
!36 = !{!6, !7, i64 55100}
!37 = !{!10, !10, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,MemCpyOptPass,MergedLoadStoreMotionPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass