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

; 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 %489

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 %489

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 %489

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 = %417, %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 %418

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 %415

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 %415 [
    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 = %374, %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 %415

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 %376

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 15
  %354 = load i32, ptr %353, align 4, !tbaa !40
  %355 = and i32 %354, 4
  %356 = icmp ne i32 %355, 0
  br i1 %356, label %375, label %357

357:                                              ; preds = %351
  %358 = load ptr, ptr %6, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %358, i32 0, i32 20
  %360 = load i32, ptr %359, align 8, !tbaa !23
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %361, i32 0, i32 19
  %363 = load i32, ptr %362, align 4, !tbaa !24
  %364 = icmp ne i32 %360, %363
  br i1 %364, label %365, label %375

365:                                              ; preds = %357
  %366 = load ptr, ptr %6, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %366, i32 0, i32 10
  %368 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %367, i32 0, i32 2
  %369 = load i32, ptr %368, align 8, !tbaa !41
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %370, i32 0, i32 2
  %372 = load i32, ptr %371, align 4, !tbaa !38
  %373 = icmp ne i32 %369, %372
  br i1 %373, label %374, label %375

374:                                              ; preds = %365
  br label %298

375:                                              ; preds = %365, %357, %351
  br label %406

376:                                              ; preds = %301
  %377 = load ptr, ptr %6, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %377, i32 0, i32 21
  %379 = load i32, ptr %378, align 4, !tbaa !39
  %380 = icmp ne i32 %379, 0
  br i1 %380, label %381, label %405

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

393:                                              ; preds = %381
  %394 = load ptr, ptr %6, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %394, i32 0, i32 21
  %396 = load i32, ptr %395, align 4, !tbaa !39
  br label %399

397:                                              ; preds = %381
  %398 = load i32, ptr %17, align 4, !tbaa !22
  br label %399

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

405:                                              ; preds = %399, %376
  br label %406

406:                                              ; preds = %405, %375
  %407 = load ptr, ptr %8, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %407, i32 0, i32 0
  %409 = load i32, ptr %408, align 4, !tbaa !32
  %410 = sext i32 %409 to i64
  %411 = load ptr, ptr %6, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %411, i32 0, i32 4
  %413 = load i64, ptr %412, align 8, !tbaa !33
  %414 = add i64 %413, %410
  store i64 %414, ptr %412, align 8, !tbaa !33
  store i32 0, ptr %14, align 4
  br label %415

415:                                              ; preds = %406, %298, %274, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  %416 = load i32, ptr %14, align 4
  switch i32 %416, label %488 [
    i32 0, label %417
  ]

417:                                              ; preds = %415
  br label %71, !llvm.loop !42

418:                                              ; preds = %71
  %419 = load ptr, ptr %6, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %419, i32 0, i32 19
  %421 = load i32, ptr %420, align 4, !tbaa !24
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %422, i32 0, i32 20
  %424 = load i32, ptr %423, align 8, !tbaa !23
  %425 = sub nsw i32 %421, %424
  %426 = sext i32 %425 to i64
  %427 = load i64, ptr %9, align 8, !tbaa !9
  %428 = icmp ugt i64 %426, %427
  br i1 %428, label %429, label %431

429:                                              ; preds = %418
  %430 = load i64, ptr %9, align 8, !tbaa !9
  br label %440

431:                                              ; preds = %418
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %432, i32 0, i32 19
  %434 = load i32, ptr %433, align 4, !tbaa !24
  %435 = load ptr, ptr %6, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %435, i32 0, i32 20
  %437 = load i32, ptr %436, align 8, !tbaa !23
  %438 = sub nsw i32 %434, %437
  %439 = sext i32 %438 to i64
  br label %440

440:                                              ; preds = %431, %429
  %441 = phi i64 [ %430, %429 ], [ %439, %431 ]
  store i64 %441, ptr %18, align 8, !tbaa !9
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %442, i32 0, i32 6
  %444 = load i64, ptr %443, align 8, !tbaa !18
  %445 = icmp ne i64 %444, 0
  br i1 %445, label %446, label %465

446:                                              ; preds = %440
  %447 = load ptr, ptr %6, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %447, i32 0, i32 7
  %449 = load i64, ptr %448, align 8, !tbaa !19
  %450 = load i64, ptr %18, align 8, !tbaa !9
  %451 = add i64 %449, %450
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %452, i32 0, i32 6
  %454 = load i64, ptr %453, align 8, !tbaa !18
  %455 = icmp uge i64 %451, %454
  br i1 %455, label %456, label %464

456:                                              ; preds = %446
  %457 = load ptr, ptr %6, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %457, i32 0, i32 6
  %459 = load i64, ptr %458, align 8, !tbaa !18
  %460 = load ptr, ptr %6, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %460, i32 0, i32 7
  %462 = load i64, ptr %461, align 8, !tbaa !19
  %463 = sub i64 %459, %462
  store i64 %463, ptr %18, align 8, !tbaa !9
  br label %464

464:                                              ; preds = %456, %446
  br label %465

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

488:                                              ; preds = %465, %415
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  br label %489

489:                                              ; preds = %488, %53, %47, %33
  %490 = load i64, ptr %5, align 8
  ret i64 %490
}

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 11420}
!41 = !{!12, !14, i64 6776}
!42 = distinct !{!42, !43}
!43 = !{!"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
  %.not159 = icmp ult i64 %17, %14
  br i1 %.not159, 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
  %.not160 = icmp eq i32 %20, 0
  br i1 %.not160, 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
  %.not161 = icmp eq i64 %23, 0
  br i1 %.not161, 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 11420
  %48 = getelementptr inbounds i8, ptr %0, i64 6776
  br label %49

49:                                               ; preds = %.lr.ph, %.critedge
  %.0130191 = phi i32 [ 0, %.lr.ph ], [ %.3133, %.critedge ]
  %50 = load ptr, ptr %34, align 8, !tbaa !23
  %.not164 = icmp eq ptr %50, null
  br i1 %.not164, label %93, label %51

51:                                               ; preds = %49
  %.not166 = icmp eq i32 %.0130191, 0
  %.pre196 = load i64, ptr %35, align 8, !tbaa !24
  br i1 %.not166, label %52, label %80

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

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

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

76:                                               ; preds = %75, %56
  %.0138 = phi i64 [ 0, %75 ], [ %70, %56 ]
  %.not167 = icmp eq i64 %.0138, %73
  %77 = add i64 %.0138, %72
  store i64 %77, ptr %35, align 8, !tbaa !24
  br i1 %.not167, label %80, label %78

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

80:                                               ; preds = %76, %78, %52, %51
  %81 = phi i64 [ %.pre196, %51 ], [ %.pre196, %52 ], [ %.pre, %78 ], [ %77, %76 ]
  %.2132 = phi i32 [ 1, %51 ], [ 0, %52 ], [ 1, %78 ], [ 0, %76 ]
  %82 = load i64, ptr %36, align 8, !tbaa !25
  %.not169 = icmp eq i64 %81, %82
  br i1 %.not169, label %.critedge.thread, label %83

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

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

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

102:                                              ; preds = %95, %83
  %103 = phi i32 [ %88, %83 ], [ %101, %95 ]
  %.0135 = phi ptr [ %86, %83 ], [ %97, %95 ]
  %.3133 = phi i32 [ %.2132, %83 ], [ %.0130191, %95 ]
  store i32 0, ptr %29, align 8, !tbaa !21
  %104 = load i32, ptr %41, align 4, !tbaa !32
  %105 = load i32, ptr %42, align 4, !tbaa !33
  %.not170 = icmp eq i32 %104, %105
  br i1 %.not170, label %106, label %109

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

109:                                              ; preds = %122, %102, %106
  store i32 -5, ptr %19, align 4, !tbaa !5
  br label %.critedge.thread

110:                                              ; preds = %106
  %.not172 = icmp eq i32 %103, 0
  br i1 %.not172, label %124, label %111

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

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

117:                                              ; preds = %115, %111
  %118 = phi i32 [ %., %115 ], [ 0, %111 ]
  %119 = load i32, ptr %47, align 4, !tbaa !38
  %120 = and i32 %119, 4
  %.not175 = icmp eq i32 %120, 0
  br i1 %.not175, label %121, label %.critedge

121:                                              ; preds = %117
  %.not176 = icmp eq i32 %118, %113
  br i1 %.not176, label %.critedge, label %122

122:                                              ; preds = %121
  %123 = load i32, ptr %48, align 8, !tbaa !39
  %.not177 = icmp eq i32 %123, %112
  br i1 %.not177, label %.critedge, label %109

124:                                              ; preds = %110
  %125 = load i32, ptr %46, align 4, !tbaa !37
  %.not173 = icmp eq i32 %125, 0
  br i1 %.not173, label %.critedge, label %126

126:                                              ; preds = %124
  %127 = tail call i32 @hdr_frame_samples(ptr noundef %.0135)
  %128 = load i32, ptr %45, align 4, !tbaa !36
  %129 = mul i32 %128, %127
  %130 = load i32, ptr %46, align 4, !tbaa !37
  %.178 = tail call i32 @llvm.smin.i32(i32 %129, i32 %130)
  %131 = sub nsw i32 %130, %.178
  store i32 %131, ptr %46, align 4, !tbaa !37
  %.pre197 = load i32, ptr %29, align 8, !tbaa !21
  %.pre198 = load i32, ptr %30, align 4, !tbaa !22
  br label %.critedge

.critedge:                                        ; preds = %122, %121, %117, %126, %124
  %132 = phi i32 [ %113, %122 ], [ %113, %121 ], [ %113, %117 ], [ %.pre198, %126 ], [ 0, %124 ]
  %133 = phi i32 [ %118, %122 ], [ %113, %121 ], [ %118, %117 ], [ %.pre197, %126 ], [ 0, %124 ]
  %134 = load i32, ptr %2, align 4, !tbaa !30
  %135 = sext i32 %134 to i64
  %136 = load i64, ptr %40, align 8, !tbaa !31
  %137 = add i64 %136, %135
  store i64 %137, ptr %40, align 8, !tbaa !31
  %138 = icmp eq i32 %133, %132
  br i1 %138, label %49, label %._crit_edge.loopexit, !llvm.loop !40

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

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %27
  %139 = phi i64 [ %14, %27 ], [ %.pre199, %._crit_edge.loopexit ]
  %.lcssa185 = phi i32 [ %31, %27 ], [ %133, %._crit_edge.loopexit ]
  %.lcssa = phi i32 [ %32, %27 ], [ %132, %._crit_edge.loopexit ]
  %140 = sub nsw i32 %.lcssa, %.lcssa185
  %141 = sext i32 %140 to i64
  %.179 = tail call i64 @llvm.umin.i64(i64 %141, i64 %3)
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 6744
  %.pre200 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !17
  %142 = add i64 %.pre200, %.179
  %143 = sub i64 %139, %.pre200
  %144 = freeze i64 %142
  %145 = add i64 %139, -1
  %.not203 = icmp ult i64 %145, %144
  %.0 = select i1 %.not203, i64 %143, i64 %.179
  %146 = getelementptr inbounds i8, ptr %0, i64 6744
  %147 = add i64 %.pre200, %.0
  store i64 %147, ptr %146, align 8, !tbaa !17
  %148 = getelementptr inbounds i8, ptr %0, i64 6792
  %149 = sext i32 %.lcssa185 to i64
  %150 = getelementptr inbounds i16, ptr %148, i64 %149
  store ptr %150, ptr %1, align 8, !tbaa !18
  %151 = trunc i64 %.0 to i32
  %152 = add i32 %.lcssa185, %151
  store i32 %152, ptr %29, align 8, !tbaa !21
  br label %.critedge.thread

.critedge.thread:                                 ; preds = %93, %80, %109, %._crit_edge, %18, %15, %9, %10
  %.5 = phi i64 [ 0, %10 ], [ 0, %9 ], [ 0, %15 ], [ 0, %18 ], [ %.0, %._crit_edge ], [ 0, %109 ], [ 0, %80 ], [ 0, %93 ]
  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 11420}
!39 = !{!6, !10, i64 6776}
!40 = distinct !{!40, !41}
!41 = !{!"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