; LLVM IR from vertver/Fresponze-old :: modules/opus/silk/fixed (burg_modified_FIX)

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

; Function Attrs: nounwind uwtable
define dso_local void @silk_burg_modified_c(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) #0 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca [24 x i32], align 16
  %38 = alloca [24 x i32], align 16
  %39 = alloca [24 x i32], align 16
  %40 = alloca [25 x i32], align 16
  %41 = alloca [25 x i32], align 16
  %42 = alloca [24 x i32], align 16
  %43 = alloca i64, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store i32 %4, ptr %14, align 4, !tbaa !9
  store i32 %5, ptr %15, align 4, !tbaa !9
  store i32 %6, ptr %16, align 4, !tbaa !9
  store i32 %7, ptr %17, align 4, !tbaa !9
  store i32 %8, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr %37) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr %38) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 100, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 100, ptr %41) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr %42) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %46 = load i32, ptr %18, align 4, !tbaa !9
  %47 = load ptr, ptr %13, align 8, !tbaa !5
  %48 = load ptr, ptr %13, align 8, !tbaa !5
  %49 = load i32, ptr %15, align 4, !tbaa !9
  %50 = load i32, ptr %16, align 4, !tbaa !9
  %51 = mul nsw i32 %49, %50
  %52 = call i64 @silk_inner_prod16_aligned_64_c(ptr noundef %47, ptr noundef %48, i32 noundef %51)
  store i64 %52, ptr %43, align 8, !tbaa !11
  %53 = load i64, ptr %43, align 8, !tbaa !11
  %54 = call i32 @silk_CLZ64(i64 noundef %53)
  store i32 %54, ptr %22, align 4, !tbaa !9
  %55 = load i32, ptr %22, align 4, !tbaa !9
  %56 = sub nsw i32 36, %55
  store i32 %56, ptr %23, align 4, !tbaa !9
  %57 = load i32, ptr %23, align 4, !tbaa !9
  %58 = icmp sgt i32 %57, 7
  br i1 %58, label %59, label %60

59:                                               ; preds = %9
  store i32 7, ptr %23, align 4, !tbaa !9
  br label %60

60:                                               ; preds = %59, %9
  %61 = load i32, ptr %23, align 4, !tbaa !9
  %62 = icmp slt i32 %61, -16
  br i1 %62, label %63, label %64

63:                                               ; preds = %60
  store i32 -16, ptr %23, align 4, !tbaa !9
  br label %64

64:                                               ; preds = %63, %60
  %65 = load i32, ptr %23, align 4, !tbaa !9
  %66 = icmp sgt i32 %65, 0
  br i1 %66, label %67, label %73

67:                                               ; preds = %64
  %68 = load i64, ptr %43, align 8, !tbaa !11
  %69 = load i32, ptr %23, align 4, !tbaa !9
  %70 = zext i32 %69 to i64
  %71 = ashr i64 %68, %70
  %72 = trunc i64 %71 to i32
  store i32 %72, ptr %25, align 4, !tbaa !9
  br label %79

73:                                               ; preds = %64
  %74 = load i64, ptr %43, align 8, !tbaa !11
  %75 = trunc i64 %74 to i32
  %76 = load i32, ptr %23, align 4, !tbaa !9
  %77 = sub nsw i32 0, %76
  %78 = shl i32 %75, %77
  store i32 %78, ptr %25, align 4, !tbaa !9
  br label %79

79:                                               ; preds = %73, %67
  %80 = load i32, ptr %25, align 4, !tbaa !9
  %81 = load i32, ptr %25, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = mul nsw i64 42950, %82
  %84 = ashr i64 %83, 32
  %85 = trunc i64 %84 to i32
  %86 = add nsw i32 %80, %85
  %87 = add nsw i32 %86, 1
  %88 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 0
  store i32 %87, ptr %88, align 16, !tbaa !9
  %89 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 0
  store i32 %87, ptr %89, align 16, !tbaa !9
  %90 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %90, i8 0, i64 96, i1 false)
  %91 = load i32, ptr %23, align 4, !tbaa !9
  %92 = icmp sgt i32 %91, 0
  br i1 %92, label %93, label %139

93:                                               ; preds = %79
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %94

94:                                               ; preds = %135, %93
  %95 = load i32, ptr %21, align 4, !tbaa !9
  %96 = load i32, ptr %16, align 4, !tbaa !9
  %97 = icmp slt i32 %95, %96
  br i1 %97, label %98, label %138

98:                                               ; preds = %94
  %99 = load ptr, ptr %13, align 8, !tbaa !5
  %100 = load i32, ptr %21, align 4, !tbaa !9
  %101 = load i32, ptr %15, align 4, !tbaa !9
  %102 = mul nsw i32 %100, %101
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i16, ptr %99, i64 %103
  store ptr %104, ptr %36, align 8, !tbaa !5
  store i32 1, ptr %20, align 4, !tbaa !9
  br label %105

105:                                              ; preds = %131, %98
  %106 = load i32, ptr %20, align 4, !tbaa !9
  %107 = load i32, ptr %17, align 4, !tbaa !9
  %108 = add nsw i32 %107, 1
  %109 = icmp slt i32 %106, %108
  br i1 %109, label %110, label %134

110:                                              ; preds = %105
  %111 = load i32, ptr %18, align 4, !tbaa !9
  %112 = load ptr, ptr %36, align 8, !tbaa !5
  %113 = load ptr, ptr %36, align 8, !tbaa !5
  %114 = load i32, ptr %20, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds i16, ptr %113, i64 %115
  %117 = load i32, ptr %15, align 4, !tbaa !9
  %118 = load i32, ptr %20, align 4, !tbaa !9
  %119 = sub nsw i32 %117, %118
  %120 = call i64 @silk_inner_prod16_aligned_64_c(ptr noundef %112, ptr noundef %116, i32 noundef %119)
  %121 = load i32, ptr %23, align 4, !tbaa !9
  %122 = zext i32 %121 to i64
  %123 = ashr i64 %120, %122
  %124 = trunc i64 %123 to i32
  %125 = load i32, ptr %20, align 4, !tbaa !9
  %126 = sub nsw i32 %125, 1
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %127
  %129 = load i32, ptr %128, align 4, !tbaa !9
  %130 = add nsw i32 %129, %124
  store i32 %130, ptr %128, align 4, !tbaa !9
  br label %131

131:                                              ; preds = %110
  %132 = load i32, ptr %20, align 4, !tbaa !9
  %133 = add nsw i32 %132, 1
  store i32 %133, ptr %20, align 4, !tbaa !9
  br label %105, !llvm.loop !13

134:                                              ; preds = %105
  br label %135

135:                                              ; preds = %134
  %136 = load i32, ptr %21, align 4, !tbaa !9
  %137 = add nsw i32 %136, 1
  store i32 %137, ptr %21, align 4, !tbaa !9
  br label %94, !llvm.loop !15

138:                                              ; preds = %94
  br label %237

139:                                              ; preds = %79
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %233, %139
  %141 = load i32, ptr %21, align 4, !tbaa !9
  %142 = load i32, ptr %16, align 4, !tbaa !9
  %143 = icmp slt i32 %141, %142
  br i1 %143, label %144, label %236

144:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  %145 = load ptr, ptr %13, align 8, !tbaa !5
  %146 = load i32, ptr %21, align 4, !tbaa !9
  %147 = load i32, ptr %15, align 4, !tbaa !9
  %148 = mul nsw i32 %146, %147
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds i16, ptr %145, i64 %149
  store ptr %150, ptr %36, align 8, !tbaa !5
  %151 = load ptr, ptr %36, align 8, !tbaa !5
  %152 = load ptr, ptr %36, align 8, !tbaa !5
  %153 = getelementptr inbounds i16, ptr %152, i64 1
  %154 = getelementptr inbounds [24 x i32], ptr %42, i64 0, i64 0
  %155 = load i32, ptr %15, align 4, !tbaa !9
  %156 = load i32, ptr %17, align 4, !tbaa !9
  %157 = sub nsw i32 %155, %156
  %158 = load i32, ptr %17, align 4, !tbaa !9
  %159 = load i32, ptr %18, align 4, !tbaa !9
  call void @celt_pitch_xcorr_c(ptr noundef %151, ptr noundef %153, ptr noundef %154, i32 noundef %157, i32 noundef %158, i32 noundef %159)
  store i32 1, ptr %20, align 4, !tbaa !9
  br label %160

160:                                              ; preds = %205, %144
  %161 = load i32, ptr %20, align 4, !tbaa !9
  %162 = load i32, ptr %17, align 4, !tbaa !9
  %163 = add nsw i32 %162, 1
  %164 = icmp slt i32 %161, %163
  br i1 %164, label %165, label %208

165:                                              ; preds = %160
  %166 = load i32, ptr %20, align 4, !tbaa !9
  %167 = load i32, ptr %15, align 4, !tbaa !9
  %168 = add nsw i32 %166, %167
  %169 = load i32, ptr %17, align 4, !tbaa !9
  %170 = sub nsw i32 %168, %169
  store i32 %170, ptr %44, align 4, !tbaa !9
  store i32 0, ptr %45, align 4, !tbaa !9
  br label %171

171:                                              ; preds = %194, %165
  %172 = load i32, ptr %44, align 4, !tbaa !9
  %173 = load i32, ptr %15, align 4, !tbaa !9
  %174 = icmp slt i32 %172, %173
  br i1 %174, label %175, label %197

175:                                              ; preds = %171
  %176 = load i32, ptr %45, align 4, !tbaa !9
  %177 = sitofp i32 %176 to float
  %178 = load ptr, ptr %36, align 8, !tbaa !5
  %179 = load i32, ptr %44, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i16, ptr %178, i64 %180
  %182 = load i16, ptr %181, align 2, !tbaa !16
  %183 = sitofp i16 %182 to float
  %184 = load ptr, ptr %36, align 8, !tbaa !5
  %185 = load i32, ptr %44, align 4, !tbaa !9
  %186 = load i32, ptr %20, align 4, !tbaa !9
  %187 = sub nsw i32 %185, %186
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i16, ptr %184, i64 %188
  %190 = load i16, ptr %189, align 2, !tbaa !16
  %191 = sitofp i16 %190 to float
  %192 = call float @llvm.fmuladd.f32(float %183, float %191, float %177)
  %193 = fptosi float %192 to i32
  store i32 %193, ptr %45, align 4, !tbaa !9
  br label %194

194:                                              ; preds = %175
  %195 = load i32, ptr %44, align 4, !tbaa !9
  %196 = add nsw i32 %195, 1
  store i32 %196, ptr %44, align 4, !tbaa !9
  br label %171, !llvm.loop !18

197:                                              ; preds = %171
  %198 = load i32, ptr %45, align 4, !tbaa !9
  %199 = load i32, ptr %20, align 4, !tbaa !9
  %200 = sub nsw i32 %199, 1
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds [24 x i32], ptr %42, i64 0, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !9
  %204 = add nsw i32 %203, %198
  store i32 %204, ptr %202, align 4, !tbaa !9
  br label %205

205:                                              ; preds = %197
  %206 = load i32, ptr %20, align 4, !tbaa !9
  %207 = add nsw i32 %206, 1
  store i32 %207, ptr %20, align 4, !tbaa !9
  br label %160, !llvm.loop !19

208:                                              ; preds = %160
  store i32 1, ptr %20, align 4, !tbaa !9
  br label %209

209:                                              ; preds = %229, %208
  %210 = load i32, ptr %20, align 4, !tbaa !9
  %211 = load i32, ptr %17, align 4, !tbaa !9
  %212 = add nsw i32 %211, 1
  %213 = icmp slt i32 %210, %212
  br i1 %213, label %214, label %232

214:                                              ; preds = %209
  %215 = load i32, ptr %20, align 4, !tbaa !9
  %216 = sub nsw i32 %215, 1
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds [24 x i32], ptr %42, i64 0, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = load i32, ptr %23, align 4, !tbaa !9
  %221 = sub nsw i32 0, %220
  %222 = shl i32 %219, %221
  %223 = load i32, ptr %20, align 4, !tbaa !9
  %224 = sub nsw i32 %223, 1
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %225
  %227 = load i32, ptr %226, align 4, !tbaa !9
  %228 = add nsw i32 %227, %222
  store i32 %228, ptr %226, align 4, !tbaa !9
  br label %229

229:                                              ; preds = %214
  %230 = load i32, ptr %20, align 4, !tbaa !9
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %20, align 4, !tbaa !9
  br label %209, !llvm.loop !20

232:                                              ; preds = %209
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %233

233:                                              ; preds = %232
  %234 = load i32, ptr %21, align 4, !tbaa !9
  %235 = add nsw i32 %234, 1
  store i32 %235, ptr %21, align 4, !tbaa !9
  br label %140, !llvm.loop !21

236:                                              ; preds = %140
  br label %237

237:                                              ; preds = %236, %138
  %238 = getelementptr inbounds [24 x i32], ptr %38, i64 0, i64 0
  %239 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %238, ptr align 16 %239, i64 96, i1 false)
  %240 = load i32, ptr %25, align 4, !tbaa !9
  %241 = load i32, ptr %25, align 4, !tbaa !9
  %242 = sext i32 %241 to i64
  %243 = mul nsw i64 42950, %242
  %244 = ashr i64 %243, 32
  %245 = trunc i64 %244 to i32
  %246 = add nsw i32 %240, %245
  %247 = add nsw i32 %246, 1
  %248 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 0
  store i32 %247, ptr %248, align 16, !tbaa !9
  %249 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 0
  store i32 %247, ptr %249, align 16, !tbaa !9
  store i32 1073741824, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %250

250:                                              ; preds = %1014, %237
  %251 = load i32, ptr %20, align 4, !tbaa !9
  %252 = load i32, ptr %17, align 4, !tbaa !9
  %253 = icmp slt i32 %251, %252
  br i1 %253, label %254, label %1017

254:                                              ; preds = %250
  %255 = load i32, ptr %23, align 4, !tbaa !9
  %256 = icmp sgt i32 %255, -2
  br i1 %256, label %257, label %474

257:                                              ; preds = %254
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %470, %257
  %259 = load i32, ptr %21, align 4, !tbaa !9
  %260 = load i32, ptr %16, align 4, !tbaa !9
  %261 = icmp slt i32 %259, %260
  br i1 %261, label %262, label %473

262:                                              ; preds = %258
  %263 = load ptr, ptr %13, align 8, !tbaa !5
  %264 = load i32, ptr %21, align 4, !tbaa !9
  %265 = load i32, ptr %15, align 4, !tbaa !9
  %266 = mul nsw i32 %264, %265
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i16, ptr %263, i64 %267
  store ptr %268, ptr %36, align 8, !tbaa !5
  %269 = load ptr, ptr %36, align 8, !tbaa !5
  %270 = load i32, ptr %20, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds i16, ptr %269, i64 %271
  %273 = load i16, ptr %272, align 2, !tbaa !16
  %274 = sext i16 %273 to i32
  %275 = load i32, ptr %23, align 4, !tbaa !9
  %276 = sub nsw i32 16, %275
  %277 = shl i32 %274, %276
  %278 = sub nsw i32 0, %277
  store i32 %278, ptr %34, align 4, !tbaa !9
  %279 = load ptr, ptr %36, align 8, !tbaa !5
  %280 = load i32, ptr %15, align 4, !tbaa !9
  %281 = load i32, ptr %20, align 4, !tbaa !9
  %282 = sub nsw i32 %280, %281
  %283 = sub nsw i32 %282, 1
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds i16, ptr %279, i64 %284
  %286 = load i16, ptr %285, align 2, !tbaa !16
  %287 = sext i16 %286 to i32
  %288 = load i32, ptr %23, align 4, !tbaa !9
  %289 = sub nsw i32 16, %288
  %290 = shl i32 %287, %289
  %291 = sub nsw i32 0, %290
  store i32 %291, ptr %35, align 4, !tbaa !9
  %292 = load ptr, ptr %36, align 8, !tbaa !5
  %293 = load i32, ptr %20, align 4, !tbaa !9
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds i16, ptr %292, i64 %294
  %296 = load i16, ptr %295, align 2, !tbaa !16
  %297 = sext i16 %296 to i32
  %298 = shl i32 %297, 9
  store i32 %298, ptr %32, align 4, !tbaa !9
  %299 = load ptr, ptr %36, align 8, !tbaa !5
  %300 = load i32, ptr %15, align 4, !tbaa !9
  %301 = load i32, ptr %20, align 4, !tbaa !9
  %302 = sub nsw i32 %300, %301
  %303 = sub nsw i32 %302, 1
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i16, ptr %299, i64 %304
  %306 = load i16, ptr %305, align 2, !tbaa !16
  %307 = sext i16 %306 to i32
  %308 = shl i32 %307, 9
  store i32 %308, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %400, %262
  %310 = load i32, ptr %19, align 4, !tbaa !9
  %311 = load i32, ptr %20, align 4, !tbaa !9
  %312 = icmp slt i32 %310, %311
  br i1 %312, label %313, label %403

313:                                              ; preds = %309
  %314 = load i32, ptr %19, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !9
  %318 = sext i32 %317 to i64
  %319 = load i32, ptr %34, align 4, !tbaa !9
  %320 = sext i32 %319 to i64
  %321 = load ptr, ptr %36, align 8, !tbaa !5
  %322 = load i32, ptr %20, align 4, !tbaa !9
  %323 = load i32, ptr %19, align 4, !tbaa !9
  %324 = sub nsw i32 %322, %323
  %325 = sub nsw i32 %324, 1
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds i16, ptr %321, i64 %326
  %328 = load i16, ptr %327, align 2, !tbaa !16
  %329 = sext i16 %328 to i64
  %330 = mul nsw i64 %320, %329
  %331 = ashr i64 %330, 16
  %332 = add nsw i64 %318, %331
  %333 = trunc i64 %332 to i32
  %334 = load i32, ptr %19, align 4, !tbaa !9
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %335
  store i32 %333, ptr %336, align 4, !tbaa !9
  %337 = load i32, ptr %19, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds [24 x i32], ptr %38, i64 0, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = load i32, ptr %35, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = load ptr, ptr %36, align 8, !tbaa !5
  %345 = load i32, ptr %15, align 4, !tbaa !9
  %346 = load i32, ptr %20, align 4, !tbaa !9
  %347 = sub nsw i32 %345, %346
  %348 = load i32, ptr %19, align 4, !tbaa !9
  %349 = add nsw i32 %347, %348
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds i16, ptr %344, i64 %350
  %352 = load i16, ptr %351, align 2, !tbaa !16
  %353 = sext i16 %352 to i64
  %354 = mul nsw i64 %343, %353
  %355 = ashr i64 %354, 16
  %356 = add nsw i64 %341, %355
  %357 = trunc i64 %356 to i32
  %358 = load i32, ptr %19, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds [24 x i32], ptr %38, i64 0, i64 %359
  store i32 %357, ptr %360, align 4, !tbaa !9
  %361 = load i32, ptr %19, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !9
  store i32 %364, ptr %30, align 4, !tbaa !9
  %365 = load i32, ptr %32, align 4, !tbaa !9
  %366 = sext i32 %365 to i64
  %367 = load i32, ptr %30, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = load ptr, ptr %36, align 8, !tbaa !5
  %370 = load i32, ptr %20, align 4, !tbaa !9
  %371 = load i32, ptr %19, align 4, !tbaa !9
  %372 = sub nsw i32 %370, %371
  %373 = sub nsw i32 %372, 1
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i16, ptr %369, i64 %374
  %376 = load i16, ptr %375, align 2, !tbaa !16
  %377 = sext i16 %376 to i64
  %378 = mul nsw i64 %368, %377
  %379 = ashr i64 %378, 16
  %380 = add nsw i64 %366, %379
  %381 = trunc i64 %380 to i32
  store i32 %381, ptr %32, align 4, !tbaa !9
  %382 = load i32, ptr %33, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = load i32, ptr %30, align 4, !tbaa !9
  %385 = sext i32 %384 to i64
  %386 = load ptr, ptr %36, align 8, !tbaa !5
  %387 = load i32, ptr %15, align 4, !tbaa !9
  %388 = load i32, ptr %20, align 4, !tbaa !9
  %389 = sub nsw i32 %387, %388
  %390 = load i32, ptr %19, align 4, !tbaa !9
  %391 = add nsw i32 %389, %390
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i16, ptr %386, i64 %392
  %394 = load i16, ptr %393, align 2, !tbaa !16
  %395 = sext i16 %394 to i64
  %396 = mul nsw i64 %385, %395
  %397 = ashr i64 %396, 16
  %398 = add nsw i64 %383, %397
  %399 = trunc i64 %398 to i32
  store i32 %399, ptr %33, align 4, !tbaa !9
  br label %400

400:                                              ; preds = %313
  %401 = load i32, ptr %19, align 4, !tbaa !9
  %402 = add nsw i32 %401, 1
  store i32 %402, ptr %19, align 4, !tbaa !9
  br label %309, !llvm.loop !22

403:                                              ; preds = %309
  %404 = load i32, ptr %32, align 4, !tbaa !9
  %405 = sub nsw i32 0, %404
  %406 = load i32, ptr %23, align 4, !tbaa !9
  %407 = sub nsw i32 7, %406
  %408 = shl i32 %405, %407
  store i32 %408, ptr %32, align 4, !tbaa !9
  %409 = load i32, ptr %33, align 4, !tbaa !9
  %410 = sub nsw i32 0, %409
  %411 = load i32, ptr %23, align 4, !tbaa !9
  %412 = sub nsw i32 7, %411
  %413 = shl i32 %410, %412
  store i32 %413, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %414

414:                                              ; preds = %466, %403
  %415 = load i32, ptr %19, align 4, !tbaa !9
  %416 = load i32, ptr %20, align 4, !tbaa !9
  %417 = icmp sle i32 %415, %416
  br i1 %417, label %418, label %469

418:                                              ; preds = %414
  %419 = load i32, ptr %19, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %420
  %422 = load i32, ptr %421, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = load i32, ptr %32, align 4, !tbaa !9
  %425 = sext i32 %424 to i64
  %426 = load ptr, ptr %36, align 8, !tbaa !5
  %427 = load i32, ptr %20, align 4, !tbaa !9
  %428 = load i32, ptr %19, align 4, !tbaa !9
  %429 = sub nsw i32 %427, %428
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds i16, ptr %426, i64 %430
  %432 = load i16, ptr %431, align 2, !tbaa !16
  %433 = sext i16 %432 to i64
  %434 = mul nsw i64 %425, %433
  %435 = ashr i64 %434, 16
  %436 = add nsw i64 %423, %435
  %437 = trunc i64 %436 to i32
  %438 = load i32, ptr %19, align 4, !tbaa !9
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %439
  store i32 %437, ptr %440, align 4, !tbaa !9
  %441 = load i32, ptr %19, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %442
  %444 = load i32, ptr %443, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = load i32, ptr %33, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = load ptr, ptr %36, align 8, !tbaa !5
  %449 = load i32, ptr %15, align 4, !tbaa !9
  %450 = load i32, ptr %20, align 4, !tbaa !9
  %451 = sub nsw i32 %449, %450
  %452 = load i32, ptr %19, align 4, !tbaa !9
  %453 = add nsw i32 %451, %452
  %454 = sub nsw i32 %453, 1
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i16, ptr %448, i64 %455
  %457 = load i16, ptr %456, align 2, !tbaa !16
  %458 = sext i16 %457 to i64
  %459 = mul nsw i64 %447, %458
  %460 = ashr i64 %459, 16
  %461 = add nsw i64 %445, %460
  %462 = trunc i64 %461 to i32
  %463 = load i32, ptr %19, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %464
  store i32 %462, ptr %465, align 4, !tbaa !9
  br label %466

466:                                              ; preds = %418
  %467 = load i32, ptr %19, align 4, !tbaa !9
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %19, align 4, !tbaa !9
  br label %414, !llvm.loop !23

469:                                              ; preds = %414
  br label %470

470:                                              ; preds = %469
  %471 = load i32, ptr %21, align 4, !tbaa !9
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr %21, align 4, !tbaa !9
  br label %258, !llvm.loop !24

473:                                              ; preds = %258
  br label %682

474:                                              ; preds = %254
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %475

475:                                              ; preds = %678, %474
  %476 = load i32, ptr %21, align 4, !tbaa !9
  %477 = load i32, ptr %16, align 4, !tbaa !9
  %478 = icmp slt i32 %476, %477
  br i1 %478, label %479, label %681

479:                                              ; preds = %475
  %480 = load ptr, ptr %13, align 8, !tbaa !5
  %481 = load i32, ptr %21, align 4, !tbaa !9
  %482 = load i32, ptr %15, align 4, !tbaa !9
  %483 = mul nsw i32 %481, %482
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds i16, ptr %480, i64 %484
  store ptr %485, ptr %36, align 8, !tbaa !5
  %486 = load ptr, ptr %36, align 8, !tbaa !5
  %487 = load i32, ptr %20, align 4, !tbaa !9
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i16, ptr %486, i64 %488
  %490 = load i16, ptr %489, align 2, !tbaa !16
  %491 = sext i16 %490 to i32
  %492 = load i32, ptr %23, align 4, !tbaa !9
  %493 = sub nsw i32 0, %492
  %494 = shl i32 %491, %493
  %495 = sub nsw i32 0, %494
  store i32 %495, ptr %34, align 4, !tbaa !9
  %496 = load ptr, ptr %36, align 8, !tbaa !5
  %497 = load i32, ptr %15, align 4, !tbaa !9
  %498 = load i32, ptr %20, align 4, !tbaa !9
  %499 = sub nsw i32 %497, %498
  %500 = sub nsw i32 %499, 1
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds i16, ptr %496, i64 %501
  %503 = load i16, ptr %502, align 2, !tbaa !16
  %504 = sext i16 %503 to i32
  %505 = load i32, ptr %23, align 4, !tbaa !9
  %506 = sub nsw i32 0, %505
  %507 = shl i32 %504, %506
  %508 = sub nsw i32 0, %507
  store i32 %508, ptr %35, align 4, !tbaa !9
  %509 = load ptr, ptr %36, align 8, !tbaa !5
  %510 = load i32, ptr %20, align 4, !tbaa !9
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds i16, ptr %509, i64 %511
  %513 = load i16, ptr %512, align 2, !tbaa !16
  %514 = sext i16 %513 to i32
  %515 = shl i32 %514, 17
  store i32 %515, ptr %32, align 4, !tbaa !9
  %516 = load ptr, ptr %36, align 8, !tbaa !5
  %517 = load i32, ptr %15, align 4, !tbaa !9
  %518 = load i32, ptr %20, align 4, !tbaa !9
  %519 = sub nsw i32 %517, %518
  %520 = sub nsw i32 %519, 1
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds i16, ptr %516, i64 %521
  %523 = load i16, ptr %522, align 2, !tbaa !16
  %524 = sext i16 %523 to i32
  %525 = shl i32 %524, 17
  store i32 %525, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %526

526:                                              ; preds = %604, %479
  %527 = load i32, ptr %19, align 4, !tbaa !9
  %528 = load i32, ptr %20, align 4, !tbaa !9
  %529 = icmp slt i32 %527, %528
  br i1 %529, label %530, label %607

530:                                              ; preds = %526
  %531 = load i32, ptr %19, align 4, !tbaa !9
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %532
  %534 = load i32, ptr %533, align 4, !tbaa !9
  %535 = load i32, ptr %34, align 4, !tbaa !9
  %536 = load ptr, ptr %36, align 8, !tbaa !5
  %537 = load i32, ptr %20, align 4, !tbaa !9
  %538 = load i32, ptr %19, align 4, !tbaa !9
  %539 = sub nsw i32 %537, %538
  %540 = sub nsw i32 %539, 1
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds i16, ptr %536, i64 %541
  %543 = load i16, ptr %542, align 2, !tbaa !16
  %544 = sext i16 %543 to i32
  %545 = mul nsw i32 %535, %544
  %546 = add nsw i32 %534, %545
  %547 = load i32, ptr %19, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %548
  store i32 %546, ptr %549, align 4, !tbaa !9
  %550 = load i32, ptr %19, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds [24 x i32], ptr %38, i64 0, i64 %551
  %553 = load i32, ptr %552, align 4, !tbaa !9
  %554 = load i32, ptr %35, align 4, !tbaa !9
  %555 = load ptr, ptr %36, align 8, !tbaa !5
  %556 = load i32, ptr %15, align 4, !tbaa !9
  %557 = load i32, ptr %20, align 4, !tbaa !9
  %558 = sub nsw i32 %556, %557
  %559 = load i32, ptr %19, align 4, !tbaa !9
  %560 = add nsw i32 %558, %559
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i16, ptr %555, i64 %561
  %563 = load i16, ptr %562, align 2, !tbaa !16
  %564 = sext i16 %563 to i32
  %565 = mul nsw i32 %554, %564
  %566 = add nsw i32 %553, %565
  %567 = load i32, ptr %19, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds [24 x i32], ptr %38, i64 0, i64 %568
  store i32 %566, ptr %569, align 4, !tbaa !9
  %570 = load i32, ptr %19, align 4, !tbaa !9
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %571
  %573 = load i32, ptr %572, align 4, !tbaa !9
  %574 = ashr i32 %573, 7
  %575 = add nsw i32 %574, 1
  %576 = ashr i32 %575, 1
  store i32 %576, ptr %31, align 4, !tbaa !9
  %577 = load i32, ptr %32, align 4, !tbaa !9
  %578 = load ptr, ptr %36, align 8, !tbaa !5
  %579 = load i32, ptr %20, align 4, !tbaa !9
  %580 = load i32, ptr %19, align 4, !tbaa !9
  %581 = sub nsw i32 %579, %580
  %582 = sub nsw i32 %581, 1
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds i16, ptr %578, i64 %583
  %585 = load i16, ptr %584, align 2, !tbaa !16
  %586 = sext i16 %585 to i32
  %587 = load i32, ptr %31, align 4, !tbaa !9
  %588 = mul i32 %586, %587
  %589 = add i32 %577, %588
  store i32 %589, ptr %32, align 4, !tbaa !9
  %590 = load i32, ptr %33, align 4, !tbaa !9
  %591 = load ptr, ptr %36, align 8, !tbaa !5
  %592 = load i32, ptr %15, align 4, !tbaa !9
  %593 = load i32, ptr %20, align 4, !tbaa !9
  %594 = sub nsw i32 %592, %593
  %595 = load i32, ptr %19, align 4, !tbaa !9
  %596 = add nsw i32 %594, %595
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds i16, ptr %591, i64 %597
  %599 = load i16, ptr %598, align 2, !tbaa !16
  %600 = sext i16 %599 to i32
  %601 = load i32, ptr %31, align 4, !tbaa !9
  %602 = mul i32 %600, %601
  %603 = add i32 %590, %602
  store i32 %603, ptr %33, align 4, !tbaa !9
  br label %604

604:                                              ; preds = %530
  %605 = load i32, ptr %19, align 4, !tbaa !9
  %606 = add nsw i32 %605, 1
  store i32 %606, ptr %19, align 4, !tbaa !9
  br label %526, !llvm.loop !25

607:                                              ; preds = %526
  %608 = load i32, ptr %32, align 4, !tbaa !9
  %609 = sub nsw i32 0, %608
  store i32 %609, ptr %32, align 4, !tbaa !9
  %610 = load i32, ptr %33, align 4, !tbaa !9
  %611 = sub nsw i32 0, %610
  store i32 %611, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %612

612:                                              ; preds = %674, %607
  %613 = load i32, ptr %19, align 4, !tbaa !9
  %614 = load i32, ptr %20, align 4, !tbaa !9
  %615 = icmp sle i32 %613, %614
  br i1 %615, label %616, label %677

616:                                              ; preds = %612
  %617 = load i32, ptr %19, align 4, !tbaa !9
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %618
  %620 = load i32, ptr %619, align 4, !tbaa !9
  %621 = sext i32 %620 to i64
  %622 = load i32, ptr %32, align 4, !tbaa !9
  %623 = sext i32 %622 to i64
  %624 = load ptr, ptr %36, align 8, !tbaa !5
  %625 = load i32, ptr %20, align 4, !tbaa !9
  %626 = load i32, ptr %19, align 4, !tbaa !9
  %627 = sub nsw i32 %625, %626
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds i16, ptr %624, i64 %628
  %630 = load i16, ptr %629, align 2, !tbaa !16
  %631 = sext i16 %630 to i32
  %632 = load i32, ptr %23, align 4, !tbaa !9
  %633 = sub nsw i32 0, %632
  %634 = sub nsw i32 %633, 1
  %635 = shl i32 %631, %634
  %636 = sext i32 %635 to i64
  %637 = mul nsw i64 %623, %636
  %638 = ashr i64 %637, 16
  %639 = add nsw i64 %621, %638
  %640 = trunc i64 %639 to i32
  %641 = load i32, ptr %19, align 4, !tbaa !9
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %642
  store i32 %640, ptr %643, align 4, !tbaa !9
  %644 = load i32, ptr %19, align 4, !tbaa !9
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %645
  %647 = load i32, ptr %646, align 4, !tbaa !9
  %648 = sext i32 %647 to i64
  %649 = load i32, ptr %33, align 4, !tbaa !9
  %650 = sext i32 %649 to i64
  %651 = load ptr, ptr %36, align 8, !tbaa !5
  %652 = load i32, ptr %15, align 4, !tbaa !9
  %653 = load i32, ptr %20, align 4, !tbaa !9
  %654 = sub nsw i32 %652, %653
  %655 = load i32, ptr %19, align 4, !tbaa !9
  %656 = add nsw i32 %654, %655
  %657 = sub nsw i32 %656, 1
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds i16, ptr %651, i64 %658
  %660 = load i16, ptr %659, align 2, !tbaa !16
  %661 = sext i16 %660 to i32
  %662 = load i32, ptr %23, align 4, !tbaa !9
  %663 = sub nsw i32 0, %662
  %664 = sub nsw i32 %663, 1
  %665 = shl i32 %661, %664
  %666 = sext i32 %665 to i64
  %667 = mul nsw i64 %650, %666
  %668 = ashr i64 %667, 16
  %669 = add nsw i64 %648, %668
  %670 = trunc i64 %669 to i32
  %671 = load i32, ptr %19, align 4, !tbaa !9
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %672
  store i32 %670, ptr %673, align 4, !tbaa !9
  br label %674

674:                                              ; preds = %616
  %675 = load i32, ptr %19, align 4, !tbaa !9
  %676 = add nsw i32 %675, 1
  store i32 %676, ptr %19, align 4, !tbaa !9
  br label %612, !llvm.loop !26

677:                                              ; preds = %612
  br label %678

678:                                              ; preds = %677
  %679 = load i32, ptr %21, align 4, !tbaa !9
  %680 = add nsw i32 %679, 1
  store i32 %680, ptr %21, align 4, !tbaa !9
  br label %475, !llvm.loop !27

681:                                              ; preds = %475
  br label %682

682:                                              ; preds = %681, %473
  %683 = load i32, ptr %20, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %684
  %686 = load i32, ptr %685, align 4, !tbaa !9
  store i32 %686, ptr %32, align 4, !tbaa !9
  %687 = load i32, ptr %20, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds [24 x i32], ptr %38, i64 0, i64 %688
  %690 = load i32, ptr %689, align 4, !tbaa !9
  store i32 %690, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %26, align 4, !tbaa !9
  %691 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 0
  %692 = load i32, ptr %691, align 16, !tbaa !9
  %693 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 0
  %694 = load i32, ptr %693, align 16, !tbaa !9
  %695 = add nsw i32 %692, %694
  store i32 %695, ptr %27, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %696

696:                                              ; preds = %801, %682
  %697 = load i32, ptr %19, align 4, !tbaa !9
  %698 = load i32, ptr %20, align 4, !tbaa !9
  %699 = icmp slt i32 %697, %698
  br i1 %699, label %700, label %804

700:                                              ; preds = %696
  %701 = load i32, ptr %19, align 4, !tbaa !9
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %702
  %704 = load i32, ptr %703, align 4, !tbaa !9
  store i32 %704, ptr %30, align 4, !tbaa !9
  %705 = load i32, ptr %30, align 4, !tbaa !9
  %706 = icmp sgt i32 %705, 0
  br i1 %706, label %707, label %709

707:                                              ; preds = %700
  %708 = load i32, ptr %30, align 4, !tbaa !9
  br label %712

709:                                              ; preds = %700
  %710 = load i32, ptr %30, align 4, !tbaa !9
  %711 = sub nsw i32 0, %710
  br label %712

712:                                              ; preds = %709, %707
  %713 = phi i32 [ %708, %707 ], [ %711, %709 ]
  %714 = call i32 @silk_CLZ32(i32 noundef %713)
  %715 = sub nsw i32 %714, 1
  store i32 %715, ptr %22, align 4, !tbaa !9
  %716 = load i32, ptr %22, align 4, !tbaa !9
  %717 = icmp slt i32 7, %716
  br i1 %717, label %718, label %719

718:                                              ; preds = %712
  br label %721

719:                                              ; preds = %712
  %720 = load i32, ptr %22, align 4, !tbaa !9
  br label %721

721:                                              ; preds = %719, %718
  %722 = phi i32 [ 7, %718 ], [ %720, %719 ]
  store i32 %722, ptr %22, align 4, !tbaa !9
  %723 = load i32, ptr %30, align 4, !tbaa !9
  %724 = load i32, ptr %22, align 4, !tbaa !9
  %725 = shl i32 %723, %724
  store i32 %725, ptr %31, align 4, !tbaa !9
  %726 = load i32, ptr %32, align 4, !tbaa !9
  %727 = load i32, ptr %20, align 4, !tbaa !9
  %728 = load i32, ptr %19, align 4, !tbaa !9
  %729 = sub nsw i32 %727, %728
  %730 = sub nsw i32 %729, 1
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds [24 x i32], ptr %38, i64 0, i64 %731
  %733 = load i32, ptr %732, align 4, !tbaa !9
  %734 = sext i32 %733 to i64
  %735 = load i32, ptr %31, align 4, !tbaa !9
  %736 = sext i32 %735 to i64
  %737 = mul nsw i64 %734, %736
  %738 = ashr i64 %737, 32
  %739 = trunc i64 %738 to i32
  %740 = load i32, ptr %22, align 4, !tbaa !9
  %741 = sub nsw i32 7, %740
  %742 = shl i32 %739, %741
  %743 = add nsw i32 %726, %742
  store i32 %743, ptr %32, align 4, !tbaa !9
  %744 = load i32, ptr %33, align 4, !tbaa !9
  %745 = load i32, ptr %20, align 4, !tbaa !9
  %746 = load i32, ptr %19, align 4, !tbaa !9
  %747 = sub nsw i32 %745, %746
  %748 = sub nsw i32 %747, 1
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds [24 x i32], ptr %37, i64 0, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = load i32, ptr %31, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  %755 = mul nsw i64 %752, %754
  %756 = ashr i64 %755, 32
  %757 = trunc i64 %756 to i32
  %758 = load i32, ptr %22, align 4, !tbaa !9
  %759 = sub nsw i32 7, %758
  %760 = shl i32 %757, %759
  %761 = add nsw i32 %744, %760
  store i32 %761, ptr %33, align 4, !tbaa !9
  %762 = load i32, ptr %26, align 4, !tbaa !9
  %763 = load i32, ptr %20, align 4, !tbaa !9
  %764 = load i32, ptr %19, align 4, !tbaa !9
  %765 = sub nsw i32 %763, %764
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %766
  %768 = load i32, ptr %767, align 4, !tbaa !9
  %769 = sext i32 %768 to i64
  %770 = load i32, ptr %31, align 4, !tbaa !9
  %771 = sext i32 %770 to i64
  %772 = mul nsw i64 %769, %771
  %773 = ashr i64 %772, 32
  %774 = trunc i64 %773 to i32
  %775 = load i32, ptr %22, align 4, !tbaa !9
  %776 = sub nsw i32 7, %775
  %777 = shl i32 %774, %776
  %778 = add nsw i32 %762, %777
  store i32 %778, ptr %26, align 4, !tbaa !9
  %779 = load i32, ptr %27, align 4, !tbaa !9
  %780 = load i32, ptr %19, align 4, !tbaa !9
  %781 = add nsw i32 %780, 1
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %782
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = load i32, ptr %19, align 4, !tbaa !9
  %786 = add nsw i32 %785, 1
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %787
  %789 = load i32, ptr %788, align 4, !tbaa !9
  %790 = add nsw i32 %784, %789
  %791 = sext i32 %790 to i64
  %792 = load i32, ptr %31, align 4, !tbaa !9
  %793 = sext i32 %792 to i64
  %794 = mul nsw i64 %791, %793
  %795 = ashr i64 %794, 32
  %796 = trunc i64 %795 to i32
  %797 = load i32, ptr %22, align 4, !tbaa !9
  %798 = sub nsw i32 7, %797
  %799 = shl i32 %796, %798
  %800 = add nsw i32 %779, %799
  store i32 %800, ptr %27, align 4, !tbaa !9
  br label %801

801:                                              ; preds = %721
  %802 = load i32, ptr %19, align 4, !tbaa !9
  %803 = add nsw i32 %802, 1
  store i32 %803, ptr %19, align 4, !tbaa !9
  br label %696, !llvm.loop !28

804:                                              ; preds = %696
  %805 = load i32, ptr %32, align 4, !tbaa !9
  %806 = load i32, ptr %20, align 4, !tbaa !9
  %807 = add nsw i32 %806, 1
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %808
  store i32 %805, ptr %809, align 4, !tbaa !9
  %810 = load i32, ptr %33, align 4, !tbaa !9
  %811 = load i32, ptr %20, align 4, !tbaa !9
  %812 = add nsw i32 %811, 1
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %813
  store i32 %810, ptr %814, align 4, !tbaa !9
  %815 = load i32, ptr %26, align 4, !tbaa !9
  %816 = load i32, ptr %33, align 4, !tbaa !9
  %817 = add nsw i32 %815, %816
  store i32 %817, ptr %26, align 4, !tbaa !9
  %818 = load i32, ptr %26, align 4, !tbaa !9
  %819 = sub nsw i32 0, %818
  %820 = shl i32 %819, 1
  store i32 %820, ptr %26, align 4, !tbaa !9
  %821 = load i32, ptr %26, align 4, !tbaa !9
  %822 = icmp sgt i32 %821, 0
  br i1 %822, label %823, label %825

823:                                              ; preds = %804
  %824 = load i32, ptr %26, align 4, !tbaa !9
  br label %828

825:                                              ; preds = %804
  %826 = load i32, ptr %26, align 4, !tbaa !9
  %827 = sub nsw i32 0, %826
  br label %828

828:                                              ; preds = %825, %823
  %829 = phi i32 [ %824, %823 ], [ %827, %825 ]
  %830 = load i32, ptr %27, align 4, !tbaa !9
  %831 = icmp slt i32 %829, %830
  br i1 %831, label %832, label %836

832:                                              ; preds = %828
  %833 = load i32, ptr %26, align 4, !tbaa !9
  %834 = load i32, ptr %27, align 4, !tbaa !9
  %835 = call i32 @silk_DIV32_varQ(i32 noundef %833, i32 noundef %834, i32 noundef 31)
  store i32 %835, ptr %28, align 4, !tbaa !9
  br label %841

836:                                              ; preds = %828
  %837 = load i32, ptr %26, align 4, !tbaa !9
  %838 = icmp sgt i32 %837, 0
  %839 = zext i1 %838 to i64
  %840 = select i1 %838, i32 2147483647, i32 -2147483648
  store i32 %840, ptr %28, align 4, !tbaa !9
  br label %841

841:                                              ; preds = %836, %832
  %842 = load i32, ptr %28, align 4, !tbaa !9
  %843 = sext i32 %842 to i64
  %844 = load i32, ptr %28, align 4, !tbaa !9
  %845 = sext i32 %844 to i64
  %846 = mul nsw i64 %843, %845
  %847 = ashr i64 %846, 32
  %848 = trunc i64 %847 to i32
  %849 = sub nsw i32 1073741824, %848
  store i32 %849, ptr %32, align 4, !tbaa !9
  %850 = load i32, ptr %29, align 4, !tbaa !9
  %851 = sext i32 %850 to i64
  %852 = load i32, ptr %32, align 4, !tbaa !9
  %853 = sext i32 %852 to i64
  %854 = mul nsw i64 %851, %853
  %855 = ashr i64 %854, 32
  %856 = trunc i64 %855 to i32
  %857 = shl i32 %856, 2
  store i32 %857, ptr %32, align 4, !tbaa !9
  %858 = load i32, ptr %32, align 4, !tbaa !9
  %859 = load i32, ptr %14, align 4, !tbaa !9
  %860 = icmp sle i32 %858, %859
  br i1 %860, label %861, label %887

861:                                              ; preds = %841
  %862 = load i32, ptr %14, align 4, !tbaa !9
  %863 = load i32, ptr %29, align 4, !tbaa !9
  %864 = call i32 @silk_DIV32_varQ(i32 noundef %862, i32 noundef %863, i32 noundef 30)
  %865 = sub nsw i32 1073741824, %864
  store i32 %865, ptr %33, align 4, !tbaa !9
  %866 = load i32, ptr %33, align 4, !tbaa !9
  %867 = call i32 @silk_SQRT_APPROX(i32 noundef %866)
  store i32 %867, ptr %28, align 4, !tbaa !9
  %868 = load i32, ptr %28, align 4, !tbaa !9
  %869 = icmp sgt i32 %868, 0
  br i1 %869, label %870, label %885

870:                                              ; preds = %861
  %871 = load i32, ptr %28, align 4, !tbaa !9
  %872 = load i32, ptr %33, align 4, !tbaa !9
  %873 = load i32, ptr %28, align 4, !tbaa !9
  %874 = sdiv i32 %872, %873
  %875 = add nsw i32 %871, %874
  %876 = ashr i32 %875, 1
  store i32 %876, ptr %28, align 4, !tbaa !9
  %877 = load i32, ptr %28, align 4, !tbaa !9
  %878 = shl i32 %877, 16
  store i32 %878, ptr %28, align 4, !tbaa !9
  %879 = load i32, ptr %26, align 4, !tbaa !9
  %880 = icmp slt i32 %879, 0
  br i1 %880, label %881, label %884

881:                                              ; preds = %870
  %882 = load i32, ptr %28, align 4, !tbaa !9
  %883 = sub nsw i32 0, %882
  store i32 %883, ptr %28, align 4, !tbaa !9
  br label %884

884:                                              ; preds = %881, %870
  br label %885

885:                                              ; preds = %884, %861
  %886 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %886, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %889

887:                                              ; preds = %841
  %888 = load i32, ptr %32, align 4, !tbaa !9
  store i32 %888, ptr %29, align 4, !tbaa !9
  br label %889

889:                                              ; preds = %887, %885
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %890

890:                                              ; preds = %937, %889
  %891 = load i32, ptr %19, align 4, !tbaa !9
  %892 = load i32, ptr %20, align 4, !tbaa !9
  %893 = add nsw i32 %892, 1
  %894 = ashr i32 %893, 1
  %895 = icmp slt i32 %891, %894
  br i1 %895, label %896, label %940

896:                                              ; preds = %890
  %897 = load i32, ptr %19, align 4, !tbaa !9
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %898
  %900 = load i32, ptr %899, align 4, !tbaa !9
  store i32 %900, ptr %32, align 4, !tbaa !9
  %901 = load i32, ptr %20, align 4, !tbaa !9
  %902 = load i32, ptr %19, align 4, !tbaa !9
  %903 = sub nsw i32 %901, %902
  %904 = sub nsw i32 %903, 1
  %905 = sext i32 %904 to i64
  %906 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %905
  %907 = load i32, ptr %906, align 4, !tbaa !9
  store i32 %907, ptr %33, align 4, !tbaa !9
  %908 = load i32, ptr %32, align 4, !tbaa !9
  %909 = load i32, ptr %33, align 4, !tbaa !9
  %910 = sext i32 %909 to i64
  %911 = load i32, ptr %28, align 4, !tbaa !9
  %912 = sext i32 %911 to i64
  %913 = mul nsw i64 %910, %912
  %914 = ashr i64 %913, 32
  %915 = trunc i64 %914 to i32
  %916 = shl i32 %915, 1
  %917 = add nsw i32 %908, %916
  %918 = load i32, ptr %19, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %919
  store i32 %917, ptr %920, align 4, !tbaa !9
  %921 = load i32, ptr %33, align 4, !tbaa !9
  %922 = load i32, ptr %32, align 4, !tbaa !9
  %923 = sext i32 %922 to i64
  %924 = load i32, ptr %28, align 4, !tbaa !9
  %925 = sext i32 %924 to i64
  %926 = mul nsw i64 %923, %925
  %927 = ashr i64 %926, 32
  %928 = trunc i64 %927 to i32
  %929 = shl i32 %928, 1
  %930 = add nsw i32 %921, %929
  %931 = load i32, ptr %20, align 4, !tbaa !9
  %932 = load i32, ptr %19, align 4, !tbaa !9
  %933 = sub nsw i32 %931, %932
  %934 = sub nsw i32 %933, 1
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %935
  store i32 %930, ptr %936, align 4, !tbaa !9
  br label %937

937:                                              ; preds = %896
  %938 = load i32, ptr %19, align 4, !tbaa !9
  %939 = add nsw i32 %938, 1
  store i32 %939, ptr %19, align 4, !tbaa !9
  br label %890, !llvm.loop !29

940:                                              ; preds = %890
  %941 = load i32, ptr %28, align 4, !tbaa !9
  %942 = ashr i32 %941, 6
  %943 = load i32, ptr %20, align 4, !tbaa !9
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %944
  store i32 %942, ptr %945, align 4, !tbaa !9
  %946 = load i32, ptr %24, align 4, !tbaa !9
  %947 = icmp ne i32 %946, 0
  br i1 %947, label %948, label %963

948:                                              ; preds = %940
  %949 = load i32, ptr %20, align 4, !tbaa !9
  %950 = add nsw i32 %949, 1
  store i32 %950, ptr %19, align 4, !tbaa !9
  br label %951

951:                                              ; preds = %959, %948
  %952 = load i32, ptr %19, align 4, !tbaa !9
  %953 = load i32, ptr %17, align 4, !tbaa !9
  %954 = icmp slt i32 %952, %953
  br i1 %954, label %955, label %962

955:                                              ; preds = %951
  %956 = load i32, ptr %19, align 4, !tbaa !9
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %957
  store i32 0, ptr %958, align 4, !tbaa !9
  br label %959

959:                                              ; preds = %955
  %960 = load i32, ptr %19, align 4, !tbaa !9
  %961 = add nsw i32 %960, 1
  store i32 %961, ptr %19, align 4, !tbaa !9
  br label %951, !llvm.loop !30

962:                                              ; preds = %951
  br label %1017

963:                                              ; preds = %940
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %964

964:                                              ; preds = %1010, %963
  %965 = load i32, ptr %19, align 4, !tbaa !9
  %966 = load i32, ptr %20, align 4, !tbaa !9
  %967 = add nsw i32 %966, 1
  %968 = icmp sle i32 %965, %967
  br i1 %968, label %969, label %1013

969:                                              ; preds = %964
  %970 = load i32, ptr %19, align 4, !tbaa !9
  %971 = sext i32 %970 to i64
  %972 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %971
  %973 = load i32, ptr %972, align 4, !tbaa !9
  store i32 %973, ptr %32, align 4, !tbaa !9
  %974 = load i32, ptr %20, align 4, !tbaa !9
  %975 = load i32, ptr %19, align 4, !tbaa !9
  %976 = sub nsw i32 %974, %975
  %977 = add nsw i32 %976, 1
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %978
  %980 = load i32, ptr %979, align 4, !tbaa !9
  store i32 %980, ptr %33, align 4, !tbaa !9
  %981 = load i32, ptr %32, align 4, !tbaa !9
  %982 = load i32, ptr %33, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = load i32, ptr %28, align 4, !tbaa !9
  %985 = sext i32 %984 to i64
  %986 = mul nsw i64 %983, %985
  %987 = ashr i64 %986, 32
  %988 = trunc i64 %987 to i32
  %989 = shl i32 %988, 1
  %990 = add nsw i32 %981, %989
  %991 = load i32, ptr %19, align 4, !tbaa !9
  %992 = sext i32 %991 to i64
  %993 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %992
  store i32 %990, ptr %993, align 4, !tbaa !9
  %994 = load i32, ptr %33, align 4, !tbaa !9
  %995 = load i32, ptr %32, align 4, !tbaa !9
  %996 = sext i32 %995 to i64
  %997 = load i32, ptr %28, align 4, !tbaa !9
  %998 = sext i32 %997 to i64
  %999 = mul nsw i64 %996, %998
  %1000 = ashr i64 %999, 32
  %1001 = trunc i64 %1000 to i32
  %1002 = shl i32 %1001, 1
  %1003 = add nsw i32 %994, %1002
  %1004 = load i32, ptr %20, align 4, !tbaa !9
  %1005 = load i32, ptr %19, align 4, !tbaa !9
  %1006 = sub nsw i32 %1004, %1005
  %1007 = add nsw i32 %1006, 1
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds [25 x i32], ptr %41, i64 0, i64 %1008
  store i32 %1003, ptr %1009, align 4, !tbaa !9
  br label %1010

1010:                                             ; preds = %969
  %1011 = load i32, ptr %19, align 4, !tbaa !9
  %1012 = add nsw i32 %1011, 1
  store i32 %1012, ptr %19, align 4, !tbaa !9
  br label %964, !llvm.loop !31

1013:                                             ; preds = %964
  br label %1014

1014:                                             ; preds = %1013
  %1015 = load i32, ptr %20, align 4, !tbaa !9
  %1016 = add nsw i32 %1015, 1
  store i32 %1016, ptr %20, align 4, !tbaa !9
  br label %250, !llvm.loop !32

1017:                                             ; preds = %962, %250
  %1018 = load i32, ptr %24, align 4, !tbaa !9
  %1019 = icmp ne i32 %1018, 0
  br i1 %1019, label %1020, label %1110

1020:                                             ; preds = %1017
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1021

1021:                                             ; preds = %1038, %1020
  %1022 = load i32, ptr %19, align 4, !tbaa !9
  %1023 = load i32, ptr %17, align 4, !tbaa !9
  %1024 = icmp slt i32 %1022, %1023
  br i1 %1024, label %1025, label %1041

1025:                                             ; preds = %1021
  %1026 = load i32, ptr %19, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %1027
  %1029 = load i32, ptr %1028, align 4, !tbaa !9
  %1030 = ashr i32 %1029, 8
  %1031 = add nsw i32 %1030, 1
  %1032 = ashr i32 %1031, 1
  %1033 = sub nsw i32 0, %1032
  %1034 = load ptr, ptr %12, align 8, !tbaa !5
  %1035 = load i32, ptr %19, align 4, !tbaa !9
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds i32, ptr %1034, i64 %1036
  store i32 %1033, ptr %1037, align 4, !tbaa !9
  br label %1038

1038:                                             ; preds = %1025
  %1039 = load i32, ptr %19, align 4, !tbaa !9
  %1040 = add nsw i32 %1039, 1
  store i32 %1040, ptr %19, align 4, !tbaa !9
  br label %1021, !llvm.loop !33

1041:                                             ; preds = %1021
  %1042 = load i32, ptr %23, align 4, !tbaa !9
  %1043 = icmp sgt i32 %1042, 0
  br i1 %1043, label %1044, label %1071

1044:                                             ; preds = %1041
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %1045

1045:                                             ; preds = %1067, %1044
  %1046 = load i32, ptr %21, align 4, !tbaa !9
  %1047 = load i32, ptr %16, align 4, !tbaa !9
  %1048 = icmp slt i32 %1046, %1047
  br i1 %1048, label %1049, label %1070

1049:                                             ; preds = %1045
  %1050 = load ptr, ptr %13, align 8, !tbaa !5
  %1051 = load i32, ptr %21, align 4, !tbaa !9
  %1052 = load i32, ptr %15, align 4, !tbaa !9
  %1053 = mul nsw i32 %1051, %1052
  %1054 = sext i32 %1053 to i64
  %1055 = getelementptr inbounds i16, ptr %1050, i64 %1054
  store ptr %1055, ptr %36, align 8, !tbaa !5
  %1056 = load i32, ptr %18, align 4, !tbaa !9
  %1057 = load ptr, ptr %36, align 8, !tbaa !5
  %1058 = load ptr, ptr %36, align 8, !tbaa !5
  %1059 = load i32, ptr %17, align 4, !tbaa !9
  %1060 = call i64 @silk_inner_prod16_aligned_64_c(ptr noundef %1057, ptr noundef %1058, i32 noundef %1059)
  %1061 = load i32, ptr %23, align 4, !tbaa !9
  %1062 = zext i32 %1061 to i64
  %1063 = ashr i64 %1060, %1062
  %1064 = trunc i64 %1063 to i32
  %1065 = load i32, ptr %25, align 4, !tbaa !9
  %1066 = sub nsw i32 %1065, %1064
  store i32 %1066, ptr %25, align 4, !tbaa !9
  br label %1067

1067:                                             ; preds = %1049
  %1068 = load i32, ptr %21, align 4, !tbaa !9
  %1069 = add nsw i32 %1068, 1
  store i32 %1069, ptr %21, align 4, !tbaa !9
  br label %1045, !llvm.loop !34

1070:                                             ; preds = %1045
  br label %1097

1071:                                             ; preds = %1041
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %1072

1072:                                             ; preds = %1093, %1071
  %1073 = load i32, ptr %21, align 4, !tbaa !9
  %1074 = load i32, ptr %16, align 4, !tbaa !9
  %1075 = icmp slt i32 %1073, %1074
  br i1 %1075, label %1076, label %1096

1076:                                             ; preds = %1072
  %1077 = load ptr, ptr %13, align 8, !tbaa !5
  %1078 = load i32, ptr %21, align 4, !tbaa !9
  %1079 = load i32, ptr %15, align 4, !tbaa !9
  %1080 = mul nsw i32 %1078, %1079
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds i16, ptr %1077, i64 %1081
  store ptr %1082, ptr %36, align 8, !tbaa !5
  %1083 = load ptr, ptr %36, align 8, !tbaa !5
  %1084 = load ptr, ptr %36, align 8, !tbaa !5
  %1085 = load i32, ptr %17, align 4, !tbaa !9
  %1086 = load i32, ptr %18, align 4, !tbaa !9
  %1087 = call i32 @silk_inner_prod_aligned(ptr noundef %1083, ptr noundef %1084, i32 noundef %1085, i32 noundef %1086)
  %1088 = load i32, ptr %23, align 4, !tbaa !9
  %1089 = sub nsw i32 0, %1088
  %1090 = shl i32 %1087, %1089
  %1091 = load i32, ptr %25, align 4, !tbaa !9
  %1092 = sub nsw i32 %1091, %1090
  store i32 %1092, ptr %25, align 4, !tbaa !9
  br label %1093

1093:                                             ; preds = %1076
  %1094 = load i32, ptr %21, align 4, !tbaa !9
  %1095 = add nsw i32 %1094, 1
  store i32 %1095, ptr %21, align 4, !tbaa !9
  br label %1072, !llvm.loop !35

1096:                                             ; preds = %1072
  br label %1097

1097:                                             ; preds = %1096, %1070
  %1098 = load i32, ptr %29, align 4, !tbaa !9
  %1099 = sext i32 %1098 to i64
  %1100 = load i32, ptr %25, align 4, !tbaa !9
  %1101 = sext i32 %1100 to i64
  %1102 = mul nsw i64 %1099, %1101
  %1103 = ashr i64 %1102, 32
  %1104 = trunc i64 %1103 to i32
  %1105 = shl i32 %1104, 2
  %1106 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %1105, ptr %1106, align 4, !tbaa !9
  %1107 = load i32, ptr %23, align 4, !tbaa !9
  %1108 = sub nsw i32 0, %1107
  %1109 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %1108, ptr %1109, align 4, !tbaa !9
  br label %1178

1110:                                             ; preds = %1017
  %1111 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 0
  %1112 = load i32, ptr %1111, align 16, !tbaa !9
  store i32 %1112, ptr %27, align 4, !tbaa !9
  store i32 65536, ptr %32, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1113

1113:                                             ; preds = %1155, %1110
  %1114 = load i32, ptr %19, align 4, !tbaa !9
  %1115 = load i32, ptr %17, align 4, !tbaa !9
  %1116 = icmp slt i32 %1114, %1115
  br i1 %1116, label %1117, label %1158

1117:                                             ; preds = %1113
  %1118 = load i32, ptr %19, align 4, !tbaa !9
  %1119 = sext i32 %1118 to i64
  %1120 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %1119
  %1121 = load i32, ptr %1120, align 4, !tbaa !9
  %1122 = ashr i32 %1121, 8
  %1123 = add nsw i32 %1122, 1
  %1124 = ashr i32 %1123, 1
  store i32 %1124, ptr %31, align 4, !tbaa !9
  %1125 = load i32, ptr %27, align 4, !tbaa !9
  %1126 = sext i32 %1125 to i64
  %1127 = load i32, ptr %19, align 4, !tbaa !9
  %1128 = add nsw i32 %1127, 1
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds [25 x i32], ptr %40, i64 0, i64 %1129
  %1131 = load i32, ptr %1130, align 4, !tbaa !9
  %1132 = sext i32 %1131 to i64
  %1133 = load i32, ptr %31, align 4, !tbaa !9
  %1134 = sext i32 %1133 to i64
  %1135 = mul nsw i64 %1132, %1134
  %1136 = ashr i64 %1135, 16
  %1137 = add nsw i64 %1126, %1136
  %1138 = trunc i64 %1137 to i32
  store i32 %1138, ptr %27, align 4, !tbaa !9
  %1139 = load i32, ptr %32, align 4, !tbaa !9
  %1140 = sext i32 %1139 to i64
  %1141 = load i32, ptr %31, align 4, !tbaa !9
  %1142 = sext i32 %1141 to i64
  %1143 = load i32, ptr %31, align 4, !tbaa !9
  %1144 = sext i32 %1143 to i64
  %1145 = mul nsw i64 %1142, %1144
  %1146 = ashr i64 %1145, 16
  %1147 = add nsw i64 %1140, %1146
  %1148 = trunc i64 %1147 to i32
  store i32 %1148, ptr %32, align 4, !tbaa !9
  %1149 = load i32, ptr %31, align 4, !tbaa !9
  %1150 = sub nsw i32 0, %1149
  %1151 = load ptr, ptr %12, align 8, !tbaa !5
  %1152 = load i32, ptr %19, align 4, !tbaa !9
  %1153 = sext i32 %1152 to i64
  %1154 = getelementptr inbounds i32, ptr %1151, i64 %1153
  store i32 %1150, ptr %1154, align 4, !tbaa !9
  br label %1155

1155:                                             ; preds = %1117
  %1156 = load i32, ptr %19, align 4, !tbaa !9
  %1157 = add nsw i32 %1156, 1
  store i32 %1157, ptr %19, align 4, !tbaa !9
  br label %1113, !llvm.loop !36

1158:                                             ; preds = %1113
  %1159 = load i32, ptr %27, align 4, !tbaa !9
  %1160 = sext i32 %1159 to i64
  %1161 = load i32, ptr %25, align 4, !tbaa !9
  %1162 = sext i32 %1161 to i64
  %1163 = mul nsw i64 42950, %1162
  %1164 = ashr i64 %1163, 32
  %1165 = trunc i64 %1164 to i32
  %1166 = sext i32 %1165 to i64
  %1167 = load i32, ptr %32, align 4, !tbaa !9
  %1168 = sub nsw i32 0, %1167
  %1169 = sext i32 %1168 to i64
  %1170 = mul nsw i64 %1166, %1169
  %1171 = ashr i64 %1170, 16
  %1172 = add nsw i64 %1160, %1171
  %1173 = trunc i64 %1172 to i32
  %1174 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %1173, ptr %1174, align 4, !tbaa !9
  %1175 = load i32, ptr %23, align 4, !tbaa !9
  %1176 = sub nsw i32 0, %1175
  %1177 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %1176, ptr %1177, align 4, !tbaa !9
  br label %1178

1178:                                             ; preds = %1158, %1097
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 100, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 100, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  ret void
}

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

declare i64 @silk_inner_prod16_aligned_64_c(ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_CLZ64(i64 noundef) #3

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

declare void @celt_pitch_xcorr_c(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #2

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_CLZ32(i32 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_DIV32_varQ(i32 noundef, i32 noundef, i32 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_SQRT_APPROX(i32 noundef) #3

declare i32 @silk_inner_prod_aligned(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!17, !17, i64 0}
!17 = !{!"short", !7, i64 0}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = distinct !{!36, !14}


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

; Function Attrs: nounwind uwtable
define dso_local void @silk_burg_modified_c(ptr nocapture noundef writeonly %0, ptr nocapture noundef writeonly %1, ptr nocapture noundef writeonly %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) local_unnamed_addr #0 {
  %10 = alloca [24 x i32], align 16
  %11 = alloca [24 x i32], align 16
  %12 = alloca [24 x i32], align 16
  %13 = alloca [25 x i32], align 16
  %14 = alloca [25 x i32], align 16
  %15 = alloca [24 x i32], align 16
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 100, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 100, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %15) #8
  %16 = mul nsw i32 %6, %5
  %17 = tail call i64 @silk_inner_prod16_aligned_64_c(ptr noundef %3, ptr noundef %3, i32 noundef %16) #8
  %18 = tail call i32 @silk_CLZ64(i64 noundef %17)
  %19 = sub nsw i32 36, %18
  %spec.store.select = tail call i32 @llvm.smin.i32(i32 %19, i32 7)
  %spec.store.select1 = tail call i32 @llvm.smax.i32(i32 %spec.store.select, i32 -16)
  %20 = icmp slt i32 %18, 36
  %21 = zext nneg i32 %spec.store.select1 to i64
  %22 = ashr i64 %17, %21
  %23 = trunc i64 %22 to i32
  %24 = trunc i64 %17 to i32
  %25 = sub nsw i32 0, %spec.store.select1
  %26 = shl i32 %24, %25
  %.0384 = select i1 %20, i32 %23, i32 %26
  %27 = sext i32 %.0384 to i64
  %28 = mul nsw i64 %27, 42950
  %29 = lshr i64 %28, 32
  %30 = trunc nuw i64 %29 to i32
  %31 = add i32 %.0384, 1
  %32 = add i32 %31, %30
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(96) %10, i8 0, i64 96, i1 false)
  %33 = icmp sgt i32 %6, 0
  br i1 %20, label %.preheader441, label %.preheader444

.preheader444:                                    ; preds = %9
  br i1 %33, label %.lr.ph457, label %.loopexit442

.lr.ph457:                                        ; preds = %.preheader444
  %34 = sub i32 %5, %7
  %.not448 = icmp slt i32 %7, 1
  %35 = add i32 %5, 1
  %36 = sub i32 %35, %7
  %37 = add i32 %7, 1
  %38 = sext i32 %5 to i64
  %wide.trip.count569 = zext nneg i32 %6 to i64
  %wide.trip.count = zext i32 %37 to i64
  %wide.trip.count564 = zext i32 %37 to i64
  %39 = add nsw i64 %wide.trip.count, -1
  %40 = add i32 %7, -2
  %min.iters.check = icmp ult i32 %37, 9
  %n.vec = and i64 %39, -8
  %ind.end = or disjoint i64 %n.vec, 1
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %25, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %39, %n.vec
  br label %56

.preheader441:                                    ; preds = %9
  br i1 %33, label %.lr.ph464, label %.loopexit442

.lr.ph464:                                        ; preds = %.preheader441
  %.not428458 = icmp slt i32 %7, 1
  br i1 %.not428458, label %._crit_edge518, label %.lr.ph461.preheader

.lr.ph461.preheader:                              ; preds = %.lr.ph464
  %41 = sext i32 %5 to i64
  %42 = add nuw i32 %7, 1
  %wide.trip.count579 = zext nneg i32 %6 to i64
  %wide.trip.count574 = zext i32 %42 to i64
  br label %.lr.ph461

.lr.ph461:                                        ; preds = %.lr.ph461.preheader, %._crit_edge462
  %indvars.iv576 = phi i64 [ 0, %.lr.ph461.preheader ], [ %indvars.iv.next577, %._crit_edge462 ]
  %43 = mul nsw i64 %indvars.iv576, %41
  %44 = getelementptr inbounds i16, ptr %3, i64 %43
  br label %45

45:                                               ; preds = %.lr.ph461, %45
  %indvars.iv571 = phi i64 [ 1, %.lr.ph461 ], [ %indvars.iv.next572, %45 ]
  %46 = getelementptr inbounds i16, ptr %44, i64 %indvars.iv571
  %47 = trunc i64 %indvars.iv571 to i32
  %48 = sub i32 %5, %47
  %49 = tail call i64 @silk_inner_prod16_aligned_64_c(ptr noundef %44, ptr noundef nonnull %46, i32 noundef %48) #8
  %50 = ashr i64 %49, %21
  %51 = trunc i64 %50 to i32
  %52 = add nsw i64 %indvars.iv571, -1
  %53 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %52
  %54 = load i32, ptr %53, align 4, !tbaa !5
  %55 = add nsw i32 %54, %51
  store i32 %55, ptr %53, align 4, !tbaa !5
  %indvars.iv.next572 = add nuw nsw i64 %indvars.iv571, 1
  %exitcond575.not = icmp eq i64 %indvars.iv.next572, %wide.trip.count574
  br i1 %exitcond575.not, label %._crit_edge462, label %45, !llvm.loop !9

._crit_edge462:                                   ; preds = %45
  %indvars.iv.next577 = add nuw nsw i64 %indvars.iv576, 1
  %exitcond580.not = icmp eq i64 %indvars.iv.next577, %wide.trip.count579
  br i1 %exitcond580.not, label %.loopexit442, label %.lr.ph461, !llvm.loop !11

56:                                               ; preds = %.lr.ph457, %._crit_edge455
  %indvars.iv566 = phi i64 [ 0, %.lr.ph457 ], [ %indvars.iv.next567, %._crit_edge455 ]
  %57 = mul nsw i64 %indvars.iv566, %38
  %58 = getelementptr inbounds i16, ptr %3, i64 %57
  %59 = getelementptr inbounds i8, ptr %58, i64 2
  call void @celt_pitch_xcorr_c(ptr noundef %58, ptr noundef nonnull %59, ptr noundef nonnull %15, i32 noundef %34, i32 noundef %7, i32 noundef %8) #8
  br i1 %.not448, label %._crit_edge455, label %.lr.ph451

.preheader443:                                    ; preds = %._crit_edge
  br i1 %.not448, label %._crit_edge455, label %.lr.ph454.preheader

.lr.ph454.preheader:                              ; preds = %.preheader443
  br i1 %min.iters.check, label %.lr.ph454.preheader898, label %vector.body

.lr.ph454.preheader898:                           ; preds = %middle.block, %.lr.ph454.preheader
  %indvars.iv561.ph = phi i64 [ 1, %.lr.ph454.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph454

vector.body:                                      ; preds = %.lr.ph454.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph454.preheader ]
  %60 = getelementptr inbounds [24 x i32], ptr %15, i64 0, i64 %index
  %61 = getelementptr inbounds i8, ptr %60, i64 16
  %wide.load = load <4 x i32>, ptr %60, align 16, !tbaa !5
  %wide.load713 = load <4 x i32>, ptr %61, align 16, !tbaa !5
  %62 = shl <4 x i32> %wide.load, %broadcast.splat
  %63 = shl <4 x i32> %wide.load713, %broadcast.splat
  %64 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %index
  %65 = getelementptr inbounds i8, ptr %64, i64 16
  %wide.load714 = load <4 x i32>, ptr %64, align 16, !tbaa !5
  %wide.load715 = load <4 x i32>, ptr %65, align 16, !tbaa !5
  %66 = add nsw <4 x i32> %wide.load714, %62
  %67 = add nsw <4 x i32> %wide.load715, %63
  store <4 x i32> %66, ptr %64, align 16, !tbaa !5
  store <4 x i32> %67, ptr %65, align 16, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %68 = icmp eq i64 %index.next, %n.vec
  br i1 %68, label %middle.block, label %vector.body, !llvm.loop !12

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge455, label %.lr.ph454.preheader898

.lr.ph451:                                        ; preds = %56, %._crit_edge
  %indvar = phi i32 [ %indvar.next, %._crit_edge ], [ 0, %56 ]
  %indvars.iv557 = phi i64 [ %indvars.iv.next558, %._crit_edge ], [ 1, %56 ]
  %indvars.iv = phi i32 [ %indvars.iv.next, %._crit_edge ], [ %36, %56 ]
  %69 = xor i32 %indvar, -1
  %70 = add i32 %69, %7
  %indvars559 = trunc i64 %indvars.iv557 to i32
  %71 = add i32 %34, %indvars559
  %72 = icmp slt i32 %71, %5
  br i1 %72, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.lr.ph451
  %73 = sext i32 %indvars.iv to i64
  %xtraiter = and i32 %70, 1
  %74 = icmp eq i32 %40, %indvar
  br i1 %74, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i32 %70, -2
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv554 = phi i64 [ %73, %.lr.ph.preheader.new ], [ %indvars.iv.next555.1, %.lr.ph ]
  %.0447 = phi i32 [ 0, %.lr.ph.preheader.new ], [ %94, %.lr.ph ]
  %niter = phi i32 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %75 = sitofp i32 %.0447 to float
  %76 = getelementptr inbounds i16, ptr %58, i64 %indvars.iv554
  %77 = load i16, ptr %76, align 2, !tbaa !15
  %78 = sitofp i16 %77 to float
  %79 = sub nsw i64 %indvars.iv554, %indvars.iv557
  %80 = getelementptr inbounds i16, ptr %58, i64 %79
  %81 = load i16, ptr %80, align 2, !tbaa !15
  %82 = sitofp i16 %81 to float
  %83 = call float @llvm.fmuladd.f32(float %78, float %82, float %75)
  %84 = fptosi float %83 to i32
  %indvars.iv.next555 = add nsw i64 %indvars.iv554, 1
  %85 = sitofp i32 %84 to float
  %86 = getelementptr inbounds i16, ptr %58, i64 %indvars.iv.next555
  %87 = load i16, ptr %86, align 2, !tbaa !15
  %88 = sitofp i16 %87 to float
  %89 = sub nsw i64 %indvars.iv.next555, %indvars.iv557
  %90 = getelementptr inbounds i16, ptr %58, i64 %89
  %91 = load i16, ptr %90, align 2, !tbaa !15
  %92 = sitofp i16 %91 to float
  %93 = call float @llvm.fmuladd.f32(float %88, float %92, float %85)
  %94 = fptosi float %93 to i32
  %indvars.iv.next555.1 = add nsw i64 %indvars.iv554, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !17

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %.lcssa900.ph = phi i32 [ poison, %.lr.ph.preheader ], [ %94, %.lr.ph ]
  %indvars.iv554.unr = phi i64 [ %73, %.lr.ph.preheader ], [ %indvars.iv.next555.1, %.lr.ph ]
  %.0447.unr = phi i32 [ 0, %.lr.ph.preheader ], [ %94, %.lr.ph ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa
  %95 = sitofp i32 %.0447.unr to float
  %96 = getelementptr inbounds i16, ptr %58, i64 %indvars.iv554.unr
  %97 = load i16, ptr %96, align 2, !tbaa !15
  %98 = sitofp i16 %97 to float
  %99 = sub nsw i64 %indvars.iv554.unr, %indvars.iv557
  %100 = getelementptr inbounds i16, ptr %58, i64 %99
  %101 = load i16, ptr %100, align 2, !tbaa !15
  %102 = sitofp i16 %101 to float
  %103 = call float @llvm.fmuladd.f32(float %98, float %102, float %95)
  %104 = fptosi float %103 to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %.lr.ph451
  %.0.lcssa = phi i32 [ 0, %.lr.ph451 ], [ %.lcssa900.ph, %._crit_edge.loopexit.unr-lcssa ], [ %104, %.lr.ph.epil ]
  %105 = add nsw i64 %indvars.iv557, -1
  %106 = getelementptr inbounds [24 x i32], ptr %15, i64 0, i64 %105
  %107 = load i32, ptr %106, align 4, !tbaa !5
  %108 = add nsw i32 %107, %.0.lcssa
  store i32 %108, ptr %106, align 4, !tbaa !5
  %indvars.iv.next558 = add nuw nsw i64 %indvars.iv557, 1
  %indvars.iv.next = add i32 %indvars.iv, 1
  %exitcond560.not = icmp eq i64 %indvars.iv.next558, %wide.trip.count
  %indvar.next = add i32 %indvar, 1
  br i1 %exitcond560.not, label %.preheader443, label %.lr.ph451, !llvm.loop !18

.lr.ph454:                                        ; preds = %.lr.ph454.preheader898, %.lr.ph454
  %indvars.iv561 = phi i64 [ %indvars.iv.next562, %.lr.ph454 ], [ %indvars.iv561.ph, %.lr.ph454.preheader898 ]
  %109 = add nsw i64 %indvars.iv561, -1
  %110 = getelementptr inbounds [24 x i32], ptr %15, i64 0, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !5
  %112 = shl i32 %111, %25
  %113 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %109
  %114 = load i32, ptr %113, align 4, !tbaa !5
  %115 = add nsw i32 %114, %112
  store i32 %115, ptr %113, align 4, !tbaa !5
  %indvars.iv.next562 = add nuw nsw i64 %indvars.iv561, 1
  %exitcond565.not = icmp eq i64 %indvars.iv.next562, %wide.trip.count564
  br i1 %exitcond565.not, label %._crit_edge455, label %.lr.ph454, !llvm.loop !19

._crit_edge455:                                   ; preds = %.lr.ph454, %middle.block, %56, %.preheader443
  %indvars.iv.next567 = add nuw nsw i64 %indvars.iv566, 1
  %exitcond570.not = icmp eq i64 %indvars.iv.next567, %wide.trip.count569
  br i1 %exitcond570.not, label %.loopexit442, label %56, !llvm.loop !20

.loopexit442:                                     ; preds = %._crit_edge455, %._crit_edge462, %.preheader444, %.preheader441
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(96) %11, ptr noundef nonnull align 16 dereferenceable(96) %10, i64 96, i1 false)
  store i32 %32, ptr %13, align 16, !tbaa !5
  store i32 %32, ptr %14, align 16, !tbaa !5
  %.not419506 = icmp sgt i32 %7, 0
  br i1 %.not419506, label %.lr.ph510, label %._crit_edge518

.lr.ph510:                                        ; preds = %.loopexit442
  %116 = icmp slt i32 %18, 38
  %117 = icmp sgt i32 %6, 0
  %118 = xor i32 %spec.store.select1, -1
  %119 = sub nsw i32 16, %spec.store.select1
  %120 = sub nsw i32 7, %spec.store.select1
  %121 = sext i32 %5 to i64
  %wide.trip.count639 = zext nneg i32 %7 to i64
  %wide.trip.count596 = zext nneg i32 %6 to i64
  %wide.trip.count611 = zext nneg i32 %6 to i64
  %broadcast.splatinsert787 = insertelement <4 x i32> poison, i32 %118, i64 0
  %broadcast.splat788 = shufflevector <4 x i32> %broadcast.splatinsert787, <4 x i32> poison, <4 x i32> zeroinitializer
  %invariant.gep933 = getelementptr i8, ptr %14, i64 -12
  br label %122

.loopexit436:                                     ; preds = %scalar.ph717, %middle.block716
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %indvars.iv.next629 = add nuw nsw i64 %indvars.iv628, 1
  %exitcond640.not = icmp eq i64 %indvars.iv.next633, %wide.trip.count639
  br i1 %exitcond640.not, label %.thread, label %122, !llvm.loop !21

122:                                              ; preds = %.lr.ph510, %.loopexit436
  %indvars.iv632 = phi i64 [ 0, %.lr.ph510 ], [ %indvars.iv.next633, %.loopexit436 ]
  %indvars.iv630 = phi i64 [ 1, %.lr.ph510 ], [ %indvars.iv.next631, %.loopexit436 ]
  %indvars.iv628 = phi i64 [ 2, %.lr.ph510 ], [ %indvars.iv.next629, %.loopexit436 ]
  %.0375508 = phi i32 [ 1073741824, %.lr.ph510 ], [ %.1376, %.loopexit436 ]
  br i1 %116, label %.preheader437, label %.preheader439

.preheader439:                                    ; preds = %122
  br i1 %117, label %.lr.ph475, label %.loopexit438

.lr.ph475:                                        ; preds = %.preheader439
  %123 = sub nsw i64 %121, %indvars.iv632
  %.not = icmp eq i64 %indvars.iv632, 0
  %min.iters.check799 = icmp ult i64 %indvars.iv632, 8
  %n.vec802 = and i64 %indvars.iv632, 9223372036854775800
  %cmp.n828 = icmp eq i64 %indvars.iv632, %n.vec802
  %min.iters.check777 = icmp ult i64 %indvars.iv630, 4
  %n.vec780 = and i64 %indvars.iv630, 9223372036854775804
  %cmp.n796 = icmp eq i64 %indvars.iv630, %n.vec780
  br label %241

.preheader437:                                    ; preds = %122
  br i1 %117, label %.lr.ph488, label %.loopexit438

.lr.ph488:                                        ; preds = %.preheader437
  %124 = sub nsw i64 %121, %indvars.iv632
  %.not532 = icmp eq i64 %indvars.iv632, 0
  %min.iters.check754 = icmp ult i64 %indvars.iv632, 4
  %n.vec757 = and i64 %indvars.iv632, 9223372036854775804
  %cmp.n773 = icmp eq i64 %indvars.iv632, %n.vec757
  %min.iters.check734 = icmp ult i64 %indvars.iv630, 4
  %n.vec737 = and i64 %indvars.iv630, 9223372036854775804
  %cmp.n751 = icmp eq i64 %indvars.iv630, %n.vec737
  br label %125

125:                                              ; preds = %.lr.ph488, %.loopexit867
  %indvars.iv608 = phi i64 [ 0, %.lr.ph488 ], [ %indvars.iv.next609, %.loopexit867 ]
  %126 = mul nsw i64 %indvars.iv608, %121
  %127 = getelementptr inbounds i16, ptr %3, i64 %126
  %128 = getelementptr inbounds i16, ptr %127, i64 %indvars.iv632
  %129 = load i16, ptr %128, align 2, !tbaa !15
  %130 = sext i16 %129 to i32
  %131 = getelementptr i16, ptr %127, i64 %124
  %132 = getelementptr i8, ptr %131, i64 -2
  %133 = load i16, ptr %132, align 2, !tbaa !15
  %134 = sext i16 %133 to i32
  %135 = shl nsw i32 %130, 9
  %136 = shl nsw i32 %134, 9
  br i1 %.not532, label %._crit_edge481, label %.lr.ph480

.lr.ph480:                                        ; preds = %125
  %137 = shl i32 %134, %119
  %138 = sub nsw i32 0, %137
  %139 = shl i32 %130, %119
  %140 = sub nsw i32 0, %139
  %141 = sext i32 %140 to i64
  %142 = sext i32 %138 to i64
  %143 = getelementptr i16, ptr %127, i64 %indvars.iv632
  %invariant.gep692 = getelementptr i16, ptr %127, i64 %124
  br i1 %min.iters.check754, label %scalar.ph753.preheader, label %vector.ph755

vector.ph755:                                     ; preds = %.lr.ph480
  %144 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %136, i64 0
  %145 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %135, i64 0
  %broadcast.splatinsert765 = insertelement <4 x i64> poison, i64 %141, i64 0
  %broadcast.splat766 = shufflevector <4 x i64> %broadcast.splatinsert765, <4 x i64> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert769 = insertelement <4 x i64> poison, i64 %142, i64 0
  %broadcast.splat770 = shufflevector <4 x i64> %broadcast.splatinsert769, <4 x i64> poison, <4 x i32> zeroinitializer
  %invariant.gep929 = getelementptr i8, ptr %143, i64 -6
  br label %vector.body759

vector.body759:                                   ; preds = %vector.body759, %vector.ph755
  %index760 = phi i64 [ 0, %vector.ph755 ], [ %index.next772, %vector.body759 ]
  %vec.phi = phi <4 x i32> [ %144, %vector.ph755 ], [ %169, %vector.body759 ]
  %vec.phi761 = phi <4 x i32> [ %145, %vector.ph755 ], [ %165, %vector.body759 ]
  %146 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %index760
  %wide.load762 = load <4 x i32>, ptr %146, align 16, !tbaa !5
  %147 = xor i64 %index760, -1
  %gep930 = getelementptr i16, ptr %invariant.gep929, i64 %147
  %wide.load763 = load <4 x i16>, ptr %gep930, align 2, !tbaa !15
  %reverse764 = shufflevector <4 x i16> %wide.load763, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %148 = sext <4 x i16> %reverse764 to <4 x i64>
  %149 = mul nsw <4 x i64> %broadcast.splat766, %148
  %150 = lshr <4 x i64> %149, <i64 16, i64 16, i64 16, i64 16>
  %151 = trunc <4 x i64> %150 to <4 x i32>
  %152 = add <4 x i32> %wide.load762, %151
  store <4 x i32> %152, ptr %146, align 16, !tbaa !5
  %153 = getelementptr inbounds [24 x i32], ptr %11, i64 0, i64 %index760
  %wide.load767 = load <4 x i32>, ptr %153, align 16, !tbaa !5
  %154 = getelementptr i16, ptr %invariant.gep692, i64 %index760
  %wide.load768 = load <4 x i16>, ptr %154, align 2, !tbaa !15
  %155 = sext <4 x i16> %wide.load768 to <4 x i64>
  %156 = mul nsw <4 x i64> %broadcast.splat770, %155
  %157 = lshr <4 x i64> %156, <i64 16, i64 16, i64 16, i64 16>
  %158 = trunc <4 x i64> %157 to <4 x i32>
  %159 = add <4 x i32> %wide.load767, %158
  store <4 x i32> %159, ptr %153, align 16, !tbaa !5
  %160 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %index760
  %wide.load771 = load <4 x i32>, ptr %160, align 16, !tbaa !5
  %161 = sext <4 x i32> %wide.load771 to <4 x i64>
  %162 = mul nsw <4 x i64> %161, %148
  %163 = lshr <4 x i64> %162, <i64 16, i64 16, i64 16, i64 16>
  %164 = trunc <4 x i64> %163 to <4 x i32>
  %165 = add <4 x i32> %vec.phi761, %164
  %166 = mul nsw <4 x i64> %161, %155
  %167 = lshr <4 x i64> %166, <i64 16, i64 16, i64 16, i64 16>
  %168 = trunc <4 x i64> %167 to <4 x i32>
  %169 = add <4 x i32> %vec.phi, %168
  %index.next772 = add nuw i64 %index760, 4
  %170 = icmp eq i64 %index.next772, %n.vec757
  br i1 %170, label %middle.block752, label %vector.body759, !llvm.loop !22

middle.block752:                                  ; preds = %vector.body759
  %171 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %169)
  %172 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %165)
  br i1 %cmp.n773, label %._crit_edge481, label %scalar.ph753.preheader

scalar.ph753.preheader:                           ; preds = %middle.block752, %.lr.ph480
  %indvars.iv598.ph = phi i64 [ 0, %.lr.ph480 ], [ %n.vec757, %middle.block752 ]
  %.0368477.ph = phi i32 [ %136, %.lr.ph480 ], [ %171, %middle.block752 ]
  %.0371476.ph = phi i32 [ %135, %.lr.ph480 ], [ %172, %middle.block752 ]
  br label %scalar.ph753

scalar.ph753:                                     ; preds = %scalar.ph753.preheader, %scalar.ph753
  %indvars.iv598 = phi i64 [ %indvars.iv.next599, %scalar.ph753 ], [ %indvars.iv598.ph, %scalar.ph753.preheader ]
  %.0368477 = phi i32 [ %201, %scalar.ph753 ], [ %.0368477.ph, %scalar.ph753.preheader ]
  %.0371476 = phi i32 [ %197, %scalar.ph753 ], [ %.0371476.ph, %scalar.ph753.preheader ]
  %173 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %indvars.iv598
  %174 = load i32, ptr %173, align 4, !tbaa !5
  %175 = xor i64 %indvars.iv598, -1
  %176 = getelementptr i16, ptr %143, i64 %175
  %177 = load i16, ptr %176, align 2, !tbaa !15
  %178 = sext i16 %177 to i64
  %179 = mul nsw i64 %178, %141
  %180 = lshr i64 %179, 16
  %181 = trunc i64 %180 to i32
  %182 = add i32 %174, %181
  store i32 %182, ptr %173, align 4, !tbaa !5
  %183 = getelementptr inbounds [24 x i32], ptr %11, i64 0, i64 %indvars.iv598
  %184 = load i32, ptr %183, align 4, !tbaa !5
  %gep = getelementptr i16, ptr %invariant.gep692, i64 %indvars.iv598
  %185 = load i16, ptr %gep, align 2, !tbaa !15
  %186 = sext i16 %185 to i64
  %187 = mul nsw i64 %186, %142
  %188 = lshr i64 %187, 16
  %189 = trunc i64 %188 to i32
  %190 = add i32 %184, %189
  store i32 %190, ptr %183, align 4, !tbaa !5
  %191 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %indvars.iv598
  %192 = load i32, ptr %191, align 4, !tbaa !5
  %193 = sext i32 %192 to i64
  %194 = mul nsw i64 %193, %178
  %195 = lshr i64 %194, 16
  %196 = trunc i64 %195 to i32
  %197 = add i32 %.0371476, %196
  %198 = mul nsw i64 %193, %186
  %199 = lshr i64 %198, 16
  %200 = trunc i64 %199 to i32
  %201 = add i32 %.0368477, %200
  %indvars.iv.next599 = add nuw nsw i64 %indvars.iv598, 1
  %exitcond602.not = icmp eq i64 %indvars.iv.next599, %indvars.iv632
  br i1 %exitcond602.not, label %._crit_edge481, label %scalar.ph753, !llvm.loop !23

._crit_edge481:                                   ; preds = %scalar.ph753, %middle.block752, %125
  %.0371.lcssa = phi i32 [ %135, %125 ], [ %172, %middle.block752 ], [ %197, %scalar.ph753 ]
  %.0368.lcssa = phi i32 [ %136, %125 ], [ %171, %middle.block752 ], [ %201, %scalar.ph753 ]
  %202 = sub nsw i32 0, %.0371.lcssa
  %203 = shl i32 %202, %120
  %204 = sub nsw i32 0, %.0368.lcssa
  %205 = shl i32 %204, %120
  %206 = sext i32 %203 to i64
  %207 = sext i32 %205 to i64
  %invariant.gep484 = getelementptr i8, ptr %127, i64 -2
  %invariant.gep693 = getelementptr i16, ptr %invariant.gep484, i64 %124
  br i1 %min.iters.check734, label %scalar.ph733.preheader, label %vector.ph735

vector.ph735:                                     ; preds = %._crit_edge481
  %broadcast.splatinsert744 = insertelement <4 x i64> poison, i64 %206, i64 0
  %broadcast.splat745 = shufflevector <4 x i64> %broadcast.splatinsert744, <4 x i64> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert748 = insertelement <4 x i64> poison, i64 %207, i64 0
  %broadcast.splat749 = shufflevector <4 x i64> %broadcast.splatinsert748, <4 x i64> poison, <4 x i32> zeroinitializer
  %invariant.gep931 = getelementptr i8, ptr %127, i64 -6
  br label %vector.body739

vector.body739:                                   ; preds = %vector.body739, %vector.ph735
  %index740 = phi i64 [ 0, %vector.ph735 ], [ %index.next750, %vector.body739 ]
  %208 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %index740
  %wide.load741 = load <4 x i32>, ptr %208, align 16, !tbaa !5
  %209 = sub nsw i64 %indvars.iv632, %index740
  %gep932 = getelementptr i16, ptr %invariant.gep931, i64 %209
  %wide.load742 = load <4 x i16>, ptr %gep932, align 2, !tbaa !15
  %reverse743 = shufflevector <4 x i16> %wide.load742, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %210 = sext <4 x i16> %reverse743 to <4 x i64>
  %211 = mul nsw <4 x i64> %broadcast.splat745, %210
  %212 = lshr <4 x i64> %211, <i64 16, i64 16, i64 16, i64 16>
  %213 = trunc <4 x i64> %212 to <4 x i32>
  %214 = add <4 x i32> %wide.load741, %213
  store <4 x i32> %214, ptr %208, align 16, !tbaa !5
  %215 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %index740
  %wide.load746 = load <4 x i32>, ptr %215, align 16, !tbaa !5
  %216 = getelementptr i16, ptr %invariant.gep693, i64 %index740
  %wide.load747 = load <4 x i16>, ptr %216, align 2, !tbaa !15
  %217 = sext <4 x i16> %wide.load747 to <4 x i64>
  %218 = mul nsw <4 x i64> %broadcast.splat749, %217
  %219 = lshr <4 x i64> %218, <i64 16, i64 16, i64 16, i64 16>
  %220 = trunc <4 x i64> %219 to <4 x i32>
  %221 = add <4 x i32> %wide.load746, %220
  store <4 x i32> %221, ptr %215, align 16, !tbaa !5
  %index.next750 = add nuw i64 %index740, 4
  %222 = icmp eq i64 %index.next750, %n.vec737
  br i1 %222, label %middle.block732, label %vector.body739, !llvm.loop !24

middle.block732:                                  ; preds = %vector.body739
  br i1 %cmp.n751, label %.loopexit867, label %scalar.ph733.preheader

scalar.ph733.preheader:                           ; preds = %middle.block732, %._crit_edge481
  %indvars.iv603.ph = phi i64 [ 0, %._crit_edge481 ], [ %n.vec737, %middle.block732 ]
  br label %scalar.ph733

scalar.ph733:                                     ; preds = %scalar.ph733.preheader, %scalar.ph733
  %indvars.iv603 = phi i64 [ %indvars.iv.next604, %scalar.ph733 ], [ %indvars.iv603.ph, %scalar.ph733.preheader ]
  %223 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %indvars.iv603
  %224 = load i32, ptr %223, align 4, !tbaa !5
  %225 = sub nsw i64 %indvars.iv632, %indvars.iv603
  %226 = getelementptr inbounds i16, ptr %127, i64 %225
  %227 = load i16, ptr %226, align 2, !tbaa !15
  %228 = sext i16 %227 to i64
  %229 = mul nsw i64 %228, %206
  %230 = lshr i64 %229, 16
  %231 = trunc i64 %230 to i32
  %232 = add i32 %224, %231
  store i32 %232, ptr %223, align 4, !tbaa !5
  %233 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %indvars.iv603
  %234 = load i32, ptr %233, align 4, !tbaa !5
  %gep694 = getelementptr i16, ptr %invariant.gep693, i64 %indvars.iv603
  %235 = load i16, ptr %gep694, align 2, !tbaa !15
  %236 = sext i16 %235 to i64
  %237 = mul nsw i64 %236, %207
  %238 = lshr i64 %237, 16
  %239 = trunc i64 %238 to i32
  %240 = add i32 %234, %239
  store i32 %240, ptr %233, align 4, !tbaa !5
  %indvars.iv.next604 = add nuw nsw i64 %indvars.iv603, 1
  %exitcond607.not = icmp eq i64 %indvars.iv.next604, %indvars.iv630
  br i1 %exitcond607.not, label %.loopexit867, label %scalar.ph733, !llvm.loop !25

.loopexit867:                                     ; preds = %scalar.ph733, %middle.block732
  %indvars.iv.next609 = add nuw nsw i64 %indvars.iv608, 1
  %exitcond612.not = icmp eq i64 %indvars.iv.next609, %wide.trip.count611
  br i1 %exitcond612.not, label %.loopexit438, label %125, !llvm.loop !26

241:                                              ; preds = %.lr.ph475, %.loopexit868
  %indvars.iv593 = phi i64 [ 0, %.lr.ph475 ], [ %indvars.iv.next594, %.loopexit868 ]
  %242 = mul nsw i64 %indvars.iv593, %121
  %243 = getelementptr inbounds i16, ptr %3, i64 %242
  %244 = getelementptr inbounds i16, ptr %243, i64 %indvars.iv632
  %245 = load i16, ptr %244, align 2, !tbaa !15
  %246 = sext i16 %245 to i32
  %247 = shl nsw i32 %246, %25
  %248 = getelementptr i16, ptr %243, i64 %123
  %249 = getelementptr i8, ptr %248, i64 -2
  %250 = load i16, ptr %249, align 2, !tbaa !15
  %251 = sext i16 %250 to i32
  %252 = shl nsw i32 %251, %25
  %253 = shl i32 %246, 17
  %254 = shl i32 %251, 17
  br i1 %.not, label %._crit_edge470, label %.lr.ph469.preheader

.lr.ph469.preheader:                              ; preds = %241
  %255 = getelementptr i16, ptr %243, i64 %indvars.iv632
  %invariant.gep688 = getelementptr i16, ptr %243, i64 %123
  br i1 %min.iters.check799, label %.lr.ph469.preheader879, label %vector.ph800

vector.ph800:                                     ; preds = %.lr.ph469.preheader
  %256 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %254, i64 0
  %257 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %253, i64 0
  %broadcast.splatinsert816 = insertelement <4 x i32> poison, i32 %247, i64 0
  %broadcast.splat817 = shufflevector <4 x i32> %broadcast.splatinsert816, <4 x i32> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert822 = insertelement <4 x i32> poison, i32 %252, i64 0
  %broadcast.splat823 = shufflevector <4 x i32> %broadcast.splatinsert822, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body804

vector.body804:                                   ; preds = %vector.body804, %vector.ph800
  %index805 = phi i64 [ 0, %vector.ph800 ], [ %index.next826, %vector.body804 ]
  %vec.phi806 = phi <4 x i32> [ %256, %vector.ph800 ], [ %294, %vector.body804 ]
  %vec.phi807 = phi <4 x i32> [ zeroinitializer, %vector.ph800 ], [ %295, %vector.body804 ]
  %vec.phi808 = phi <4 x i32> [ %257, %vector.ph800 ], [ %290, %vector.body804 ]
  %vec.phi809 = phi <4 x i32> [ zeroinitializer, %vector.ph800 ], [ %291, %vector.body804 ]
  %258 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %index805
  %259 = getelementptr inbounds i8, ptr %258, i64 16
  %wide.load810 = load <4 x i32>, ptr %258, align 16, !tbaa !5
  %wide.load811 = load <4 x i32>, ptr %259, align 16, !tbaa !5
  %260 = xor i64 %index805, -1
  %261 = getelementptr i16, ptr %255, i64 %260
  %262 = getelementptr i8, ptr %261, i64 -6
  %263 = getelementptr i8, ptr %261, i64 -14
  %wide.load812 = load <4 x i16>, ptr %262, align 2, !tbaa !15
  %reverse813 = shufflevector <4 x i16> %wide.load812, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %wide.load814 = load <4 x i16>, ptr %263, align 2, !tbaa !15
  %reverse815 = shufflevector <4 x i16> %wide.load814, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %264 = sext <4 x i16> %reverse813 to <4 x i32>
  %265 = sext <4 x i16> %reverse815 to <4 x i32>
  %266 = mul <4 x i32> %broadcast.splat817, %264
  %267 = mul <4 x i32> %broadcast.splat817, %265
  %268 = sub <4 x i32> %wide.load810, %266
  %269 = sub <4 x i32> %wide.load811, %267
  store <4 x i32> %268, ptr %258, align 16, !tbaa !5
  store <4 x i32> %269, ptr %259, align 16, !tbaa !5
  %270 = getelementptr inbounds [24 x i32], ptr %11, i64 0, i64 %index805
  %271 = getelementptr inbounds i8, ptr %270, i64 16
  %wide.load818 = load <4 x i32>, ptr %270, align 16, !tbaa !5
  %wide.load819 = load <4 x i32>, ptr %271, align 16, !tbaa !5
  %272 = getelementptr i16, ptr %invariant.gep688, i64 %index805
  %273 = getelementptr i8, ptr %272, i64 8
  %wide.load820 = load <4 x i16>, ptr %272, align 2, !tbaa !15
  %wide.load821 = load <4 x i16>, ptr %273, align 2, !tbaa !15
  %274 = sext <4 x i16> %wide.load820 to <4 x i32>
  %275 = sext <4 x i16> %wide.load821 to <4 x i32>
  %276 = mul <4 x i32> %broadcast.splat823, %274
  %277 = mul <4 x i32> %broadcast.splat823, %275
  %278 = sub <4 x i32> %wide.load818, %276
  %279 = sub <4 x i32> %wide.load819, %277
  store <4 x i32> %278, ptr %270, align 16, !tbaa !5
  store <4 x i32> %279, ptr %271, align 16, !tbaa !5
  %280 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %index805
  %281 = getelementptr inbounds i8, ptr %280, i64 16
  %wide.load824 = load <4 x i32>, ptr %280, align 16, !tbaa !5
  %wide.load825 = load <4 x i32>, ptr %281, align 16, !tbaa !5
  %282 = ashr <4 x i32> %wide.load824, <i32 7, i32 7, i32 7, i32 7>
  %283 = ashr <4 x i32> %wide.load825, <i32 7, i32 7, i32 7, i32 7>
  %284 = add nsw <4 x i32> %282, <i32 1, i32 1, i32 1, i32 1>
  %285 = add nsw <4 x i32> %283, <i32 1, i32 1, i32 1, i32 1>
  %286 = ashr <4 x i32> %284, <i32 1, i32 1, i32 1, i32 1>
  %287 = ashr <4 x i32> %285, <i32 1, i32 1, i32 1, i32 1>
  %288 = mul <4 x i32> %286, %264
  %289 = mul <4 x i32> %287, %265
  %290 = add <4 x i32> %288, %vec.phi808
  %291 = add <4 x i32> %289, %vec.phi809
  %292 = mul <4 x i32> %286, %274
  %293 = mul <4 x i32> %287, %275
  %294 = add <4 x i32> %292, %vec.phi806
  %295 = add <4 x i32> %293, %vec.phi807
  %index.next826 = add nuw i64 %index805, 8
  %296 = icmp eq i64 %index.next826, %n.vec802
  br i1 %296, label %middle.block797, label %vector.body804, !llvm.loop !27

middle.block797:                                  ; preds = %vector.body804
  %bin.rdx = add <4 x i32> %295, %294
  %297 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %bin.rdx827 = add <4 x i32> %291, %290
  %298 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx827)
  br i1 %cmp.n828, label %._crit_edge470, label %.lr.ph469.preheader879

.lr.ph469.preheader879:                           ; preds = %middle.block797, %.lr.ph469.preheader
  %indvars.iv581.ph = phi i64 [ 0, %.lr.ph469.preheader ], [ %n.vec802, %middle.block797 ]
  %.1369466.ph = phi i32 [ %254, %.lr.ph469.preheader ], [ %297, %middle.block797 ]
  %.1372465.ph = phi i32 [ %253, %.lr.ph469.preheader ], [ %298, %middle.block797 ]
  br label %.lr.ph469

.lr.ph469:                                        ; preds = %.lr.ph469.preheader879, %.lr.ph469
  %indvars.iv581 = phi i64 [ %indvars.iv.next582, %.lr.ph469 ], [ %indvars.iv581.ph, %.lr.ph469.preheader879 ]
  %.1369466 = phi i32 [ %321, %.lr.ph469 ], [ %.1369466.ph, %.lr.ph469.preheader879 ]
  %.1372465 = phi i32 [ %319, %.lr.ph469 ], [ %.1372465.ph, %.lr.ph469.preheader879 ]
  %299 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %indvars.iv581
  %300 = load i32, ptr %299, align 4, !tbaa !5
  %301 = xor i64 %indvars.iv581, -1
  %302 = getelementptr i16, ptr %255, i64 %301
  %303 = load i16, ptr %302, align 2, !tbaa !15
  %304 = sext i16 %303 to i32
  %305 = mul i32 %247, %304
  %306 = sub i32 %300, %305
  store i32 %306, ptr %299, align 4, !tbaa !5
  %307 = getelementptr inbounds [24 x i32], ptr %11, i64 0, i64 %indvars.iv581
  %308 = load i32, ptr %307, align 4, !tbaa !5
  %gep689 = getelementptr i16, ptr %invariant.gep688, i64 %indvars.iv581
  %309 = load i16, ptr %gep689, align 2, !tbaa !15
  %310 = sext i16 %309 to i32
  %311 = mul i32 %252, %310
  %312 = sub i32 %308, %311
  store i32 %312, ptr %307, align 4, !tbaa !5
  %313 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %indvars.iv581
  %314 = load i32, ptr %313, align 4, !tbaa !5
  %315 = ashr i32 %314, 7
  %316 = add nsw i32 %315, 1
  %317 = ashr i32 %316, 1
  %318 = mul i32 %317, %304
  %319 = add i32 %318, %.1372465
  %320 = mul i32 %317, %310
  %321 = add i32 %320, %.1369466
  %indvars.iv.next582 = add nuw nsw i64 %indvars.iv581, 1
  %exitcond585.not = icmp eq i64 %indvars.iv.next582, %indvars.iv632
  br i1 %exitcond585.not, label %._crit_edge470, label %.lr.ph469, !llvm.loop !28

._crit_edge470:                                   ; preds = %.lr.ph469, %middle.block797, %241
  %.1372.lcssa = phi i32 [ %253, %241 ], [ %298, %middle.block797 ], [ %319, %.lr.ph469 ]
  %.1369.lcssa = phi i32 [ %254, %241 ], [ %297, %middle.block797 ], [ %321, %.lr.ph469 ]
  %322 = sub nsw i32 0, %.1372.lcssa
  %323 = sub nsw i32 0, %.1369.lcssa
  %324 = sext i32 %322 to i64
  %325 = sext i32 %323 to i64
  %invariant.gep = getelementptr i8, ptr %243, i64 -2
  %invariant.gep690 = getelementptr i16, ptr %invariant.gep, i64 %123
  br i1 %min.iters.check777, label %scalar.ph776.preheader, label %vector.ph778

vector.ph778:                                     ; preds = %._crit_edge470
  %broadcast.splatinsert789 = insertelement <4 x i64> poison, i64 %324, i64 0
  %broadcast.splat790 = shufflevector <4 x i64> %broadcast.splatinsert789, <4 x i64> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert793 = insertelement <4 x i64> poison, i64 %325, i64 0
  %broadcast.splat794 = shufflevector <4 x i64> %broadcast.splatinsert793, <4 x i64> poison, <4 x i32> zeroinitializer
  %invariant.gep927 = getelementptr i8, ptr %243, i64 -6
  br label %vector.body782

vector.body782:                                   ; preds = %vector.body782, %vector.ph778
  %index783 = phi i64 [ 0, %vector.ph778 ], [ %index.next795, %vector.body782 ]
  %326 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %index783
  %wide.load784 = load <4 x i32>, ptr %326, align 16, !tbaa !5
  %327 = sub nsw i64 %indvars.iv632, %index783
  %gep928 = getelementptr i16, ptr %invariant.gep927, i64 %327
  %wide.load785 = load <4 x i16>, ptr %gep928, align 2, !tbaa !15
  %reverse786 = shufflevector <4 x i16> %wide.load785, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %328 = sext <4 x i16> %reverse786 to <4 x i32>
  %329 = shl nsw <4 x i32> %328, %broadcast.splat788
  %330 = sext <4 x i32> %329 to <4 x i64>
  %331 = mul nsw <4 x i64> %broadcast.splat790, %330
  %332 = lshr <4 x i64> %331, <i64 16, i64 16, i64 16, i64 16>
  %333 = trunc <4 x i64> %332 to <4 x i32>
  %334 = add <4 x i32> %wide.load784, %333
  store <4 x i32> %334, ptr %326, align 16, !tbaa !5
  %335 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %index783
  %wide.load791 = load <4 x i32>, ptr %335, align 16, !tbaa !5
  %336 = getelementptr i16, ptr %invariant.gep690, i64 %index783
  %wide.load792 = load <4 x i16>, ptr %336, align 2, !tbaa !15
  %337 = sext <4 x i16> %wide.load792 to <4 x i32>
  %338 = shl nsw <4 x i32> %337, %broadcast.splat788
  %339 = sext <4 x i32> %338 to <4 x i64>
  %340 = mul nsw <4 x i64> %broadcast.splat794, %339
  %341 = lshr <4 x i64> %340, <i64 16, i64 16, i64 16, i64 16>
  %342 = trunc <4 x i64> %341 to <4 x i32>
  %343 = add <4 x i32> %wide.load791, %342
  store <4 x i32> %343, ptr %335, align 16, !tbaa !5
  %index.next795 = add nuw i64 %index783, 4
  %344 = icmp eq i64 %index.next795, %n.vec780
  br i1 %344, label %middle.block775, label %vector.body782, !llvm.loop !29

middle.block775:                                  ; preds = %vector.body782
  br i1 %cmp.n796, label %.loopexit868, label %scalar.ph776.preheader

scalar.ph776.preheader:                           ; preds = %middle.block775, %._crit_edge470
  %indvars.iv586.ph = phi i64 [ 0, %._crit_edge470 ], [ %n.vec780, %middle.block775 ]
  br label %scalar.ph776

scalar.ph776:                                     ; preds = %scalar.ph776.preheader, %scalar.ph776
  %indvars.iv586 = phi i64 [ %indvars.iv.next587, %scalar.ph776 ], [ %indvars.iv586.ph, %scalar.ph776.preheader ]
  %345 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %indvars.iv586
  %346 = load i32, ptr %345, align 4, !tbaa !5
  %347 = sub nsw i64 %indvars.iv632, %indvars.iv586
  %348 = getelementptr inbounds i16, ptr %243, i64 %347
  %349 = load i16, ptr %348, align 2, !tbaa !15
  %350 = sext i16 %349 to i32
  %351 = shl nsw i32 %350, %118
  %352 = sext i32 %351 to i64
  %353 = mul nsw i64 %352, %324
  %354 = lshr i64 %353, 16
  %355 = trunc i64 %354 to i32
  %356 = add i32 %346, %355
  store i32 %356, ptr %345, align 4, !tbaa !5
  %357 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %indvars.iv586
  %358 = load i32, ptr %357, align 4, !tbaa !5
  %gep691 = getelementptr i16, ptr %invariant.gep690, i64 %indvars.iv586
  %359 = load i16, ptr %gep691, align 2, !tbaa !15
  %360 = sext i16 %359 to i32
  %361 = shl nsw i32 %360, %118
  %362 = sext i32 %361 to i64
  %363 = mul nsw i64 %362, %325
  %364 = lshr i64 %363, 16
  %365 = trunc i64 %364 to i32
  %366 = add i32 %358, %365
  store i32 %366, ptr %357, align 4, !tbaa !5
  %indvars.iv.next587 = add nuw nsw i64 %indvars.iv586, 1
  %exitcond592.not = icmp eq i64 %indvars.iv.next587, %indvars.iv630
  br i1 %exitcond592.not, label %.loopexit868, label %scalar.ph776, !llvm.loop !30

.loopexit868:                                     ; preds = %scalar.ph776, %middle.block775
  %indvars.iv.next594 = add nuw nsw i64 %indvars.iv593, 1
  %exitcond597.not = icmp eq i64 %indvars.iv.next594, %wide.trip.count596
  br i1 %exitcond597.not, label %.loopexit438, label %241, !llvm.loop !31

.loopexit438:                                     ; preds = %.loopexit868, %.loopexit867, %.preheader439, %.preheader437
  %367 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %indvars.iv632
  %368 = load i32, ptr %367, align 4, !tbaa !5
  %369 = getelementptr inbounds [24 x i32], ptr %11, i64 0, i64 %indvars.iv632
  %370 = load i32, ptr %369, align 4, !tbaa !5
  %371 = load i32, ptr %14, align 16, !tbaa !5
  %372 = load i32, ptr %13, align 16, !tbaa !5
  %373 = add nsw i32 %372, %371
  %.not533 = icmp eq i64 %indvars.iv632, 0
  br i1 %.not533, label %._crit_edge496, label %.lr.ph495

.lr.ph495:                                        ; preds = %.loopexit438, %.lr.ph495
  %indvars.iv613 = phi i64 [ %indvars.iv.next614, %.lr.ph495 ], [ 0, %.loopexit438 ]
  %.2370492 = phi i32 [ %400, %.lr.ph495 ], [ %370, %.loopexit438 ]
  %.2373491 = phi i32 [ %392, %.lr.ph495 ], [ %368, %.loopexit438 ]
  %.0381490 = phi i32 [ %419, %.lr.ph495 ], [ %373, %.loopexit438 ]
  %.0383489 = phi i32 [ %408, %.lr.ph495 ], [ 0, %.loopexit438 ]
  %374 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %indvars.iv613
  %375 = load i32, ptr %374, align 4, !tbaa !5
  %376 = call i32 @llvm.abs.i32(i32 %375, i1 true)
  %377 = call i32 @silk_CLZ32(i32 noundef %376)
  %378 = call i32 @llvm.smin.i32(i32 %377, i32 8)
  %379 = add nsw i32 %378, -1
  %380 = shl i32 %375, %379
  %381 = sub nsw i64 %indvars.iv632, %indvars.iv613
  %382 = add nsw i64 %381, -1
  %383 = getelementptr inbounds [24 x i32], ptr %11, i64 0, i64 %382
  %384 = load i32, ptr %383, align 4, !tbaa !5
  %385 = sext i32 %384 to i64
  %386 = sext i32 %380 to i64
  %387 = mul nsw i64 %386, %385
  %388 = lshr i64 %387, 32
  %389 = trunc nuw i64 %388 to i32
  %390 = sub nsw i32 8, %378
  %391 = shl i32 %389, %390
  %392 = add nsw i32 %391, %.2373491
  %393 = getelementptr inbounds [24 x i32], ptr %10, i64 0, i64 %382
  %394 = load i32, ptr %393, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = mul nsw i64 %386, %395
  %397 = lshr i64 %396, 32
  %398 = trunc nuw i64 %397 to i32
  %399 = shl i32 %398, %390
  %400 = add nsw i32 %399, %.2370492
  %401 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %381
  %402 = load i32, ptr %401, align 4, !tbaa !5
  %403 = sext i32 %402 to i64
  %404 = mul nsw i64 %403, %386
  %405 = lshr i64 %404, 32
  %406 = trunc nuw i64 %405 to i32
  %407 = shl i32 %406, %390
  %408 = add nsw i32 %407, %.0383489
  %indvars.iv.next614 = add nuw nsw i64 %indvars.iv613, 1
  %409 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %indvars.iv.next614
  %410 = load i32, ptr %409, align 4, !tbaa !5
  %411 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %indvars.iv.next614
  %412 = load i32, ptr %411, align 4, !tbaa !5
  %413 = add nsw i32 %412, %410
  %414 = sext i32 %413 to i64
  %415 = mul nsw i64 %414, %386
  %416 = lshr i64 %415, 32
  %417 = trunc nuw i64 %416 to i32
  %418 = shl i32 %417, %390
  %419 = add nsw i32 %418, %.0381490
  %exitcond617.not = icmp eq i64 %indvars.iv.next614, %indvars.iv632
  br i1 %exitcond617.not, label %._crit_edge496, label %.lr.ph495, !llvm.loop !32

._crit_edge496:                                   ; preds = %.lr.ph495, %.loopexit438
  %.0383.lcssa = phi i32 [ 0, %.loopexit438 ], [ %408, %.lr.ph495 ]
  %.0381.lcssa = phi i32 [ %373, %.loopexit438 ], [ %419, %.lr.ph495 ]
  %.2373.lcssa = phi i32 [ %368, %.loopexit438 ], [ %392, %.lr.ph495 ]
  %.2370.lcssa = phi i32 [ %370, %.loopexit438 ], [ %400, %.lr.ph495 ]
  %indvars.iv.next633 = add nuw nsw i64 %indvars.iv632, 1
  %420 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %indvars.iv.next633
  store i32 %.2373.lcssa, ptr %420, align 4, !tbaa !5
  %421 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %indvars.iv.next633
  store i32 %.2370.lcssa, ptr %421, align 4, !tbaa !5
  %422 = add nsw i32 %.2370.lcssa, %.0383.lcssa
  %.neg = mul i32 %422, -2
  %423 = call i32 @llvm.abs.i32(i32 %.neg, i1 true)
  %424 = icmp slt i32 %423, %.0381.lcssa
  br i1 %424, label %425, label %427

425:                                              ; preds = %._crit_edge496
  %426 = call i32 @silk_DIV32_varQ(i32 noundef %.neg, i32 noundef %.0381.lcssa, i32 noundef 31)
  br label %430

427:                                              ; preds = %._crit_edge496
  %428 = icmp sgt i32 %.neg, 0
  %429 = select i1 %428, i32 2147483647, i32 -2147483648
  br label %430

430:                                              ; preds = %427, %425
  %.0378 = phi i32 [ %426, %425 ], [ %429, %427 ]
  %431 = sext i32 %.0378 to i64
  %432 = mul nsw i64 %431, %431
  %433 = lshr i64 %432, 32
  %434 = sub nsw i64 1073741824, %433
  %435 = sext i32 %.0375508 to i64
  %436 = and i64 %434, 4294967295
  %437 = mul nsw i64 %436, %435
  %sh.diff = lshr i64 %437, 30
  %tr.sh.diff = trunc i64 %sh.diff to i32
  %438 = and i32 %tr.sh.diff, -4
  %.not411 = icmp sgt i32 %438, %4
  br i1 %.not411, label %451, label %439

439:                                              ; preds = %430
  %440 = call i32 @silk_DIV32_varQ(i32 noundef %4, i32 noundef %.0375508, i32 noundef 30)
  %441 = sub nsw i32 1073741824, %440
  %442 = call i32 @silk_SQRT_APPROX(i32 noundef %441)
  %443 = icmp sgt i32 %442, 0
  br i1 %443, label %444, label %451

444:                                              ; preds = %439
  %445 = sdiv i32 %441, %442
  %446 = add nsw i32 %445, %442
  %447 = shl i32 %446, 15
  %448 = and i32 %447, -65536
  %449 = icmp slt i32 %.neg, 0
  %450 = sub nsw i32 0, %448
  %spec.select = select i1 %449, i32 %450, i32 %448
  br label %451

451:                                              ; preds = %444, %430, %439
  %.2380 = phi i32 [ %442, %439 ], [ %spec.select, %444 ], [ %.0378, %430 ]
  %.1376 = phi i32 [ %4, %439 ], [ %4, %444 ], [ %438, %430 ]
  br i1 %.not533, label %._crit_edge504, label %.lr.ph503

.lr.ph503:                                        ; preds = %451
  %452 = lshr i64 %indvars.iv.next633, 1
  %453 = sext i32 %.2380 to i64
  %454 = and i64 %452, 2147483647
  br label %455

455:                                              ; preds = %.lr.ph503, %455
  %indvars.iv618 = phi i64 [ 0, %.lr.ph503 ], [ %indvars.iv.next619, %455 ]
  %456 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %indvars.iv618
  %457 = load i32, ptr %456, align 4, !tbaa !5
  %458 = xor i64 %indvars.iv618, -1
  %459 = add nsw i64 %indvars.iv632, %458
  %460 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %459
  %461 = load i32, ptr %460, align 4, !tbaa !5
  %462 = sext i32 %461 to i64
  %463 = mul nsw i64 %462, %453
  %sh.diff423 = lshr i64 %463, 31
  %tr.sh.diff424 = trunc i64 %sh.diff423 to i32
  %464 = and i32 %tr.sh.diff424, -2
  %465 = add nsw i32 %464, %457
  store i32 %465, ptr %456, align 4, !tbaa !5
  %466 = sext i32 %457 to i64
  %467 = mul nsw i64 %466, %453
  %sh.diff425 = lshr i64 %467, 31
  %tr.sh.diff426 = trunc i64 %sh.diff425 to i32
  %468 = and i32 %tr.sh.diff426, -2
  %469 = add nsw i32 %468, %461
  store i32 %469, ptr %460, align 4, !tbaa !5
  %indvars.iv.next619 = add nuw nsw i64 %indvars.iv618, 1
  %470 = icmp ult i64 %indvars.iv.next619, %454
  br i1 %470, label %455, label %._crit_edge504, !llvm.loop !33

._crit_edge504:                                   ; preds = %455, %451
  %471 = ashr i32 %.2380, 6
  %472 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %indvars.iv632
  store i32 %471, ptr %472, align 4, !tbaa !5
  br i1 %.not411, label %.preheader435, label %.preheader434

.preheader435:                                    ; preds = %._crit_edge504
  %473 = sext i32 %.2380 to i64
  %min.iters.check718 = icmp ult i64 %indvars.iv628, 4
  br i1 %min.iters.check718, label %scalar.ph717.preheader, label %vector.ph719

scalar.ph717.preheader:                           ; preds = %middle.block716, %.preheader435
  %indvars.iv621.ph = phi i64 [ 0, %.preheader435 ], [ %n.vec721, %middle.block716 ]
  br label %scalar.ph717

vector.ph719:                                     ; preds = %.preheader435
  %n.vec721 = and i64 %indvars.iv628, 9223372036854775804
  %broadcast.splatinsert727 = insertelement <4 x i64> poison, i64 %473, i64 0
  %broadcast.splat728 = shufflevector <4 x i64> %broadcast.splatinsert727, <4 x i64> poison, <4 x i32> zeroinitializer
  br label %vector.body723

vector.body723:                                   ; preds = %vector.body723, %vector.ph719
  %index724 = phi i64 [ 0, %vector.ph719 ], [ %index.next730, %vector.body723 ]
  %474 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %index724
  %wide.load725 = load <4 x i32>, ptr %474, align 16, !tbaa !5
  %475 = sub nsw i64 %indvars.iv.next633, %index724
  %gep934 = getelementptr [25 x i32], ptr %invariant.gep933, i64 0, i64 %475
  %wide.load726 = load <4 x i32>, ptr %gep934, align 4, !tbaa !5
  %reverse = shufflevector <4 x i32> %wide.load726, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %476 = sext <4 x i32> %reverse to <4 x i64>
  %477 = mul nsw <4 x i64> %broadcast.splat728, %476
  %478 = lshr <4 x i64> %477, <i64 31, i64 31, i64 31, i64 31>
  %479 = trunc <4 x i64> %478 to <4 x i32>
  %480 = and <4 x i32> %479, <i32 -2, i32 -2, i32 -2, i32 -2>
  %481 = add nsw <4 x i32> %480, %wide.load725
  store <4 x i32> %481, ptr %474, align 16, !tbaa !5
  %482 = sext <4 x i32> %wide.load725 to <4 x i64>
  %483 = mul nsw <4 x i64> %broadcast.splat728, %482
  %484 = lshr <4 x i64> %483, <i64 31, i64 31, i64 31, i64 31>
  %485 = trunc <4 x i64> %484 to <4 x i32>
  %486 = and <4 x i32> %485, <i32 -2, i32 -2, i32 -2, i32 -2>
  %487 = add nsw <4 x i32> %486, %reverse
  %reverse729 = shufflevector <4 x i32> %487, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  store <4 x i32> %reverse729, ptr %gep934, align 4, !tbaa !5
  %index.next730 = add nuw i64 %index724, 4
  %488 = icmp eq i64 %index.next730, %n.vec721
  br i1 %488, label %middle.block716, label %vector.body723, !llvm.loop !34

middle.block716:                                  ; preds = %vector.body723
  %cmp.n731 = icmp eq i64 %indvars.iv628, %n.vec721
  br i1 %cmp.n731, label %.loopexit436, label %scalar.ph717.preheader

.preheader434:                                    ; preds = %._crit_edge504
  %489 = trunc nuw nsw i64 %indvars.iv.next633 to i32
  %490 = icmp slt i32 %489, %7
  br i1 %490, label %.lr.ph512.preheader, label %.lr.ph522.preheader

.lr.ph512.preheader:                              ; preds = %.preheader434
  %491 = shl nuw nsw i64 %indvars.iv632, 2
  %492 = getelementptr i8, ptr %12, i64 %491
  %scevgep = getelementptr i8, ptr %492, i64 4
  %493 = add nsw i32 %7, -2
  %494 = trunc i64 %indvars.iv632 to i32
  %495 = sub i32 %493, %494
  %496 = zext i32 %495 to i64
  %497 = shl nuw nsw i64 %496, 2
  %498 = add nuw nsw i64 %497, 4
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %scevgep, i8 0, i64 %498, i1 false), !tbaa !5
  br label %.lr.ph522.preheader

scalar.ph717:                                     ; preds = %scalar.ph717.preheader, %scalar.ph717
  %indvars.iv621 = phi i64 [ %indvars.iv.next622, %scalar.ph717 ], [ %indvars.iv621.ph, %scalar.ph717.preheader ]
  %499 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %indvars.iv621
  %500 = load i32, ptr %499, align 4, !tbaa !5
  %501 = sub nsw i64 %indvars.iv.next633, %indvars.iv621
  %502 = getelementptr inbounds [25 x i32], ptr %14, i64 0, i64 %501
  %503 = load i32, ptr %502, align 4, !tbaa !5
  %504 = sext i32 %503 to i64
  %505 = mul nsw i64 %504, %473
  %sh.diff414 = lshr i64 %505, 31
  %tr.sh.diff415 = trunc i64 %sh.diff414 to i32
  %506 = and i32 %tr.sh.diff415, -2
  %507 = add nsw i32 %506, %500
  store i32 %507, ptr %499, align 4, !tbaa !5
  %508 = sext i32 %500 to i64
  %509 = mul nsw i64 %508, %473
  %sh.diff416 = lshr i64 %509, 31
  %tr.sh.diff417 = trunc i64 %sh.diff416 to i32
  %510 = and i32 %tr.sh.diff417, -2
  %511 = add nsw i32 %510, %503
  store i32 %511, ptr %502, align 4, !tbaa !5
  %indvars.iv.next622 = add nuw nsw i64 %indvars.iv621, 1
  %exitcond627 = icmp eq i64 %indvars.iv.next622, %indvars.iv628
  br i1 %exitcond627, label %.loopexit436, label %scalar.ph717, !llvm.loop !35

.lr.ph522.preheader:                              ; preds = %.preheader434, %.lr.ph512.preheader
  %smax = call i32 @llvm.smax.i32(i32 %7, i32 1)
  %wide.trip.count649 = zext nneg i32 %smax to i64
  %min.iters.check833 = icmp slt i32 %7, 8
  br i1 %min.iters.check833, label %.lr.ph522.preheader878, label %vector.ph834

vector.ph834:                                     ; preds = %.lr.ph522.preheader
  %n.vec836 = and i64 %wide.trip.count649, 2147483640
  br label %vector.body838

vector.body838:                                   ; preds = %vector.body838, %vector.ph834
  %index839 = phi i64 [ 0, %vector.ph834 ], [ %index.next842, %vector.body838 ]
  %512 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %index839
  %513 = getelementptr inbounds i8, ptr %512, i64 16
  %wide.load840 = load <4 x i32>, ptr %512, align 16, !tbaa !5
  %wide.load841 = load <4 x i32>, ptr %513, align 16, !tbaa !5
  %514 = ashr <4 x i32> %wide.load840, <i32 8, i32 8, i32 8, i32 8>
  %515 = ashr <4 x i32> %wide.load841, <i32 8, i32 8, i32 8, i32 8>
  %516 = add nsw <4 x i32> %514, <i32 1, i32 1, i32 1, i32 1>
  %517 = add nsw <4 x i32> %515, <i32 1, i32 1, i32 1, i32 1>
  %518 = ashr <4 x i32> %516, <i32 1, i32 1, i32 1, i32 1>
  %519 = ashr <4 x i32> %517, <i32 1, i32 1, i32 1, i32 1>
  %520 = sub nsw <4 x i32> zeroinitializer, %518
  %521 = sub nsw <4 x i32> zeroinitializer, %519
  %522 = getelementptr inbounds i32, ptr %2, i64 %index839
  %523 = getelementptr inbounds i8, ptr %522, i64 16
  store <4 x i32> %520, ptr %522, align 4, !tbaa !5
  store <4 x i32> %521, ptr %523, align 4, !tbaa !5
  %index.next842 = add nuw i64 %index839, 8
  %524 = icmp eq i64 %index.next842, %n.vec836
  br i1 %524, label %middle.block831, label %vector.body838, !llvm.loop !36

middle.block831:                                  ; preds = %vector.body838
  %cmp.n843 = icmp eq i64 %n.vec836, %wide.trip.count649
  br i1 %cmp.n843, label %._crit_edge523, label %.lr.ph522.preheader878

.lr.ph522.preheader878:                           ; preds = %middle.block831, %.lr.ph522.preheader
  %indvars.iv646.ph = phi i64 [ 0, %.lr.ph522.preheader ], [ %n.vec836, %middle.block831 ]
  br label %.lr.ph522

.lr.ph522:                                        ; preds = %.lr.ph522.preheader878, %.lr.ph522
  %indvars.iv646 = phi i64 [ %indvars.iv.next647, %.lr.ph522 ], [ %indvars.iv646.ph, %.lr.ph522.preheader878 ]
  %525 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %indvars.iv646
  %526 = load i32, ptr %525, align 4, !tbaa !5
  %527 = ashr i32 %526, 8
  %528 = add nsw i32 %527, 1
  %529 = ashr i32 %528, 1
  %530 = sub nsw i32 0, %529
  %531 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv646
  store i32 %530, ptr %531, align 4, !tbaa !5
  %indvars.iv.next647 = add nuw nsw i64 %indvars.iv646, 1
  %exitcond650.not = icmp eq i64 %indvars.iv.next647, %wide.trip.count649
  br i1 %exitcond650.not, label %._crit_edge523, label %.lr.ph522, !llvm.loop !37

._crit_edge523:                                   ; preds = %.lr.ph522, %middle.block831
  br i1 %20, label %.preheader, label %.preheader431

.preheader431:                                    ; preds = %._crit_edge523
  br i1 %117, label %.lr.ph526.preheader, label %.loopexit

.lr.ph526.preheader:                              ; preds = %.preheader431
  %wide.trip.count654 = zext nneg i32 %6 to i64
  br label %.lr.ph526

.preheader:                                       ; preds = %._crit_edge523
  br i1 %117, label %.lr.ph530.preheader, label %.loopexit

.lr.ph530.preheader:                              ; preds = %.preheader
  %wide.trip.count659 = zext nneg i32 %6 to i64
  br label %.lr.ph530

.lr.ph530:                                        ; preds = %.lr.ph530.preheader, %.lr.ph530
  %indvars.iv656 = phi i64 [ 0, %.lr.ph530.preheader ], [ %indvars.iv.next657, %.lr.ph530 ]
  %.1385529 = phi i32 [ %23, %.lr.ph530.preheader ], [ %537, %.lr.ph530 ]
  %532 = mul nsw i64 %indvars.iv656, %121
  %533 = getelementptr inbounds i16, ptr %3, i64 %532
  %534 = call i64 @silk_inner_prod16_aligned_64_c(ptr noundef %533, ptr noundef %533, i32 noundef %7) #8
  %535 = ashr i64 %534, %21
  %536 = trunc i64 %535 to i32
  %537 = sub nsw i32 %.1385529, %536
  %indvars.iv.next657 = add nuw nsw i64 %indvars.iv656, 1
  %exitcond660.not = icmp eq i64 %indvars.iv.next657, %wide.trip.count659
  br i1 %exitcond660.not, label %.loopexit, label %.lr.ph530, !llvm.loop !38

.lr.ph526:                                        ; preds = %.lr.ph526.preheader, %.lr.ph526
  %indvars.iv651 = phi i64 [ 0, %.lr.ph526.preheader ], [ %indvars.iv.next652, %.lr.ph526 ]
  %.2386525 = phi i32 [ %26, %.lr.ph526.preheader ], [ %542, %.lr.ph526 ]
  %538 = mul nsw i64 %indvars.iv651, %121
  %539 = getelementptr inbounds i16, ptr %3, i64 %538
  %540 = call i32 @silk_inner_prod_aligned(ptr noundef %539, ptr noundef %539, i32 noundef %7, i32 noundef %8) #8
  %541 = shl i32 %540, %25
  %542 = sub nsw i32 %.2386525, %541
  %indvars.iv.next652 = add nuw nsw i64 %indvars.iv651, 1
  %exitcond655.not = icmp eq i64 %indvars.iv.next652, %wide.trip.count654
  br i1 %exitcond655.not, label %.loopexit, label %.lr.ph526, !llvm.loop !39

.loopexit:                                        ; preds = %.lr.ph526, %.lr.ph530, %.preheader431, %.preheader
  %.3387 = phi i32 [ %23, %.preheader ], [ %26, %.preheader431 ], [ %537, %.lr.ph530 ], [ %542, %.lr.ph526 ]
  %543 = sext i32 %.1376 to i64
  %544 = sext i32 %.3387 to i64
  %545 = mul nsw i64 %544, %543
  %sh.diff421 = lshr i64 %545, 30
  %tr.sh.diff422 = trunc i64 %sh.diff421 to i32
  %546 = and i32 %tr.sh.diff422, -4
  br label %612

.thread:                                          ; preds = %.loopexit436
  %.pre = load i32, ptr %13, align 16, !tbaa !5
  br i1 %.not419506, label %.lr.ph517.preheader, label %._crit_edge518

.lr.ph517.preheader:                              ; preds = %.thread
  %wide.trip.count664 = zext nneg i32 %7 to i64
  %min.iters.check846 = icmp ult i32 %7, 8
  br i1 %min.iters.check846, label %.lr.ph517.preheader869, label %vector.ph847

vector.ph847:                                     ; preds = %.lr.ph517.preheader
  %n.vec849 = and i64 %wide.trip.count639, 2147483640
  %547 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.pre, i64 0
  br label %vector.body851

vector.body851:                                   ; preds = %vector.body851, %vector.ph847
  %index852 = phi i64 [ 0, %vector.ph847 ], [ %index.next861, %vector.body851 ]
  %vec.phi853 = phi <4 x i32> [ <i32 65536, i32 0, i32 0, i32 0>, %vector.ph847 ], [ %577, %vector.body851 ]
  %vec.phi854 = phi <4 x i32> [ zeroinitializer, %vector.ph847 ], [ %578, %vector.body851 ]
  %vec.phi855 = phi <4 x i32> [ %547, %vector.ph847 ], [ %569, %vector.body851 ]
  %vec.phi856 = phi <4 x i32> [ zeroinitializer, %vector.ph847 ], [ %570, %vector.body851 ]
  %548 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %index852
  %549 = getelementptr inbounds i8, ptr %548, i64 16
  %wide.load857 = load <4 x i32>, ptr %548, align 16, !tbaa !5
  %wide.load858 = load <4 x i32>, ptr %549, align 16, !tbaa !5
  %550 = ashr <4 x i32> %wide.load857, <i32 8, i32 8, i32 8, i32 8>
  %551 = ashr <4 x i32> %wide.load858, <i32 8, i32 8, i32 8, i32 8>
  %552 = add nsw <4 x i32> %550, <i32 1, i32 1, i32 1, i32 1>
  %553 = add nsw <4 x i32> %551, <i32 1, i32 1, i32 1, i32 1>
  %554 = ashr <4 x i32> %552, <i32 1, i32 1, i32 1, i32 1>
  %555 = ashr <4 x i32> %553, <i32 1, i32 1, i32 1, i32 1>
  %556 = or disjoint i64 %index852, 1
  %557 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %556
  %558 = getelementptr inbounds i8, ptr %557, i64 16
  %wide.load859 = load <4 x i32>, ptr %557, align 4, !tbaa !5
  %wide.load860 = load <4 x i32>, ptr %558, align 4, !tbaa !5
  %559 = sext <4 x i32> %wide.load859 to <4 x i64>
  %560 = sext <4 x i32> %wide.load860 to <4 x i64>
  %561 = sext <4 x i32> %554 to <4 x i64>
  %562 = sext <4 x i32> %555 to <4 x i64>
  %563 = mul nsw <4 x i64> %561, %559
  %564 = mul nsw <4 x i64> %562, %560
  %565 = lshr <4 x i64> %563, <i64 16, i64 16, i64 16, i64 16>
  %566 = lshr <4 x i64> %564, <i64 16, i64 16, i64 16, i64 16>
  %567 = trunc <4 x i64> %565 to <4 x i32>
  %568 = trunc <4 x i64> %566 to <4 x i32>
  %569 = add <4 x i32> %vec.phi855, %567
  %570 = add <4 x i32> %vec.phi856, %568
  %571 = mul nsw <4 x i64> %561, %561
  %572 = mul nsw <4 x i64> %562, %562
  %573 = lshr <4 x i64> %571, <i64 16, i64 16, i64 16, i64 16>
  %574 = lshr <4 x i64> %572, <i64 16, i64 16, i64 16, i64 16>
  %575 = trunc <4 x i64> %573 to <4 x i32>
  %576 = trunc <4 x i64> %574 to <4 x i32>
  %577 = add <4 x i32> %vec.phi853, %575
  %578 = add <4 x i32> %vec.phi854, %576
  %579 = sub nsw <4 x i32> zeroinitializer, %554
  %580 = sub nsw <4 x i32> zeroinitializer, %555
  %581 = getelementptr inbounds i32, ptr %2, i64 %index852
  %582 = getelementptr inbounds i8, ptr %581, i64 16
  store <4 x i32> %579, ptr %581, align 4, !tbaa !5
  store <4 x i32> %580, ptr %582, align 4, !tbaa !5
  %index.next861 = add nuw i64 %index852, 8
  %583 = icmp eq i64 %index.next861, %n.vec849
  br i1 %583, label %middle.block844, label %vector.body851, !llvm.loop !40

middle.block844:                                  ; preds = %vector.body851
  %bin.rdx862 = add <4 x i32> %578, %577
  %584 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx862)
  %bin.rdx863 = add <4 x i32> %570, %569
  %585 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx863)
  %cmp.n864 = icmp eq i64 %n.vec849, %wide.trip.count639
  br i1 %cmp.n864, label %._crit_edge518, label %.lr.ph517.preheader869

.lr.ph517.preheader869:                           ; preds = %middle.block844, %.lr.ph517.preheader
  %indvars.iv661.ph = phi i64 [ 0, %.lr.ph517.preheader ], [ %n.vec849, %middle.block844 ]
  %.3374515.ph = phi i32 [ 65536, %.lr.ph517.preheader ], [ %584, %middle.block844 ]
  %.1382514.ph = phi i32 [ %.pre, %.lr.ph517.preheader ], [ %585, %middle.block844 ]
  br label %.lr.ph517

.lr.ph517:                                        ; preds = %.lr.ph517.preheader869, %.lr.ph517
  %indvars.iv661 = phi i64 [ %indvars.iv.next662, %.lr.ph517 ], [ %indvars.iv661.ph, %.lr.ph517.preheader869 ]
  %.3374515 = phi i32 [ %602, %.lr.ph517 ], [ %.3374515.ph, %.lr.ph517.preheader869 ]
  %.1382514 = phi i32 [ %598, %.lr.ph517 ], [ %.1382514.ph, %.lr.ph517.preheader869 ]
  %586 = getelementptr inbounds [24 x i32], ptr %12, i64 0, i64 %indvars.iv661
  %587 = load i32, ptr %586, align 4, !tbaa !5
  %588 = ashr i32 %587, 8
  %589 = add nsw i32 %588, 1
  %590 = ashr i32 %589, 1
  %indvars.iv.next662 = add nuw nsw i64 %indvars.iv661, 1
  %591 = getelementptr inbounds [25 x i32], ptr %13, i64 0, i64 %indvars.iv.next662
  %592 = load i32, ptr %591, align 4, !tbaa !5
  %593 = sext i32 %592 to i64
  %594 = sext i32 %590 to i64
  %595 = mul nsw i64 %594, %593
  %596 = lshr i64 %595, 16
  %597 = trunc i64 %596 to i32
  %598 = add i32 %.1382514, %597
  %599 = mul nsw i64 %594, %594
  %600 = lshr i64 %599, 16
  %601 = trunc i64 %600 to i32
  %602 = add i32 %.3374515, %601
  %603 = sub nsw i32 0, %590
  %604 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv661
  store i32 %603, ptr %604, align 4, !tbaa !5
  %exitcond665.not = icmp eq i64 %indvars.iv.next662, %wide.trip.count664
  br i1 %exitcond665.not, label %._crit_edge518, label %.lr.ph517, !llvm.loop !41

._crit_edge518:                                   ; preds = %.lr.ph517, %middle.block844, %.lr.ph464, %.loopexit442, %.thread
  %.1382.lcssa = phi i32 [ %.pre, %.thread ], [ %32, %.loopexit442 ], [ %32, %.lr.ph464 ], [ %585, %middle.block844 ], [ %598, %.lr.ph517 ]
  %.3374.lcssa = phi i32 [ 65536, %.thread ], [ 65536, %.loopexit442 ], [ 65536, %.lr.ph464 ], [ %584, %middle.block844 ], [ %602, %.lr.ph517 ]
  %605 = ashr i64 %28, 32
  %606 = sub nsw i32 0, %.3374.lcssa
  %607 = sext i32 %606 to i64
  %608 = mul nsw i64 %605, %607
  %609 = lshr i64 %608, 16
  %610 = trunc i64 %609 to i32
  %611 = add i32 %.1382.lcssa, %610
  br label %612

612:                                              ; preds = %._crit_edge518, %.loopexit
  %storemerge420 = phi i32 [ %611, %._crit_edge518 ], [ %546, %.loopexit ]
  store i32 %storemerge420, ptr %0, align 4, !tbaa !5
  store i32 %25, ptr %1, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 100, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 100, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %10) #8
  ret void
}

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

declare i64 @silk_inner_prod16_aligned_64_c(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_CLZ64(i64 noundef) local_unnamed_addr #3

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

declare void @celt_pitch_xcorr_c(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_CLZ32(i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_DIV32_varQ(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @silk_SQRT_APPROX(i32 noundef) local_unnamed_addr #3

declare i32 @silk_inner_prod_aligned(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #7

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !10, !13, !14}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10, !14, !13}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10, !13, !14}
!23 = distinct !{!23, !10, !14, !13}
!24 = distinct !{!24, !10, !13, !14}
!25 = distinct !{!25, !10, !14, !13}
!26 = distinct !{!26, !10}
!27 = distinct !{!27, !10, !13, !14}
!28 = distinct !{!28, !10, !14, !13}
!29 = distinct !{!29, !10, !13, !14}
!30 = distinct !{!30, !10, !14, !13}
!31 = distinct !{!31, !10}
!32 = distinct !{!32, !10}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !10, !13, !14}
!35 = distinct !{!35, !10, !14, !13}
!36 = distinct !{!36, !10, !13, !14}
!37 = distinct !{!37, !10, !14, !13}
!38 = distinct !{!38, !10}
!39 = distinct !{!39, !10}
!40 = distinct !{!40, !10, !13, !14}
!41 = distinct !{!41, !10, !14, !13}


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