; LLVM IR from AnzoDK/RPAudio :: includes/minimp3/player (decode)

; 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.mp3dec_ex_t = type { %struct.mp3dec_t, %struct.mp3dec_map_info_t, ptr, %struct.mp3dec_index_t, i64, i64, i64, i64, i64, i64, %struct.mp3dec_frame_info_t, [2304 x i16], i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.mp3dec_t = type { [2 x [288 x float]], [960 x float], i32, i32, [4 x i8], [511 x i8] }
%struct.mp3dec_map_info_t = type { ptr, i64 }
%struct.mp3dec_index_t = type { ptr, i64, i64 }
%struct.mp3dec_frame_info_t = type { i32, i32, i32, i32, i32, i32 }
%struct.mp3dec_io_t = type { ptr, ptr, ptr, ptr }

; Function Attrs: nounwind uwtable
declare dso_local i32 @mp3dec_decode_frame(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #0

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i64 @mp3dec_ex_read_frame(ptr noundef %0, ptr noundef %1, ptr noundef %2, i64 noundef %3) #0 {
  %5 = alloca i64, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i32, align 4
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  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 i64 %3, ptr %9, align 8, !tbaa !9
  %19 = load ptr, ptr %6, align 8, !tbaa !5
  %20 = icmp ne ptr %19, null
  br i1 %20, label %21, label %27

21:                                               ; preds = %4
  %22 = load ptr, ptr %7, align 8, !tbaa !5
  %23 = icmp ne ptr %22, null
  br i1 %23, label %24, label %27

24:                                               ; preds = %21
  %25 = load ptr, ptr %8, align 8, !tbaa !5
  %26 = icmp ne ptr %25, null
  br i1 %26, label %34, label %27

27:                                               ; preds = %24, %21, %4
  %28 = load ptr, ptr %6, align 8, !tbaa !5
  %29 = icmp ne ptr %28, null
  br i1 %29, label %30, label %33

30:                                               ; preds = %27
  %31 = load ptr, ptr %6, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %31, i32 0, i32 23
  store i32 -1, ptr %32, align 4, !tbaa !11
  br label %33

33:                                               ; preds = %30, %27
  store i64 0, ptr %5, align 8
  br label %483

34:                                               ; preds = %24
  %35 = load ptr, ptr %6, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %35, i32 0, i32 6
  %37 = load i64, ptr %36, align 8, !tbaa !18
  %38 = icmp ne i64 %37, 0
  br i1 %38, label %39, label %48

39:                                               ; preds = %34
  %40 = load ptr, ptr %6, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %40, i32 0, i32 7
  %42 = load i64, ptr %41, align 8, !tbaa !19
  %43 = load ptr, ptr %6, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %43, i32 0, i32 6
  %45 = load i64, ptr %44, align 8, !tbaa !18
  %46 = icmp uge i64 %42, %45
  br i1 %46, label %47, label %48

47:                                               ; preds = %39
  store i64 0, ptr %5, align 8
  br label %483

48:                                               ; preds = %39, %34
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %49, i32 0, i32 23
  %51 = load i32, ptr %50, align 4, !tbaa !11
  %52 = icmp ne i32 %51, 0
  br i1 %52, label %53, label %54

53:                                               ; preds = %48
  store i64 0, ptr %5, align 8
  br label %483

54:                                               ; preds = %48
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr null, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %56, i32 0, i32 9
  %58 = load i64, ptr %57, align 8, !tbaa !20
  %59 = icmp ne i64 %58, 0
  br i1 %59, label %60, label %64

60:                                               ; preds = %54
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %61, i32 0, i32 9
  %63 = load i64, ptr %62, align 8, !tbaa !20
  br label %69

64:                                               ; preds = %54
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %65, i32 0, i32 1
  %67 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %66, i32 0, i32 1
  %68 = load i64, ptr %67, align 8, !tbaa !21
  br label %69

69:                                               ; preds = %64, %60
  %70 = phi i64 [ %63, %60 ], [ %68, %64 ]
  store i64 %70, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  store i32 0, ptr %11, align 4, !tbaa !22
  br label %71

71:                                               ; preds = %411, %69
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %72, i32 0, i32 20
  %74 = load i32, ptr %73, align 8, !tbaa !23
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %75, i32 0, i32 19
  %77 = load i32, ptr %76, align 4, !tbaa !24
  %78 = icmp eq i32 %74, %77
  br i1 %78, label %79, label %412

79:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %80, i32 0, i32 2
  %82 = load ptr, ptr %81, align 8, !tbaa !25
  %83 = icmp ne ptr %82, null
  br i1 %83, label %84, label %238

84:                                               ; preds = %79
  %85 = load i32, ptr %11, align 4, !tbaa !22
  %86 = icmp ne i32 %85, 0
  br i1 %86, label %193, label %87

87:                                               ; preds = %84
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %88, i32 0, i32 13
  %90 = load i64, ptr %89, align 8, !tbaa !26
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %91, i32 0, i32 12
  %93 = load i64, ptr %92, align 8, !tbaa !27
  %94 = sub i64 %90, %93
  %95 = icmp ult i64 %94, 16384
  br i1 %95, label %96, label %193

96:                                               ; preds = %87
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %97, i32 0, i32 1
  %99 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %98, i32 0, i32 0
  %100 = load ptr, ptr %99, align 8, !tbaa !28
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %101, i32 0, i32 1
  %103 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %102, i32 0, i32 0
  %104 = load ptr, ptr %103, align 8, !tbaa !28
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %105, i32 0, i32 12
  %107 = load i64, ptr %106, align 8, !tbaa !27
  %108 = getelementptr inbounds i8, ptr %104, i64 %107
  %109 = load ptr, ptr %6, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %109, i32 0, i32 13
  %111 = load i64, ptr %110, align 8, !tbaa !26
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %112, i32 0, i32 12
  %114 = load i64, ptr %113, align 8, !tbaa !27
  %115 = sub i64 %111, %114
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %100, ptr align 1 %108, i64 %115, i1 false)
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %116, i32 0, i32 12
  %118 = load i64, ptr %117, align 8, !tbaa !27
  %119 = load ptr, ptr %6, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %119, i32 0, i32 13
  %121 = load i64, ptr %120, align 8, !tbaa !26
  %122 = sub i64 %121, %118
  store i64 %122, ptr %120, align 8, !tbaa !26
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %123, i32 0, i32 12
  store i64 0, ptr %124, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %125, i32 0, i32 2
  %127 = load ptr, ptr %126, align 8, !tbaa !25
  %128 = getelementptr inbounds %struct.mp3dec_io_t, ptr %127, i32 0, i32 0
  %129 = load ptr, ptr %128, align 8, !tbaa !29
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %130, i32 0, i32 1
  %132 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %131, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !28
  %134 = load ptr, ptr %6, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %134, i32 0, i32 13
  %136 = load i64, ptr %135, align 8, !tbaa !26
  %137 = getelementptr inbounds i8, ptr %133, i64 %136
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %138, i32 0, i32 1
  %140 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %139, i32 0, i32 1
  %141 = load i64, ptr %140, align 8, !tbaa !21
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %142, i32 0, i32 13
  %144 = load i64, ptr %143, align 8, !tbaa !26
  %145 = sub i64 %141, %144
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %146, i32 0, i32 2
  %148 = load ptr, ptr %147, align 8, !tbaa !25
  %149 = getelementptr inbounds %struct.mp3dec_io_t, ptr %148, i32 0, i32 1
  %150 = load ptr, ptr %149, align 8, !tbaa !31
  %151 = call i64 %129(ptr noundef %137, i64 noundef %145, ptr noundef %150)
  store i64 %151, ptr %13, align 8, !tbaa !9
  %152 = load i64, ptr %13, align 8, !tbaa !9
  %153 = load ptr, ptr %6, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %153, i32 0, i32 1
  %155 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %154, i32 0, i32 1
  %156 = load i64, ptr %155, align 8, !tbaa !21
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %157, i32 0, i32 13
  %159 = load i64, ptr %158, align 8, !tbaa !26
  %160 = sub i64 %156, %159
  %161 = icmp ugt i64 %152, %160
  br i1 %161, label %162, label %165

162:                                              ; preds = %96
  %163 = load ptr, ptr %6, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %163, i32 0, i32 23
  store i32 -3, ptr %164, align 4, !tbaa !11
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %165

165:                                              ; preds = %162, %96
  %166 = load i64, ptr %13, align 8, !tbaa !9
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %167, i32 0, i32 1
  %169 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %168, i32 0, i32 1
  %170 = load i64, ptr %169, align 8, !tbaa !21
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %171, i32 0, i32 13
  %173 = load i64, ptr %172, align 8, !tbaa !26
  %174 = sub i64 %170, %173
  %175 = icmp ne i64 %166, %174
  br i1 %175, label %176, label %177

176:                                              ; preds = %165
  store i32 1, ptr %11, align 4, !tbaa !22
  br label %177

177:                                              ; preds = %176, %165
  %178 = load i64, ptr %13, align 8, !tbaa !9
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %179, i32 0, i32 13
  %181 = load i64, ptr %180, align 8, !tbaa !26
  %182 = add i64 %181, %178
  store i64 %182, ptr %180, align 8, !tbaa !26
  %183 = load i32, ptr %11, align 4, !tbaa !22
  %184 = icmp ne i32 %183, 0
  br i1 %184, label %185, label %192

185:                                              ; preds = %177
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %186, i32 0, i32 1
  %188 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %187, i32 0, i32 0
  %189 = load ptr, ptr %188, align 8, !tbaa !28
  %190 = load ptr, ptr %6, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %190, i32 0, i32 13
  call void @mp3dec_skip_id3v1(ptr noundef %189, ptr noundef %191)
  br label %192

192:                                              ; preds = %185, %177
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  br label %193

193:                                              ; preds = %192, %87, %84
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %194, i32 0, i32 1
  %196 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %195, i32 0, i32 0
  %197 = load ptr, ptr %196, align 8, !tbaa !28
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %198, i32 0, i32 12
  %200 = load i64, ptr %199, align 8, !tbaa !27
  %201 = getelementptr inbounds i8, ptr %197, i64 %200
  store ptr %201, ptr %12, align 8, !tbaa !5
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %202, i32 0, i32 13
  %204 = load i64, ptr %203, align 8, !tbaa !26
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %205, i32 0, i32 12
  %207 = load i64, ptr %206, align 8, !tbaa !27
  %208 = sub i64 %204, %207
  %209 = icmp ne i64 %208, 0
  br i1 %209, label %211, label %210

210:                                              ; preds = %193
  store i64 0, ptr %5, align 8
  store i32 1, ptr %14, align 4
  br label %409

211:                                              ; preds = %193
  %212 = load ptr, ptr %6, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %212, i32 0, i32 0
  %214 = load ptr, ptr %12, align 8, !tbaa !5
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %215, i32 0, i32 13
  %217 = load i64, ptr %216, align 8, !tbaa !26
  %218 = load ptr, ptr %6, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %218, i32 0, i32 12
  %220 = load i64, ptr %219, align 8, !tbaa !27
  %221 = sub i64 %217, %220
  %222 = trunc i64 %221 to i32
  %223 = load ptr, ptr %6, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %223, i32 0, i32 11
  %225 = getelementptr inbounds [2304 x i16], ptr %224, i64 0, i64 0
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = call i32 @mp3dec_decode_frame(ptr noundef %213, ptr noundef %214, i32 noundef %222, ptr noundef %225, ptr noundef %226)
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %228, i32 0, i32 19
  store i32 %227, ptr %229, align 4, !tbaa !24
  %230 = load ptr, ptr %8, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %230, i32 0, i32 0
  %232 = load i32, ptr %231, align 4, !tbaa !32
  %233 = sext i32 %232 to i64
  %234 = load ptr, ptr %6, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %234, i32 0, i32 12
  %236 = load i64, ptr %235, align 8, !tbaa !27
  %237 = add i64 %236, %233
  store i64 %237, ptr %235, align 8, !tbaa !27
  br label %277

238:                                              ; preds = %79
  %239 = load ptr, ptr %6, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %239, i32 0, i32 1
  %241 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %240, i32 0, i32 0
  %242 = load ptr, ptr %241, align 8, !tbaa !28
  %243 = load ptr, ptr %6, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %243, i32 0, i32 4
  %245 = load i64, ptr %244, align 8, !tbaa !33
  %246 = getelementptr inbounds i8, ptr %242, i64 %245
  store ptr %246, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %247 = load i64, ptr %10, align 8, !tbaa !9
  %248 = load ptr, ptr %6, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %248, i32 0, i32 4
  %250 = load i64, ptr %249, align 8, !tbaa !33
  %251 = sub i64 %247, %250
  store i64 %251, ptr %15, align 8, !tbaa !9
  %252 = load i64, ptr %15, align 8, !tbaa !9
  %253 = icmp ne i64 %252, 0
  br i1 %253, label %255, label %254

254:                                              ; preds = %238
  store i64 0, ptr %5, align 8
  store i32 1, ptr %14, align 4
  br label %274

255:                                              ; preds = %238
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %256, i32 0, i32 0
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  %259 = load i64, ptr %15, align 8, !tbaa !9
  %260 = icmp ugt i64 %259, 2147483647
  br i1 %260, label %261, label %262

261:                                              ; preds = %255
  br label %264

262:                                              ; preds = %255
  %263 = load i64, ptr %15, align 8, !tbaa !9
  br label %264

264:                                              ; preds = %262, %261
  %265 = phi i64 [ 2147483647, %261 ], [ %263, %262 ]
  %266 = trunc i64 %265 to i32
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %267, i32 0, i32 11
  %269 = getelementptr inbounds [2304 x i16], ptr %268, i64 0, i64 0
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = call i32 @mp3dec_decode_frame(ptr noundef %257, ptr noundef %258, i32 noundef %266, ptr noundef %269, ptr noundef %270)
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %272, i32 0, i32 19
  store i32 %271, ptr %273, align 4, !tbaa !24
  store i32 0, ptr %14, align 4
  br label %274

274:                                              ; preds = %264, %254
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  %275 = load i32, ptr %14, align 4
  switch i32 %275, label %409 [
    i32 0, label %276
  ]

276:                                              ; preds = %274
  br label %277

277:                                              ; preds = %276, %211
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %278, i32 0, i32 20
  store i32 0, ptr %279, align 8, !tbaa !23
  %280 = load ptr, ptr %6, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %280, i32 0, i32 10
  %282 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %281, i32 0, i32 3
  %283 = load i32, ptr %282, align 4, !tbaa !34
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %284, i32 0, i32 3
  %286 = load i32, ptr %285, align 4, !tbaa !35
  %287 = icmp ne i32 %283, %286
  br i1 %287, label %297, label %288

288:                                              ; preds = %277
  %289 = load ptr, ptr %6, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %289, i32 0, i32 10
  %291 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %290, i32 0, i32 4
  %292 = load i32, ptr %291, align 8, !tbaa !36
  %293 = load ptr, ptr %8, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %293, i32 0, i32 4
  %295 = load i32, ptr %294, align 4, !tbaa !37
  %296 = icmp ne i32 %292, %295
  br i1 %296, label %297, label %301

297:                                              ; preds = %288, %277
  br label %298

298:                                              ; preds = %368, %297
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %299, i32 0, i32 23
  store i32 -5, ptr %300, align 4, !tbaa !11
  store i64 0, ptr %5, align 8
  store i32 1, ptr %14, align 4
  br label %409

301:                                              ; preds = %288
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %302, i32 0, i32 19
  %304 = load i32, ptr %303, align 4, !tbaa !24
  %305 = icmp ne i32 %304, 0
  br i1 %305, label %306, label %370

306:                                              ; preds = %301
  %307 = load ptr, ptr %8, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %307, i32 0, i32 2
  %309 = load i32, ptr %308, align 4, !tbaa !38
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %310, i32 0, i32 19
  %312 = load i32, ptr %311, align 4, !tbaa !24
  %313 = mul nsw i32 %312, %309
  store i32 %313, ptr %311, align 4, !tbaa !24
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %314, i32 0, i32 21
  %316 = load i32, ptr %315, align 4, !tbaa !39
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %318, label %351

318:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %319, i32 0, i32 19
  %321 = load i32, ptr %320, align 4, !tbaa !24
  %322 = load ptr, ptr %6, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %322, i32 0, i32 21
  %324 = load i32, ptr %323, align 4, !tbaa !39
  %325 = icmp sgt i32 %321, %324
  br i1 %325, label %326, label %330

326:                                              ; preds = %318
  %327 = load ptr, ptr %6, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %327, i32 0, i32 21
  %329 = load i32, ptr %328, align 4, !tbaa !39
  br label %334

330:                                              ; preds = %318
  %331 = load ptr, ptr %6, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %331, i32 0, i32 19
  %333 = load i32, ptr %332, align 4, !tbaa !24
  br label %334

334:                                              ; preds = %330, %326
  %335 = phi i32 [ %329, %326 ], [ %333, %330 ]
  %336 = sext i32 %335 to i64
  store i64 %336, ptr %16, align 8, !tbaa !9
  %337 = load i64, ptr %16, align 8, !tbaa !9
  %338 = load ptr, ptr %6, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %338, i32 0, i32 20
  %340 = load i32, ptr %339, align 8, !tbaa !23
  %341 = sext i32 %340 to i64
  %342 = add i64 %341, %337
  %343 = trunc i64 %342 to i32
  store i32 %343, ptr %339, align 8, !tbaa !23
  %344 = load i64, ptr %16, align 8, !tbaa !9
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %345, i32 0, i32 21
  %347 = load i32, ptr %346, align 4, !tbaa !39
  %348 = sext i32 %347 to i64
  %349 = sub i64 %348, %344
  %350 = trunc i64 %349 to i32
  store i32 %350, ptr %346, align 4, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  br label %351

351:                                              ; preds = %334, %306
  %352 = load ptr, ptr %6, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %352, i32 0, i32 20
  %354 = load i32, ptr %353, align 8, !tbaa !23
  %355 = load ptr, ptr %6, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %355, i32 0, i32 19
  %357 = load i32, ptr %356, align 4, !tbaa !24
  %358 = icmp ne i32 %354, %357
  br i1 %358, label %359, label %369

359:                                              ; preds = %351
  %360 = load ptr, ptr %6, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %360, i32 0, i32 10
  %362 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %361, i32 0, i32 2
  %363 = load i32, ptr %362, align 8, !tbaa !40
  %364 = load ptr, ptr %8, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %364, i32 0, i32 2
  %366 = load i32, ptr %365, align 4, !tbaa !38
  %367 = icmp ne i32 %363, %366
  br i1 %367, label %368, label %369

368:                                              ; preds = %359
  br label %298

369:                                              ; preds = %359, %351
  br label %400

370:                                              ; preds = %301
  %371 = load ptr, ptr %6, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %371, i32 0, i32 21
  %373 = load i32, ptr %372, align 4, !tbaa !39
  %374 = icmp ne i32 %373, 0
  br i1 %374, label %375, label %399

375:                                              ; preds = %370
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %376 = load ptr, ptr %12, align 8, !tbaa !5
  %377 = call i32 @hdr_frame_samples(ptr noundef %376)
  %378 = load ptr, ptr %8, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %378, i32 0, i32 2
  %380 = load i32, ptr %379, align 4, !tbaa !38
  %381 = mul i32 %377, %380
  store i32 %381, ptr %17, align 4, !tbaa !22
  %382 = load i32, ptr %17, align 4, !tbaa !22
  %383 = load ptr, ptr %6, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %383, i32 0, i32 21
  %385 = load i32, ptr %384, align 4, !tbaa !39
  %386 = icmp sgt i32 %382, %385
  br i1 %386, label %387, label %391

387:                                              ; preds = %375
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %388, i32 0, i32 21
  %390 = load i32, ptr %389, align 4, !tbaa !39
  br label %393

391:                                              ; preds = %375
  %392 = load i32, ptr %17, align 4, !tbaa !22
  br label %393

393:                                              ; preds = %391, %387
  %394 = phi i32 [ %390, %387 ], [ %392, %391 ]
  %395 = load ptr, ptr %6, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %395, i32 0, i32 21
  %397 = load i32, ptr %396, align 4, !tbaa !39
  %398 = sub nsw i32 %397, %394
  store i32 %398, ptr %396, align 4, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  br label %399

399:                                              ; preds = %393, %370
  br label %400

400:                                              ; preds = %399, %369
  %401 = load ptr, ptr %8, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %401, i32 0, i32 0
  %403 = load i32, ptr %402, align 4, !tbaa !32
  %404 = sext i32 %403 to i64
  %405 = load ptr, ptr %6, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %405, i32 0, i32 4
  %407 = load i64, ptr %406, align 8, !tbaa !33
  %408 = add i64 %407, %404
  store i64 %408, ptr %406, align 8, !tbaa !33
  store i32 0, ptr %14, align 4
  br label %409

409:                                              ; preds = %400, %298, %274, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  %410 = load i32, ptr %14, align 4
  switch i32 %410, label %482 [
    i32 0, label %411
  ]

411:                                              ; preds = %409
  br label %71, !llvm.loop !41

412:                                              ; preds = %71
  %413 = load ptr, ptr %6, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %413, i32 0, i32 19
  %415 = load i32, ptr %414, align 4, !tbaa !24
  %416 = load ptr, ptr %6, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %416, i32 0, i32 20
  %418 = load i32, ptr %417, align 8, !tbaa !23
  %419 = sub nsw i32 %415, %418
  %420 = sext i32 %419 to i64
  %421 = load i64, ptr %9, align 8, !tbaa !9
  %422 = icmp ugt i64 %420, %421
  br i1 %422, label %423, label %425

423:                                              ; preds = %412
  %424 = load i64, ptr %9, align 8, !tbaa !9
  br label %434

425:                                              ; preds = %412
  %426 = load ptr, ptr %6, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %426, i32 0, i32 19
  %428 = load i32, ptr %427, align 4, !tbaa !24
  %429 = load ptr, ptr %6, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %429, i32 0, i32 20
  %431 = load i32, ptr %430, align 8, !tbaa !23
  %432 = sub nsw i32 %428, %431
  %433 = sext i32 %432 to i64
  br label %434

434:                                              ; preds = %425, %423
  %435 = phi i64 [ %424, %423 ], [ %433, %425 ]
  store i64 %435, ptr %18, align 8, !tbaa !9
  %436 = load ptr, ptr %6, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %436, i32 0, i32 6
  %438 = load i64, ptr %437, align 8, !tbaa !18
  %439 = icmp ne i64 %438, 0
  br i1 %439, label %440, label %459

440:                                              ; preds = %434
  %441 = load ptr, ptr %6, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %441, i32 0, i32 7
  %443 = load i64, ptr %442, align 8, !tbaa !19
  %444 = load i64, ptr %18, align 8, !tbaa !9
  %445 = add i64 %443, %444
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %446, i32 0, i32 6
  %448 = load i64, ptr %447, align 8, !tbaa !18
  %449 = icmp uge i64 %445, %448
  br i1 %449, label %450, label %458

450:                                              ; preds = %440
  %451 = load ptr, ptr %6, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %451, i32 0, i32 6
  %453 = load i64, ptr %452, align 8, !tbaa !18
  %454 = load ptr, ptr %6, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %454, i32 0, i32 7
  %456 = load i64, ptr %455, align 8, !tbaa !19
  %457 = sub i64 %453, %456
  store i64 %457, ptr %18, align 8, !tbaa !9
  br label %458

458:                                              ; preds = %450, %440
  br label %459

459:                                              ; preds = %458, %434
  %460 = load i64, ptr %18, align 8, !tbaa !9
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %461, i32 0, i32 7
  %463 = load i64, ptr %462, align 8, !tbaa !19
  %464 = add i64 %463, %460
  store i64 %464, ptr %462, align 8, !tbaa !19
  %465 = load ptr, ptr %6, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %465, i32 0, i32 11
  %467 = getelementptr inbounds [2304 x i16], ptr %466, i64 0, i64 0
  %468 = load ptr, ptr %6, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %468, i32 0, i32 20
  %470 = load i32, ptr %469, align 8, !tbaa !23
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds i16, ptr %467, i64 %471
  %473 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %472, ptr %473, align 8, !tbaa !5
  %474 = load i64, ptr %18, align 8, !tbaa !9
  %475 = load ptr, ptr %6, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %475, i32 0, i32 20
  %477 = load i32, ptr %476, align 8, !tbaa !23
  %478 = sext i32 %477 to i64
  %479 = add i64 %478, %474
  %480 = trunc i64 %479 to i32
  store i32 %480, ptr %476, align 8, !tbaa !23
  %481 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %481, ptr %5, align 8
  store i32 1, ptr %14, align 4
  br label %482

482:                                              ; preds = %459, %409
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  br label %483

483:                                              ; preds = %482, %53, %47, %33
  %484 = load i64, ptr %5, align 8
  ret i64 %484
}

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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !14, i64 11452}
!12 = !{!"", !13, i64 0, !15, i64 6672, !6, i64 6688, !16, i64 6696, !10, i64 6720, !10, i64 6728, !10, i64 6736, !10, i64 6744, !10, i64 6752, !10, i64 6760, !17, i64 6768, !7, i64 6792, !10, i64 11400, !10, i64 11408, !14, i64 11416, !14, i64 11420, !14, i64 11424, !14, i64 11428, !14, i64 11432, !14, i64 11436, !14, i64 11440, !14, i64 11444, !14, i64 11448, !14, i64 11452}
!13 = !{!"", !7, i64 0, !7, i64 2304, !14, i64 6144, !14, i64 6148, !7, i64 6152, !7, i64 6156}
!14 = !{!"int", !7, i64 0}
!15 = !{!"", !6, i64 0, !10, i64 8}
!16 = !{!"", !6, i64 0, !10, i64 8, !10, i64 16}
!17 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20}
!18 = !{!12, !10, i64 6736}
!19 = !{!12, !10, i64 6744}
!20 = !{!12, !10, i64 6760}
!21 = !{!12, !10, i64 6680}
!22 = !{!14, !14, i64 0}
!23 = !{!12, !14, i64 11440}
!24 = !{!12, !14, i64 11436}
!25 = !{!12, !6, i64 6688}
!26 = !{!12, !10, i64 11408}
!27 = !{!12, !10, i64 11400}
!28 = !{!12, !6, i64 6672}
!29 = !{!30, !6, i64 0}
!30 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!31 = !{!30, !6, i64 8}
!32 = !{!17, !14, i64 0}
!33 = !{!12, !10, i64 6720}
!34 = !{!12, !14, i64 6780}
!35 = !{!17, !14, i64 12}
!36 = !{!12, !14, i64 6784}
!37 = !{!17, !14, i64 16}
!38 = !{!17, !14, i64 8}
!39 = !{!12, !14, i64 11444}
!40 = !{!12, !14, i64 6776}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}


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

; Function Attrs: nounwind uwtable
declare dso_local i32 @mp3dec_decode_frame(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i64 @mp3dec_ex_read_frame(ptr noundef %0, ptr noundef writeonly %1, ptr noundef %2, i64 noundef %3) local_unnamed_addr #0 {
  %5 = icmp ne ptr %0, null
  %6 = icmp ne ptr %1, null
  %7 = icmp ne ptr %2, null
  %8 = and i1 %6, %7
  %or.cond4 = and i1 %5, %8
  br i1 %or.cond4, label %12, label %9

9:                                                ; preds = %4
  br i1 %5, label %10, label %.critedge.thread

10:                                               ; preds = %9
  %11 = getelementptr inbounds i8, ptr %0, i64 11452
  store i32 -1, ptr %11, align 4, !tbaa !5
  br label %.critedge.thread

12:                                               ; preds = %4
  %13 = getelementptr inbounds i8, ptr %0, i64 6736
  %14 = load i64, ptr %13, align 8, !tbaa !16
  %.not = icmp eq i64 %14, 0
  br i1 %.not, label %18, label %15

15:                                               ; preds = %12
  %16 = getelementptr inbounds i8, ptr %0, i64 6744
  %17 = load i64, ptr %16, align 8, !tbaa !17
  %.not158 = icmp ult i64 %17, %14
  br i1 %.not158, label %18, label %.critedge.thread

18:                                               ; preds = %15, %12
  %19 = getelementptr inbounds i8, ptr %0, i64 11452
  %20 = load i32, ptr %19, align 4, !tbaa !5
  %.not159 = icmp eq i32 %20, 0
  br i1 %.not159, label %21, label %.critedge.thread

21:                                               ; preds = %18
  store ptr null, ptr %1, align 8, !tbaa !18
  %22 = getelementptr inbounds i8, ptr %0, i64 6760
  %23 = load i64, ptr %22, align 8, !tbaa !19
  %.not160 = icmp eq i64 %23, 0
  br i1 %.not160, label %24, label %27

24:                                               ; preds = %21
  %25 = getelementptr inbounds i8, ptr %0, i64 6680
  %26 = load i64, ptr %25, align 8, !tbaa !20
  br label %27

27:                                               ; preds = %21, %24
  %28 = phi i64 [ %26, %24 ], [ %23, %21 ]
  %29 = getelementptr inbounds i8, ptr %0, i64 11440
  %30 = getelementptr inbounds i8, ptr %0, i64 11436
  %31 = load i32, ptr %29, align 8, !tbaa !21
  %32 = load i32, ptr %30, align 4, !tbaa !22
  %33 = icmp eq i32 %31, %32
  br i1 %33, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %27
  %34 = getelementptr inbounds i8, ptr %0, i64 6688
  %35 = getelementptr inbounds i8, ptr %0, i64 11408
  %36 = getelementptr inbounds i8, ptr %0, i64 11400
  %37 = getelementptr inbounds i8, ptr %0, i64 6672
  %38 = getelementptr inbounds i8, ptr %0, i64 6680
  %39 = getelementptr inbounds i8, ptr %0, i64 6792
  %40 = getelementptr inbounds i8, ptr %0, i64 6720
  %41 = getelementptr inbounds i8, ptr %0, i64 6780
  %42 = getelementptr inbounds i8, ptr %2, i64 12
  %43 = getelementptr inbounds i8, ptr %0, i64 6784
  %44 = getelementptr inbounds i8, ptr %2, i64 16
  %45 = getelementptr inbounds i8, ptr %2, i64 8
  %46 = getelementptr inbounds i8, ptr %0, i64 11444
  %47 = getelementptr inbounds i8, ptr %0, i64 6776
  br label %48

48:                                               ; preds = %.lr.ph, %.critedge
  %.0129189 = phi i32 [ 0, %.lr.ph ], [ %.3132, %.critedge ]
  %49 = load ptr, ptr %34, align 8, !tbaa !23
  %.not163 = icmp eq ptr %49, null
  br i1 %.not163, label %92, label %50

50:                                               ; preds = %48
  %.not165 = icmp eq i32 %.0129189, 0
  %.pre194 = load i64, ptr %35, align 8, !tbaa !24
  br i1 %.not165, label %51, label %79

51:                                               ; preds = %50
  %52 = load i64, ptr %36, align 8, !tbaa !25
  %53 = sub i64 %.pre194, %52
  %54 = icmp ult i64 %53, 16384
  br i1 %54, label %55, label %79

55:                                               ; preds = %51
  %56 = load ptr, ptr %37, align 8, !tbaa !26
  %57 = getelementptr inbounds i8, ptr %56, i64 %52
  tail call void @llvm.memmove.p0.p0.i64(ptr align 1 %56, ptr align 1 %57, i64 %53, i1 false)
  %58 = load i64, ptr %36, align 8, !tbaa !25
  %59 = load i64, ptr %35, align 8, !tbaa !24
  %60 = sub i64 %59, %58
  store i64 %60, ptr %35, align 8, !tbaa !24
  store i64 0, ptr %36, align 8, !tbaa !25
  %61 = load ptr, ptr %34, align 8, !tbaa !23
  %62 = load ptr, ptr %61, align 8, !tbaa !27
  %63 = load ptr, ptr %37, align 8, !tbaa !26
  %64 = getelementptr inbounds i8, ptr %63, i64 %60
  %65 = load i64, ptr %38, align 8, !tbaa !20
  %66 = sub i64 %65, %60
  %67 = getelementptr inbounds i8, ptr %61, i64 8
  %68 = load ptr, ptr %67, align 8, !tbaa !29
  %69 = tail call i64 %62(ptr noundef %64, i64 noundef %66, ptr noundef %68) #3
  %70 = load i64, ptr %38, align 8, !tbaa !20
  %71 = load i64, ptr %35, align 8, !tbaa !24
  %72 = sub i64 %70, %71
  %73 = icmp ugt i64 %69, %72
  br i1 %73, label %74, label %75

74:                                               ; preds = %55
  store i32 -3, ptr %19, align 4, !tbaa !5
  br label %75

75:                                               ; preds = %74, %55
  %.0137 = phi i64 [ 0, %74 ], [ %69, %55 ]
  %.not166 = icmp eq i64 %.0137, %72
  %76 = add i64 %.0137, %71
  store i64 %76, ptr %35, align 8, !tbaa !24
  br i1 %.not166, label %79, label %77

77:                                               ; preds = %75
  %78 = load ptr, ptr %37, align 8, !tbaa !26
  tail call void @mp3dec_skip_id3v1(ptr noundef %78, ptr noundef nonnull %35)
  %.pre = load i64, ptr %35, align 8, !tbaa !24
  br label %79

79:                                               ; preds = %75, %77, %51, %50
  %80 = phi i64 [ %.pre194, %50 ], [ %.pre194, %51 ], [ %.pre, %77 ], [ %76, %75 ]
  %.2131 = phi i32 [ 1, %50 ], [ 0, %51 ], [ 1, %77 ], [ 0, %75 ]
  %81 = load i64, ptr %36, align 8, !tbaa !25
  %.not168 = icmp eq i64 %80, %81
  br i1 %.not168, label %.critedge.thread, label %82

82:                                               ; preds = %79
  %83 = sub i64 %80, %81
  %84 = load ptr, ptr %37, align 8, !tbaa !26
  %85 = getelementptr inbounds i8, ptr %84, i64 %81
  %86 = trunc i64 %83 to i32
  %87 = tail call i32 @mp3dec_decode_frame(ptr noundef nonnull %0, ptr noundef %85, i32 noundef %86, ptr noundef nonnull %39, ptr noundef nonnull %2)
  store i32 %87, ptr %30, align 4, !tbaa !22
  %88 = load i32, ptr %2, align 4, !tbaa !30
  %89 = sext i32 %88 to i64
  %90 = load i64, ptr %36, align 8, !tbaa !25
  %91 = add i64 %90, %89
  store i64 %91, ptr %36, align 8, !tbaa !25
  br label %101

92:                                               ; preds = %48
  %93 = load i64, ptr %40, align 8, !tbaa !31
  %.not164.not = icmp eq i64 %28, %93
  br i1 %.not164.not, label %.critedge.thread, label %94

94:                                               ; preds = %92
  %95 = load ptr, ptr %37, align 8, !tbaa !26
  %96 = getelementptr inbounds i8, ptr %95, i64 %93
  %97 = sub i64 %28, %93
  %98 = tail call i64 @llvm.umin.i64(i64 %97, i64 2147483647)
  %99 = trunc nuw nsw i64 %98 to i32
  %100 = tail call i32 @mp3dec_decode_frame(ptr noundef nonnull %0, ptr noundef %96, i32 noundef %99, ptr noundef nonnull %39, ptr noundef nonnull %2)
  store i32 %100, ptr %30, align 4, !tbaa !22
  br label %101

101:                                              ; preds = %94, %82
  %102 = phi i32 [ %87, %82 ], [ %100, %94 ]
  %.0134 = phi ptr [ %85, %82 ], [ %96, %94 ]
  %.3132 = phi i32 [ %.2131, %82 ], [ %.0129189, %94 ]
  store i32 0, ptr %29, align 8, !tbaa !21
  %103 = load i32, ptr %41, align 4, !tbaa !32
  %104 = load i32, ptr %42, align 4, !tbaa !33
  %.not169 = icmp eq i32 %103, %104
  br i1 %.not169, label %105, label %108

105:                                              ; preds = %101
  %106 = load i32, ptr %43, align 8, !tbaa !34
  %107 = load i32, ptr %44, align 4, !tbaa !35
  %.not170 = icmp eq i32 %106, %107
  br i1 %.not170, label %109, label %108

108:                                              ; preds = %118, %101, %105
  store i32 -5, ptr %19, align 4, !tbaa !5
  br label %.critedge.thread

109:                                              ; preds = %105
  %.not171 = icmp eq i32 %102, 0
  br i1 %.not171, label %120, label %110

110:                                              ; preds = %109
  %111 = load i32, ptr %45, align 4, !tbaa !36
  %112 = mul nsw i32 %111, %102
  store i32 %112, ptr %30, align 4, !tbaa !22
  %113 = load i32, ptr %46, align 4, !tbaa !37
  %.not173 = icmp eq i32 %113, 0
  br i1 %.not173, label %116, label %114

114:                                              ; preds = %110
  %. = tail call i32 @llvm.smin.i32(i32 %112, i32 %113)
  store i32 %., ptr %29, align 8, !tbaa !21
  %115 = sub i32 %113, %.
  store i32 %115, ptr %46, align 4, !tbaa !37
  br label %116

116:                                              ; preds = %114, %110
  %117 = phi i32 [ %., %114 ], [ 0, %110 ]
  %.not174 = icmp eq i32 %117, %112
  br i1 %.not174, label %.critedge, label %118

118:                                              ; preds = %116
  %119 = load i32, ptr %47, align 8, !tbaa !38
  %.not175 = icmp eq i32 %119, %111
  br i1 %.not175, label %.critedge, label %108

120:                                              ; preds = %109
  %121 = load i32, ptr %46, align 4, !tbaa !37
  %.not172 = icmp eq i32 %121, 0
  br i1 %.not172, label %.critedge, label %122

122:                                              ; preds = %120
  %123 = tail call i32 @hdr_frame_samples(ptr noundef %.0134)
  %124 = load i32, ptr %45, align 4, !tbaa !36
  %125 = mul i32 %124, %123
  %126 = load i32, ptr %46, align 4, !tbaa !37
  %.176 = tail call i32 @llvm.smin.i32(i32 %125, i32 %126)
  %127 = sub nsw i32 %126, %.176
  store i32 %127, ptr %46, align 4, !tbaa !37
  %.pre195 = load i32, ptr %29, align 8, !tbaa !21
  %.pre196 = load i32, ptr %30, align 4, !tbaa !22
  br label %.critedge

.critedge:                                        ; preds = %118, %116, %122, %120
  %128 = phi i32 [ %112, %118 ], [ %112, %116 ], [ %.pre196, %122 ], [ 0, %120 ]
  %129 = phi i32 [ %117, %118 ], [ %112, %116 ], [ %.pre195, %122 ], [ 0, %120 ]
  %130 = load i32, ptr %2, align 4, !tbaa !30
  %131 = sext i32 %130 to i64
  %132 = load i64, ptr %40, align 8, !tbaa !31
  %133 = add i64 %132, %131
  store i64 %133, ptr %40, align 8, !tbaa !31
  %134 = icmp eq i32 %129, %128
  br i1 %134, label %48, label %._crit_edge.loopexit, !llvm.loop !39

._crit_edge.loopexit:                             ; preds = %.critedge
  %.pre197 = load i64, ptr %13, align 8, !tbaa !16
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %27
  %135 = phi i64 [ %14, %27 ], [ %.pre197, %._crit_edge.loopexit ]
  %.lcssa183 = phi i32 [ %31, %27 ], [ %129, %._crit_edge.loopexit ]
  %.lcssa = phi i32 [ %32, %27 ], [ %128, %._crit_edge.loopexit ]
  %136 = sub nsw i32 %.lcssa, %.lcssa183
  %137 = sext i32 %136 to i64
  %.177 = tail call i64 @llvm.umin.i64(i64 %137, i64 %3)
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 6744
  %.pre198 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !17
  %138 = add i64 %.pre198, %.177
  %139 = sub i64 %135, %.pre198
  %140 = freeze i64 %138
  %141 = add i64 %135, -1
  %.not201 = icmp ult i64 %141, %140
  %.0 = select i1 %.not201, i64 %139, i64 %.177
  %142 = getelementptr inbounds i8, ptr %0, i64 6744
  %143 = add i64 %.pre198, %.0
  store i64 %143, ptr %142, align 8, !tbaa !17
  %144 = getelementptr inbounds i8, ptr %0, i64 6792
  %145 = sext i32 %.lcssa183 to i64
  %146 = getelementptr inbounds i16, ptr %144, i64 %145
  store ptr %146, ptr %1, align 8, !tbaa !18
  %147 = trunc i64 %.0 to i32
  %148 = add i32 %.lcssa183, %147
  store i32 %148, ptr %29, align 8, !tbaa !21
  br label %.critedge.thread

.critedge.thread:                                 ; preds = %92, %79, %108, %._crit_edge, %18, %15, %9, %10
  %.5 = phi i64 [ 0, %10 ], [ 0, %9 ], [ 0, %15 ], [ 0, %18 ], [ %.0, %._crit_edge ], [ 0, %108 ], [ 0, %79 ], [ 0, %92 ]
  ret i64 %.5
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 11452}
!6 = !{!"", !7, i64 0, !11, i64 6672, !12, i64 6688, !14, i64 6696, !13, i64 6720, !13, i64 6728, !13, i64 6736, !13, i64 6744, !13, i64 6752, !13, i64 6760, !15, i64 6768, !8, i64 6792, !13, i64 11400, !13, i64 11408, !10, i64 11416, !10, i64 11420, !10, i64 11424, !10, i64 11428, !10, i64 11432, !10, i64 11436, !10, i64 11440, !10, i64 11444, !10, i64 11448, !10, i64 11452}
!7 = !{!"", !8, i64 0, !8, i64 2304, !10, i64 6144, !10, i64 6148, !8, i64 6152, !8, i64 6156}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"", !12, i64 0, !13, i64 8}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"long", !8, i64 0}
!14 = !{!"", !12, i64 0, !13, i64 8, !13, i64 16}
!15 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!16 = !{!6, !13, i64 6736}
!17 = !{!6, !13, i64 6744}
!18 = !{!12, !12, i64 0}
!19 = !{!6, !13, i64 6760}
!20 = !{!6, !13, i64 6680}
!21 = !{!6, !10, i64 11440}
!22 = !{!6, !10, i64 11436}
!23 = !{!6, !12, i64 6688}
!24 = !{!6, !13, i64 11408}
!25 = !{!6, !13, i64 11400}
!26 = !{!6, !12, i64 6672}
!27 = !{!28, !12, i64 0}
!28 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!29 = !{!28, !12, i64 8}
!30 = !{!15, !10, i64 0}
!31 = !{!6, !13, i64 6720}
!32 = !{!6, !10, i64 6780}
!33 = !{!15, !10, i64 12}
!34 = !{!6, !10, i64 6784}
!35 = !{!15, !10, i64 16}
!36 = !{!15, !10, i64 8}
!37 = !{!6, !10, i64 11444}
!38 = !{!6, !10, i64 6776}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}


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