; LLVM IR from glaretechnologies/substrata :: opus/opus-1.3.1/src (opus_compare)

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

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [36 x i8], align 1
@BANDS = external hidden constant [22 x i32], align 16
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [62 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca double, align 8
  %14 = alloca float, align 4
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %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 float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  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
  %39 = load i32, ptr %4, align 4, !tbaa !5
  %40 = icmp slt i32 %39, 3
  br i1 %40, label %44, label %41

41:                                               ; preds = %2
  %42 = load i32, ptr %4, align 4, !tbaa !5
  %43 = icmp sgt i32 %42, 6
  br i1 %43, label %44, label %50

44:                                               ; preds = %41, %2
  %45 = load ptr, ptr @stderr, align 8, !tbaa !9
  %46 = load ptr, ptr %5, align 8, !tbaa !9
  %47 = getelementptr inbounds ptr, ptr %46, i64 0
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  %49 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %45, ptr noundef @.str, ptr noundef %48) #7
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

50:                                               ; preds = %41
  store i32 1, ptr %22, align 4, !tbaa !5
  %51 = load ptr, ptr %5, align 8, !tbaa !9
  %52 = getelementptr inbounds ptr, ptr %51, i64 1
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  %54 = call i32 @strcmp(ptr noundef %53, ptr noundef @.str.1) #8
  %55 = icmp eq i32 %54, 0
  br i1 %55, label %56, label %59

56:                                               ; preds = %50
  store i32 2, ptr %22, align 4, !tbaa !5
  %57 = load ptr, ptr %5, align 8, !tbaa !9
  %58 = getelementptr inbounds ptr, ptr %57, i32 1
  store ptr %58, ptr %5, align 8, !tbaa !9
  br label %59

59:                                               ; preds = %56, %50
  store i32 48000, ptr %23, align 4, !tbaa !5
  store i32 21, ptr %25, align 4, !tbaa !5
  store i32 240, ptr %26, align 4, !tbaa !5
  store i32 1, ptr %24, align 4, !tbaa !5
  %60 = load ptr, ptr %5, align 8, !tbaa !9
  %61 = getelementptr inbounds ptr, ptr %60, i64 1
  %62 = load ptr, ptr %61, align 8, !tbaa !9
  %63 = call i32 @strcmp(ptr noundef %62, ptr noundef @.str.2) #8
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %65, label %100

65:                                               ; preds = %59
  %66 = load ptr, ptr %5, align 8, !tbaa !9
  %67 = getelementptr inbounds ptr, ptr %66, i64 2
  %68 = load ptr, ptr %67, align 8, !tbaa !9
  %69 = call i32 @atoi(ptr noundef %68) #8
  store i32 %69, ptr %23, align 4, !tbaa !5
  %70 = load i32, ptr %23, align 4, !tbaa !5
  %71 = icmp ne i32 %70, 8000
  br i1 %71, label %72, label %87

72:                                               ; preds = %65
  %73 = load i32, ptr %23, align 4, !tbaa !5
  %74 = icmp ne i32 %73, 12000
  br i1 %74, label %75, label %87

75:                                               ; preds = %72
  %76 = load i32, ptr %23, align 4, !tbaa !5
  %77 = icmp ne i32 %76, 16000
  br i1 %77, label %78, label %87

78:                                               ; preds = %75
  %79 = load i32, ptr %23, align 4, !tbaa !5
  %80 = icmp ne i32 %79, 24000
  br i1 %80, label %81, label %87

81:                                               ; preds = %78
  %82 = load i32, ptr %23, align 4, !tbaa !5
  %83 = icmp ne i32 %82, 48000
  br i1 %83, label %84, label %87

84:                                               ; preds = %81
  %85 = load ptr, ptr @stderr, align 8, !tbaa !9
  %86 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %85, ptr noundef @.str.3) #7
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

87:                                               ; preds = %81, %78, %75, %72, %65
  %88 = load i32, ptr %23, align 4, !tbaa !5
  %89 = udiv i32 48000, %88
  store i32 %89, ptr %24, align 4, !tbaa !5
  %90 = load i32, ptr %23, align 4, !tbaa !5
  switch i32 %90, label %95 [
    i32 8000, label %91
    i32 12000, label %92
    i32 16000, label %93
    i32 24000, label %94
  ]

91:                                               ; preds = %87
  store i32 13, ptr %25, align 4, !tbaa !5
  br label %95

92:                                               ; preds = %87
  store i32 15, ptr %25, align 4, !tbaa !5
  br label %95

93:                                               ; preds = %87
  store i32 17, ptr %25, align 4, !tbaa !5
  br label %95

94:                                               ; preds = %87
  store i32 19, ptr %25, align 4, !tbaa !5
  br label %95

95:                                               ; preds = %94, %93, %92, %91, %87
  %96 = load i32, ptr %24, align 4, !tbaa !5
  %97 = sdiv i32 240, %96
  store i32 %97, ptr %26, align 4, !tbaa !5
  %98 = load ptr, ptr %5, align 8, !tbaa !9
  %99 = getelementptr inbounds ptr, ptr %98, i64 2
  store ptr %99, ptr %5, align 8, !tbaa !9
  br label %100

100:                                              ; preds = %95, %59
  %101 = load ptr, ptr %5, align 8, !tbaa !9
  %102 = getelementptr inbounds ptr, ptr %101, i64 1
  %103 = load ptr, ptr %102, align 8, !tbaa !9
  %104 = call noalias ptr @fopen(ptr noundef %103, ptr noundef @.str.4)
  store ptr %104, ptr %6, align 8, !tbaa !9
  %105 = load ptr, ptr %6, align 8, !tbaa !9
  %106 = icmp eq ptr %105, null
  br i1 %106, label %107, label %113

107:                                              ; preds = %100
  %108 = load ptr, ptr @stderr, align 8, !tbaa !9
  %109 = load ptr, ptr %5, align 8, !tbaa !9
  %110 = getelementptr inbounds ptr, ptr %109, i64 1
  %111 = load ptr, ptr %110, align 8, !tbaa !9
  %112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef @.str.5, ptr noundef %111) #7
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

113:                                              ; preds = %100
  %114 = load ptr, ptr %5, align 8, !tbaa !9
  %115 = getelementptr inbounds ptr, ptr %114, i64 2
  %116 = load ptr, ptr %115, align 8, !tbaa !9
  %117 = call noalias ptr @fopen(ptr noundef %116, ptr noundef @.str.4)
  store ptr %117, ptr %7, align 8, !tbaa !9
  %118 = load ptr, ptr %7, align 8, !tbaa !9
  %119 = icmp eq ptr %118, null
  br i1 %119, label %120, label %128

120:                                              ; preds = %113
  %121 = load ptr, ptr @stderr, align 8, !tbaa !9
  %122 = load ptr, ptr %5, align 8, !tbaa !9
  %123 = getelementptr inbounds ptr, ptr %122, i64 2
  %124 = load ptr, ptr %123, align 8, !tbaa !9
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %121, ptr noundef @.str.5, ptr noundef %124) #7
  %126 = load ptr, ptr %6, align 8, !tbaa !9
  %127 = call i32 @fclose(ptr noundef %126)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

128:                                              ; preds = %113
  %129 = load ptr, ptr %6, align 8, !tbaa !9
  %130 = call i64 @read_pcm16(ptr noundef %8, ptr noundef %129, i32 noundef 2)
  store i64 %130, ptr %15, align 8, !tbaa !11
  %131 = load i32, ptr %22, align 4, !tbaa !5
  %132 = icmp eq i32 %131, 1
  br i1 %132, label %133, label %161

133:                                              ; preds = %128
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %134

134:                                              ; preds = %157, %133
  %135 = load i64, ptr %18, align 8, !tbaa !11
  %136 = load i64, ptr %15, align 8, !tbaa !11
  %137 = icmp ult i64 %135, %136
  br i1 %137, label %138, label %160

138:                                              ; preds = %134
  %139 = load ptr, ptr %8, align 8, !tbaa !9
  %140 = load i64, ptr %18, align 8, !tbaa !11
  %141 = mul i64 2, %140
  %142 = getelementptr inbounds float, ptr %139, i64 %141
  %143 = load float, ptr %142, align 4, !tbaa !13
  %144 = load ptr, ptr %8, align 8, !tbaa !9
  %145 = load i64, ptr %18, align 8, !tbaa !11
  %146 = mul i64 2, %145
  %147 = add i64 %146, 1
  %148 = getelementptr inbounds float, ptr %144, i64 %147
  %149 = load float, ptr %148, align 4, !tbaa !13
  %150 = fadd float %143, %149
  %151 = fpext float %150 to double
  %152 = fmul double 5.000000e-01, %151
  %153 = fptrunc double %152 to float
  %154 = load ptr, ptr %8, align 8, !tbaa !9
  %155 = load i64, ptr %18, align 8, !tbaa !11
  %156 = getelementptr inbounds float, ptr %154, i64 %155
  store float %153, ptr %156, align 4, !tbaa !13
  br label %157

157:                                              ; preds = %138
  %158 = load i64, ptr %18, align 8, !tbaa !11
  %159 = add i64 %158, 1
  store i64 %159, ptr %18, align 8, !tbaa !11
  br label %134, !llvm.loop !15

160:                                              ; preds = %134
  br label %161

161:                                              ; preds = %160, %128
  %162 = load ptr, ptr %6, align 8, !tbaa !9
  %163 = call i32 @fclose(ptr noundef %162)
  %164 = load ptr, ptr %7, align 8, !tbaa !9
  %165 = load i32, ptr %22, align 4, !tbaa !5
  %166 = call i64 @read_pcm16(ptr noundef %9, ptr noundef %164, i32 noundef %165)
  store i64 %166, ptr %16, align 8, !tbaa !11
  %167 = load ptr, ptr %7, align 8, !tbaa !9
  %168 = call i32 @fclose(ptr noundef %167)
  %169 = load i64, ptr %15, align 8, !tbaa !11
  %170 = load i64, ptr %16, align 8, !tbaa !11
  %171 = load i32, ptr %24, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = mul i64 %170, %172
  %174 = icmp ne i64 %169, %173
  br i1 %174, label %175, label %183

175:                                              ; preds = %161
  %176 = load ptr, ptr @stderr, align 8, !tbaa !9
  %177 = load i64, ptr %15, align 8, !tbaa !11
  %178 = load i64, ptr %16, align 8, !tbaa !11
  %179 = load i32, ptr %24, align 4, !tbaa !5
  %180 = sext i32 %179 to i64
  %181 = mul i64 %178, %180
  %182 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %176, ptr noundef @.str.6, i64 noundef %177, i64 noundef %181) #7
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

183:                                              ; preds = %161
  %184 = load i64, ptr %15, align 8, !tbaa !11
  %185 = icmp ult i64 %184, 480
  br i1 %185, label %186, label %190

186:                                              ; preds = %183
  %187 = load ptr, ptr @stderr, align 8, !tbaa !9
  %188 = load i64, ptr %15, align 8, !tbaa !11
  %189 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %187, ptr noundef @.str.7, i64 noundef %188, i32 noundef 480) #7
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

190:                                              ; preds = %183
  %191 = load i64, ptr %15, align 8, !tbaa !11
  %192 = sub i64 %191, 480
  %193 = add i64 %192, 120
  %194 = udiv i64 %193, 120
  store i64 %194, ptr %17, align 8, !tbaa !11
  %195 = load i64, ptr %17, align 8, !tbaa !11
  %196 = mul i64 %195, 21
  %197 = load i32, ptr %22, align 4, !tbaa !5
  %198 = sext i32 %197 to i64
  %199 = mul i64 %196, %198
  %200 = mul i64 %199, 4
  %201 = call ptr @opus_malloc(i64 noundef %200)
  store ptr %201, ptr %10, align 8, !tbaa !9
  %202 = load i64, ptr %17, align 8, !tbaa !11
  %203 = mul i64 %202, 240
  %204 = load i32, ptr %22, align 4, !tbaa !5
  %205 = sext i32 %204 to i64
  %206 = mul i64 %203, %205
  %207 = mul i64 %206, 4
  %208 = call ptr @opus_malloc(i64 noundef %207)
  store ptr %208, ptr %11, align 8, !tbaa !9
  %209 = load i64, ptr %17, align 8, !tbaa !11
  %210 = load i32, ptr %26, align 4, !tbaa !5
  %211 = sext i32 %210 to i64
  %212 = mul i64 %209, %211
  %213 = load i32, ptr %22, align 4, !tbaa !5
  %214 = sext i32 %213 to i64
  %215 = mul i64 %212, %214
  %216 = mul i64 %215, 4
  %217 = call ptr @opus_malloc(i64 noundef %216)
  store ptr %217, ptr %12, align 8, !tbaa !9
  %218 = load ptr, ptr %10, align 8, !tbaa !9
  %219 = load ptr, ptr %11, align 8, !tbaa !9
  %220 = load ptr, ptr %8, align 8, !tbaa !9
  %221 = load i32, ptr %22, align 4, !tbaa !5
  %222 = load i64, ptr %17, align 8, !tbaa !11
  call void @band_energy(ptr noundef %218, ptr noundef %219, ptr noundef @BANDS, i32 noundef 21, ptr noundef %220, i32 noundef %221, i64 noundef %222, i32 noundef 480, i32 noundef 120, i32 noundef 1)
  %223 = load ptr, ptr %8, align 8, !tbaa !9
  call void @free(ptr noundef %223) #7
  %224 = load ptr, ptr %12, align 8, !tbaa !9
  %225 = load i32, ptr %25, align 4, !tbaa !5
  %226 = load ptr, ptr %9, align 8, !tbaa !9
  %227 = load i32, ptr %22, align 4, !tbaa !5
  %228 = load i64, ptr %17, align 8, !tbaa !11
  %229 = load i32, ptr %24, align 4, !tbaa !5
  %230 = sdiv i32 480, %229
  %231 = load i32, ptr %24, align 4, !tbaa !5
  %232 = sdiv i32 120, %231
  %233 = load i32, ptr %24, align 4, !tbaa !5
  call void @band_energy(ptr noundef null, ptr noundef %224, ptr noundef @BANDS, i32 noundef %225, ptr noundef %226, i32 noundef %227, i64 noundef %228, i32 noundef %230, i32 noundef %232, i32 noundef %233)
  %234 = load ptr, ptr %9, align 8, !tbaa !9
  call void @free(ptr noundef %234) #7
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %235

235:                                              ; preds = %542, %190
  %236 = load i64, ptr %18, align 8, !tbaa !11
  %237 = load i64, ptr %17, align 8, !tbaa !11
  %238 = icmp ult i64 %236, %237
  br i1 %238, label %239, label %545

239:                                              ; preds = %235
  store i32 1, ptr %21, align 4, !tbaa !5
  br label %240

240:                                              ; preds = %283, %239
  %241 = load i32, ptr %21, align 4, !tbaa !5
  %242 = icmp slt i32 %241, 21
  br i1 %242, label %243, label %286

243:                                              ; preds = %240
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %244

244:                                              ; preds = %279, %243
  %245 = load i32, ptr %19, align 4, !tbaa !5
  %246 = load i32, ptr %22, align 4, !tbaa !5
  %247 = icmp slt i32 %245, %246
  br i1 %247, label %248, label %282

248:                                              ; preds = %244
  %249 = load ptr, ptr %10, align 8, !tbaa !9
  %250 = load i64, ptr %18, align 8, !tbaa !11
  %251 = mul i64 %250, 21
  %252 = load i32, ptr %21, align 4, !tbaa !5
  %253 = sext i32 %252 to i64
  %254 = add i64 %251, %253
  %255 = sub i64 %254, 1
  %256 = load i32, ptr %22, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = mul i64 %255, %257
  %259 = load i32, ptr %19, align 4, !tbaa !5
  %260 = sext i32 %259 to i64
  %261 = add i64 %258, %260
  %262 = getelementptr inbounds float, ptr %249, i64 %261
  %263 = load float, ptr %262, align 4, !tbaa !13
  %264 = load ptr, ptr %10, align 8, !tbaa !9
  %265 = load i64, ptr %18, align 8, !tbaa !11
  %266 = mul i64 %265, 21
  %267 = load i32, ptr %21, align 4, !tbaa !5
  %268 = sext i32 %267 to i64
  %269 = add i64 %266, %268
  %270 = load i32, ptr %22, align 4, !tbaa !5
  %271 = sext i32 %270 to i64
  %272 = mul i64 %269, %271
  %273 = load i32, ptr %19, align 4, !tbaa !5
  %274 = sext i32 %273 to i64
  %275 = add i64 %272, %274
  %276 = getelementptr inbounds float, ptr %264, i64 %275
  %277 = load float, ptr %276, align 4, !tbaa !13
  %278 = call float @llvm.fmuladd.f32(float 0x3FB99999A0000000, float %263, float %277)
  store float %278, ptr %276, align 4, !tbaa !13
  br label %279

279:                                              ; preds = %248
  %280 = load i32, ptr %19, align 4, !tbaa !5
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %19, align 4, !tbaa !5
  br label %244, !llvm.loop !17

282:                                              ; preds = %244
  br label %283

283:                                              ; preds = %282
  %284 = load i32, ptr %21, align 4, !tbaa !5
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %21, align 4, !tbaa !5
  br label %240, !llvm.loop !18

286:                                              ; preds = %240
  store i32 20, ptr %21, align 4, !tbaa !5
  br label %287

287:                                              ; preds = %330, %286
  %288 = load i32, ptr %21, align 4, !tbaa !5
  %289 = add nsw i32 %288, -1
  store i32 %289, ptr %21, align 4, !tbaa !5
  %290 = icmp sgt i32 %288, 0
  br i1 %290, label %291, label %331

291:                                              ; preds = %287
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %292

292:                                              ; preds = %327, %291
  %293 = load i32, ptr %19, align 4, !tbaa !5
  %294 = load i32, ptr %22, align 4, !tbaa !5
  %295 = icmp slt i32 %293, %294
  br i1 %295, label %296, label %330

296:                                              ; preds = %292
  %297 = load ptr, ptr %10, align 8, !tbaa !9
  %298 = load i64, ptr %18, align 8, !tbaa !11
  %299 = mul i64 %298, 21
  %300 = load i32, ptr %21, align 4, !tbaa !5
  %301 = sext i32 %300 to i64
  %302 = add i64 %299, %301
  %303 = add i64 %302, 1
  %304 = load i32, ptr %22, align 4, !tbaa !5
  %305 = sext i32 %304 to i64
  %306 = mul i64 %303, %305
  %307 = load i32, ptr %19, align 4, !tbaa !5
  %308 = sext i32 %307 to i64
  %309 = add i64 %306, %308
  %310 = getelementptr inbounds float, ptr %297, i64 %309
  %311 = load float, ptr %310, align 4, !tbaa !13
  %312 = load ptr, ptr %10, align 8, !tbaa !9
  %313 = load i64, ptr %18, align 8, !tbaa !11
  %314 = mul i64 %313, 21
  %315 = load i32, ptr %21, align 4, !tbaa !5
  %316 = sext i32 %315 to i64
  %317 = add i64 %314, %316
  %318 = load i32, ptr %22, align 4, !tbaa !5
  %319 = sext i32 %318 to i64
  %320 = mul i64 %317, %319
  %321 = load i32, ptr %19, align 4, !tbaa !5
  %322 = sext i32 %321 to i64
  %323 = add i64 %320, %322
  %324 = getelementptr inbounds float, ptr %312, i64 %323
  %325 = load float, ptr %324, align 4, !tbaa !13
  %326 = call float @llvm.fmuladd.f32(float 0x3F9EB851E0000000, float %311, float %325)
  store float %326, ptr %324, align 4, !tbaa !13
  br label %327

327:                                              ; preds = %296
  %328 = load i32, ptr %19, align 4, !tbaa !5
  %329 = add nsw i32 %328, 1
  store i32 %329, ptr %19, align 4, !tbaa !5
  br label %292, !llvm.loop !19

330:                                              ; preds = %292
  br label %287, !llvm.loop !20

331:                                              ; preds = %287
  %332 = load i64, ptr %18, align 8, !tbaa !11
  %333 = icmp ugt i64 %332, 0
  br i1 %333, label %334, label %382

334:                                              ; preds = %331
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %335

335:                                              ; preds = %378, %334
  %336 = load i32, ptr %21, align 4, !tbaa !5
  %337 = icmp slt i32 %336, 21
  br i1 %337, label %338, label %381

338:                                              ; preds = %335
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %339

339:                                              ; preds = %374, %338
  %340 = load i32, ptr %19, align 4, !tbaa !5
  %341 = load i32, ptr %22, align 4, !tbaa !5
  %342 = icmp slt i32 %340, %341
  br i1 %342, label %343, label %377

343:                                              ; preds = %339
  %344 = load ptr, ptr %10, align 8, !tbaa !9
  %345 = load i64, ptr %18, align 8, !tbaa !11
  %346 = sub i64 %345, 1
  %347 = mul i64 %346, 21
  %348 = load i32, ptr %21, align 4, !tbaa !5
  %349 = sext i32 %348 to i64
  %350 = add i64 %347, %349
  %351 = load i32, ptr %22, align 4, !tbaa !5
  %352 = sext i32 %351 to i64
  %353 = mul i64 %350, %352
  %354 = load i32, ptr %19, align 4, !tbaa !5
  %355 = sext i32 %354 to i64
  %356 = add i64 %353, %355
  %357 = getelementptr inbounds float, ptr %344, i64 %356
  %358 = load float, ptr %357, align 4, !tbaa !13
  %359 = load ptr, ptr %10, align 8, !tbaa !9
  %360 = load i64, ptr %18, align 8, !tbaa !11
  %361 = mul i64 %360, 21
  %362 = load i32, ptr %21, align 4, !tbaa !5
  %363 = sext i32 %362 to i64
  %364 = add i64 %361, %363
  %365 = load i32, ptr %22, align 4, !tbaa !5
  %366 = sext i32 %365 to i64
  %367 = mul i64 %364, %366
  %368 = load i32, ptr %19, align 4, !tbaa !5
  %369 = sext i32 %368 to i64
  %370 = add i64 %367, %369
  %371 = getelementptr inbounds float, ptr %359, i64 %370
  %372 = load float, ptr %371, align 4, !tbaa !13
  %373 = call float @llvm.fmuladd.f32(float 5.000000e-01, float %358, float %372)
  store float %373, ptr %371, align 4, !tbaa !13
  br label %374

374:                                              ; preds = %343
  %375 = load i32, ptr %19, align 4, !tbaa !5
  %376 = add nsw i32 %375, 1
  store i32 %376, ptr %19, align 4, !tbaa !5
  br label %339, !llvm.loop !21

377:                                              ; preds = %339
  br label %378

378:                                              ; preds = %377
  %379 = load i32, ptr %21, align 4, !tbaa !5
  %380 = add nsw i32 %379, 1
  store i32 %380, ptr %21, align 4, !tbaa !5
  br label %335, !llvm.loop !22

381:                                              ; preds = %335
  br label %382

382:                                              ; preds = %381, %331
  %383 = load i32, ptr %22, align 4, !tbaa !5
  %384 = icmp eq i32 %383, 2
  br i1 %384, label %385, label %446

385:                                              ; preds = %382
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %386

386:                                              ; preds = %442, %385
  %387 = load i32, ptr %21, align 4, !tbaa !5
  %388 = icmp slt i32 %387, 21
  br i1 %388, label %389, label %445

389:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %390 = load ptr, ptr %10, align 8, !tbaa !9
  %391 = load i64, ptr %18, align 8, !tbaa !11
  %392 = mul i64 %391, 21
  %393 = load i32, ptr %21, align 4, !tbaa !5
  %394 = sext i32 %393 to i64
  %395 = add i64 %392, %394
  %396 = load i32, ptr %22, align 4, !tbaa !5
  %397 = sext i32 %396 to i64
  %398 = mul i64 %395, %397
  %399 = add i64 %398, 0
  %400 = getelementptr inbounds float, ptr %390, i64 %399
  %401 = load float, ptr %400, align 4, !tbaa !13
  store float %401, ptr %29, align 4, !tbaa !13
  %402 = load ptr, ptr %10, align 8, !tbaa !9
  %403 = load i64, ptr %18, align 8, !tbaa !11
  %404 = mul i64 %403, 21
  %405 = load i32, ptr %21, align 4, !tbaa !5
  %406 = sext i32 %405 to i64
  %407 = add i64 %404, %406
  %408 = load i32, ptr %22, align 4, !tbaa !5
  %409 = sext i32 %408 to i64
  %410 = mul i64 %407, %409
  %411 = add i64 %410, 1
  %412 = getelementptr inbounds float, ptr %402, i64 %411
  %413 = load float, ptr %412, align 4, !tbaa !13
  store float %413, ptr %30, align 4, !tbaa !13
  %414 = load float, ptr %30, align 4, !tbaa !13
  %415 = load ptr, ptr %10, align 8, !tbaa !9
  %416 = load i64, ptr %18, align 8, !tbaa !11
  %417 = mul i64 %416, 21
  %418 = load i32, ptr %21, align 4, !tbaa !5
  %419 = sext i32 %418 to i64
  %420 = add i64 %417, %419
  %421 = load i32, ptr %22, align 4, !tbaa !5
  %422 = sext i32 %421 to i64
  %423 = mul i64 %420, %422
  %424 = add i64 %423, 0
  %425 = getelementptr inbounds float, ptr %415, i64 %424
  %426 = load float, ptr %425, align 4, !tbaa !13
  %427 = call float @llvm.fmuladd.f32(float 0x3F847AE140000000, float %414, float %426)
  store float %427, ptr %425, align 4, !tbaa !13
  %428 = load float, ptr %29, align 4, !tbaa !13
  %429 = load ptr, ptr %10, align 8, !tbaa !9
  %430 = load i64, ptr %18, align 8, !tbaa !11
  %431 = mul i64 %430, 21
  %432 = load i32, ptr %21, align 4, !tbaa !5
  %433 = sext i32 %432 to i64
  %434 = add i64 %431, %433
  %435 = load i32, ptr %22, align 4, !tbaa !5
  %436 = sext i32 %435 to i64
  %437 = mul i64 %434, %436
  %438 = add i64 %437, 1
  %439 = getelementptr inbounds float, ptr %429, i64 %438
  %440 = load float, ptr %439, align 4, !tbaa !13
  %441 = call float @llvm.fmuladd.f32(float 0x3F847AE140000000, float %428, float %440)
  store float %441, ptr %439, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %442

442:                                              ; preds = %389
  %443 = load i32, ptr %21, align 4, !tbaa !5
  %444 = add nsw i32 %443, 1
  store i32 %444, ptr %21, align 4, !tbaa !5
  br label %386, !llvm.loop !23

445:                                              ; preds = %386
  br label %446

446:                                              ; preds = %445, %382
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %447

447:                                              ; preds = %538, %446
  %448 = load i32, ptr %21, align 4, !tbaa !5
  %449 = load i32, ptr %25, align 4, !tbaa !5
  %450 = icmp slt i32 %448, %449
  br i1 %450, label %451, label %541

451:                                              ; preds = %447
  %452 = load i32, ptr %21, align 4, !tbaa !5
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %453
  %455 = load i32, ptr %454, align 4, !tbaa !5
  store i32 %455, ptr %20, align 4, !tbaa !5
  br label %456

456:                                              ; preds = %534, %451
  %457 = load i32, ptr %20, align 4, !tbaa !5
  %458 = load i32, ptr %21, align 4, !tbaa !5
  %459 = add nsw i32 %458, 1
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !5
  %463 = icmp slt i32 %457, %462
  br i1 %463, label %464, label %537

464:                                              ; preds = %456
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %465

465:                                              ; preds = %530, %464
  %466 = load i32, ptr %19, align 4, !tbaa !5
  %467 = load i32, ptr %22, align 4, !tbaa !5
  %468 = icmp slt i32 %466, %467
  br i1 %468, label %469, label %533

469:                                              ; preds = %465
  %470 = load ptr, ptr %10, align 8, !tbaa !9
  %471 = load i64, ptr %18, align 8, !tbaa !11
  %472 = mul i64 %471, 21
  %473 = load i32, ptr %21, align 4, !tbaa !5
  %474 = sext i32 %473 to i64
  %475 = add i64 %472, %474
  %476 = load i32, ptr %22, align 4, !tbaa !5
  %477 = sext i32 %476 to i64
  %478 = mul i64 %475, %477
  %479 = load i32, ptr %19, align 4, !tbaa !5
  %480 = sext i32 %479 to i64
  %481 = add i64 %478, %480
  %482 = getelementptr inbounds float, ptr %470, i64 %481
  %483 = load float, ptr %482, align 4, !tbaa !13
  %484 = load ptr, ptr %11, align 8, !tbaa !9
  %485 = load i64, ptr %18, align 8, !tbaa !11
  %486 = mul i64 %485, 240
  %487 = load i32, ptr %20, align 4, !tbaa !5
  %488 = sext i32 %487 to i64
  %489 = add i64 %486, %488
  %490 = load i32, ptr %22, align 4, !tbaa !5
  %491 = sext i32 %490 to i64
  %492 = mul i64 %489, %491
  %493 = load i32, ptr %19, align 4, !tbaa !5
  %494 = sext i32 %493 to i64
  %495 = add i64 %492, %494
  %496 = getelementptr inbounds float, ptr %484, i64 %495
  %497 = load float, ptr %496, align 4, !tbaa !13
  %498 = call float @llvm.fmuladd.f32(float 0x3FB99999A0000000, float %483, float %497)
  store float %498, ptr %496, align 4, !tbaa !13
  %499 = load ptr, ptr %10, align 8, !tbaa !9
  %500 = load i64, ptr %18, align 8, !tbaa !11
  %501 = mul i64 %500, 21
  %502 = load i32, ptr %21, align 4, !tbaa !5
  %503 = sext i32 %502 to i64
  %504 = add i64 %501, %503
  %505 = load i32, ptr %22, align 4, !tbaa !5
  %506 = sext i32 %505 to i64
  %507 = mul i64 %504, %506
  %508 = load i32, ptr %19, align 4, !tbaa !5
  %509 = sext i32 %508 to i64
  %510 = add i64 %507, %509
  %511 = getelementptr inbounds float, ptr %499, i64 %510
  %512 = load float, ptr %511, align 4, !tbaa !13
  %513 = load ptr, ptr %12, align 8, !tbaa !9
  %514 = load i64, ptr %18, align 8, !tbaa !11
  %515 = load i32, ptr %26, align 4, !tbaa !5
  %516 = sext i32 %515 to i64
  %517 = mul i64 %514, %516
  %518 = load i32, ptr %20, align 4, !tbaa !5
  %519 = sext i32 %518 to i64
  %520 = add i64 %517, %519
  %521 = load i32, ptr %22, align 4, !tbaa !5
  %522 = sext i32 %521 to i64
  %523 = mul i64 %520, %522
  %524 = load i32, ptr %19, align 4, !tbaa !5
  %525 = sext i32 %524 to i64
  %526 = add i64 %523, %525
  %527 = getelementptr inbounds float, ptr %513, i64 %526
  %528 = load float, ptr %527, align 4, !tbaa !13
  %529 = call float @llvm.fmuladd.f32(float 0x3FB99999A0000000, float %512, float %528)
  store float %529, ptr %527, align 4, !tbaa !13
  br label %530

530:                                              ; preds = %469
  %531 = load i32, ptr %19, align 4, !tbaa !5
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %19, align 4, !tbaa !5
  br label %465, !llvm.loop !24

533:                                              ; preds = %465
  br label %534

534:                                              ; preds = %533
  %535 = load i32, ptr %20, align 4, !tbaa !5
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr %20, align 4, !tbaa !5
  br label %456, !llvm.loop !25

537:                                              ; preds = %456
  br label %538

538:                                              ; preds = %537
  %539 = load i32, ptr %21, align 4, !tbaa !5
  %540 = add nsw i32 %539, 1
  store i32 %540, ptr %21, align 4, !tbaa !5
  br label %447, !llvm.loop !26

541:                                              ; preds = %447
  br label %542

542:                                              ; preds = %541
  %543 = load i64, ptr %18, align 8, !tbaa !11
  %544 = add i64 %543, 1
  store i64 %544, ptr %18, align 8, !tbaa !11
  br label %235, !llvm.loop !27

545:                                              ; preds = %235
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %546

546:                                              ; preds = %670, %545
  %547 = load i32, ptr %21, align 4, !tbaa !5
  %548 = load i32, ptr %25, align 4, !tbaa !5
  %549 = icmp slt i32 %547, %548
  br i1 %549, label %550, label %673

550:                                              ; preds = %546
  %551 = load i32, ptr %21, align 4, !tbaa !5
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %552
  %554 = load i32, ptr %553, align 4, !tbaa !5
  store i32 %554, ptr %20, align 4, !tbaa !5
  br label %555

555:                                              ; preds = %666, %550
  %556 = load i32, ptr %20, align 4, !tbaa !5
  %557 = load i32, ptr %21, align 4, !tbaa !5
  %558 = add nsw i32 %557, 1
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %559
  %561 = load i32, ptr %560, align 4, !tbaa !5
  %562 = icmp slt i32 %556, %561
  br i1 %562, label %563, label %669

563:                                              ; preds = %555
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %564

564:                                              ; preds = %662, %563
  %565 = load i32, ptr %19, align 4, !tbaa !5
  %566 = load i32, ptr %22, align 4, !tbaa !5
  %567 = icmp slt i32 %565, %566
  br i1 %567, label %568, label %665

568:                                              ; preds = %564
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %569 = load ptr, ptr %11, align 8, !tbaa !9
  %570 = load i32, ptr %20, align 4, !tbaa !5
  %571 = load i32, ptr %22, align 4, !tbaa !5
  %572 = mul nsw i32 %570, %571
  %573 = load i32, ptr %19, align 4, !tbaa !5
  %574 = add nsw i32 %572, %573
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds float, ptr %569, i64 %575
  %577 = load float, ptr %576, align 4, !tbaa !13
  store float %577, ptr %31, align 4, !tbaa !13
  %578 = load ptr, ptr %12, align 8, !tbaa !9
  %579 = load i32, ptr %20, align 4, !tbaa !5
  %580 = load i32, ptr %22, align 4, !tbaa !5
  %581 = mul nsw i32 %579, %580
  %582 = load i32, ptr %19, align 4, !tbaa !5
  %583 = add nsw i32 %581, %582
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds float, ptr %578, i64 %584
  %586 = load float, ptr %585, align 4, !tbaa !13
  store float %586, ptr %32, align 4, !tbaa !13
  store i64 1, ptr %18, align 8, !tbaa !11
  br label %587

587:                                              ; preds = %658, %568
  %588 = load i64, ptr %18, align 8, !tbaa !11
  %589 = load i64, ptr %17, align 8, !tbaa !11
  %590 = icmp ult i64 %588, %589
  br i1 %590, label %591, label %661

591:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %592 = load ptr, ptr %11, align 8, !tbaa !9
  %593 = load i64, ptr %18, align 8, !tbaa !11
  %594 = mul i64 %593, 240
  %595 = load i32, ptr %20, align 4, !tbaa !5
  %596 = sext i32 %595 to i64
  %597 = add i64 %594, %596
  %598 = load i32, ptr %22, align 4, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = mul i64 %597, %599
  %601 = load i32, ptr %19, align 4, !tbaa !5
  %602 = sext i32 %601 to i64
  %603 = add i64 %600, %602
  %604 = getelementptr inbounds float, ptr %592, i64 %603
  %605 = load float, ptr %604, align 4, !tbaa !13
  store float %605, ptr %33, align 4, !tbaa !13
  %606 = load ptr, ptr %12, align 8, !tbaa !9
  %607 = load i64, ptr %18, align 8, !tbaa !11
  %608 = load i32, ptr %26, align 4, !tbaa !5
  %609 = sext i32 %608 to i64
  %610 = mul i64 %607, %609
  %611 = load i32, ptr %20, align 4, !tbaa !5
  %612 = sext i32 %611 to i64
  %613 = add i64 %610, %612
  %614 = load i32, ptr %22, align 4, !tbaa !5
  %615 = sext i32 %614 to i64
  %616 = mul i64 %613, %615
  %617 = load i32, ptr %19, align 4, !tbaa !5
  %618 = sext i32 %617 to i64
  %619 = add i64 %616, %618
  %620 = getelementptr inbounds float, ptr %606, i64 %619
  %621 = load float, ptr %620, align 4, !tbaa !13
  store float %621, ptr %34, align 4, !tbaa !13
  %622 = load float, ptr %31, align 4, !tbaa !13
  %623 = load ptr, ptr %11, align 8, !tbaa !9
  %624 = load i64, ptr %18, align 8, !tbaa !11
  %625 = mul i64 %624, 240
  %626 = load i32, ptr %20, align 4, !tbaa !5
  %627 = sext i32 %626 to i64
  %628 = add i64 %625, %627
  %629 = load i32, ptr %22, align 4, !tbaa !5
  %630 = sext i32 %629 to i64
  %631 = mul i64 %628, %630
  %632 = load i32, ptr %19, align 4, !tbaa !5
  %633 = sext i32 %632 to i64
  %634 = add i64 %631, %633
  %635 = getelementptr inbounds float, ptr %623, i64 %634
  %636 = load float, ptr %635, align 4, !tbaa !13
  %637 = fadd float %636, %622
  store float %637, ptr %635, align 4, !tbaa !13
  %638 = load float, ptr %32, align 4, !tbaa !13
  %639 = load ptr, ptr %12, align 8, !tbaa !9
  %640 = load i64, ptr %18, align 8, !tbaa !11
  %641 = load i32, ptr %26, align 4, !tbaa !5
  %642 = sext i32 %641 to i64
  %643 = mul i64 %640, %642
  %644 = load i32, ptr %20, align 4, !tbaa !5
  %645 = sext i32 %644 to i64
  %646 = add i64 %643, %645
  %647 = load i32, ptr %22, align 4, !tbaa !5
  %648 = sext i32 %647 to i64
  %649 = mul i64 %646, %648
  %650 = load i32, ptr %19, align 4, !tbaa !5
  %651 = sext i32 %650 to i64
  %652 = add i64 %649, %651
  %653 = getelementptr inbounds float, ptr %639, i64 %652
  %654 = load float, ptr %653, align 4, !tbaa !13
  %655 = fadd float %654, %638
  store float %655, ptr %653, align 4, !tbaa !13
  %656 = load float, ptr %33, align 4, !tbaa !13
  store float %656, ptr %31, align 4, !tbaa !13
  %657 = load float, ptr %34, align 4, !tbaa !13
  store float %657, ptr %32, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %658

658:                                              ; preds = %591
  %659 = load i64, ptr %18, align 8, !tbaa !11
  %660 = add i64 %659, 1
  store i64 %660, ptr %18, align 8, !tbaa !11
  br label %587, !llvm.loop !28

661:                                              ; preds = %587
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  br label %662

662:                                              ; preds = %661
  %663 = load i32, ptr %19, align 4, !tbaa !5
  %664 = add nsw i32 %663, 1
  store i32 %664, ptr %19, align 4, !tbaa !5
  br label %564, !llvm.loop !29

665:                                              ; preds = %564
  br label %666

666:                                              ; preds = %665
  %667 = load i32, ptr %20, align 4, !tbaa !5
  %668 = add nsw i32 %667, 1
  store i32 %668, ptr %20, align 4, !tbaa !5
  br label %555, !llvm.loop !30

669:                                              ; preds = %555
  br label %670

670:                                              ; preds = %669
  %671 = load i32, ptr %21, align 4, !tbaa !5
  %672 = add nsw i32 %671, 1
  store i32 %672, ptr %21, align 4, !tbaa !5
  br label %546, !llvm.loop !31

673:                                              ; preds = %546
  %674 = load i32, ptr %23, align 4, !tbaa !5
  %675 = icmp eq i32 %674, 48000
  br i1 %675, label %676, label %678

676:                                              ; preds = %673
  %677 = load i32, ptr getelementptr inbounds ([22 x i32], ptr @BANDS, i64 0, i64 21), align 4, !tbaa !5
  store i32 %677, ptr %27, align 4, !tbaa !5
  br label %693

678:                                              ; preds = %673
  %679 = load i32, ptr %23, align 4, !tbaa !5
  %680 = icmp eq i32 %679, 12000
  br i1 %680, label %681, label %686

681:                                              ; preds = %678
  %682 = load i32, ptr %25, align 4, !tbaa !5
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %683
  %685 = load i32, ptr %684, align 4, !tbaa !5
  store i32 %685, ptr %27, align 4, !tbaa !5
  br label %692

686:                                              ; preds = %678
  %687 = load i32, ptr %25, align 4, !tbaa !5
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %688
  %690 = load i32, ptr %689, align 4, !tbaa !5
  %691 = sub nsw i32 %690, 3
  store i32 %691, ptr %27, align 4, !tbaa !5
  br label %692

692:                                              ; preds = %686, %681
  br label %693

693:                                              ; preds = %692, %676
  store double 0.000000e+00, ptr %13, align 8, !tbaa !32
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %694

694:                                              ; preds = %826, %693
  %695 = load i64, ptr %18, align 8, !tbaa !11
  %696 = load i64, ptr %17, align 8, !tbaa !11
  %697 = icmp ult i64 %695, %696
  br i1 %697, label %698, label %829

698:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  store double 0.000000e+00, ptr %35, align 8, !tbaa !32
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %699

699:                                              ; preds = %813, %698
  %700 = load i32, ptr %21, align 4, !tbaa !5
  %701 = load i32, ptr %25, align 4, !tbaa !5
  %702 = icmp slt i32 %700, %701
  br i1 %702, label %703, label %816

703:                                              ; preds = %699
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  store double 0.000000e+00, ptr %36, align 8, !tbaa !32
  %704 = load i32, ptr %21, align 4, !tbaa !5
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %705
  %707 = load i32, ptr %706, align 4, !tbaa !5
  store i32 %707, ptr %20, align 4, !tbaa !5
  br label %708

708:                                              ; preds = %790, %703
  %709 = load i32, ptr %20, align 4, !tbaa !5
  %710 = load i32, ptr %21, align 4, !tbaa !5
  %711 = add nsw i32 %710, 1
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %712
  %714 = load i32, ptr %713, align 4, !tbaa !5
  %715 = icmp slt i32 %709, %714
  br i1 %715, label %716, label %720

716:                                              ; preds = %708
  %717 = load i32, ptr %20, align 4, !tbaa !5
  %718 = load i32, ptr %27, align 4, !tbaa !5
  %719 = icmp slt i32 %717, %718
  br label %720

720:                                              ; preds = %716, %708
  %721 = phi i1 [ false, %708 ], [ %719, %716 ]
  br i1 %721, label %722, label %793

722:                                              ; preds = %720
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %723

723:                                              ; preds = %786, %722
  %724 = load i32, ptr %19, align 4, !tbaa !5
  %725 = load i32, ptr %22, align 4, !tbaa !5
  %726 = icmp slt i32 %724, %725
  br i1 %726, label %727, label %789

727:                                              ; preds = %723
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  %728 = load ptr, ptr %12, align 8, !tbaa !9
  %729 = load i64, ptr %18, align 8, !tbaa !11
  %730 = load i32, ptr %26, align 4, !tbaa !5
  %731 = sext i32 %730 to i64
  %732 = mul i64 %729, %731
  %733 = load i32, ptr %20, align 4, !tbaa !5
  %734 = sext i32 %733 to i64
  %735 = add i64 %732, %734
  %736 = load i32, ptr %22, align 4, !tbaa !5
  %737 = sext i32 %736 to i64
  %738 = mul i64 %735, %737
  %739 = load i32, ptr %19, align 4, !tbaa !5
  %740 = sext i32 %739 to i64
  %741 = add i64 %738, %740
  %742 = getelementptr inbounds float, ptr %728, i64 %741
  %743 = load float, ptr %742, align 4, !tbaa !13
  %744 = load ptr, ptr %11, align 8, !tbaa !9
  %745 = load i64, ptr %18, align 8, !tbaa !11
  %746 = mul i64 %745, 240
  %747 = load i32, ptr %20, align 4, !tbaa !5
  %748 = sext i32 %747 to i64
  %749 = add i64 %746, %748
  %750 = load i32, ptr %22, align 4, !tbaa !5
  %751 = sext i32 %750 to i64
  %752 = mul i64 %749, %751
  %753 = load i32, ptr %19, align 4, !tbaa !5
  %754 = sext i32 %753 to i64
  %755 = add i64 %752, %754
  %756 = getelementptr inbounds float, ptr %744, i64 %755
  %757 = load float, ptr %756, align 4, !tbaa !13
  %758 = fdiv float %743, %757
  store float %758, ptr %37, align 4, !tbaa !13
  %759 = load float, ptr %37, align 4, !tbaa !13
  %760 = fpext float %759 to double
  %761 = load float, ptr %37, align 4, !tbaa !13
  %762 = fpext float %761 to double
  %763 = call double @log(double noundef %762) #7
  %764 = fsub double %760, %763
  %765 = fsub double %764, 1.000000e+00
  %766 = fptrunc double %765 to float
  store float %766, ptr %38, align 4, !tbaa !13
  %767 = load i32, ptr %20, align 4, !tbaa !5
  %768 = icmp sge i32 %767, 79
  br i1 %768, label %769, label %775

769:                                              ; preds = %727
  %770 = load i32, ptr %20, align 4, !tbaa !5
  %771 = icmp sle i32 %770, 81
  br i1 %771, label %772, label %775

772:                                              ; preds = %769
  %773 = load float, ptr %38, align 4, !tbaa !13
  %774 = fmul float %773, 0x3FB99999A0000000
  store float %774, ptr %38, align 4, !tbaa !13
  br label %775

775:                                              ; preds = %772, %769, %727
  %776 = load i32, ptr %20, align 4, !tbaa !5
  %777 = icmp eq i32 %776, 80
  br i1 %777, label %778, label %781

778:                                              ; preds = %775
  %779 = load float, ptr %38, align 4, !tbaa !13
  %780 = fmul float %779, 0x3FB99999A0000000
  store float %780, ptr %38, align 4, !tbaa !13
  br label %781

781:                                              ; preds = %778, %775
  %782 = load float, ptr %38, align 4, !tbaa !13
  %783 = fpext float %782 to double
  %784 = load double, ptr %36, align 8, !tbaa !32
  %785 = fadd double %784, %783
  store double %785, ptr %36, align 8, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %786

786:                                              ; preds = %781
  %787 = load i32, ptr %19, align 4, !tbaa !5
  %788 = add nsw i32 %787, 1
  store i32 %788, ptr %19, align 4, !tbaa !5
  br label %723, !llvm.loop !34

789:                                              ; preds = %723
  br label %790

790:                                              ; preds = %789
  %791 = load i32, ptr %20, align 4, !tbaa !5
  %792 = add nsw i32 %791, 1
  store i32 %792, ptr %20, align 4, !tbaa !5
  br label %708, !llvm.loop !35

793:                                              ; preds = %720
  %794 = load i32, ptr %21, align 4, !tbaa !5
  %795 = add nsw i32 %794, 1
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %796
  %798 = load i32, ptr %797, align 4, !tbaa !5
  %799 = load i32, ptr %21, align 4, !tbaa !5
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %800
  %802 = load i32, ptr %801, align 4, !tbaa !5
  %803 = sub nsw i32 %798, %802
  %804 = load i32, ptr %22, align 4, !tbaa !5
  %805 = mul nsw i32 %803, %804
  %806 = sitofp i32 %805 to double
  %807 = load double, ptr %36, align 8, !tbaa !32
  %808 = fdiv double %807, %806
  store double %808, ptr %36, align 8, !tbaa !32
  %809 = load double, ptr %36, align 8, !tbaa !32
  %810 = load double, ptr %36, align 8, !tbaa !32
  %811 = load double, ptr %35, align 8, !tbaa !32
  %812 = call double @llvm.fmuladd.f64(double %809, double %810, double %811)
  store double %812, ptr %35, align 8, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  br label %813

813:                                              ; preds = %793
  %814 = load i32, ptr %21, align 4, !tbaa !5
  %815 = add nsw i32 %814, 1
  store i32 %815, ptr %21, align 4, !tbaa !5
  br label %699, !llvm.loop !36

816:                                              ; preds = %699
  %817 = load double, ptr %35, align 8, !tbaa !32
  %818 = fdiv double %817, 2.100000e+01
  store double %818, ptr %35, align 8, !tbaa !32
  %819 = load double, ptr %35, align 8, !tbaa !32
  %820 = load double, ptr %35, align 8, !tbaa !32
  %821 = fmul double %820, %819
  store double %821, ptr %35, align 8, !tbaa !32
  %822 = load double, ptr %35, align 8, !tbaa !32
  %823 = load double, ptr %35, align 8, !tbaa !32
  %824 = load double, ptr %13, align 8, !tbaa !32
  %825 = call double @llvm.fmuladd.f64(double %822, double %823, double %824)
  store double %825, ptr %13, align 8, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %826

826:                                              ; preds = %816
  %827 = load i64, ptr %18, align 8, !tbaa !11
  %828 = add i64 %827, 1
  store i64 %828, ptr %18, align 8, !tbaa !11
  br label %694, !llvm.loop !37

829:                                              ; preds = %694
  %830 = load ptr, ptr %10, align 8, !tbaa !9
  call void @free(ptr noundef %830) #7
  %831 = load ptr, ptr %11, align 8, !tbaa !9
  call void @free(ptr noundef %831) #7
  %832 = load ptr, ptr %12, align 8, !tbaa !9
  call void @free(ptr noundef %832) #7
  %833 = load double, ptr %13, align 8, !tbaa !32
  %834 = load i64, ptr %17, align 8, !tbaa !11
  %835 = uitofp i64 %834 to double
  %836 = fdiv double %833, %835
  %837 = call double @pow(double noundef %836, double noundef 6.250000e-02) #7
  store double %837, ptr %13, align 8, !tbaa !32
  %838 = load double, ptr %13, align 8, !tbaa !32
  %839 = fadd double 1.000000e+00, %838
  %840 = call double @log(double noundef %839) #7
  %841 = fmul double 5.000000e-01, %840
  %842 = call double @log(double noundef 1.130000e+00) #7
  %843 = fdiv double %841, %842
  %844 = fsub double 1.000000e+00, %843
  %845 = fmul double 1.000000e+02, %844
  %846 = fptrunc double %845 to float
  store float %846, ptr %14, align 4, !tbaa !13
  %847 = load float, ptr %14, align 4, !tbaa !13
  %848 = fcmp olt float %847, 0.000000e+00
  br i1 %848, label %849, label %855

849:                                              ; preds = %829
  %850 = load ptr, ptr @stderr, align 8, !tbaa !9
  %851 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %850, ptr noundef @.str.8) #7
  %852 = load ptr, ptr @stderr, align 8, !tbaa !9
  %853 = load double, ptr %13, align 8, !tbaa !32
  %854 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %852, ptr noundef @.str.9, double noundef %853) #7
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

855:                                              ; preds = %829
  %856 = load ptr, ptr @stderr, align 8, !tbaa !9
  %857 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %856, ptr noundef @.str.10) #7
  %858 = load ptr, ptr @stderr, align 8, !tbaa !9
  %859 = load float, ptr %14, align 4, !tbaa !13
  %860 = fpext float %859 to double
  %861 = load double, ptr %13, align 8, !tbaa !32
  %862 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %858, ptr noundef @.str.11, double noundef %860, double noundef %861) #7
  store i32 0, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %863

863:                                              ; preds = %855, %849, %186, %175, %120, %107, %84, %44
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  %864 = load i32, ptr %3, align 4
  ret i32 %864
}

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #4

declare noalias ptr @fopen(ptr noundef, ptr noundef) #5

declare i32 @fclose(ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i64 @read_pcm16(ptr noundef, ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @opus_malloc(i64 noundef) #0

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

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

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

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

; Function Attrs: nounwind
declare double @log(double noundef) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #6

; Function Attrs: nounwind
declare double @pow(double noundef, double 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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind willreturn memory(read) "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 = { inlinehint nounwind willreturn memory(read) 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { nounwind willreturn memory(read) }

!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 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = !{!33, !33, i64 0}
!33 = !{!"double", !7, i64 0}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !16}
!36 = distinct !{!36, !16}
!37 = distinct !{!37, !16}


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [36 x i8], align 1
@BANDS = external hidden constant [22 x i32], align 16
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [62 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  %5 = add i32 %0, -7
  %or.cond = icmp ult i32 %5, -4
  br i1 %or.cond, label %6, label %10

6:                                                ; preds = %2
  %7 = load ptr, ptr @stderr, align 8, !tbaa !5
  %8 = load ptr, ptr %1, align 8, !tbaa !5
  %9 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %8) #10
  br label %407

10:                                               ; preds = %2
  %11 = getelementptr inbounds i8, ptr %1, i64 8
  %12 = load ptr, ptr %11, align 8, !tbaa !5
  %13 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %12, ptr noundef nonnull dereferenceable(1) @.str.1) #11
  %.not = icmp eq i32 %13, 0
  %spec.select = select i1 %.not, i32 2, i32 1
  %spec.select322 = select i1 %.not, ptr %11, ptr %1
  %14 = getelementptr inbounds i8, ptr %spec.select322, i64 8
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %15, ptr noundef nonnull dereferenceable(1) @.str.2) #11
  %17 = icmp eq i32 %16, 0
  br i1 %17, label %18, label %33

18:                                               ; preds = %10
  %19 = getelementptr inbounds i8, ptr %spec.select322, i64 16
  %20 = load ptr, ptr %19, align 8, !tbaa !5
  %21 = tail call i32 @atoi(ptr nocapture noundef %20) #11
  switch i32 %21, label %22 [
    i32 48000, label %25
    i32 24000, label %25
    i32 16000, label %25
    i32 12000, label %25
    i32 8000, label %25
  ]

22:                                               ; preds = %18
  %23 = load ptr, ptr @stderr, align 8, !tbaa !5
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.3) #10
  br label %407

25:                                               ; preds = %18, %18, %18, %18, %18
  %.rhs.trunc = trunc i32 %21 to i16
  %26 = udiv i16 -17536, %.rhs.trunc
  %.zext = zext nneg i16 %26 to i32
  switch i16 %.rhs.trunc, label %31 [
    i16 8000, label %27
    i16 12000, label %28
    i16 16000, label %29
    i16 24000, label %30
  ]

27:                                               ; preds = %25
  br label %31

28:                                               ; preds = %25
  br label %31

29:                                               ; preds = %25
  br label %31

30:                                               ; preds = %25
  br label %31

31:                                               ; preds = %30, %29, %28, %27, %25
  %.0299 = phi i32 [ 21, %25 ], [ 19, %30 ], [ 17, %29 ], [ 15, %28 ], [ 13, %27 ]
  %.rhs.trunc323 = trunc i16 %26 to i8
  %32 = udiv i8 -16, %.rhs.trunc323
  %.zext324 = zext i8 %32 to i64
  %.phi.trans.insert = getelementptr inbounds i8, ptr %spec.select322, i64 24
  %.pre = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !5
  br label %33

33:                                               ; preds = %31, %10
  %34 = phi ptr [ %.pre, %31 ], [ %15, %10 ]
  %.0302 = phi i32 [ %21, %31 ], [ 48000, %10 ]
  %.0301 = phi i32 [ %.zext, %31 ], [ 1, %10 ]
  %.1300 = phi i32 [ %.0299, %31 ], [ 21, %10 ]
  %.0298 = phi i64 [ %.zext324, %31 ], [ 240, %10 ]
  %.1287 = phi ptr [ %19, %31 ], [ %spec.select322, %10 ]
  %35 = tail call noalias ptr @fopen(ptr noundef %34, ptr noundef nonnull @.str.4)
  %36 = icmp eq ptr %35, null
  br i1 %36, label %37, label %42

37:                                               ; preds = %33
  %38 = getelementptr inbounds i8, ptr %.1287, i64 8
  %39 = load ptr, ptr @stderr, align 8, !tbaa !5
  %40 = load ptr, ptr %38, align 8, !tbaa !5
  %41 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %39, ptr noundef nonnull @.str.5, ptr noundef %40) #10
  br label %407

42:                                               ; preds = %33
  %43 = getelementptr inbounds i8, ptr %.1287, i64 16
  %44 = load ptr, ptr %43, align 8, !tbaa !5
  %45 = tail call noalias ptr @fopen(ptr noundef %44, ptr noundef nonnull @.str.4)
  %46 = icmp eq ptr %45, null
  br i1 %46, label %47, label %52

47:                                               ; preds = %42
  %48 = load ptr, ptr @stderr, align 8, !tbaa !5
  %49 = load ptr, ptr %43, align 8, !tbaa !5
  %50 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef nonnull @.str.5, ptr noundef %49) #10
  %51 = tail call i32 @fclose(ptr noundef nonnull %35)
  br label %407

52:                                               ; preds = %42
  %53 = call i64 @read_pcm16(ptr noundef nonnull %3, ptr noundef nonnull %35, i32 noundef 2)
  %.fr = freeze i64 %53
  %54 = icmp eq i64 %.fr, 0
  %or.cond387.not = or i1 %.not, %54
  br i1 %or.cond387.not, label %.loopexit341, label %.lr.ph

.lr.ph:                                           ; preds = %52
  %55 = load ptr, ptr %3, align 8, !tbaa !5
  %xtraiter = and i64 %.fr, 1
  %56 = icmp eq i64 %.fr, 1
  br i1 %56, label %.loopexit341.loopexit.unr-lcssa, label %.lr.ph.new

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

57:                                               ; preds = %57, %.lr.ph.new
  %.0291345 = phi i64 [ 0, %.lr.ph.new ], [ %77, %57 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %57 ]
  %58 = shl i64 %.0291345, 1
  %59 = getelementptr inbounds float, ptr %55, i64 %58
  %60 = load float, ptr %59, align 4, !tbaa !9
  %61 = or disjoint i64 %58, 1
  %62 = getelementptr inbounds float, ptr %55, i64 %61
  %63 = load float, ptr %62, align 4, !tbaa !9
  %64 = fadd float %60, %63
  %65 = fmul float %64, 5.000000e-01
  %66 = getelementptr inbounds float, ptr %55, i64 %.0291345
  store float %65, ptr %66, align 4, !tbaa !9
  %67 = or disjoint i64 %.0291345, 1
  %68 = shl i64 %67, 1
  %69 = getelementptr inbounds float, ptr %55, i64 %68
  %70 = load float, ptr %69, align 4, !tbaa !9
  %71 = or disjoint i64 %68, 1
  %72 = getelementptr inbounds float, ptr %55, i64 %71
  %73 = load float, ptr %72, align 4, !tbaa !9
  %74 = fadd float %70, %73
  %75 = fmul float %74, 5.000000e-01
  %76 = getelementptr inbounds float, ptr %55, i64 %67
  store float %75, ptr %76, align 4, !tbaa !9
  %77 = add nuw i64 %.0291345, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit341.loopexit.unr-lcssa, label %57, !llvm.loop !11

.loopexit341.loopexit.unr-lcssa:                  ; preds = %57, %.lr.ph
  %.0291345.unr = phi i64 [ 0, %.lr.ph ], [ %77, %57 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit341, label %.loopexit341.loopexit.epilog-lcssa

.loopexit341.loopexit.epilog-lcssa:               ; preds = %.loopexit341.loopexit.unr-lcssa
  %78 = shl i64 %.0291345.unr, 1
  %79 = getelementptr inbounds float, ptr %55, i64 %78
  %80 = load float, ptr %79, align 4, !tbaa !9
  %81 = or disjoint i64 %78, 1
  %82 = getelementptr inbounds float, ptr %55, i64 %81
  %83 = load float, ptr %82, align 4, !tbaa !9
  %84 = fadd float %80, %83
  %85 = fmul float %84, 5.000000e-01
  %86 = getelementptr inbounds float, ptr %55, i64 %.0291345.unr
  store float %85, ptr %86, align 4, !tbaa !9
  br label %.loopexit341

.loopexit341:                                     ; preds = %.loopexit341.loopexit.epilog-lcssa, %.loopexit341.loopexit.unr-lcssa, %52
  %87 = call i32 @fclose(ptr noundef nonnull %35)
  %88 = call i64 @read_pcm16(ptr noundef nonnull %4, ptr noundef nonnull %45, i32 noundef %spec.select)
  %89 = call i32 @fclose(ptr noundef nonnull %45)
  %90 = zext nneg i32 %.0301 to i64
  %91 = mul i64 %88, %90
  %.not320 = icmp eq i64 %.fr, %91
  br i1 %.not320, label %95, label %92

92:                                               ; preds = %.loopexit341
  %93 = load ptr, ptr @stderr, align 8, !tbaa !5
  %94 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %93, ptr noundef nonnull @.str.6, i64 noundef %.fr, i64 noundef %91) #10
  br label %407

95:                                               ; preds = %.loopexit341
  %96 = icmp ult i64 %.fr, 480
  br i1 %96, label %97, label %.preheader339.lr.ph

97:                                               ; preds = %95
  %98 = load ptr, ptr @stderr, align 8, !tbaa !5
  %99 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %98, ptr noundef nonnull @.str.7, i64 noundef %.fr, i32 noundef 480) #10
  br label %407

.preheader339.lr.ph:                              ; preds = %95
  %100 = add i64 %.fr, -360
  %101 = udiv i64 %100, 120
  %102 = mul nuw nsw i64 %101, 21
  %103 = zext i1 %.not to i64
  %104 = shl nuw nsw i64 %102, %103
  %105 = shl i64 %104, 2
  %106 = call ptr @opus_malloc(i64 noundef %105)
  %107 = mul i64 %101, 240
  %108 = shl i64 %107, %103
  %109 = shl i64 %108, 2
  %110 = call ptr @opus_malloc(i64 noundef %109)
  %111 = mul i64 %101, %.0298
  %112 = shl i64 %111, %103
  %113 = shl i64 %112, 2
  %114 = call ptr @opus_malloc(i64 noundef %113)
  %115 = load ptr, ptr %3, align 8, !tbaa !5
  call void @band_energy(ptr noundef %106, ptr noundef %110, ptr noundef nonnull @BANDS, i32 noundef 21, ptr noundef %115, i32 noundef %spec.select, i64 noundef %101, i32 noundef 480, i32 noundef 120, i32 noundef 1)
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  call void @free(ptr noundef %116) #9
  %117 = load ptr, ptr %4, align 8, !tbaa !5
  %118 = udiv i32 480, %.0301
  %119 = udiv i32 120, %.0301
  call void @band_energy(ptr noundef null, ptr noundef %114, ptr noundef nonnull @BANDS, i32 noundef %.1300, ptr noundef %117, i32 noundef %spec.select, i64 noundef %101, i32 noundef %118, i32 noundef %119, i32 noundef %.0301)
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  call void @free(ptr noundef %120) #9
  %wide.trip.count = zext nneg i32 %spec.select to i64
  %wide.trip.count441 = zext nneg i32 %.1300 to i64
  %.pre495 = load i32, ptr @BANDS, align 16, !tbaa !13
  %121 = add nsw i64 %wide.trip.count, -1
  %xtraiter604 = and i64 %wide.trip.count, 1
  %122 = icmp eq i64 %121, 0
  %unroll_iter606 = and i64 %wide.trip.count, 2
  %lcmp.mod605.not = icmp eq i64 %xtraiter604, 0
  %xtraiter609 = and i64 %wide.trip.count, 1
  %123 = icmp eq i64 %121, 0
  %unroll_iter611 = and i64 %wide.trip.count, 2
  %lcmp.mod610.not = icmp eq i64 %xtraiter609, 0
  %xtraiter614 = and i64 %wide.trip.count, 1
  %124 = icmp eq i64 %121, 0
  %unroll_iter616 = and i64 %wide.trip.count, 2
  %lcmp.mod615.not = icmp eq i64 %xtraiter614, 0
  %invariant.gep = getelementptr i8, ptr %106, i64 16
  %invariant.gep628 = getelementptr i8, ptr %106, i64 32
  %invariant.gep630 = getelementptr i8, ptr %106, i64 48
  %invariant.gep632 = getelementptr i8, ptr %106, i64 64
  %invariant.gep634 = getelementptr i8, ptr %106, i64 80
  %invariant.gep636 = getelementptr i8, ptr %106, i64 96
  %invariant.gep638 = getelementptr i8, ptr %106, i64 112
  %invariant.gep640 = getelementptr i8, ptr %106, i64 128
  %invariant.gep642 = getelementptr i8, ptr %106, i64 144
  %invariant.gep644 = getelementptr i8, ptr %106, i64 160
  %xtraiter619 = and i64 %wide.trip.count, 1
  %125 = icmp eq i64 %121, 0
  %unroll_iter621 = and i64 %wide.trip.count, 2
  %lcmp.mod620.not = icmp eq i64 %xtraiter619, 0
  br label %.preheader339

.preheader339:                                    ; preds = %.preheader339.lr.ph, %307
  %.1292355 = phi i64 [ 0, %.preheader339.lr.ph ], [ %308, %307 ]
  %126 = mul nuw nsw i64 %.1292355, 21
  br label %.preheader333

.preheader327:                                    ; preds = %307
  %127 = zext i1 %.not to i32
  %128 = icmp ugt i64 %100, 239
  br i1 %128, label %.preheader327.split.us.preheader, label %.split366.us

.preheader327.split.us.preheader:                 ; preds = %.preheader327
  %umax447 = call i64 @llvm.umax.i64(i64 %101, i64 2)
  %wide.trip.count463 = zext nneg i32 %.1300 to i64
  %.pre496 = load i32, ptr @BANDS, align 16, !tbaa !13
  %wide.trip.count453 = zext nneg i32 %spec.select to i64
  br label %.preheader327.split.us

.preheader327.split.us:                           ; preds = %.preheader327.split.us.preheader, %.loopexit.us
  %129 = phi i32 [ %.pre496, %.preheader327.split.us.preheader ], [ %131, %.loopexit.us ]
  %indvars.iv460 = phi i64 [ 0, %.preheader327.split.us.preheader ], [ %indvars.iv.next461, %.loopexit.us ]
  %indvars.iv.next461 = add nuw nsw i64 %indvars.iv460, 1
  %130 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %indvars.iv.next461
  %131 = load i32, ptr %130, align 4, !tbaa !13
  %132 = icmp slt i32 %129, %131
  br i1 %132, label %.preheader326.us.us.preheader, label %.loopexit.us

.preheader326.us.us.preheader:                    ; preds = %.preheader327.split.us
  %133 = sext i32 %129 to i64
  %wide.trip.count458 = sext i32 %131 to i64
  br label %.preheader326.us.us

.loopexit.us:                                     ; preds = %.split.us.us.us, %.preheader327.split.us
  %exitcond464.not = icmp eq i64 %indvars.iv.next461, %wide.trip.count463
  br i1 %exitcond464.not, label %.split366.us, label %.preheader327.split.us, !llvm.loop !15

.preheader326.us.us:                              ; preds = %.preheader326.us.us.preheader, %.split.us.us.us
  %indvars.iv455 = phi i64 [ %133, %.preheader326.us.us.preheader ], [ %indvars.iv.next456, %.split.us.us.us ]
  %134 = trunc nsw i64 %indvars.iv455 to i32
  %135 = shl i32 %134, %127
  %136 = sext i32 %135 to i64
  br label %.lr.ph359.us.us.us

.lr.ph359.us.us.us:                               ; preds = %._crit_edge.us.us.us, %.preheader326.us.us
  %indvars.iv449 = phi i64 [ %indvars.iv.next450, %._crit_edge.us.us.us ], [ 0, %.preheader326.us.us ]
  %137 = add nsw i64 %indvars.iv449, %136
  %138 = getelementptr inbounds float, ptr %110, i64 %137
  %139 = load float, ptr %138, align 4, !tbaa !9
  %140 = getelementptr inbounds float, ptr %114, i64 %137
  %141 = load float, ptr %140, align 4, !tbaa !9
  %invariant.gep.us.us.us = getelementptr float, ptr %110, i64 %indvars.iv449
  %invariant.gep360.us.us.us = getelementptr float, ptr %114, i64 %indvars.iv449
  br label %142

142:                                              ; preds = %142, %.lr.ph359.us.us.us
  %.0289358.us.us.us = phi float [ %141, %.lr.ph359.us.us.us ], [ %150, %142 ]
  %.0290357.us.us.us = phi float [ %139, %.lr.ph359.us.us.us ], [ %146, %142 ]
  %.2356.us.us.us = phi i64 [ 1, %.lr.ph359.us.us.us ], [ %154, %142 ]
  %143 = mul i64 %.2356.us.us.us, 240
  %144 = add i64 %143, %indvars.iv455
  %145 = shl i64 %144, %103
  %gep.us.us.us = getelementptr float, ptr %invariant.gep.us.us.us, i64 %145
  %146 = load float, ptr %gep.us.us.us, align 4, !tbaa !9
  %147 = mul i64 %.2356.us.us.us, %.0298
  %148 = add i64 %147, %indvars.iv455
  %149 = shl i64 %148, %103
  %gep361.us.us.us = getelementptr float, ptr %invariant.gep360.us.us.us, i64 %149
  %150 = load float, ptr %gep361.us.us.us, align 4, !tbaa !9
  %151 = fadd float %.0290357.us.us.us, %146
  store float %151, ptr %gep.us.us.us, align 4, !tbaa !9
  %152 = load float, ptr %gep361.us.us.us, align 4, !tbaa !9
  %153 = fadd float %.0289358.us.us.us, %152
  store float %153, ptr %gep361.us.us.us, align 4, !tbaa !9
  %154 = add nuw nsw i64 %.2356.us.us.us, 1
  %exitcond448.not = icmp eq i64 %154, %umax447
  br i1 %exitcond448.not, label %._crit_edge.us.us.us, label %142, !llvm.loop !16

._crit_edge.us.us.us:                             ; preds = %142
  %indvars.iv.next450 = add nuw nsw i64 %indvars.iv449, 1
  %exitcond454.not = icmp eq i64 %indvars.iv.next450, %wide.trip.count453
  br i1 %exitcond454.not, label %.split.us.us.us, label %.lr.ph359.us.us.us, !llvm.loop !17

.split.us.us.us:                                  ; preds = %._crit_edge.us.us.us
  %indvars.iv.next456 = add nsw i64 %indvars.iv455, 1
  %exitcond459.not = icmp eq i64 %indvars.iv.next456, %wide.trip.count458
  br i1 %exitcond459.not, label %.loopexit.us, label %.preheader326.us.us, !llvm.loop !18

.preheader333:                                    ; preds = %.preheader339, %.loopexit596
  %indvars.iv403 = phi i64 [ 1, %.preheader339 ], [ %indvars.iv.next404, %.loopexit596 ]
  %155 = add nuw nsw i64 %126, %indvars.iv403
  %156 = add nsw i64 %155, -1
  %157 = shl i64 %156, %103
  %158 = getelementptr float, ptr %106, i64 %157
  %159 = shl nuw i64 %155, %103
  %160 = getelementptr float, ptr %106, i64 %159
  br i1 %122, label %.loopexit596.unr-lcssa, label %.preheader333.new

.preheader333.new:                                ; preds = %.preheader333, %.preheader333.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader333.new ], [ 0, %.preheader333 ]
  %niter607 = phi i64 [ %niter607.next.1, %.preheader333.new ], [ 0, %.preheader333 ]
  %161 = getelementptr float, ptr %158, i64 %indvars.iv
  %162 = load float, ptr %161, align 4, !tbaa !9
  %163 = getelementptr float, ptr %160, i64 %indvars.iv
  %164 = load float, ptr %163, align 4, !tbaa !9
  %165 = call float @llvm.fmuladd.f32(float %162, float 0x3FB99999A0000000, float %164)
  store float %165, ptr %163, align 4, !tbaa !9
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %166 = getelementptr float, ptr %158, i64 %indvars.iv.next
  %167 = load float, ptr %166, align 4, !tbaa !9
  %168 = getelementptr float, ptr %160, i64 %indvars.iv.next
  %169 = load float, ptr %168, align 4, !tbaa !9
  %170 = call float @llvm.fmuladd.f32(float %167, float 0x3FB99999A0000000, float %169)
  store float %170, ptr %168, align 4, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter607.next.1 = add i64 %niter607, 2
  %niter607.ncmp.1 = icmp eq i64 %niter607.next.1, %unroll_iter606
  br i1 %niter607.ncmp.1, label %.loopexit596.unr-lcssa, label %.preheader333.new, !llvm.loop !19

.loopexit596.unr-lcssa:                           ; preds = %.preheader333.new, %.preheader333
  %indvars.iv.unr = phi i64 [ 0, %.preheader333 ], [ %indvars.iv.next.1, %.preheader333.new ]
  br i1 %lcmp.mod605.not, label %.loopexit596, label %.loopexit596.epilog-lcssa

.loopexit596.epilog-lcssa:                        ; preds = %.loopexit596.unr-lcssa
  %171 = getelementptr float, ptr %158, i64 %indvars.iv.unr
  %172 = load float, ptr %171, align 4, !tbaa !9
  %173 = getelementptr float, ptr %160, i64 %indvars.iv.unr
  %174 = load float, ptr %173, align 4, !tbaa !9
  %175 = call float @llvm.fmuladd.f32(float %172, float 0x3FB99999A0000000, float %174)
  store float %175, ptr %173, align 4, !tbaa !9
  br label %.loopexit596

.loopexit596:                                     ; preds = %.loopexit596.unr-lcssa, %.loopexit596.epilog-lcssa
  %indvars.iv.next404 = add nuw nsw i64 %indvars.iv403, 1
  %exitcond406.not = icmp eq i64 %indvars.iv.next404, 21
  br i1 %exitcond406.not, label %.preheader331, label %.preheader333, !llvm.loop !21

.loopexit332.unr-lcssa:                           ; preds = %.preheader331.new, %.preheader331
  %indvars.iv407.unr = phi i64 [ 0, %.preheader331 ], [ %indvars.iv.next408.1, %.preheader331.new ]
  br i1 %lcmp.mod610.not, label %.loopexit332, label %.loopexit332.epilog-lcssa

.loopexit332.epilog-lcssa:                        ; preds = %.loopexit332.unr-lcssa
  %176 = getelementptr float, ptr %184, i64 %indvars.iv407.unr
  %177 = load float, ptr %176, align 4, !tbaa !9
  %178 = getelementptr float, ptr %186, i64 %indvars.iv407.unr
  %179 = load float, ptr %178, align 4, !tbaa !9
  %180 = call float @llvm.fmuladd.f32(float %177, float 0x3F9EB851E0000000, float %179)
  store float %180, ptr %178, align 4, !tbaa !9
  br label %.loopexit332

.loopexit332:                                     ; preds = %.loopexit332.unr-lcssa, %.loopexit332.epilog-lcssa
  %indvars.iv.next413 = add nsw i64 %indvars.iv412, -1
  %.not498 = icmp eq i64 %indvars.iv412, 0
  br i1 %.not498, label %197, label %.preheader331, !llvm.loop !22

.preheader331:                                    ; preds = %.loopexit596, %.loopexit332
  %indvars.iv412 = phi i64 [ %indvars.iv.next413, %.loopexit332 ], [ 19, %.loopexit596 ]
  %181 = add nuw nsw i64 %126, %indvars.iv412
  %182 = add nuw nsw i64 %181, 1
  %183 = shl i64 %182, %103
  %184 = getelementptr float, ptr %106, i64 %183
  %185 = shl i64 %181, %103
  %186 = getelementptr float, ptr %106, i64 %185
  br i1 %123, label %.loopexit332.unr-lcssa, label %.preheader331.new

.preheader331.new:                                ; preds = %.preheader331, %.preheader331.new
  %indvars.iv407 = phi i64 [ %indvars.iv.next408.1, %.preheader331.new ], [ 0, %.preheader331 ]
  %niter612 = phi i64 [ %niter612.next.1, %.preheader331.new ], [ 0, %.preheader331 ]
  %187 = getelementptr float, ptr %184, i64 %indvars.iv407
  %188 = load float, ptr %187, align 4, !tbaa !9
  %189 = getelementptr float, ptr %186, i64 %indvars.iv407
  %190 = load float, ptr %189, align 4, !tbaa !9
  %191 = call float @llvm.fmuladd.f32(float %188, float 0x3F9EB851E0000000, float %190)
  store float %191, ptr %189, align 4, !tbaa !9
  %indvars.iv.next408 = or disjoint i64 %indvars.iv407, 1
  %192 = getelementptr float, ptr %184, i64 %indvars.iv.next408
  %193 = load float, ptr %192, align 4, !tbaa !9
  %194 = getelementptr float, ptr %186, i64 %indvars.iv.next408
  %195 = load float, ptr %194, align 4, !tbaa !9
  %196 = call float @llvm.fmuladd.f32(float %193, float 0x3F9EB851E0000000, float %195)
  store float %196, ptr %194, align 4, !tbaa !9
  %indvars.iv.next408.1 = add nuw nsw i64 %indvars.iv407, 2
  %niter612.next.1 = add i64 %niter612, 2
  %niter612.ncmp.1 = icmp eq i64 %niter612.next.1, %unroll_iter611
  br i1 %niter612.ncmp.1, label %.loopexit332.unr-lcssa, label %.preheader331.new, !llvm.loop !23

197:                                              ; preds = %.loopexit332
  %.not321 = icmp eq i64 %.1292355, 0
  br i1 %.not321, label %.loopexit337, label %.preheader330

.preheader330:                                    ; preds = %197, %.loopexit595
  %indvars.iv420 = phi i64 [ %indvars.iv.next421, %.loopexit595 ], [ 0, %197 ]
  %198 = add nuw nsw i64 %126, %indvars.iv420
  %199 = add nsw i64 %198, -21
  %200 = shl i64 %199, %103
  %201 = getelementptr float, ptr %106, i64 %200
  %202 = shl nuw i64 %198, %103
  %203 = getelementptr float, ptr %106, i64 %202
  br i1 %124, label %.loopexit595.unr-lcssa, label %.preheader330.new

.preheader330.new:                                ; preds = %.preheader330, %.preheader330.new
  %indvars.iv415 = phi i64 [ %indvars.iv.next416.1, %.preheader330.new ], [ 0, %.preheader330 ]
  %niter617 = phi i64 [ %niter617.next.1, %.preheader330.new ], [ 0, %.preheader330 ]
  %204 = getelementptr float, ptr %201, i64 %indvars.iv415
  %205 = load float, ptr %204, align 4, !tbaa !9
  %206 = getelementptr float, ptr %203, i64 %indvars.iv415
  %207 = load float, ptr %206, align 4, !tbaa !9
  %208 = call float @llvm.fmuladd.f32(float %205, float 5.000000e-01, float %207)
  store float %208, ptr %206, align 4, !tbaa !9
  %indvars.iv.next416 = or disjoint i64 %indvars.iv415, 1
  %209 = getelementptr float, ptr %201, i64 %indvars.iv.next416
  %210 = load float, ptr %209, align 4, !tbaa !9
  %211 = getelementptr float, ptr %203, i64 %indvars.iv.next416
  %212 = load float, ptr %211, align 4, !tbaa !9
  %213 = call float @llvm.fmuladd.f32(float %210, float 5.000000e-01, float %212)
  store float %213, ptr %211, align 4, !tbaa !9
  %indvars.iv.next416.1 = add nuw nsw i64 %indvars.iv415, 2
  %niter617.next.1 = add i64 %niter617, 2
  %niter617.ncmp.1 = icmp eq i64 %niter617.next.1, %unroll_iter616
  br i1 %niter617.ncmp.1, label %.loopexit595.unr-lcssa, label %.preheader330.new, !llvm.loop !24

.loopexit595.unr-lcssa:                           ; preds = %.preheader330.new, %.preheader330
  %indvars.iv415.unr = phi i64 [ 0, %.preheader330 ], [ %indvars.iv.next416.1, %.preheader330.new ]
  br i1 %lcmp.mod615.not, label %.loopexit595, label %.loopexit595.epilog-lcssa

.loopexit595.epilog-lcssa:                        ; preds = %.loopexit595.unr-lcssa
  %214 = getelementptr float, ptr %201, i64 %indvars.iv415.unr
  %215 = load float, ptr %214, align 4, !tbaa !9
  %216 = getelementptr float, ptr %203, i64 %indvars.iv415.unr
  %217 = load float, ptr %216, align 4, !tbaa !9
  %218 = call float @llvm.fmuladd.f32(float %215, float 5.000000e-01, float %217)
  store float %218, ptr %216, align 4, !tbaa !9
  br label %.loopexit595

.loopexit595:                                     ; preds = %.loopexit595.unr-lcssa, %.loopexit595.epilog-lcssa
  %indvars.iv.next421 = add nuw nsw i64 %indvars.iv420, 1
  %exitcond423.not = icmp eq i64 %indvars.iv.next421, 21
  br i1 %exitcond423.not, label %.loopexit337, label %.preheader330, !llvm.loop !25

.loopexit337:                                     ; preds = %.loopexit595, %197
  br i1 %.not, label %.preheader334, label %.loopexit335

.preheader334:                                    ; preds = %.loopexit337
  %.idx = mul i64 %.1292355, 168
  %219 = getelementptr inbounds i8, ptr %106, i64 %.idx
  %220 = load <4 x float>, ptr %219, align 4, !tbaa !9
  %221 = shufflevector <4 x float> %220, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %222 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %221, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %220)
  store <4 x float> %222, ptr %219, align 4, !tbaa !9
  %223 = mul i64 %.1292355, 168
  %gep = getelementptr i8, ptr %invariant.gep, i64 %223
  %224 = load <4 x float>, ptr %gep, align 4, !tbaa !9
  %225 = shufflevector <4 x float> %224, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %226 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %225, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %224)
  store <4 x float> %226, ptr %gep, align 4, !tbaa !9
  %227 = mul i64 %.1292355, 168
  %gep629 = getelementptr i8, ptr %invariant.gep628, i64 %227
  %228 = load <4 x float>, ptr %gep629, align 4, !tbaa !9
  %229 = shufflevector <4 x float> %228, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %230 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %229, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %228)
  store <4 x float> %230, ptr %gep629, align 4, !tbaa !9
  %231 = mul i64 %.1292355, 168
  %gep631 = getelementptr i8, ptr %invariant.gep630, i64 %231
  %232 = load <4 x float>, ptr %gep631, align 4, !tbaa !9
  %233 = shufflevector <4 x float> %232, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %234 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %233, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %232)
  store <4 x float> %234, ptr %gep631, align 4, !tbaa !9
  %235 = mul i64 %.1292355, 168
  %gep633 = getelementptr i8, ptr %invariant.gep632, i64 %235
  %236 = load <4 x float>, ptr %gep633, align 4, !tbaa !9
  %237 = shufflevector <4 x float> %236, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %238 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %237, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %236)
  store <4 x float> %238, ptr %gep633, align 4, !tbaa !9
  %239 = mul i64 %.1292355, 168
  %gep635 = getelementptr i8, ptr %invariant.gep634, i64 %239
  %240 = load <4 x float>, ptr %gep635, align 4, !tbaa !9
  %241 = shufflevector <4 x float> %240, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %242 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %241, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %240)
  store <4 x float> %242, ptr %gep635, align 4, !tbaa !9
  %243 = mul i64 %.1292355, 168
  %gep637 = getelementptr i8, ptr %invariant.gep636, i64 %243
  %244 = load <4 x float>, ptr %gep637, align 4, !tbaa !9
  %245 = shufflevector <4 x float> %244, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %246 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %245, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %244)
  store <4 x float> %246, ptr %gep637, align 4, !tbaa !9
  %247 = mul i64 %.1292355, 168
  %gep639 = getelementptr i8, ptr %invariant.gep638, i64 %247
  %248 = load <4 x float>, ptr %gep639, align 4, !tbaa !9
  %249 = shufflevector <4 x float> %248, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %250 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %249, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %248)
  store <4 x float> %250, ptr %gep639, align 4, !tbaa !9
  %251 = mul i64 %.1292355, 168
  %gep641 = getelementptr i8, ptr %invariant.gep640, i64 %251
  %252 = load <4 x float>, ptr %gep641, align 4, !tbaa !9
  %253 = shufflevector <4 x float> %252, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %254 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %253, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %252)
  store <4 x float> %254, ptr %gep641, align 4, !tbaa !9
  %255 = mul i64 %.1292355, 168
  %gep643 = getelementptr i8, ptr %invariant.gep642, i64 %255
  %256 = load <4 x float>, ptr %gep643, align 4, !tbaa !9
  %257 = shufflevector <4 x float> %256, <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %258 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %257, <4 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000, float 0x3F847AE140000000>, <4 x float> %256)
  store <4 x float> %258, ptr %gep643, align 4, !tbaa !9
  %259 = mul i64 %.1292355, 168
  %gep645 = getelementptr i8, ptr %invariant.gep644, i64 %259
  %260 = load <2 x float>, ptr %gep645, align 4, !tbaa !9
  %261 = shufflevector <2 x float> %260, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %262 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %261, <2 x float> <float 0x3F847AE140000000, float 0x3F847AE140000000>, <2 x float> %260)
  store <2 x float> %262, ptr %gep645, align 4, !tbaa !9
  br label %.loopexit335

.loopexit335:                                     ; preds = %.preheader334, %.loopexit337
  %263 = mul i64 %.1292355, 240
  %264 = mul i64 %.1292355, %.0298
  br label %265

.loopexit329:                                     ; preds = %.loopexit, %265
  %exitcond442.not = icmp eq i64 %indvars.iv.next439, %wide.trip.count441
  br i1 %exitcond442.not, label %307, label %265, !llvm.loop !26

265:                                              ; preds = %.loopexit335, %.loopexit329
  %266 = phi i32 [ %.pre495, %.loopexit335 ], [ %268, %.loopexit329 ]
  %indvars.iv438 = phi i64 [ 0, %.loopexit335 ], [ %indvars.iv.next439, %.loopexit329 ]
  %indvars.iv.next439 = add nuw nsw i64 %indvars.iv438, 1
  %267 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %indvars.iv.next439
  %268 = load i32, ptr %267, align 4, !tbaa !13
  %269 = icmp slt i32 %266, %268
  br i1 %269, label %.preheader328.lr.ph, label %.loopexit329

.preheader328.lr.ph:                              ; preds = %265
  %270 = add nuw nsw i64 %126, %indvars.iv438
  %271 = shl nuw i64 %270, %103
  %272 = getelementptr float, ptr %106, i64 %271
  %273 = sext i32 %266 to i64
  %wide.trip.count436 = sext i32 %268 to i64
  br label %.preheader328

.preheader328:                                    ; preds = %.preheader328.lr.ph, %.loopexit
  %indvars.iv433 = phi i64 [ %273, %.preheader328.lr.ph ], [ %indvars.iv.next434, %.loopexit ]
  %274 = add i64 %263, %indvars.iv433
  %275 = shl i64 %274, %103
  %276 = getelementptr float, ptr %110, i64 %275
  %277 = add i64 %264, %indvars.iv433
  %278 = shl i64 %277, %103
  %279 = getelementptr float, ptr %114, i64 %278
  br i1 %125, label %.loopexit.unr-lcssa, label %.preheader328.new

.preheader328.new:                                ; preds = %.preheader328, %.preheader328.new
  %indvars.iv428 = phi i64 [ %indvars.iv.next429.1, %.preheader328.new ], [ 0, %.preheader328 ]
  %niter622 = phi i64 [ %niter622.next.1, %.preheader328.new ], [ 0, %.preheader328 ]
  %280 = getelementptr float, ptr %272, i64 %indvars.iv428
  %281 = load float, ptr %280, align 4, !tbaa !9
  %282 = getelementptr float, ptr %276, i64 %indvars.iv428
  %283 = load float, ptr %282, align 4, !tbaa !9
  %284 = call float @llvm.fmuladd.f32(float %281, float 0x3FB99999A0000000, float %283)
  store float %284, ptr %282, align 4, !tbaa !9
  %285 = load float, ptr %280, align 4, !tbaa !9
  %286 = getelementptr float, ptr %279, i64 %indvars.iv428
  %287 = load float, ptr %286, align 4, !tbaa !9
  %288 = call float @llvm.fmuladd.f32(float %285, float 0x3FB99999A0000000, float %287)
  store float %288, ptr %286, align 4, !tbaa !9
  %indvars.iv.next429 = or disjoint i64 %indvars.iv428, 1
  %289 = getelementptr float, ptr %272, i64 %indvars.iv.next429
  %290 = load float, ptr %289, align 4, !tbaa !9
  %291 = getelementptr float, ptr %276, i64 %indvars.iv.next429
  %292 = load float, ptr %291, align 4, !tbaa !9
  %293 = call float @llvm.fmuladd.f32(float %290, float 0x3FB99999A0000000, float %292)
  store float %293, ptr %291, align 4, !tbaa !9
  %294 = load float, ptr %289, align 4, !tbaa !9
  %295 = getelementptr float, ptr %279, i64 %indvars.iv.next429
  %296 = load float, ptr %295, align 4, !tbaa !9
  %297 = call float @llvm.fmuladd.f32(float %294, float 0x3FB99999A0000000, float %296)
  store float %297, ptr %295, align 4, !tbaa !9
  %indvars.iv.next429.1 = add nuw nsw i64 %indvars.iv428, 2
  %niter622.next.1 = add i64 %niter622, 2
  %niter622.ncmp.1 = icmp eq i64 %niter622.next.1, %unroll_iter621
  br i1 %niter622.ncmp.1, label %.loopexit.unr-lcssa, label %.preheader328.new, !llvm.loop !27

.loopexit.unr-lcssa:                              ; preds = %.preheader328.new, %.preheader328
  %indvars.iv428.unr = phi i64 [ 0, %.preheader328 ], [ %indvars.iv.next429.1, %.preheader328.new ]
  br i1 %lcmp.mod620.not, label %.loopexit, label %.loopexit.epilog-lcssa

.loopexit.epilog-lcssa:                           ; preds = %.loopexit.unr-lcssa
  %298 = getelementptr float, ptr %272, i64 %indvars.iv428.unr
  %299 = load float, ptr %298, align 4, !tbaa !9
  %300 = getelementptr float, ptr %276, i64 %indvars.iv428.unr
  %301 = load float, ptr %300, align 4, !tbaa !9
  %302 = call float @llvm.fmuladd.f32(float %299, float 0x3FB99999A0000000, float %301)
  store float %302, ptr %300, align 4, !tbaa !9
  %303 = load float, ptr %298, align 4, !tbaa !9
  %304 = getelementptr float, ptr %279, i64 %indvars.iv428.unr
  %305 = load float, ptr %304, align 4, !tbaa !9
  %306 = call float @llvm.fmuladd.f32(float %303, float 0x3FB99999A0000000, float %305)
  store float %306, ptr %304, align 4, !tbaa !9
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.unr-lcssa, %.loopexit.epilog-lcssa
  %indvars.iv.next434 = add nsw i64 %indvars.iv433, 1
  %exitcond437.not = icmp eq i64 %indvars.iv.next434, %wide.trip.count436
  br i1 %exitcond437.not, label %.loopexit329, label %.preheader328, !llvm.loop !28

307:                                              ; preds = %.loopexit329
  %308 = add nuw nsw i64 %.1292355, 1
  %exitcond443.not = icmp eq i64 %308, %101
  br i1 %exitcond443.not, label %.preheader327, label %.preheader339, !llvm.loop !29

.split366.us:                                     ; preds = %.loopexit.us, %.preheader327
  switch i32 %.0302, label %315 [
    i32 48000, label %309
    i32 12000, label %311
  ]

309:                                              ; preds = %.split366.us
  %310 = load i32, ptr getelementptr inbounds (i8, ptr @BANDS, i64 84), align 4, !tbaa !13
  br label %.preheader325.lr.ph

311:                                              ; preds = %.split366.us
  %312 = zext nneg i32 %.1300 to i64
  %313 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %312
  %314 = load i32, ptr %313, align 4, !tbaa !13
  br label %.preheader325.lr.ph

315:                                              ; preds = %.split366.us
  %316 = zext nneg i32 %.1300 to i64
  %317 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !13
  %319 = add nsw i32 %318, -3
  br label %.preheader325.lr.ph

.preheader325.lr.ph:                              ; preds = %309, %315, %311
  %.0297 = phi i32 [ %310, %309 ], [ %314, %311 ], [ %319, %315 ]
  %.0297.fr = freeze i32 %.0297
  %umax493 = call i64 @llvm.umax.i64(i64 %101, i64 1)
  %.pre497.pre = load i32, ptr @BANDS, align 16, !tbaa !13
  %wide.trip.count491 = zext nneg i32 %.1300 to i64
  %wide.trip.count469 = zext nneg i32 %spec.select to i64
  %wide.trip.count475 = zext nneg i32 %spec.select to i64
  %wide.trip.count481 = zext nneg i32 %spec.select to i64
  br label %.preheader325

.preheader325:                                    ; preds = %.preheader325.lr.ph, %381
  %.0288384 = phi double [ 0.000000e+00, %.preheader325.lr.ph ], [ %384, %381 ]
  %.3383 = phi i64 [ 0, %.preheader325.lr.ph ], [ %385, %381 ]
  %320 = mul i64 %.3383, %.0298
  %321 = mul i64 %.3383, 240
  br label %322

322:                                              ; preds = %.preheader325, %._crit_edge
  %323 = phi i32 [ %.pre497.pre, %.preheader325 ], [ %325, %._crit_edge ]
  %indvars.iv488 = phi i64 [ 0, %.preheader325 ], [ %indvars.iv.next489, %._crit_edge ]
  %.0285382 = phi double [ 0.000000e+00, %.preheader325 ], [ %380, %._crit_edge ]
  %.fr393 = freeze i32 %323
  %indvars.iv.next489 = add nuw nsw i64 %indvars.iv488, 1
  %324 = getelementptr inbounds [22 x i32], ptr @BANDS, i64 0, i64 %indvars.iv.next489
  %325 = load i32, ptr %324, align 4, !tbaa !13
  %invariant.smin = call i32 @llvm.smin.i32(i32 %325, i32 %.0297.fr)
  %326 = icmp slt i32 %.fr393, %invariant.smin
  br i1 %326, label %.preheader.preheader, label %._crit_edge

.preheader.preheader:                             ; preds = %322
  %327 = sext i32 %.fr393 to i64
  %wide.trip.count486 = sext i32 %invariant.smin to i64
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.split370.us
  %indvars.iv483 = phi i64 [ %327, %.preheader.preheader ], [ %indvars.iv.next484, %.split370.us ]
  %.0283378 = phi double [ 0.000000e+00, %.preheader.preheader ], [ %.us-phi, %.split370.us ]
  %328 = add i64 %320, %indvars.iv483
  %329 = shl i64 %328, %103
  %330 = getelementptr float, ptr %114, i64 %329
  %331 = add i64 %321, %indvars.iv483
  %332 = shl i64 %331, %103
  %333 = getelementptr float, ptr %110, i64 %332
  %334 = trunc nsw i64 %indvars.iv483 to i32
  %335 = add i32 %334, -79
  %or.cond11 = icmp ult i32 %335, 3
  %336 = icmp eq i64 %indvars.iv483, 80
  br i1 %or.cond11, label %.preheader.split.us, label %.preheader.split

.preheader.split.us:                              ; preds = %.preheader, %.preheader.split.us
  %indvars.iv477 = phi i64 [ %indvars.iv.next478, %.preheader.split.us ], [ 0, %.preheader ]
  %.1284368.us = phi double [ %350, %.preheader.split.us ], [ %.0283378, %.preheader ]
  %337 = getelementptr float, ptr %330, i64 %indvars.iv477
  %338 = load float, ptr %337, align 4, !tbaa !9
  %339 = getelementptr float, ptr %333, i64 %indvars.iv477
  %340 = load float, ptr %339, align 4, !tbaa !9
  %341 = fdiv float %338, %340
  %342 = fpext float %341 to double
  %343 = call double @log(double noundef %342) #9
  %344 = fsub double %342, %343
  %345 = fadd double %344, -1.000000e+00
  %346 = fptrunc double %345 to float
  %347 = fmul float %346, 0x3FB99999A0000000
  %348 = fmul float %347, 0x3FB99999A0000000
  %.1.us = select i1 %336, float %348, float %347
  %349 = fpext float %.1.us to double
  %350 = fadd double %.1284368.us, %349
  %indvars.iv.next478 = add nuw nsw i64 %indvars.iv477, 1
  %exitcond482.not = icmp eq i64 %indvars.iv.next478, %wide.trip.count481
  br i1 %exitcond482.not, label %.split370.us, label %.preheader.split.us, !llvm.loop !30

.preheader.split:                                 ; preds = %.preheader
  br i1 %336, label %.preheader.split.split.us, label %.preheader.split.split

.preheader.split.split.us:                        ; preds = %.preheader.split, %.preheader.split.split.us
  %indvars.iv471 = phi i64 [ %indvars.iv.next472, %.preheader.split.split.us ], [ 0, %.preheader.split ]
  %.1284368.us371 = phi double [ %363, %.preheader.split.split.us ], [ %.0283378, %.preheader.split ]
  %351 = getelementptr float, ptr %330, i64 %indvars.iv471
  %352 = load float, ptr %351, align 4, !tbaa !9
  %353 = getelementptr float, ptr %333, i64 %indvars.iv471
  %354 = load float, ptr %353, align 4, !tbaa !9
  %355 = fdiv float %352, %354
  %356 = fpext float %355 to double
  %357 = call double @log(double noundef %356) #9
  %358 = fsub double %356, %357
  %359 = fadd double %358, -1.000000e+00
  %360 = fptrunc double %359 to float
  %361 = fmul float %360, 0x3FB99999A0000000
  %362 = fpext float %361 to double
  %363 = fadd double %.1284368.us371, %362
  %indvars.iv.next472 = add nuw nsw i64 %indvars.iv471, 1
  %exitcond476.not = icmp eq i64 %indvars.iv.next472, %wide.trip.count475
  br i1 %exitcond476.not, label %.split370.us, label %.preheader.split.split.us, !llvm.loop !30

.preheader.split.split:                           ; preds = %.preheader.split, %.preheader.split.split
  %indvars.iv465 = phi i64 [ %indvars.iv.next466, %.preheader.split.split ], [ 0, %.preheader.split ]
  %.1284368 = phi double [ %375, %.preheader.split.split ], [ %.0283378, %.preheader.split ]
  %364 = getelementptr float, ptr %330, i64 %indvars.iv465
  %365 = load float, ptr %364, align 4, !tbaa !9
  %366 = getelementptr float, ptr %333, i64 %indvars.iv465
  %367 = load float, ptr %366, align 4, !tbaa !9
  %368 = fdiv float %365, %367
  %369 = fpext float %368 to double
  %370 = call double @log(double noundef %369) #9
  %371 = fsub double %369, %370
  %372 = fadd double %371, -1.000000e+00
  %373 = fptrunc double %372 to float
  %374 = fpext float %373 to double
  %375 = fadd double %.1284368, %374
  %indvars.iv.next466 = add nuw nsw i64 %indvars.iv465, 1
  %exitcond470.not = icmp eq i64 %indvars.iv.next466, %wide.trip.count469
  br i1 %exitcond470.not, label %.split370.us, label %.preheader.split.split, !llvm.loop !30

.split370.us:                                     ; preds = %.preheader.split.split, %.preheader.split.split.us, %.preheader.split.us
  %.us-phi = phi double [ %350, %.preheader.split.us ], [ %363, %.preheader.split.split.us ], [ %375, %.preheader.split.split ]
  %indvars.iv.next484 = add nsw i64 %indvars.iv483, 1
  %exitcond487.not = icmp eq i64 %indvars.iv.next484, %wide.trip.count486
  br i1 %exitcond487.not, label %._crit_edge, label %.preheader, !llvm.loop !31

._crit_edge:                                      ; preds = %.split370.us, %322
  %.0283.lcssa = phi double [ 0.000000e+00, %322 ], [ %.us-phi, %.split370.us ]
  %376 = sub nsw i32 %325, %.fr393
  %377 = shl i32 %376, %127
  %378 = sitofp i32 %377 to double
  %379 = fdiv double %.0283.lcssa, %378
  %380 = call double @llvm.fmuladd.f64(double %379, double %379, double %.0285382)
  %exitcond492.not = icmp eq i64 %indvars.iv.next489, %wide.trip.count491
  br i1 %exitcond492.not, label %381, label %322, !llvm.loop !32

381:                                              ; preds = %._crit_edge
  %382 = fdiv double %380, 2.100000e+01
  %383 = fmul double %382, %382
  %384 = call double @llvm.fmuladd.f64(double %383, double %383, double %.0288384)
  %385 = add nuw nsw i64 %.3383, 1
  %exitcond494.not = icmp eq i64 %385, %umax493
  br i1 %exitcond494.not, label %._crit_edge385, label %.preheader325, !llvm.loop !33

._crit_edge385:                                   ; preds = %381
  call void @free(ptr noundef %106) #9
  call void @free(ptr noundef %110) #9
  call void @free(ptr noundef %114) #9
  %386 = uitofp nneg i64 %101 to double
  %387 = fdiv double %384, %386
  %388 = call double @pow(double noundef %387, double noundef 6.250000e-02) #9
  %389 = fadd double %388, 1.000000e+00
  %390 = call double @log(double noundef %389) #9
  %391 = fmul double %390, 5.000000e-01
  %392 = fdiv double %391, 0x3FBF49A79F8B9187
  %393 = fsub double 1.000000e+00, %392
  %394 = fmul double %393, 1.000000e+02
  %395 = fptrunc double %394 to float
  %396 = fcmp olt float %395, 0.000000e+00
  %397 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %396, label %398, label %402

398:                                              ; preds = %._crit_edge385
  %399 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %397, ptr noundef nonnull @.str.8) #10
  %400 = load ptr, ptr @stderr, align 8, !tbaa !5
  %401 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %400, ptr noundef nonnull @.str.9, double noundef %388) #10
  br label %407

402:                                              ; preds = %._crit_edge385
  %403 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %397, ptr noundef nonnull @.str.10) #10
  %404 = load ptr, ptr @stderr, align 8, !tbaa !5
  %405 = fpext float %395 to double
  %406 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %404, ptr noundef nonnull @.str.11, double noundef %405, double noundef %388) #10
  br label %407

407:                                              ; preds = %402, %398, %97, %92, %47, %37, %22, %6
  %.0282 = phi i32 [ 1, %6 ], [ 1, %22 ], [ 1, %37 ], [ 1, %47 ], [ 1, %92 ], [ 1, %97 ], [ 1, %398 ], [ 0, %402 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  ret i32 %.0282
}

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

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i64 @read_pcm16(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #5

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

; 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 nofree nounwind willreturn memory(write)
declare double @log(double noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @pow(double noundef, double noundef) local_unnamed_addr #7

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #8

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

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

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

!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 = !{!"float", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12, !20}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12, !20}
!24 = distinct !{!24, !12, !20}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12, !20}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}


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