; LLVM IR from VoidRune/Audio-engine :: src/minivorbis.ll (vp_psy_init)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.vorbis_info_psy_global = type { i32, [7 x float], [7 x float], float, float, float, [15 x i32], [2 x [15 x i32]], [15 x i32], [15 x i32], [2 x [15 x i32]] }
%struct.vorbis_look_psy = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i32, i32, i64, float }
%struct.vorbis_info_psy = type { i32, float, float, [3 x float], float, float, float, [17 x float], i32, float, float, float, i32, i32, i32, [3 x [17 x float]], [40 x float], float, i32, i32, i32, double }

@ATH = external hidden constant [88 x float], align 16

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #1

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

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

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

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

; Function Attrs: nounwind
declare double @exp(double noundef) #3

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

; Function Attrs: nounwind uwtable
define dso_local void @_vp_psy_init(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i64 noundef %4) #5 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca i32, align 4
  %22 = alloca float, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  store i64 %4, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  store i64 -99, ptr %13, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  store i64 1, ptr %14, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %23, i8 0, i64 96, i1 false)
  %24 = load ptr, ptr %8, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.vorbis_info_psy_global, ptr %24, i32 0, i32 0
  %26 = load i32, ptr %25, align 4, !tbaa !13
  %27 = load ptr, ptr %6, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.vorbis_look_psy, ptr %27, i32 0, i32 9
  store i32 %26, ptr %28, align 8, !tbaa !16
  %29 = load ptr, ptr %8, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.vorbis_info_psy_global, ptr %29, i32 0, i32 0
  %31 = load i32, ptr %30, align 4, !tbaa !13
  %32 = sitofp i32 %31 to float
  %33 = fmul float %32, 8.000000e+00
  %34 = fpext float %33 to double
  %35 = call double @log(double noundef %34) #6
  %36 = call double @log(double noundef 2.000000e+00) #6
  %37 = fdiv double %35, %36
  %38 = call double @llvm.rint.f64(double %37)
  %39 = fsub double %38, 1.000000e+00
  %40 = fptosi double %39 to i64
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.vorbis_look_psy, ptr %41, i32 0, i32 8
  store i64 %40, ptr %42, align 8, !tbaa !18
  %43 = load i64, ptr %10, align 8, !tbaa !11
  %44 = sitofp i64 %43 to float
  %45 = fmul float 2.500000e-01, %44
  %46 = fpext float %45 to double
  %47 = fmul double %46, 5.000000e-01
  %48 = load i32, ptr %9, align 4, !tbaa !9
  %49 = sitofp i32 %48 to double
  %50 = fdiv double %47, %49
  %51 = call double @log(double noundef %50) #6
  %52 = call double @llvm.fmuladd.f64(double %51, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.vorbis_look_psy, ptr %53, i32 0, i32 8
  %55 = load i64, ptr %54, align 8, !tbaa !18
  %56 = add nsw i64 %55, 1
  %57 = trunc i64 %56 to i32
  %58 = shl i32 1, %57
  %59 = sitofp i32 %58 to double
  %60 = load ptr, ptr %8, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.vorbis_info_psy_global, ptr %60, i32 0, i32 0
  %62 = load i32, ptr %61, align 4, !tbaa !13
  %63 = sitofp i32 %62 to double
  %64 = fneg double %63
  %65 = call double @llvm.fmuladd.f64(double %52, double %59, double %64)
  %66 = fptosi double %65 to i64
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.vorbis_look_psy, ptr %67, i32 0, i32 7
  store i64 %66, ptr %68, align 8, !tbaa !19
  %69 = load i32, ptr %9, align 4, !tbaa !9
  %70 = sitofp i32 %69 to float
  %71 = fadd float %70, 2.500000e-01
  %72 = load i64, ptr %10, align 8, !tbaa !11
  %73 = sitofp i64 %72 to float
  %74 = fmul float %71, %73
  %75 = fpext float %74 to double
  %76 = fmul double %75, 5.000000e-01
  %77 = load i32, ptr %9, align 4, !tbaa !9
  %78 = sitofp i32 %77 to double
  %79 = fdiv double %76, %78
  %80 = call double @log(double noundef %79) #6
  %81 = call double @llvm.fmuladd.f64(double %80, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %82 = load ptr, ptr %6, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.vorbis_look_psy, ptr %82, i32 0, i32 8
  %84 = load i64, ptr %83, align 8, !tbaa !18
  %85 = add nsw i64 %84, 1
  %86 = trunc i64 %85 to i32
  %87 = shl i32 1, %86
  %88 = sitofp i32 %87 to double
  %89 = call double @llvm.fmuladd.f64(double %81, double %88, double 5.000000e-01)
  %90 = fptosi double %89 to i64
  store i64 %90, ptr %15, align 8, !tbaa !11
  %91 = load i64, ptr %15, align 8, !tbaa !11
  %92 = load ptr, ptr %6, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.vorbis_look_psy, ptr %92, i32 0, i32 7
  %94 = load i64, ptr %93, align 8, !tbaa !19
  %95 = sub nsw i64 %91, %94
  %96 = add nsw i64 %95, 1
  %97 = trunc i64 %96 to i32
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.vorbis_look_psy, ptr %98, i32 0, i32 10
  store i32 %97, ptr %99, align 4, !tbaa !20
  %100 = load i32, ptr %9, align 4, !tbaa !9
  %101 = sext i32 %100 to i64
  %102 = mul i64 %101, 4
  %103 = call noalias ptr @malloc(i64 noundef %102) #7
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.vorbis_look_psy, ptr %104, i32 0, i32 4
  store ptr %103, ptr %105, align 8, !tbaa !21
  %106 = load i32, ptr %9, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = mul i64 %107, 8
  %109 = call noalias ptr @malloc(i64 noundef %108) #7
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.vorbis_look_psy, ptr %110, i32 0, i32 5
  store ptr %109, ptr %111, align 8, !tbaa !22
  %112 = load i32, ptr %9, align 4, !tbaa !9
  %113 = sext i32 %112 to i64
  %114 = mul i64 %113, 8
  %115 = call noalias ptr @malloc(i64 noundef %114) #7
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.vorbis_look_psy, ptr %116, i32 0, i32 6
  store ptr %115, ptr %117, align 8, !tbaa !23
  %118 = load ptr, ptr %7, align 8, !tbaa !5
  %119 = load ptr, ptr %6, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.vorbis_look_psy, ptr %119, i32 0, i32 1
  store ptr %118, ptr %120, align 8, !tbaa !24
  %121 = load i32, ptr %9, align 4, !tbaa !9
  %122 = load ptr, ptr %6, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.vorbis_look_psy, ptr %122, i32 0, i32 0
  store i32 %121, ptr %123, align 8, !tbaa !25
  %124 = load i64, ptr %10, align 8, !tbaa !11
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.vorbis_look_psy, ptr %125, i32 0, i32 11
  store i64 %124, ptr %126, align 8, !tbaa !26
  %127 = load ptr, ptr %6, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.vorbis_look_psy, ptr %127, i32 0, i32 12
  store float 1.000000e+00, ptr %128, align 8, !tbaa !27
  %129 = load i64, ptr %10, align 8, !tbaa !11
  %130 = icmp slt i64 %129, 26000
  br i1 %130, label %131, label %134

131:                                              ; preds = %5
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.vorbis_look_psy, ptr %132, i32 0, i32 12
  store float 0.000000e+00, ptr %133, align 8, !tbaa !27
  br label %148

134:                                              ; preds = %5
  %135 = load i64, ptr %10, align 8, !tbaa !11
  %136 = icmp slt i64 %135, 38000
  br i1 %136, label %137, label %140

137:                                              ; preds = %134
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.vorbis_look_psy, ptr %138, i32 0, i32 12
  store float 0x3FEE147AE0000000, ptr %139, align 8, !tbaa !27
  br label %147

140:                                              ; preds = %134
  %141 = load i64, ptr %10, align 8, !tbaa !11
  %142 = icmp sgt i64 %141, 46000
  br i1 %142, label %143, label %146

143:                                              ; preds = %140
  %144 = load ptr, ptr %6, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.vorbis_look_psy, ptr %144, i32 0, i32 12
  store float 0x3FF4666660000000, ptr %145, align 8, !tbaa !27
  br label %146

146:                                              ; preds = %143, %140
  br label %147

147:                                              ; preds = %146, %137
  br label %148

148:                                              ; preds = %147, %131
  store i64 0, ptr %11, align 8, !tbaa !11
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %149

149:                                              ; preds = %219, %148
  %150 = load i64, ptr %11, align 8, !tbaa !11
  %151 = icmp slt i64 %150, 87
  br i1 %151, label %152, label %222

152:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  %153 = load i64, ptr %11, align 8, !tbaa !11
  %154 = add nsw i64 %153, 1
  %155 = sitofp i64 %154 to double
  %156 = call double @llvm.fmuladd.f64(double %155, double 1.250000e-01, double -2.000000e+00)
  %157 = fadd double %156, 0x4017DCF680000000
  %158 = fmul double %157, 0x3FE62E42A0000000
  %159 = call double @exp(double noundef %158) #6
  %160 = fmul double %159, 2.000000e+00
  %161 = load i32, ptr %9, align 4, !tbaa !9
  %162 = sitofp i32 %161 to double
  %163 = fmul double %160, %162
  %164 = load i64, ptr %10, align 8, !tbaa !11
  %165 = sitofp i64 %164 to double
  %166 = fdiv double %163, %165
  %167 = call double @llvm.rint.f64(double %166)
  %168 = fptosi double %167 to i32
  store i32 %168, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %169 = load i64, ptr %11, align 8, !tbaa !11
  %170 = getelementptr inbounds [88 x float], ptr @ATH, i64 0, i64 %169
  %171 = load float, ptr %170, align 4, !tbaa !28
  store float %171, ptr %17, align 4, !tbaa !28
  %172 = load i64, ptr %12, align 8, !tbaa !11
  %173 = load i32, ptr %16, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = icmp slt i64 %172, %174
  br i1 %175, label %176, label %218

176:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %177 = load i64, ptr %11, align 8, !tbaa !11
  %178 = add nsw i64 %177, 1
  %179 = getelementptr inbounds [88 x float], ptr @ATH, i64 0, i64 %178
  %180 = load float, ptr %179, align 4, !tbaa !28
  %181 = load float, ptr %17, align 4, !tbaa !28
  %182 = fsub float %180, %181
  %183 = load i32, ptr %16, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = load i64, ptr %12, align 8, !tbaa !11
  %186 = sub nsw i64 %184, %185
  %187 = sitofp i64 %186 to float
  %188 = fdiv float %182, %187
  store float %188, ptr %18, align 4, !tbaa !28
  br label %189

189:                                              ; preds = %214, %176
  %190 = load i64, ptr %12, align 8, !tbaa !11
  %191 = load i32, ptr %16, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = icmp slt i64 %190, %192
  br i1 %193, label %194, label %199

194:                                              ; preds = %189
  %195 = load i64, ptr %12, align 8, !tbaa !11
  %196 = load i32, ptr %9, align 4, !tbaa !9
  %197 = sext i32 %196 to i64
  %198 = icmp slt i64 %195, %197
  br label %199

199:                                              ; preds = %194, %189
  %200 = phi i1 [ false, %189 ], [ %198, %194 ]
  br i1 %200, label %201, label %217

201:                                              ; preds = %199
  %202 = load float, ptr %17, align 4, !tbaa !28
  %203 = fpext float %202 to double
  %204 = fadd double %203, 1.000000e+02
  %205 = fptrunc double %204 to float
  %206 = load ptr, ptr %6, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.vorbis_look_psy, ptr %206, i32 0, i32 4
  %208 = load ptr, ptr %207, align 8, !tbaa !21
  %209 = load i64, ptr %12, align 8, !tbaa !11
  %210 = getelementptr inbounds float, ptr %208, i64 %209
  store float %205, ptr %210, align 4, !tbaa !28
  %211 = load float, ptr %18, align 4, !tbaa !28
  %212 = load float, ptr %17, align 4, !tbaa !28
  %213 = fadd float %212, %211
  store float %213, ptr %17, align 4, !tbaa !28
  br label %214

214:                                              ; preds = %201
  %215 = load i64, ptr %12, align 8, !tbaa !11
  %216 = add nsw i64 %215, 1
  store i64 %216, ptr %12, align 8, !tbaa !11
  br label %189, !llvm.loop !29

217:                                              ; preds = %199
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %218

218:                                              ; preds = %217, %152
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %219

219:                                              ; preds = %218
  %220 = load i64, ptr %11, align 8, !tbaa !11
  %221 = add nsw i64 %220, 1
  store i64 %221, ptr %11, align 8, !tbaa !11
  br label %149, !llvm.loop !31

222:                                              ; preds = %149
  br label %223

223:                                              ; preds = %241, %222
  %224 = load i64, ptr %12, align 8, !tbaa !11
  %225 = load i32, ptr %9, align 4, !tbaa !9
  %226 = sext i32 %225 to i64
  %227 = icmp slt i64 %224, %226
  br i1 %227, label %228, label %244

228:                                              ; preds = %223
  %229 = load ptr, ptr %6, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.vorbis_look_psy, ptr %229, i32 0, i32 4
  %231 = load ptr, ptr %230, align 8, !tbaa !21
  %232 = load i64, ptr %12, align 8, !tbaa !11
  %233 = sub nsw i64 %232, 1
  %234 = getelementptr inbounds float, ptr %231, i64 %233
  %235 = load float, ptr %234, align 4, !tbaa !28
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.vorbis_look_psy, ptr %236, i32 0, i32 4
  %238 = load ptr, ptr %237, align 8, !tbaa !21
  %239 = load i64, ptr %12, align 8, !tbaa !11
  %240 = getelementptr inbounds float, ptr %238, i64 %239
  store float %235, ptr %240, align 4, !tbaa !28
  br label %241

241:                                              ; preds = %228
  %242 = load i64, ptr %12, align 8, !tbaa !11
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %12, align 8, !tbaa !11
  br label %223, !llvm.loop !32

244:                                              ; preds = %223
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %245

245:                                              ; preds = %447, %244
  %246 = load i64, ptr %11, align 8, !tbaa !11
  %247 = load i32, ptr %9, align 4, !tbaa !9
  %248 = sext i32 %247 to i64
  %249 = icmp slt i64 %246, %248
  br i1 %249, label %250, label %450

250:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %251 = load i64, ptr %10, align 8, !tbaa !11
  %252 = load i32, ptr %9, align 4, !tbaa !9
  %253 = mul nsw i32 2, %252
  %254 = sext i32 %253 to i64
  %255 = sdiv i64 %251, %254
  %256 = load i64, ptr %11, align 8, !tbaa !11
  %257 = mul nsw i64 %255, %256
  %258 = sitofp i64 %257 to float
  %259 = fmul float 0x3F483F91E0000000, %258
  %260 = fpext float %259 to double
  %261 = call double @atan(double noundef %260) #6
  %262 = load i64, ptr %10, align 8, !tbaa !11
  %263 = load i32, ptr %9, align 4, !tbaa !9
  %264 = mul nsw i32 2, %263
  %265 = sext i32 %264 to i64
  %266 = sdiv i64 %262, %265
  %267 = load i64, ptr %11, align 8, !tbaa !11
  %268 = mul nsw i64 %266, %267
  %269 = load i64, ptr %10, align 8, !tbaa !11
  %270 = load i32, ptr %9, align 4, !tbaa !9
  %271 = mul nsw i32 2, %270
  %272 = sext i32 %271 to i64
  %273 = sdiv i64 %269, %272
  %274 = load i64, ptr %11, align 8, !tbaa !11
  %275 = mul nsw i64 %273, %274
  %276 = mul nsw i64 %268, %275
  %277 = sitofp i64 %276 to float
  %278 = fmul float %277, 0x3E53DD3DC0000000
  %279 = fpext float %278 to double
  %280 = call double @atan(double noundef %279) #6
  %281 = fmul double 0x4001EB8520000000, %280
  %282 = call double @llvm.fmuladd.f64(double 0x402A333340000000, double %261, double %281)
  %283 = load i64, ptr %10, align 8, !tbaa !11
  %284 = load i32, ptr %9, align 4, !tbaa !9
  %285 = mul nsw i32 2, %284
  %286 = sext i32 %285 to i64
  %287 = sdiv i64 %283, %286
  %288 = load i64, ptr %11, align 8, !tbaa !11
  %289 = mul nsw i64 %287, %288
  %290 = sitofp i64 %289 to float
  %291 = fmul float 0x3F1A36E2E0000000, %290
  %292 = fpext float %291 to double
  %293 = fadd double %282, %292
  %294 = fptrunc double %293 to float
  store float %294, ptr %19, align 4, !tbaa !28
  br label %295

295:                                              ; preds = %358, %250
  %296 = load i64, ptr %13, align 8, !tbaa !11
  %297 = load ptr, ptr %7, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.vorbis_info_psy, ptr %297, i32 0, i32 12
  %299 = load i32, ptr %298, align 8, !tbaa !33
  %300 = sext i32 %299 to i64
  %301 = add nsw i64 %296, %300
  %302 = load i64, ptr %11, align 8, !tbaa !11
  %303 = icmp slt i64 %301, %302
  br i1 %303, label %304, label %355

304:                                              ; preds = %295
  %305 = load i64, ptr %10, align 8, !tbaa !11
  %306 = load i32, ptr %9, align 4, !tbaa !9
  %307 = mul nsw i32 2, %306
  %308 = sext i32 %307 to i64
  %309 = sdiv i64 %305, %308
  %310 = load i64, ptr %13, align 8, !tbaa !11
  %311 = mul nsw i64 %309, %310
  %312 = sitofp i64 %311 to float
  %313 = fmul float 0x3F483F91E0000000, %312
  %314 = fpext float %313 to double
  %315 = call double @atan(double noundef %314) #6
  %316 = load i64, ptr %10, align 8, !tbaa !11
  %317 = load i32, ptr %9, align 4, !tbaa !9
  %318 = mul nsw i32 2, %317
  %319 = sext i32 %318 to i64
  %320 = sdiv i64 %316, %319
  %321 = load i64, ptr %13, align 8, !tbaa !11
  %322 = mul nsw i64 %320, %321
  %323 = load i64, ptr %10, align 8, !tbaa !11
  %324 = load i32, ptr %9, align 4, !tbaa !9
  %325 = mul nsw i32 2, %324
  %326 = sext i32 %325 to i64
  %327 = sdiv i64 %323, %326
  %328 = load i64, ptr %13, align 8, !tbaa !11
  %329 = mul nsw i64 %327, %328
  %330 = mul nsw i64 %322, %329
  %331 = sitofp i64 %330 to float
  %332 = fmul float %331, 0x3E53DD3DC0000000
  %333 = fpext float %332 to double
  %334 = call double @atan(double noundef %333) #6
  %335 = fmul double 0x4001EB8520000000, %334
  %336 = call double @llvm.fmuladd.f64(double 0x402A333340000000, double %315, double %335)
  %337 = load i64, ptr %10, align 8, !tbaa !11
  %338 = load i32, ptr %9, align 4, !tbaa !9
  %339 = mul nsw i32 2, %338
  %340 = sext i32 %339 to i64
  %341 = sdiv i64 %337, %340
  %342 = load i64, ptr %13, align 8, !tbaa !11
  %343 = mul nsw i64 %341, %342
  %344 = sitofp i64 %343 to float
  %345 = fmul float 0x3F1A36E2E0000000, %344
  %346 = fpext float %345 to double
  %347 = fadd double %336, %346
  %348 = load float, ptr %19, align 4, !tbaa !28
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.vorbis_info_psy, ptr %349, i32 0, i32 10
  %351 = load float, ptr %350, align 8, !tbaa !36
  %352 = fsub float %348, %351
  %353 = fpext float %352 to double
  %354 = fcmp olt double %347, %353
  br label %355

355:                                              ; preds = %304, %295
  %356 = phi i1 [ false, %295 ], [ %354, %304 ]
  br i1 %356, label %357, label %361

357:                                              ; preds = %355
  br label %358

358:                                              ; preds = %357
  %359 = load i64, ptr %13, align 8, !tbaa !11
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %13, align 8, !tbaa !11
  br label %295, !llvm.loop !37

361:                                              ; preds = %355
  br label %362

362:                                              ; preds = %432, %361
  %363 = load i64, ptr %14, align 8, !tbaa !11
  %364 = load i32, ptr %9, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = icmp sle i64 %363, %365
  br i1 %366, label %367, label %429

367:                                              ; preds = %362
  %368 = load i64, ptr %14, align 8, !tbaa !11
  %369 = load i64, ptr %11, align 8, !tbaa !11
  %370 = load ptr, ptr %7, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.vorbis_info_psy, ptr %370, i32 0, i32 13
  %372 = load i32, ptr %371, align 4, !tbaa !38
  %373 = sext i32 %372 to i64
  %374 = add nsw i64 %369, %373
  %375 = icmp slt i64 %368, %374
  br i1 %375, label %427, label %376

376:                                              ; preds = %367
  %377 = load i64, ptr %10, align 8, !tbaa !11
  %378 = load i32, ptr %9, align 4, !tbaa !9
  %379 = mul nsw i32 2, %378
  %380 = sext i32 %379 to i64
  %381 = sdiv i64 %377, %380
  %382 = load i64, ptr %14, align 8, !tbaa !11
  %383 = mul nsw i64 %381, %382
  %384 = sitofp i64 %383 to float
  %385 = fmul float 0x3F483F91E0000000, %384
  %386 = fpext float %385 to double
  %387 = call double @atan(double noundef %386) #6
  %388 = load i64, ptr %10, align 8, !tbaa !11
  %389 = load i32, ptr %9, align 4, !tbaa !9
  %390 = mul nsw i32 2, %389
  %391 = sext i32 %390 to i64
  %392 = sdiv i64 %388, %391
  %393 = load i64, ptr %14, align 8, !tbaa !11
  %394 = mul nsw i64 %392, %393
  %395 = load i64, ptr %10, align 8, !tbaa !11
  %396 = load i32, ptr %9, align 4, !tbaa !9
  %397 = mul nsw i32 2, %396
  %398 = sext i32 %397 to i64
  %399 = sdiv i64 %395, %398
  %400 = load i64, ptr %14, align 8, !tbaa !11
  %401 = mul nsw i64 %399, %400
  %402 = mul nsw i64 %394, %401
  %403 = sitofp i64 %402 to float
  %404 = fmul float %403, 0x3E53DD3DC0000000
  %405 = fpext float %404 to double
  %406 = call double @atan(double noundef %405) #6
  %407 = fmul double 0x4001EB8520000000, %406
  %408 = call double @llvm.fmuladd.f64(double 0x402A333340000000, double %387, double %407)
  %409 = load i64, ptr %10, align 8, !tbaa !11
  %410 = load i32, ptr %9, align 4, !tbaa !9
  %411 = mul nsw i32 2, %410
  %412 = sext i32 %411 to i64
  %413 = sdiv i64 %409, %412
  %414 = load i64, ptr %14, align 8, !tbaa !11
  %415 = mul nsw i64 %413, %414
  %416 = sitofp i64 %415 to float
  %417 = fmul float 0x3F1A36E2E0000000, %416
  %418 = fpext float %417 to double
  %419 = fadd double %408, %418
  %420 = load float, ptr %19, align 4, !tbaa !28
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.vorbis_info_psy, ptr %421, i32 0, i32 11
  %423 = load float, ptr %422, align 4, !tbaa !39
  %424 = fadd float %420, %423
  %425 = fpext float %424 to double
  %426 = fcmp olt double %419, %425
  br label %427

427:                                              ; preds = %376, %367
  %428 = phi i1 [ true, %367 ], [ %426, %376 ]
  br label %429

429:                                              ; preds = %427, %362
  %430 = phi i1 [ false, %362 ], [ %428, %427 ]
  br i1 %430, label %431, label %435

431:                                              ; preds = %429
  br label %432

432:                                              ; preds = %431
  %433 = load i64, ptr %14, align 8, !tbaa !11
  %434 = add nsw i64 %433, 1
  store i64 %434, ptr %14, align 8, !tbaa !11
  br label %362, !llvm.loop !40

435:                                              ; preds = %429
  %436 = load i64, ptr %13, align 8, !tbaa !11
  %437 = sub nsw i64 %436, 1
  %438 = shl i64 %437, 16
  %439 = load i64, ptr %14, align 8, !tbaa !11
  %440 = sub nsw i64 %439, 1
  %441 = add nsw i64 %438, %440
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.vorbis_look_psy, ptr %442, i32 0, i32 6
  %444 = load ptr, ptr %443, align 8, !tbaa !23
  %445 = load i64, ptr %11, align 8, !tbaa !11
  %446 = getelementptr inbounds i64, ptr %444, i64 %445
  store i64 %441, ptr %446, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %447

447:                                              ; preds = %435
  %448 = load i64, ptr %11, align 8, !tbaa !11
  %449 = add nsw i64 %448, 1
  store i64 %449, ptr %11, align 8, !tbaa !11
  br label %245, !llvm.loop !41

450:                                              ; preds = %245
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %451

451:                                              ; preds = %484, %450
  %452 = load i64, ptr %11, align 8, !tbaa !11
  %453 = load i32, ptr %9, align 4, !tbaa !9
  %454 = sext i32 %453 to i64
  %455 = icmp slt i64 %452, %454
  br i1 %455, label %456, label %487

456:                                              ; preds = %451
  %457 = load i64, ptr %11, align 8, !tbaa !11
  %458 = sitofp i64 %457 to float
  %459 = fadd float %458, 2.500000e-01
  %460 = fpext float %459 to double
  %461 = fmul double %460, 5.000000e-01
  %462 = load i64, ptr %10, align 8, !tbaa !11
  %463 = sitofp i64 %462 to double
  %464 = fmul double %461, %463
  %465 = load i32, ptr %9, align 4, !tbaa !9
  %466 = sitofp i32 %465 to double
  %467 = fdiv double %464, %466
  %468 = call double @log(double noundef %467) #6
  %469 = call double @llvm.fmuladd.f64(double %468, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %470 = load ptr, ptr %6, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.vorbis_look_psy, ptr %470, i32 0, i32 8
  %472 = load i64, ptr %471, align 8, !tbaa !18
  %473 = add nsw i64 %472, 1
  %474 = trunc i64 %473 to i32
  %475 = shl i32 1, %474
  %476 = sitofp i32 %475 to double
  %477 = call double @llvm.fmuladd.f64(double %469, double %476, double 5.000000e-01)
  %478 = fptosi double %477 to i64
  %479 = load ptr, ptr %6, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.vorbis_look_psy, ptr %479, i32 0, i32 5
  %481 = load ptr, ptr %480, align 8, !tbaa !22
  %482 = load i64, ptr %11, align 8, !tbaa !11
  %483 = getelementptr inbounds i64, ptr %481, i64 %482
  store i64 %478, ptr %483, align 8, !tbaa !11
  br label %484

484:                                              ; preds = %456
  %485 = load i64, ptr %11, align 8, !tbaa !11
  %486 = add nsw i64 %485, 1
  store i64 %486, ptr %11, align 8, !tbaa !11
  br label %451, !llvm.loop !42

487:                                              ; preds = %451
  %488 = load ptr, ptr %7, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.vorbis_info_psy, ptr %488, i32 0, i32 7
  %490 = getelementptr inbounds [17 x float], ptr %489, i64 0, i64 0
  %491 = load i64, ptr %10, align 8, !tbaa !11
  %492 = sitofp i64 %491 to double
  %493 = fmul double %492, 5.000000e-01
  %494 = load i32, ptr %9, align 4, !tbaa !9
  %495 = sitofp i32 %494 to double
  %496 = fdiv double %493, %495
  %497 = fptrunc double %496 to float
  %498 = load i32, ptr %9, align 4, !tbaa !9
  %499 = load ptr, ptr %7, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.vorbis_info_psy, ptr %499, i32 0, i32 4
  %501 = load float, ptr %500, align 8, !tbaa !43
  %502 = load ptr, ptr %7, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.vorbis_info_psy, ptr %502, i32 0, i32 5
  %504 = load float, ptr %503, align 4, !tbaa !44
  %505 = call ptr @setup_tone_curves(ptr noundef %490, float noundef %497, i32 noundef %498, float noundef %501, float noundef %504)
  %506 = load ptr, ptr %6, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.vorbis_look_psy, ptr %506, i32 0, i32 2
  store ptr %505, ptr %507, align 8, !tbaa !45
  %508 = call noalias ptr @malloc(i64 noundef 24) #7
  %509 = load ptr, ptr %6, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.vorbis_look_psy, ptr %509, i32 0, i32 3
  store ptr %508, ptr %510, align 8, !tbaa !46
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %511

511:                                              ; preds = %524, %487
  %512 = load i64, ptr %11, align 8, !tbaa !11
  %513 = icmp slt i64 %512, 3
  br i1 %513, label %514, label %527

514:                                              ; preds = %511
  %515 = load i32, ptr %9, align 4, !tbaa !9
  %516 = sext i32 %515 to i64
  %517 = mul i64 %516, 4
  %518 = call noalias ptr @malloc(i64 noundef %517) #7
  %519 = load ptr, ptr %6, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.vorbis_look_psy, ptr %519, i32 0, i32 3
  %521 = load ptr, ptr %520, align 8, !tbaa !46
  %522 = load i64, ptr %11, align 8, !tbaa !11
  %523 = getelementptr inbounds ptr, ptr %521, i64 %522
  store ptr %518, ptr %523, align 8, !tbaa !5
  br label %524

524:                                              ; preds = %514
  %525 = load i64, ptr %11, align 8, !tbaa !11
  %526 = add nsw i64 %525, 1
  store i64 %526, ptr %11, align 8, !tbaa !11
  br label %511, !llvm.loop !47

527:                                              ; preds = %511
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %528

528:                                              ; preds = %608, %527
  %529 = load i64, ptr %11, align 8, !tbaa !11
  %530 = load i32, ptr %9, align 4, !tbaa !9
  %531 = sext i32 %530 to i64
  %532 = icmp slt i64 %529, %531
  br i1 %532, label %533, label %611

533:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %534 = load i64, ptr %11, align 8, !tbaa !11
  %535 = sitofp i64 %534 to double
  %536 = fadd double %535, 5.000000e-01
  %537 = load i64, ptr %10, align 8, !tbaa !11
  %538 = sitofp i64 %537 to double
  %539 = fmul double %536, %538
  %540 = load i32, ptr %9, align 4, !tbaa !9
  %541 = sitofp i32 %540 to double
  %542 = fmul double 2.000000e+00, %541
  %543 = fdiv double %539, %542
  %544 = call double @log(double noundef %543) #6
  %545 = call double @llvm.fmuladd.f64(double %544, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %546 = fmul double %545, 2.000000e+00
  %547 = fptrunc double %546 to float
  store float %547, ptr %20, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %548 = load float, ptr %20, align 4, !tbaa !28
  %549 = fcmp olt float %548, 0.000000e+00
  br i1 %549, label %550, label %551

550:                                              ; preds = %533
  store float 0.000000e+00, ptr %20, align 4, !tbaa !28
  br label %551

551:                                              ; preds = %550, %533
  %552 = load float, ptr %20, align 4, !tbaa !28
  %553 = fcmp oge float %552, 1.600000e+01
  br i1 %553, label %554, label %555

554:                                              ; preds = %551
  store float 1.600000e+01, ptr %20, align 4, !tbaa !28
  br label %555

555:                                              ; preds = %554, %551
  %556 = load float, ptr %20, align 4, !tbaa !28
  %557 = fptosi float %556 to i32
  store i32 %557, ptr %21, align 4, !tbaa !9
  %558 = load float, ptr %20, align 4, !tbaa !28
  %559 = load i32, ptr %21, align 4, !tbaa !9
  %560 = sitofp i32 %559 to float
  %561 = fsub float %558, %560
  store float %561, ptr %22, align 4, !tbaa !28
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %562

562:                                              ; preds = %604, %555
  %563 = load i64, ptr %12, align 8, !tbaa !11
  %564 = icmp slt i64 %563, 3
  br i1 %564, label %565, label %607

565:                                              ; preds = %562
  %566 = load ptr, ptr %6, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.vorbis_look_psy, ptr %566, i32 0, i32 1
  %568 = load ptr, ptr %567, align 8, !tbaa !24
  %569 = getelementptr inbounds %struct.vorbis_info_psy, ptr %568, i32 0, i32 15
  %570 = load i64, ptr %12, align 8, !tbaa !11
  %571 = getelementptr inbounds [3 x [17 x float]], ptr %569, i64 0, i64 %570
  %572 = load i32, ptr %21, align 4, !tbaa !9
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds [17 x float], ptr %571, i64 0, i64 %573
  %575 = load float, ptr %574, align 4, !tbaa !28
  %576 = fpext float %575 to double
  %577 = load float, ptr %22, align 4, !tbaa !28
  %578 = fpext float %577 to double
  %579 = fsub double 1.000000e+00, %578
  %580 = load ptr, ptr %6, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.vorbis_look_psy, ptr %580, i32 0, i32 1
  %582 = load ptr, ptr %581, align 8, !tbaa !24
  %583 = getelementptr inbounds %struct.vorbis_info_psy, ptr %582, i32 0, i32 15
  %584 = load i64, ptr %12, align 8, !tbaa !11
  %585 = getelementptr inbounds [3 x [17 x float]], ptr %583, i64 0, i64 %584
  %586 = load i32, ptr %21, align 4, !tbaa !9
  %587 = add nsw i32 %586, 1
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds [17 x float], ptr %585, i64 0, i64 %588
  %590 = load float, ptr %589, align 4, !tbaa !28
  %591 = load float, ptr %22, align 4, !tbaa !28
  %592 = fmul float %590, %591
  %593 = fpext float %592 to double
  %594 = call double @llvm.fmuladd.f64(double %576, double %579, double %593)
  %595 = fptrunc double %594 to float
  %596 = load ptr, ptr %6, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.vorbis_look_psy, ptr %596, i32 0, i32 3
  %598 = load ptr, ptr %597, align 8, !tbaa !46
  %599 = load i64, ptr %12, align 8, !tbaa !11
  %600 = getelementptr inbounds ptr, ptr %598, i64 %599
  %601 = load ptr, ptr %600, align 8, !tbaa !5
  %602 = load i64, ptr %11, align 8, !tbaa !11
  %603 = getelementptr inbounds float, ptr %601, i64 %602
  store float %595, ptr %603, align 4, !tbaa !28
  br label %604

604:                                              ; preds = %565
  %605 = load i64, ptr %12, align 8, !tbaa !11
  %606 = add nsw i64 %605, 1
  store i64 %606, ptr %12, align 8, !tbaa !11
  br label %562, !llvm.loop !48

607:                                              ; preds = %562
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %608

608:                                              ; preds = %607
  %609 = load i64, ptr %11, align 8, !tbaa !11
  %610 = add nsw i64 %609, 1
  store i64 %610, ptr %11, align 8, !tbaa !11
  br label %528, !llvm.loop !49

611:                                              ; preds = %528
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  ret void
}

; Function Attrs: nounwind
declare double @atan(double noundef) #3

; Function Attrs: nounwind uwtable
declare hidden ptr @setup_tone_curves(ptr noundef, float noundef, i32 noundef, float noundef, float noundef) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"", !10, i64 0, !7, i64 4, !7, i64 32, !15, i64 60, !15, i64 64, !15, i64 68, !7, i64 72, !7, i64 132, !7, i64 252, !7, i64 312, !7, i64 372}
!15 = !{!"float", !7, i64 0}
!16 = !{!17, !10, i64 72}
!17 = !{!"", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !12, i64 56, !12, i64 64, !10, i64 72, !10, i64 76, !12, i64 80, !15, i64 88}
!18 = !{!17, !12, i64 64}
!19 = !{!17, !12, i64 56}
!20 = !{!17, !10, i64 76}
!21 = !{!17, !6, i64 32}
!22 = !{!17, !6, i64 40}
!23 = !{!17, !6, i64 48}
!24 = !{!17, !6, i64 8}
!25 = !{!17, !10, i64 0}
!26 = !{!17, !12, i64 80}
!27 = !{!17, !15, i64 88}
!28 = !{!15, !15, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}
!33 = !{!34, !10, i64 120}
!34 = !{!"vorbis_info_psy", !10, i64 0, !15, i64 4, !15, i64 8, !7, i64 12, !15, i64 24, !15, i64 28, !15, i64 32, !7, i64 36, !10, i64 104, !15, i64 108, !15, i64 112, !15, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !7, i64 132, !7, i64 336, !15, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !35, i64 512}
!35 = !{!"double", !7, i64 0}
!36 = !{!34, !15, i64 112}
!37 = distinct !{!37, !30}
!38 = !{!34, !10, i64 124}
!39 = !{!34, !15, i64 116}
!40 = distinct !{!40, !30}
!41 = distinct !{!41, !30}
!42 = distinct !{!42, !30}
!43 = !{!34, !15, i64 24}
!44 = !{!34, !15, i64 28}
!45 = !{!17, !6, i64 16}
!46 = !{!17, !6, i64 24}
!47 = distinct !{!47, !30}
!48 = distinct !{!48, !30}
!49 = distinct !{!49, !30}


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

@ATH = external hidden local_unnamed_addr constant [88 x float], align 16

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @log(double noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @exp(double noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
define dso_local void @_vp_psy_init(ptr nocapture noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, i32 noundef %3, i64 noundef %4) local_unnamed_addr #4 {
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(96) %0, i8 0, i64 96, i1 false)
  %6 = load i32, ptr %2, align 4, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 72
  store i32 %6, ptr %7, align 8, !tbaa !11
  %8 = sitofp i32 %6 to float
  %9 = fmul float %8, 8.000000e+00
  %10 = fpext float %9 to double
  %11 = tail call double @log(double noundef %10) #6
  %12 = fdiv double %11, 0x3FE62E42FEFA39EF
  %13 = tail call double @llvm.rint.f64(double %12)
  %14 = fadd double %13, -1.000000e+00
  %15 = fptosi double %14 to i64
  %16 = getelementptr inbounds i8, ptr %0, i64 64
  store i64 %15, ptr %16, align 8, !tbaa !15
  %17 = sitofp i64 %4 to float
  %18 = fmul float %17, 2.500000e-01
  %19 = fpext float %18 to double
  %20 = fmul double %19, 5.000000e-01
  %21 = sitofp i32 %3 to double
  %22 = fdiv double %20, %21
  %23 = tail call double @log(double noundef %22) #6
  %24 = tail call double @llvm.fmuladd.f64(double %23, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %25 = load i64, ptr %16, align 8, !tbaa !15
  %26 = trunc i64 %25 to i32
  %27 = add i32 %26, 1
  %28 = shl nuw i32 1, %27
  %29 = sitofp i32 %28 to double
  %30 = load i32, ptr %2, align 4, !tbaa !5
  %31 = sitofp i32 %30 to double
  %32 = fneg double %31
  %33 = tail call double @llvm.fmuladd.f64(double %24, double %29, double %32)
  %34 = fptosi double %33 to i64
  %35 = getelementptr inbounds i8, ptr %0, i64 56
  store i64 %34, ptr %35, align 8, !tbaa !16
  %36 = sitofp i32 %3 to float
  %37 = fadd float %36, 2.500000e-01
  %38 = fmul float %37, %17
  %39 = fpext float %38 to double
  %40 = fmul double %39, 5.000000e-01
  %41 = fdiv double %40, %21
  %42 = tail call double @log(double noundef %41) #6
  %43 = tail call double @llvm.fmuladd.f64(double %42, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %44 = load i64, ptr %16, align 8, !tbaa !15
  %45 = trunc i64 %44 to i32
  %46 = add i32 %45, 1
  %47 = shl nuw i32 1, %46
  %48 = sitofp i32 %47 to double
  %49 = tail call double @llvm.fmuladd.f64(double %43, double %48, double 5.000000e-01)
  %50 = fptosi double %49 to i64
  %51 = load i64, ptr %35, align 8, !tbaa !16
  %52 = sub nsw i64 %50, %51
  %53 = trunc i64 %52 to i32
  %54 = add i32 %53, 1
  %55 = getelementptr inbounds i8, ptr %0, i64 76
  store i32 %54, ptr %55, align 4, !tbaa !17
  %56 = sext i32 %3 to i64
  %57 = shl nsw i64 %56, 2
  %58 = tail call noalias ptr @malloc(i64 noundef %57) #7
  %59 = getelementptr inbounds i8, ptr %0, i64 32
  store ptr %58, ptr %59, align 8, !tbaa !18
  %60 = shl nsw i64 %56, 3
  %61 = tail call noalias ptr @malloc(i64 noundef %60) #7
  %62 = getelementptr inbounds i8, ptr %0, i64 40
  store ptr %61, ptr %62, align 8, !tbaa !19
  %63 = tail call noalias ptr @malloc(i64 noundef %60) #7
  %64 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %63, ptr %64, align 8, !tbaa !20
  %65 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %65, align 8, !tbaa !21
  store i32 %3, ptr %0, align 8, !tbaa !22
  %66 = getelementptr inbounds i8, ptr %0, i64 80
  store i64 %4, ptr %66, align 8, !tbaa !23
  %67 = getelementptr inbounds i8, ptr %0, i64 88
  store float 1.000000e+00, ptr %67, align 8, !tbaa !24
  %68 = icmp slt i64 %4, 26000
  br i1 %68, label %.sink.split, label %69

69:                                               ; preds = %5
  %70 = icmp ult i64 %4, 38000
  br i1 %70, label %.sink.split, label %71

71:                                               ; preds = %69
  %72 = icmp ugt i64 %4, 46000
  br i1 %72, label %.sink.split, label %73

.sink.split:                                      ; preds = %71, %69, %5
  %.sink = phi float [ 0.000000e+00, %5 ], [ 0x3FEE147AE0000000, %69 ], [ 0x3FF4666660000000, %71 ]
  store float %.sink, ptr %67, align 8, !tbaa !24
  br label %73

73:                                               ; preds = %.sink.split, %71
  %74 = sitofp i64 %4 to double
  br label %83

.preheader189:                                    ; preds = %.loopexit
  %75 = icmp slt i64 %.2173, %56
  br i1 %75, label %.lr.ph195, label %.preheader188

.lr.ph195:                                        ; preds = %.preheader189
  %76 = load ptr, ptr %59, align 8, !tbaa !18
  %scevgep = getelementptr i8, ptr %76, i64 -4
  %77 = shl i64 %.2173, 2
  %scevgep227 = getelementptr i8, ptr %scevgep, i64 %77
  %load_initial = load float, ptr %scevgep227, align 4
  %78 = sub i64 %56, %.2173
  %xtraiter = and i64 %78, 7
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph195, %.prol.preheader
  %.3174194.prol = phi i64 [ %80, %.prol.preheader ], [ %.2173, %.lr.ph195 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.prol.preheader ], [ 0, %.lr.ph195 ]
  %79 = getelementptr float, ptr %76, i64 %.3174194.prol
  store float %load_initial, ptr %79, align 4, !tbaa !25
  %80 = add nsw i64 %.3174194.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !26

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph195
  %.3174194.unr = phi i64 [ %.2173, %.lr.ph195 ], [ %80, %.prol.preheader ]
  %81 = sub i64 %.2173, %56
  %82 = icmp ugt i64 %81, -8
  br i1 %82, label %.preheader188, label %.lr.ph195.new

.lr.ph195.new:                                    ; preds = %.prol.loopexit
  %invariant.gep = getelementptr i8, ptr %76, i64 4
  %invariant.gep229 = getelementptr i8, ptr %76, i64 8
  %invariant.gep231 = getelementptr i8, ptr %76, i64 12
  %invariant.gep233 = getelementptr i8, ptr %76, i64 16
  %invariant.gep235 = getelementptr i8, ptr %76, i64 20
  %invariant.gep237 = getelementptr i8, ptr %76, i64 24
  %invariant.gep239 = getelementptr i8, ptr %76, i64 28
  br label %123

83:                                               ; preds = %73, %.loopexit
  %.0193 = phi i64 [ 0, %73 ], [ %84, %.loopexit ]
  %.0171192 = phi i64 [ 0, %73 ], [ %.2173, %.loopexit ]
  %84 = add nuw nsw i64 %.0193, 1
  %85 = uitofp nneg i64 %84 to double
  %86 = tail call double @llvm.fmuladd.f64(double %85, double 1.250000e-01, double -2.000000e+00)
  %87 = fadd double %86, 0x4017DCF680000000
  %88 = fmul double %87, 0x3FE62E42A0000000
  %89 = tail call double @exp(double noundef %88) #6
  %90 = fmul double %89, 2.000000e+00
  %91 = fmul double %90, %21
  %92 = fdiv double %91, %74
  %93 = tail call double @llvm.rint.f64(double %92)
  %94 = fptosi double %93 to i32
  %95 = sext i32 %94 to i64
  %96 = icmp slt i64 %.0171192, %95
  br i1 %96, label %97, label %.loopexit

97:                                               ; preds = %83
  %98 = getelementptr inbounds [88 x float], ptr @ATH, i64 0, i64 %.0193
  %99 = load float, ptr %98, align 4, !tbaa !25
  %100 = getelementptr inbounds [88 x float], ptr @ATH, i64 0, i64 %84
  %101 = load float, ptr %100, align 4, !tbaa !25
  %102 = fsub float %101, %99
  %103 = sub nsw i64 %95, %.0171192
  %104 = sitofp i64 %103 to float
  %105 = fdiv float %102, %104
  %invariant.smin = tail call i64 @llvm.smin.i64(i64 %95, i64 %56)
  %106 = icmp slt i64 %.0171192, %56
  br i1 %106, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %97
  %107 = load ptr, ptr %59, align 8, !tbaa !18
  br label %108

108:                                              ; preds = %.lr.ph, %108
  %.1172191 = phi i64 [ %.0171192, %.lr.ph ], [ %112, %108 ]
  %.0182190 = phi float [ %99, %.lr.ph ], [ %111, %108 ]
  %109 = fadd float %.0182190, 1.000000e+02
  %110 = getelementptr inbounds float, ptr %107, i64 %.1172191
  store float %109, ptr %110, align 4, !tbaa !25
  %111 = fadd float %105, %.0182190
  %112 = add nsw i64 %.1172191, 1
  %113 = icmp slt i64 %112, %invariant.smin
  br i1 %113, label %108, label %.loopexit, !llvm.loop !28

.loopexit:                                        ; preds = %108, %97, %83
  %.2173 = phi i64 [ %.0171192, %83 ], [ %.0171192, %97 ], [ %112, %108 ]
  %exitcond.not = icmp eq i64 %84, 87
  br i1 %exitcond.not, label %.preheader189, label %83, !llvm.loop !30

.preheader188:                                    ; preds = %.prol.loopexit, %123, %.preheader189
  %114 = icmp sgt i32 %3, 0
  br i1 %114, label %.lr.ph210, label %._crit_edge

.lr.ph210:                                        ; preds = %.preheader188
  %115 = shl nuw nsw i32 %3, 1
  %116 = zext nneg i32 %115 to i64
  %117 = sdiv i64 %4, %116
  %118 = getelementptr inbounds i8, ptr %1, i64 120
  %119 = getelementptr inbounds i8, ptr %1, i64 112
  %120 = getelementptr inbounds i8, ptr %1, i64 124
  %121 = getelementptr inbounds i8, ptr %1, i64 116
  %122 = add nuw nsw i64 %56, 1
  br label %126

123:                                              ; preds = %123, %.lr.ph195.new
  %.3174194 = phi i64 [ %.3174194.unr, %.lr.ph195.new ], [ %125, %123 ]
  %124 = getelementptr float, ptr %76, i64 %.3174194
  store float %load_initial, ptr %124, align 4, !tbaa !25
  %gep = getelementptr float, ptr %invariant.gep, i64 %.3174194
  store float %load_initial, ptr %gep, align 4, !tbaa !25
  %gep230 = getelementptr float, ptr %invariant.gep229, i64 %.3174194
  store float %load_initial, ptr %gep230, align 4, !tbaa !25
  %gep232 = getelementptr float, ptr %invariant.gep231, i64 %.3174194
  store float %load_initial, ptr %gep232, align 4, !tbaa !25
  %gep234 = getelementptr float, ptr %invariant.gep233, i64 %.3174194
  store float %load_initial, ptr %gep234, align 4, !tbaa !25
  %gep236 = getelementptr float, ptr %invariant.gep235, i64 %.3174194
  store float %load_initial, ptr %gep236, align 4, !tbaa !25
  %gep238 = getelementptr float, ptr %invariant.gep237, i64 %.3174194
  store float %load_initial, ptr %gep238, align 4, !tbaa !25
  %gep240 = getelementptr float, ptr %invariant.gep239, i64 %.3174194
  store float %load_initial, ptr %gep240, align 4, !tbaa !25
  %125 = add nsw i64 %.3174194, 8
  %exitcond220.not.7 = icmp eq i64 %125, %56
  br i1 %exitcond220.not.7, label %.preheader188, label %123, !llvm.loop !31

.preheader187:                                    ; preds = %.critedge2
  br i1 %114, label %.lr.ph212, label %._crit_edge

126:                                              ; preds = %.lr.ph210, %.critedge2
  %.1209 = phi i64 [ 0, %.lr.ph210 ], [ %202, %.critedge2 ]
  %.0178208 = phi i64 [ -99, %.lr.ph210 ], [ %.1179.lcssa, %.critedge2 ]
  %.0180207 = phi i64 [ 1, %.lr.ph210 ], [ %.1181.lcssa, %.critedge2 ]
  %127 = mul nsw i64 %117, %.1209
  %128 = sitofp i64 %127 to float
  %129 = fmul float %128, 0x3F483F91E0000000
  %130 = fpext float %129 to double
  %131 = tail call double @atan(double noundef %130) #6
  %132 = mul nsw i64 %127, %127
  %133 = uitofp nneg i64 %132 to float
  %134 = fmul float %133, 0x3E53DD3DC0000000
  %135 = fpext float %134 to double
  %136 = tail call double @atan(double noundef %135) #6
  %137 = fmul double %136, 0x4001EB8520000000
  %138 = tail call double @llvm.fmuladd.f64(double %131, double 0x402A333340000000, double %137)
  %139 = fmul float %128, 0x3F1A36E2E0000000
  %140 = fpext float %139 to double
  %141 = fadd double %138, %140
  %142 = fptrunc double %141 to float
  %143 = load i32, ptr %118, align 8, !tbaa !32
  %144 = sext i32 %143 to i64
  %145 = add nsw i64 %.0178208, %144
  %146 = icmp slt i64 %145, %.1209
  br i1 %146, label %.lr.ph197, label %.critedge

.lr.ph197:                                        ; preds = %126, %166
  %.1179196 = phi i64 [ %167, %166 ], [ %.0178208, %126 ]
  %147 = mul nsw i64 %.1179196, %117
  %148 = sitofp i64 %147 to float
  %149 = fmul float %148, 0x3F483F91E0000000
  %150 = fpext float %149 to double
  %151 = tail call double @atan(double noundef %150) #6
  %152 = mul nsw i64 %147, %147
  %153 = uitofp nneg i64 %152 to float
  %154 = fmul float %153, 0x3E53DD3DC0000000
  %155 = fpext float %154 to double
  %156 = tail call double @atan(double noundef %155) #6
  %157 = fmul double %156, 0x4001EB8520000000
  %158 = tail call double @llvm.fmuladd.f64(double %151, double 0x402A333340000000, double %157)
  %159 = fmul float %148, 0x3F1A36E2E0000000
  %160 = fpext float %159 to double
  %161 = fadd double %158, %160
  %162 = load float, ptr %119, align 8, !tbaa !35
  %163 = fsub float %142, %162
  %164 = fpext float %163 to double
  %165 = fcmp olt double %161, %164
  br i1 %165, label %166, label %.critedge

166:                                              ; preds = %.lr.ph197
  %167 = add nsw i64 %.1179196, 1
  %168 = load i32, ptr %118, align 8, !tbaa !32
  %169 = sext i32 %168 to i64
  %170 = add nsw i64 %167, %169
  %171 = icmp slt i64 %170, %.1209
  br i1 %171, label %.lr.ph197, label %.critedge, !llvm.loop !36

.critedge:                                        ; preds = %.lr.ph197, %166, %126
  %.1179.lcssa = phi i64 [ %.0178208, %126 ], [ %167, %166 ], [ %.1179196, %.lr.ph197 ]
  %.not201 = icmp sgt i64 %.0180207, %56
  br i1 %.not201, label %.critedge2, label %.lr.ph203

.lr.ph203:                                        ; preds = %.critedge, %.critedge4
  %.1181202 = phi i64 [ %196, %.critedge4 ], [ %.0180207, %.critedge ]
  %172 = load i32, ptr %120, align 4, !tbaa !37
  %173 = sext i32 %172 to i64
  %174 = add nsw i64 %.1209, %173
  %175 = icmp slt i64 %.1181202, %174
  br i1 %175, label %.critedge4, label %176

176:                                              ; preds = %.lr.ph203
  %177 = mul nsw i64 %.1181202, %117
  %178 = sitofp i64 %177 to float
  %179 = fmul float %178, 0x3F483F91E0000000
  %180 = fpext float %179 to double
  %181 = tail call double @atan(double noundef %180) #6
  %182 = mul nsw i64 %177, %177
  %183 = uitofp nneg i64 %182 to float
  %184 = fmul float %183, 0x3E53DD3DC0000000
  %185 = fpext float %184 to double
  %186 = tail call double @atan(double noundef %185) #6
  %187 = fmul double %186, 0x4001EB8520000000
  %188 = tail call double @llvm.fmuladd.f64(double %181, double 0x402A333340000000, double %187)
  %189 = fmul float %178, 0x3F1A36E2E0000000
  %190 = fpext float %189 to double
  %191 = fadd double %188, %190
  %192 = load float, ptr %121, align 4, !tbaa !38
  %193 = fadd float %192, %142
  %194 = fpext float %193 to double
  %195 = fcmp olt double %191, %194
  br i1 %195, label %.critedge4, label %.critedge2

.critedge4:                                       ; preds = %.lr.ph203, %176
  %196 = add i64 %.1181202, 1
  %exitcond221.not = icmp eq i64 %.1181202, %56
  br i1 %exitcond221.not, label %.critedge2, label %.lr.ph203, !llvm.loop !39

.critedge2:                                       ; preds = %176, %.critedge4, %.critedge
  %.1181.lcssa = phi i64 [ %.0180207, %.critedge ], [ %122, %.critedge4 ], [ %.1181202, %176 ]
  %197 = shl i64 %.1179.lcssa, 16
  %198 = add i64 %197, -65537
  %199 = add i64 %198, %.1181.lcssa
  %200 = load ptr, ptr %64, align 8, !tbaa !20
  %201 = getelementptr inbounds i64, ptr %200, i64 %.1209
  store i64 %199, ptr %201, align 8, !tbaa !40
  %202 = add nuw nsw i64 %.1209, 1
  %exitcond222.not = icmp eq i64 %202, %56
  br i1 %exitcond222.not, label %.preheader187, label %126, !llvm.loop !41

.lr.ph212:                                        ; preds = %.preheader187, %.lr.ph212
  %.2211 = phi i64 [ %220, %.lr.ph212 ], [ 0, %.preheader187 ]
  %203 = uitofp nneg i64 %.2211 to float
  %204 = fadd float %203, 2.500000e-01
  %205 = fpext float %204 to double
  %206 = fmul double %205, 5.000000e-01
  %207 = fmul double %206, %74
  %208 = fdiv double %207, %21
  %209 = tail call double @log(double noundef %208) #6
  %210 = tail call double @llvm.fmuladd.f64(double %209, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %211 = load i64, ptr %16, align 8, !tbaa !15
  %212 = trunc i64 %211 to i32
  %213 = add i32 %212, 1
  %214 = shl nuw i32 1, %213
  %215 = sitofp i32 %214 to double
  %216 = tail call double @llvm.fmuladd.f64(double %210, double %215, double 5.000000e-01)
  %217 = fptosi double %216 to i64
  %218 = load ptr, ptr %62, align 8, !tbaa !19
  %219 = getelementptr inbounds i64, ptr %218, i64 %.2211
  store i64 %217, ptr %219, align 8, !tbaa !40
  %220 = add nuw nsw i64 %.2211, 1
  %exitcond223.not = icmp eq i64 %220, %56
  br i1 %exitcond223.not, label %._crit_edge, label %.lr.ph212, !llvm.loop !42

._crit_edge:                                      ; preds = %.lr.ph212, %.preheader188, %.preheader187
  %221 = getelementptr inbounds i8, ptr %1, i64 36
  %222 = fmul double %74, 5.000000e-01
  %223 = fdiv double %222, %21
  %224 = fptrunc double %223 to float
  %225 = getelementptr inbounds i8, ptr %1, i64 24
  %226 = load float, ptr %225, align 8, !tbaa !43
  %227 = getelementptr inbounds i8, ptr %1, i64 28
  %228 = load float, ptr %227, align 4, !tbaa !44
  %229 = tail call ptr @setup_tone_curves(ptr noundef nonnull %221, float noundef %224, i32 noundef %3, float noundef %226, float noundef %228)
  %230 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %229, ptr %230, align 8, !tbaa !45
  %231 = tail call noalias dereferenceable_or_null(24) ptr @malloc(i64 noundef 24) #7
  %232 = getelementptr inbounds i8, ptr %0, i64 24
  store ptr %231, ptr %232, align 8, !tbaa !46
  %233 = tail call noalias ptr @malloc(i64 noundef %57) #7
  store ptr %233, ptr %231, align 8, !tbaa !47
  %234 = tail call noalias ptr @malloc(i64 noundef %57) #7
  %235 = getelementptr inbounds i8, ptr %231, i64 8
  store ptr %234, ptr %235, align 8, !tbaa !47
  %236 = tail call noalias ptr @malloc(i64 noundef %57) #7
  %237 = getelementptr inbounds i8, ptr %231, i64 16
  store ptr %236, ptr %237, align 8, !tbaa !47
  br i1 %114, label %.lr.ph216, label %._crit_edge217

.lr.ph216:                                        ; preds = %._crit_edge
  %238 = fmul double %21, 2.000000e+00
  br label %239

239:                                              ; preds = %.lr.ph216, %239
  %.4215 = phi i64 [ 0, %.lr.ph216 ], [ %295, %239 ]
  %240 = uitofp nneg i64 %.4215 to double
  %241 = fadd double %240, 5.000000e-01
  %242 = fmul double %241, %74
  %243 = fdiv double %242, %238
  %244 = tail call double @log(double noundef %243) #6
  %245 = tail call double @llvm.fmuladd.f64(double %244, double 0x3FF7154760000000, double 0xC017DCF680000000)
  %246 = fmul double %245, 2.000000e+00
  %247 = fptrunc double %246 to float
  %248 = fcmp olt float %247, 0.000000e+00
  %.0176 = select i1 %248, float 0.000000e+00, float %247
  %.inv = fcmp oge float %.0176, 1.600000e+01
  %.1177 = select i1 %.inv, float 1.600000e+01, float %.0176
  %249 = fptosi float %.1177 to i32
  %250 = sitofp i32 %249 to float
  %251 = fsub float %.1177, %250
  %252 = load ptr, ptr %65, align 8, !tbaa !21
  %253 = getelementptr inbounds i8, ptr %252, i64 132
  %254 = sext i32 %249 to i64
  %255 = fpext float %251 to double
  %256 = fsub double 1.000000e+00, %255
  %257 = add nsw i32 %249, 1
  %258 = sext i32 %257 to i64
  %259 = load ptr, ptr %232, align 8, !tbaa !46
  %260 = getelementptr inbounds [3 x [17 x float]], ptr %253, i64 0, i64 0, i64 %254
  %261 = load float, ptr %260, align 4, !tbaa !25
  %262 = fpext float %261 to double
  %263 = getelementptr inbounds [3 x [17 x float]], ptr %253, i64 0, i64 0, i64 %258
  %264 = load float, ptr %263, align 4, !tbaa !25
  %265 = fmul float %251, %264
  %266 = fpext float %265 to double
  %267 = tail call double @llvm.fmuladd.f64(double %262, double %256, double %266)
  %268 = fptrunc double %267 to float
  %269 = load ptr, ptr %259, align 8, !tbaa !47
  %270 = getelementptr inbounds float, ptr %269, i64 %.4215
  store float %268, ptr %270, align 4, !tbaa !25
  %271 = getelementptr inbounds [3 x [17 x float]], ptr %253, i64 0, i64 1, i64 %254
  %272 = load float, ptr %271, align 4, !tbaa !25
  %273 = fpext float %272 to double
  %274 = getelementptr inbounds [3 x [17 x float]], ptr %253, i64 0, i64 1, i64 %258
  %275 = load float, ptr %274, align 4, !tbaa !25
  %276 = fmul float %251, %275
  %277 = fpext float %276 to double
  %278 = tail call double @llvm.fmuladd.f64(double %273, double %256, double %277)
  %279 = fptrunc double %278 to float
  %280 = getelementptr inbounds i8, ptr %259, i64 8
  %281 = load ptr, ptr %280, align 8, !tbaa !47
  %282 = getelementptr inbounds float, ptr %281, i64 %.4215
  store float %279, ptr %282, align 4, !tbaa !25
  %283 = getelementptr inbounds [3 x [17 x float]], ptr %253, i64 0, i64 2, i64 %254
  %284 = load float, ptr %283, align 4, !tbaa !25
  %285 = fpext float %284 to double
  %286 = getelementptr inbounds [3 x [17 x float]], ptr %253, i64 0, i64 2, i64 %258
  %287 = load float, ptr %286, align 4, !tbaa !25
  %288 = fmul float %251, %287
  %289 = fpext float %288 to double
  %290 = tail call double @llvm.fmuladd.f64(double %285, double %256, double %289)
  %291 = fptrunc double %290 to float
  %292 = getelementptr inbounds i8, ptr %259, i64 16
  %293 = load ptr, ptr %292, align 8, !tbaa !47
  %294 = getelementptr inbounds float, ptr %293, i64 %.4215
  store float %291, ptr %294, align 4, !tbaa !25
  %295 = add nuw nsw i64 %.4215, 1
  %exitcond226.not = icmp eq i64 %295, %56
  br i1 %exitcond226.not, label %._crit_edge217, label %239, !llvm.loop !48

._crit_edge217:                                   ; preds = %239, %._crit_edge
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @atan(double noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden ptr @setup_tone_curves(ptr noundef, float noundef, i32 noundef, float noundef, float noundef) local_unnamed_addr #4

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

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(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 #2 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"", !7, i64 0, !8, i64 4, !8, i64 32, !10, i64 60, !10, i64 64, !10, i64 68, !8, i64 72, !8, i64 132, !8, i64 252, !8, i64 312, !8, i64 372}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!12, !7, i64 72}
!12 = !{!"", !7, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !14, i64 56, !14, i64 64, !7, i64 72, !7, i64 76, !14, i64 80, !10, i64 88}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"long", !8, i64 0}
!15 = !{!12, !14, i64 64}
!16 = !{!12, !14, i64 56}
!17 = !{!12, !7, i64 76}
!18 = !{!12, !13, i64 32}
!19 = !{!12, !13, i64 40}
!20 = !{!12, !13, i64 48}
!21 = !{!12, !13, i64 8}
!22 = !{!12, !7, i64 0}
!23 = !{!12, !14, i64 80}
!24 = !{!12, !10, i64 88}
!25 = !{!10, !10, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.unroll.disable"}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = distinct !{!31, !29}
!32 = !{!33, !7, i64 120}
!33 = !{!"vorbis_info_psy", !7, i64 0, !10, i64 4, !10, i64 8, !8, i64 12, !10, i64 24, !10, i64 28, !10, i64 32, !8, i64 36, !7, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !8, i64 132, !8, i64 336, !10, i64 496, !7, i64 500, !7, i64 504, !7, i64 508, !34, i64 512}
!34 = !{!"double", !8, i64 0}
!35 = !{!33, !10, i64 112}
!36 = distinct !{!36, !29}
!37 = !{!33, !7, i64 124}
!38 = !{!33, !10, i64 116}
!39 = distinct !{!39, !29}
!40 = !{!14, !14, i64 0}
!41 = distinct !{!41, !29}
!42 = distinct !{!42, !29}
!43 = !{!33, !10, i64 24}
!44 = !{!33, !10, i64 28}
!45 = !{!12, !13, i64 16}
!46 = !{!12, !13, i64 24}
!47 = !{!13, !13, i64 0}
!48 = distinct !{!48, !29}


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