; 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.bs_t = type { ptr, i32, i32 }
%struct.L3_gr_info_t = type { ptr, i16, i16, i16, i8, i8, i8, i8, i8, [3 x i8], [3 x i8], [3 x i8], i8, i8, i8, i8 }
%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 }
%struct.mp3dec_frame_t = type { i64, i64 }

; Function Attrs: nounwind uwtable
declare dso_local void @mp3dec_init(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_bytes(ptr noundef, i32 noundef) #0

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @L3_read_side_info(ptr noundef, ptr noundef, 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 dso_local i32 @mp3dec_iterate_buf(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #0

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mp3dec_ex_seek(ptr noundef %0, i64 noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca [1 x %struct.bs_t], align 16
  %13 = alloca [4 x %struct.L3_gr_info_t], align 16
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i64 %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #2
  %20 = load ptr, ptr %4, align 8, !tbaa !5
  %21 = icmp ne ptr %20, null
  br i1 %21, label %23, label %22

22:                                               ; preds = %2
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %578

23:                                               ; preds = %2
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %24, i32 0, i32 15
  %26 = load i32, ptr %25, align 4, !tbaa !11
  %27 = and i32 %26, 1
  %28 = icmp ne i32 %27, 0
  br i1 %28, label %59, label %29

29:                                               ; preds = %23
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %30, i32 0, i32 2
  %32 = load ptr, ptr %31, align 8, !tbaa !18
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %38

34:                                               ; preds = %29
  %35 = load i64, ptr %5, align 8, !tbaa !9
  %36 = load ptr, ptr %4, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %36, i32 0, i32 4
  store i64 %35, ptr %37, align 8, !tbaa !19
  br label %56

38:                                               ; preds = %29
  %39 = load i64, ptr %5, align 8, !tbaa !9
  %40 = load ptr, ptr %4, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %40, i32 0, i32 1
  %42 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %41, i32 0, i32 1
  %43 = load i64, ptr %42, align 8, !tbaa !20
  %44 = icmp ugt i64 %39, %43
  br i1 %44, label %45, label %50

45:                                               ; preds = %38
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %46, i32 0, i32 1
  %48 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %47, i32 0, i32 1
  %49 = load i64, ptr %48, align 8, !tbaa !20
  br label %52

50:                                               ; preds = %38
  %51 = load i64, ptr %5, align 8, !tbaa !9
  br label %52

52:                                               ; preds = %50, %45
  %53 = phi i64 [ %49, %45 ], [ %51, %50 ]
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %54, i32 0, i32 4
  store i64 %53, ptr %55, align 8, !tbaa !19
  br label %56

56:                                               ; preds = %52, %34
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %57, i32 0, i32 7
  store i64 0, ptr %58, align 8, !tbaa !21
  br label %542

59:                                               ; preds = %23
  %60 = load i64, ptr %5, align 8, !tbaa !9
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %61, i32 0, i32 7
  store i64 %60, ptr %62, align 8, !tbaa !21
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %63, i32 0, i32 22
  %65 = load i32, ptr %64, align 8, !tbaa !22
  %66 = sext i32 %65 to i64
  %67 = load i64, ptr %5, align 8, !tbaa !9
  %68 = add i64 %67, %66
  store i64 %68, ptr %5, align 8, !tbaa !9
  %69 = load i64, ptr %5, align 8, !tbaa !9
  %70 = icmp eq i64 0, %69
  br i1 %70, label %71, label %80

71:                                               ; preds = %59
  br label %72

72:                                               ; preds = %204, %71
  %73 = load ptr, ptr %4, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %73, i32 0, i32 8
  %75 = load i64, ptr %74, align 8, !tbaa !23
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %76, i32 0, i32 4
  store i64 %75, ptr %77, align 8, !tbaa !19
  %78 = load ptr, ptr %4, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %78, i32 0, i32 21
  store i32 0, ptr %79, align 4, !tbaa !24
  br label %542

80:                                               ; preds = %59
  %81 = load ptr, ptr %4, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %81, i32 0, i32 17
  %83 = load i32, ptr %82, align 4, !tbaa !25
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %198, label %85

85:                                               ; preds = %80
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %86, i32 0, i32 17
  store i32 1, ptr %87, align 4, !tbaa !25
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %88, i32 0, i32 5
  store i64 0, ptr %89, align 8, !tbaa !26
  %90 = load ptr, ptr %4, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %90, i32 0, i32 19
  store i32 0, ptr %91, align 4, !tbaa !27
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %92, i32 0, i32 2
  %94 = load ptr, ptr %93, align 8, !tbaa !18
  %95 = icmp ne ptr %94, null
  br i1 %95, label %96, label %138

96:                                               ; preds = %85
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %97, i32 0, i32 2
  %99 = load ptr, ptr %98, align 8, !tbaa !18
  %100 = getelementptr inbounds %struct.mp3dec_io_t, ptr %99, i32 0, i32 2
  %101 = load ptr, ptr %100, align 8, !tbaa !28
  %102 = load ptr, ptr %4, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %102, i32 0, i32 8
  %104 = load i64, ptr %103, align 8, !tbaa !23
  %105 = load ptr, ptr %4, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %105, i32 0, i32 2
  %107 = load ptr, ptr %106, align 8, !tbaa !18
  %108 = getelementptr inbounds %struct.mp3dec_io_t, ptr %107, i32 0, i32 3
  %109 = load ptr, ptr %108, align 8, !tbaa !30
  %110 = call i32 %101(i64 noundef %104, ptr noundef %109)
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %112, label %113

112:                                              ; preds = %96
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %578

113:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #2
  %114 = load ptr, ptr %4, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %114, i32 0, i32 2
  %116 = load ptr, ptr %115, align 8, !tbaa !18
  %117 = load ptr, ptr %4, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %117, i32 0, i32 1
  %119 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %118, i32 0, i32 0
  %120 = load ptr, ptr %119, align 8, !tbaa !31
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %121, i32 0, i32 1
  %123 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %122, i32 0, i32 1
  %124 = load i64, ptr %123, align 8, !tbaa !20
  %125 = load ptr, ptr %4, align 8, !tbaa !5
  %126 = call i32 @mp3dec_iterate_cb(ptr noundef %116, ptr noundef %120, i64 noundef %124, ptr noundef @mp3dec_load_index, ptr noundef %125)
  store i32 %126, ptr %8, align 4, !tbaa !32
  %127 = load i32, ptr %8, align 4, !tbaa !32
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %129, label %134

129:                                              ; preds = %113
  %130 = load i32, ptr %8, align 4, !tbaa !32
  %131 = icmp ne i32 -4, %130
  br i1 %131, label %132, label %134

132:                                              ; preds = %129
  %133 = load i32, ptr %8, align 4, !tbaa !32
  store i32 %133, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %135

134:                                              ; preds = %129, %113
  store i32 0, ptr %7, align 4
  br label %135

135:                                              ; preds = %134, %132
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #2
  %136 = load i32, ptr %7, align 4
  switch i32 %136, label %578 [
    i32 0, label %137
  ]

137:                                              ; preds = %135
  br label %168

138:                                              ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %139, i32 0, i32 1
  %141 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %141, align 8, !tbaa !31
  %143 = load ptr, ptr %4, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %143, i32 0, i32 8
  %145 = load i64, ptr %144, align 8, !tbaa !23
  %146 = getelementptr inbounds i8, ptr %142, i64 %145
  %147 = load ptr, ptr %4, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %147, i32 0, i32 1
  %149 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %148, i32 0, i32 1
  %150 = load i64, ptr %149, align 8, !tbaa !20
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %151, i32 0, i32 8
  %153 = load i64, ptr %152, align 8, !tbaa !23
  %154 = sub i64 %150, %153
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = call i32 @mp3dec_iterate_buf(ptr noundef %146, i64 noundef %154, ptr noundef @mp3dec_load_index, ptr noundef %155)
  store i32 %156, ptr %9, align 4, !tbaa !32
  %157 = load i32, ptr %9, align 4, !tbaa !32
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %164

159:                                              ; preds = %138
  %160 = load i32, ptr %9, align 4, !tbaa !32
  %161 = icmp ne i32 -4, %160
  br i1 %161, label %162, label %164

162:                                              ; preds = %159
  %163 = load i32, ptr %9, align 4, !tbaa !32
  store i32 %163, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %165

164:                                              ; preds = %159, %138
  store i32 0, ptr %7, align 4
  br label %165

165:                                              ; preds = %164, %162
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  %166 = load i32, ptr %7, align 4
  switch i32 %166, label %578 [
    i32 0, label %167
  ]

167:                                              ; preds = %165
  br label %168

168:                                              ; preds = %167, %137
  store i64 0, ptr %6, align 8, !tbaa !9
  br label %169

169:                                              ; preds = %189, %168
  %170 = load i64, ptr %6, align 8, !tbaa !9
  %171 = load ptr, ptr %4, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %171, i32 0, i32 3
  %173 = getelementptr inbounds %struct.mp3dec_index_t, ptr %172, i32 0, i32 1
  %174 = load i64, ptr %173, align 8, !tbaa !33
  %175 = icmp ult i64 %170, %174
  br i1 %175, label %176, label %192

176:                                              ; preds = %169
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %177, i32 0, i32 8
  %179 = load i64, ptr %178, align 8, !tbaa !23
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %180, i32 0, i32 3
  %182 = getelementptr inbounds %struct.mp3dec_index_t, ptr %181, i32 0, i32 0
  %183 = load ptr, ptr %182, align 8, !tbaa !34
  %184 = load i64, ptr %6, align 8, !tbaa !9
  %185 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %183, i64 %184
  %186 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %185, i32 0, i32 1
  %187 = load i64, ptr %186, align 8, !tbaa !35
  %188 = add i64 %187, %179
  store i64 %188, ptr %186, align 8, !tbaa !35
  br label %189

189:                                              ; preds = %176
  %190 = load i64, ptr %6, align 8, !tbaa !9
  %191 = add i64 %190, 1
  store i64 %191, ptr %6, align 8, !tbaa !9
  br label %169, !llvm.loop !37

192:                                              ; preds = %169
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %193, i32 0, i32 6
  %195 = load i64, ptr %194, align 8, !tbaa !39
  %196 = load ptr, ptr %4, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %196, i32 0, i32 5
  store i64 %195, ptr %197, align 8, !tbaa !26
  br label %198

198:                                              ; preds = %192, %80
  %199 = load ptr, ptr %4, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %199, i32 0, i32 3
  %201 = getelementptr inbounds %struct.mp3dec_index_t, ptr %200, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !34
  %203 = icmp ne ptr %202, null
  br i1 %203, label %205, label %204

204:                                              ; preds = %198
  br label %72

205:                                              ; preds = %198
  %206 = load ptr, ptr %4, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %206, i32 0, i32 3
  %208 = load i64, ptr %5, align 8, !tbaa !9
  %209 = call i64 @mp3dec_idx_binary_search(ptr noundef %207, i64 noundef %208)
  store i64 %209, ptr %6, align 8, !tbaa !9
  %210 = load i64, ptr %6, align 8, !tbaa !9
  %211 = icmp ne i64 %210, 0
  br i1 %211, label %212, label %403

212:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #2
  store i32 511, ptr %10, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  store i32 2, ptr %11, align 4, !tbaa !32
  %213 = load i64, ptr %6, align 8, !tbaa !9
  %214 = load i32, ptr %11, align 4, !tbaa !32
  %215 = sext i32 %214 to i64
  %216 = icmp ugt i64 %213, %215
  br i1 %216, label %217, label %220

217:                                              ; preds = %212
  %218 = load i32, ptr %11, align 4, !tbaa !32
  %219 = sext i32 %218 to i64
  br label %222

220:                                              ; preds = %212
  %221 = load i64, ptr %6, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %220, %217
  %223 = phi i64 [ %219, %217 ], [ %221, %220 ]
  %224 = load i64, ptr %6, align 8, !tbaa !9
  %225 = sub i64 %224, %223
  store i64 %225, ptr %6, align 8, !tbaa !9
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %226, i32 0, i32 10
  %228 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %227, i32 0, i32 4
  %229 = load i32, ptr %228, align 8, !tbaa !40
  %230 = icmp eq i32 3, %229
  br i1 %230, label %231, label %399

231:                                              ; preds = %222
  br label %232

232:                                              ; preds = %397, %231
  %233 = load i64, ptr %6, align 8, !tbaa !9
  %234 = icmp ne i64 %233, 0
  br i1 %234, label %235, label %238

235:                                              ; preds = %232
  %236 = load i32, ptr %10, align 4, !tbaa !32
  %237 = icmp ne i32 %236, 0
  br label %238

238:                                              ; preds = %235, %232
  %239 = phi i1 [ false, %232 ], [ %237, %235 ]
  br i1 %239, label %240, label %398

240:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 128, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  %241 = load ptr, ptr %4, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %241, i32 0, i32 2
  %243 = load ptr, ptr %242, align 8, !tbaa !18
  %244 = icmp ne ptr %243, null
  br i1 %244, label %245, label %328

245:                                              ; preds = %240
  %246 = load ptr, ptr %4, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %246, i32 0, i32 1
  %248 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %247, i32 0, i32 0
  %249 = load ptr, ptr %248, align 8, !tbaa !31
  store ptr %249, ptr %16, align 8, !tbaa !5
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %250, i32 0, i32 2
  %252 = load ptr, ptr %251, align 8, !tbaa !18
  %253 = getelementptr inbounds %struct.mp3dec_io_t, ptr %252, i32 0, i32 2
  %254 = load ptr, ptr %253, align 8, !tbaa !28
  %255 = load ptr, ptr %4, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %255, i32 0, i32 3
  %257 = getelementptr inbounds %struct.mp3dec_index_t, ptr %256, i32 0, i32 0
  %258 = load ptr, ptr %257, align 8, !tbaa !34
  %259 = load i64, ptr %6, align 8, !tbaa !9
  %260 = sub i64 %259, 1
  %261 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %258, i64 %260
  %262 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %261, i32 0, i32 1
  %263 = load i64, ptr %262, align 8, !tbaa !35
  %264 = load ptr, ptr %4, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %264, i32 0, i32 2
  %266 = load ptr, ptr %265, align 8, !tbaa !18
  %267 = getelementptr inbounds %struct.mp3dec_io_t, ptr %266, i32 0, i32 3
  %268 = load ptr, ptr %267, align 8, !tbaa !30
  %269 = call i32 %254(i64 noundef %263, ptr noundef %268)
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %271, label %272

271:                                              ; preds = %245
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %395

272:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  %273 = load ptr, ptr %4, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %273, i32 0, i32 2
  %275 = load ptr, ptr %274, align 8, !tbaa !18
  %276 = getelementptr inbounds %struct.mp3dec_io_t, ptr %275, i32 0, i32 0
  %277 = load ptr, ptr %276, align 8, !tbaa !41
  %278 = load ptr, ptr %16, align 8, !tbaa !5
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %279, i32 0, i32 2
  %281 = load ptr, ptr %280, align 8, !tbaa !18
  %282 = getelementptr inbounds %struct.mp3dec_io_t, ptr %281, i32 0, i32 1
  %283 = load ptr, ptr %282, align 8, !tbaa !42
  %284 = call i64 %277(ptr noundef %278, i64 noundef 4, ptr noundef %283)
  store i64 %284, ptr %17, align 8, !tbaa !9
  %285 = load i64, ptr %17, align 8, !tbaa !9
  %286 = icmp ne i64 %285, 4
  br i1 %286, label %287, label %288

287:                                              ; preds = %272
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %325

288:                                              ; preds = %272
  %289 = load ptr, ptr %16, align 8, !tbaa !5
  %290 = load ptr, ptr %4, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %290, i32 0, i32 18
  %292 = load i32, ptr %291, align 8, !tbaa !43
  %293 = call i32 @hdr_frame_bytes(ptr noundef %289, i32 noundef %292)
  %294 = load ptr, ptr %16, align 8, !tbaa !5
  %295 = call i32 @hdr_padding(ptr noundef %294)
  %296 = add nsw i32 %293, %295
  store i32 %296, ptr %15, align 4, !tbaa !32
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %297, i32 0, i32 2
  %299 = load ptr, ptr %298, align 8, !tbaa !18
  %300 = getelementptr inbounds %struct.mp3dec_io_t, ptr %299, i32 0, i32 0
  %301 = load ptr, ptr %300, align 8, !tbaa !41
  %302 = load ptr, ptr %16, align 8, !tbaa !5
  %303 = getelementptr inbounds i8, ptr %302, i64 4
  %304 = load i32, ptr %15, align 4, !tbaa !32
  %305 = sub nsw i32 %304, 4
  %306 = sext i32 %305 to i64
  %307 = load ptr, ptr %4, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %307, i32 0, i32 2
  %309 = load ptr, ptr %308, align 8, !tbaa !18
  %310 = getelementptr inbounds %struct.mp3dec_io_t, ptr %309, i32 0, i32 1
  %311 = load ptr, ptr %310, align 8, !tbaa !42
  %312 = call i64 %301(ptr noundef %303, i64 noundef %306, ptr noundef %311)
  store i64 %312, ptr %17, align 8, !tbaa !9
  %313 = load i64, ptr %17, align 8, !tbaa !9
  %314 = load i32, ptr %15, align 4, !tbaa !32
  %315 = sub nsw i32 %314, 4
  %316 = sext i32 %315 to i64
  %317 = icmp ne i64 %313, %316
  br i1 %317, label %318, label %319

318:                                              ; preds = %288
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %325

319:                                              ; preds = %288
  %320 = getelementptr inbounds [1 x %struct.bs_t], ptr %12, i64 0, i64 0
  %321 = load ptr, ptr %16, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i64 4
  %323 = load i32, ptr %15, align 4, !tbaa !32
  %324 = sub nsw i32 %323, 4
  call void @bs_init(ptr noundef %320, ptr noundef %322, i32 noundef %324)
  store i32 0, ptr %7, align 4
  br label %325

325:                                              ; preds = %319, %318, %287
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  %326 = load i32, ptr %7, align 4
  switch i32 %326, label %395 [
    i32 0, label %327
  ]

327:                                              ; preds = %325
  br label %356

328:                                              ; preds = %240
  %329 = load ptr, ptr %4, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %329, i32 0, i32 1
  %331 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %330, i32 0, i32 0
  %332 = load ptr, ptr %331, align 8, !tbaa !31
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %333, i32 0, i32 3
  %335 = getelementptr inbounds %struct.mp3dec_index_t, ptr %334, i32 0, i32 0
  %336 = load ptr, ptr %335, align 8, !tbaa !34
  %337 = load i64, ptr %6, align 8, !tbaa !9
  %338 = sub i64 %337, 1
  %339 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %336, i64 %338
  %340 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %339, i32 0, i32 1
  %341 = load i64, ptr %340, align 8, !tbaa !35
  %342 = getelementptr inbounds i8, ptr %332, i64 %341
  store ptr %342, ptr %16, align 8, !tbaa !5
  %343 = load ptr, ptr %16, align 8, !tbaa !5
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %344, i32 0, i32 18
  %346 = load i32, ptr %345, align 8, !tbaa !43
  %347 = call i32 @hdr_frame_bytes(ptr noundef %343, i32 noundef %346)
  %348 = load ptr, ptr %16, align 8, !tbaa !5
  %349 = call i32 @hdr_padding(ptr noundef %348)
  %350 = add nsw i32 %347, %349
  store i32 %350, ptr %15, align 4, !tbaa !32
  %351 = getelementptr inbounds [1 x %struct.bs_t], ptr %12, i64 0, i64 0
  %352 = load ptr, ptr %16, align 8, !tbaa !5
  %353 = getelementptr inbounds i8, ptr %352, i64 4
  %354 = load i32, ptr %15, align 4, !tbaa !32
  %355 = sub nsw i32 %354, 4
  call void @bs_init(ptr noundef %351, ptr noundef %353, i32 noundef %355)
  br label %356

356:                                              ; preds = %328, %327
  %357 = load ptr, ptr %16, align 8, !tbaa !5
  %358 = getelementptr inbounds i8, ptr %357, i64 1
  %359 = load i8, ptr %358, align 1, !tbaa !44
  %360 = zext i8 %359 to i32
  %361 = and i32 %360, 1
  %362 = icmp ne i32 %361, 0
  br i1 %362, label %366, label %363

363:                                              ; preds = %356
  %364 = getelementptr inbounds [1 x %struct.bs_t], ptr %12, i64 0, i64 0
  %365 = call i32 @get_bits(ptr noundef %364, i32 noundef 16)
  br label %366

366:                                              ; preds = %363, %356
  %367 = load i64, ptr %6, align 8, !tbaa !9
  %368 = add i64 %367, -1
  store i64 %368, ptr %6, align 8, !tbaa !9
  %369 = getelementptr inbounds [1 x %struct.bs_t], ptr %12, i64 0, i64 0
  %370 = getelementptr inbounds [4 x %struct.L3_gr_info_t], ptr %13, i64 0, i64 0
  %371 = load ptr, ptr %16, align 8, !tbaa !5
  %372 = call i32 @L3_read_side_info(ptr noundef %369, ptr noundef %370, ptr noundef %371)
  %373 = icmp slt i32 %372, 0
  br i1 %373, label %374, label %375

374:                                              ; preds = %366
  store i32 8, ptr %7, align 4
  br label %395

375:                                              ; preds = %366
  %376 = getelementptr inbounds [1 x %struct.bs_t], ptr %12, i64 0, i64 0
  %377 = getelementptr inbounds %struct.bs_t, ptr %376, i32 0, i32 2
  %378 = load i32, ptr %377, align 4, !tbaa !45
  %379 = getelementptr inbounds [1 x %struct.bs_t], ptr %12, i64 0, i64 0
  %380 = getelementptr inbounds %struct.bs_t, ptr %379, i32 0, i32 1
  %381 = load i32, ptr %380, align 8, !tbaa !47
  %382 = sub nsw i32 %378, %381
  %383 = sdiv i32 %382, 8
  store i32 %383, ptr %14, align 4, !tbaa !32
  %384 = load i32, ptr %10, align 4, !tbaa !32
  %385 = load i32, ptr %14, align 4, !tbaa !32
  %386 = icmp sgt i32 %384, %385
  br i1 %386, label %387, label %389

387:                                              ; preds = %375
  %388 = load i32, ptr %14, align 4, !tbaa !32
  br label %391

389:                                              ; preds = %375
  %390 = load i32, ptr %10, align 4, !tbaa !32
  br label %391

391:                                              ; preds = %389, %387
  %392 = phi i32 [ %388, %387 ], [ %390, %389 ]
  %393 = load i32, ptr %10, align 4, !tbaa !32
  %394 = sub nsw i32 %393, %392
  store i32 %394, ptr %10, align 4, !tbaa !32
  store i32 0, ptr %7, align 4
  br label %395

395:                                              ; preds = %391, %374, %325, %271
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 128, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #2
  %396 = load i32, ptr %7, align 4
  switch i32 %396, label %400 [
    i32 0, label %397
    i32 8, label %398
  ]

397:                                              ; preds = %395
  br label %232, !llvm.loop !48

398:                                              ; preds = %395, %238
  br label %399

399:                                              ; preds = %398, %222
  store i32 0, ptr %7, align 4
  br label %400

400:                                              ; preds = %399, %395
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #2
  %401 = load i32, ptr %7, align 4
  switch i32 %401, label %578 [
    i32 0, label %402
  ]

402:                                              ; preds = %400
  br label %403

403:                                              ; preds = %402, %205
  %404 = load ptr, ptr %4, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %404, i32 0, i32 3
  %406 = getelementptr inbounds %struct.mp3dec_index_t, ptr %405, i32 0, i32 0
  %407 = load ptr, ptr %406, align 8, !tbaa !34
  %408 = load i64, ptr %6, align 8, !tbaa !9
  %409 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %407, i64 %408
  %410 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %409, i32 0, i32 1
  %411 = load i64, ptr %410, align 8, !tbaa !35
  %412 = load ptr, ptr %4, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %412, i32 0, i32 4
  store i64 %411, ptr %413, align 8, !tbaa !19
  %414 = load i64, ptr %5, align 8, !tbaa !9
  %415 = load ptr, ptr %4, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %415, i32 0, i32 3
  %417 = getelementptr inbounds %struct.mp3dec_index_t, ptr %416, i32 0, i32 0
  %418 = load ptr, ptr %417, align 8, !tbaa !34
  %419 = load i64, ptr %6, align 8, !tbaa !9
  %420 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %418, i64 %419
  %421 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %420, i32 0, i32 0
  %422 = load i64, ptr %421, align 8, !tbaa !49
  %423 = sub i64 %414, %422
  %424 = trunc i64 %423 to i32
  %425 = load ptr, ptr %4, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %425, i32 0, i32 21
  store i32 %424, ptr %426, align 4, !tbaa !24
  br label %427

427:                                              ; preds = %540, %403
  %428 = load i64, ptr %6, align 8, !tbaa !9
  %429 = add i64 %428, 1
  %430 = load ptr, ptr %4, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %430, i32 0, i32 3
  %432 = getelementptr inbounds %struct.mp3dec_index_t, ptr %431, i32 0, i32 1
  %433 = load i64, ptr %432, align 8, !tbaa !33
  %434 = icmp ult i64 %429, %433
  br i1 %434, label %435, label %457

435:                                              ; preds = %427
  %436 = load ptr, ptr %4, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %436, i32 0, i32 3
  %438 = getelementptr inbounds %struct.mp3dec_index_t, ptr %437, i32 0, i32 0
  %439 = load ptr, ptr %438, align 8, !tbaa !34
  %440 = load i64, ptr %6, align 8, !tbaa !9
  %441 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %439, i64 %440
  %442 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %441, i32 0, i32 0
  %443 = load i64, ptr %442, align 8, !tbaa !49
  %444 = icmp ne i64 %443, 0
  br i1 %444, label %457, label %445

445:                                              ; preds = %435
  %446 = load ptr, ptr %4, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %446, i32 0, i32 3
  %448 = getelementptr inbounds %struct.mp3dec_index_t, ptr %447, i32 0, i32 0
  %449 = load ptr, ptr %448, align 8, !tbaa !34
  %450 = load i64, ptr %6, align 8, !tbaa !9
  %451 = add i64 %450, 1
  %452 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %449, i64 %451
  %453 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %452, i32 0, i32 0
  %454 = load i64, ptr %453, align 8, !tbaa !49
  %455 = icmp ne i64 %454, 0
  %456 = xor i1 %455, true
  br label %457

457:                                              ; preds = %445, %435, %427
  %458 = phi i1 [ false, %435 ], [ false, %427 ], [ %456, %445 ]
  br i1 %458, label %459, label %541

459:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  %460 = load ptr, ptr %4, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %460, i32 0, i32 2
  %462 = load ptr, ptr %461, align 8, !tbaa !18
  %463 = icmp ne ptr %462, null
  br i1 %463, label %464, label %510

464:                                              ; preds = %459
  %465 = load ptr, ptr %4, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %465, i32 0, i32 1
  %467 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %466, i32 0, i32 0
  %468 = load ptr, ptr %467, align 8, !tbaa !31
  store ptr %468, ptr %18, align 8, !tbaa !5
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %469, i32 0, i32 2
  %471 = load ptr, ptr %470, align 8, !tbaa !18
  %472 = getelementptr inbounds %struct.mp3dec_io_t, ptr %471, i32 0, i32 2
  %473 = load ptr, ptr %472, align 8, !tbaa !28
  %474 = load ptr, ptr %4, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %474, i32 0, i32 3
  %476 = getelementptr inbounds %struct.mp3dec_index_t, ptr %475, i32 0, i32 0
  %477 = load ptr, ptr %476, align 8, !tbaa !34
  %478 = load i64, ptr %6, align 8, !tbaa !9
  %479 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %477, i64 %478
  %480 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %479, i32 0, i32 1
  %481 = load i64, ptr %480, align 8, !tbaa !35
  %482 = load ptr, ptr %4, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %482, i32 0, i32 2
  %484 = load ptr, ptr %483, align 8, !tbaa !18
  %485 = getelementptr inbounds %struct.mp3dec_io_t, ptr %484, i32 0, i32 3
  %486 = load ptr, ptr %485, align 8, !tbaa !30
  %487 = call i32 %473(i64 noundef %481, ptr noundef %486)
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %489, label %490

489:                                              ; preds = %464
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %538

490:                                              ; preds = %464
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  %491 = load ptr, ptr %4, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %491, i32 0, i32 2
  %493 = load ptr, ptr %492, align 8, !tbaa !18
  %494 = getelementptr inbounds %struct.mp3dec_io_t, ptr %493, i32 0, i32 0
  %495 = load ptr, ptr %494, align 8, !tbaa !41
  %496 = load ptr, ptr %18, align 8, !tbaa !5
  %497 = load ptr, ptr %4, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %497, i32 0, i32 2
  %499 = load ptr, ptr %498, align 8, !tbaa !18
  %500 = getelementptr inbounds %struct.mp3dec_io_t, ptr %499, i32 0, i32 1
  %501 = load ptr, ptr %500, align 8, !tbaa !42
  %502 = call i64 %495(ptr noundef %496, i64 noundef 4, ptr noundef %501)
  store i64 %502, ptr %19, align 8, !tbaa !9
  %503 = load i64, ptr %19, align 8, !tbaa !9
  %504 = icmp ne i64 %503, 4
  br i1 %504, label %505, label %506

505:                                              ; preds = %490
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %507

506:                                              ; preds = %490
  store i32 0, ptr %7, align 4
  br label %507

507:                                              ; preds = %506, %505
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  %508 = load i32, ptr %7, align 4
  switch i32 %508, label %538 [
    i32 0, label %509
  ]

509:                                              ; preds = %507
  br label %524

510:                                              ; preds = %459
  %511 = load ptr, ptr %4, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %511, i32 0, i32 1
  %513 = getelementptr inbounds %struct.mp3dec_map_info_t, ptr %512, i32 0, i32 0
  %514 = load ptr, ptr %513, align 8, !tbaa !31
  %515 = load ptr, ptr %4, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %515, i32 0, i32 3
  %517 = getelementptr inbounds %struct.mp3dec_index_t, ptr %516, i32 0, i32 0
  %518 = load ptr, ptr %517, align 8, !tbaa !34
  %519 = load i64, ptr %6, align 8, !tbaa !9
  %520 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %518, i64 %519
  %521 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %520, i32 0, i32 1
  %522 = load i64, ptr %521, align 8, !tbaa !35
  %523 = getelementptr inbounds i8, ptr %514, i64 %522
  store ptr %523, ptr %18, align 8, !tbaa !5
  br label %524

524:                                              ; preds = %510, %509
  %525 = load ptr, ptr %18, align 8, !tbaa !5
  %526 = call i32 @hdr_frame_samples(ptr noundef %525)
  %527 = load ptr, ptr %4, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %527, i32 0, i32 10
  %529 = getelementptr inbounds %struct.mp3dec_frame_info_t, ptr %528, i32 0, i32 2
  %530 = load i32, ptr %529, align 8, !tbaa !50
  %531 = mul i32 %526, %530
  %532 = load ptr, ptr %4, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %532, i32 0, i32 21
  %534 = load i32, ptr %533, align 4, !tbaa !24
  %535 = add i32 %534, %531
  store i32 %535, ptr %533, align 4, !tbaa !24
  %536 = load i64, ptr %6, align 8, !tbaa !9
  %537 = add i64 %536, 1
  store i64 %537, ptr %6, align 8, !tbaa !9
  store i32 0, ptr %7, align 4
  br label %538

538:                                              ; preds = %524, %507, %489
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  %539 = load i32, ptr %7, align 4
  switch i32 %539, label %578 [
    i32 0, label %540
  ]

540:                                              ; preds = %538
  br label %427, !llvm.loop !51

541:                                              ; preds = %457
  br label %542

542:                                              ; preds = %541, %72, %56
  %543 = load ptr, ptr %4, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %543, i32 0, i32 2
  %545 = load ptr, ptr %544, align 8, !tbaa !18
  %546 = icmp ne ptr %545, null
  br i1 %546, label %547, label %565

547:                                              ; preds = %542
  %548 = load ptr, ptr %4, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %548, i32 0, i32 2
  %550 = load ptr, ptr %549, align 8, !tbaa !18
  %551 = getelementptr inbounds %struct.mp3dec_io_t, ptr %550, i32 0, i32 2
  %552 = load ptr, ptr %551, align 8, !tbaa !28
  %553 = load ptr, ptr %4, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %553, i32 0, i32 4
  %555 = load i64, ptr %554, align 8, !tbaa !19
  %556 = load ptr, ptr %4, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %556, i32 0, i32 2
  %558 = load ptr, ptr %557, align 8, !tbaa !18
  %559 = getelementptr inbounds %struct.mp3dec_io_t, ptr %558, i32 0, i32 3
  %560 = load ptr, ptr %559, align 8, !tbaa !30
  %561 = call i32 %552(i64 noundef %555, ptr noundef %560)
  %562 = icmp ne i32 %561, 0
  br i1 %562, label %563, label %564

563:                                              ; preds = %547
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %578

564:                                              ; preds = %547
  br label %565

565:                                              ; preds = %564, %542
  %566 = load ptr, ptr %4, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %566, i32 0, i32 19
  store i32 0, ptr %567, align 4, !tbaa !27
  %568 = load ptr, ptr %4, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %568, i32 0, i32 20
  store i32 0, ptr %569, align 8, !tbaa !52
  %570 = load ptr, ptr %4, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %570, i32 0, i32 12
  store i64 0, ptr %571, align 8, !tbaa !53
  %572 = load ptr, ptr %4, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %572, i32 0, i32 13
  store i64 0, ptr %573, align 8, !tbaa !54
  %574 = load ptr, ptr %4, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %574, i32 0, i32 23
  store i32 0, ptr %575, align 4, !tbaa !55
  %576 = load ptr, ptr %4, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.mp3dec_ex_t, ptr %576, i32 0, i32 0
  call void @mp3dec_init(ptr noundef %577)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %578

578:                                              ; preds = %565, %563, %538, %400, %165, %135, %112, %22
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #2
  %579 = load i32, ptr %3, align 4
  ret i32 %579
}

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind }

!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 11420}
!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, !6, i64 6688}
!19 = !{!12, !10, i64 6720}
!20 = !{!12, !10, i64 6680}
!21 = !{!12, !10, i64 6744}
!22 = !{!12, !14, i64 11448}
!23 = !{!12, !10, i64 6752}
!24 = !{!12, !14, i64 11444}
!25 = !{!12, !14, i64 11428}
!26 = !{!12, !10, i64 6728}
!27 = !{!12, !14, i64 11436}
!28 = !{!29, !6, i64 16}
!29 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!30 = !{!29, !6, i64 24}
!31 = !{!12, !6, i64 6672}
!32 = !{!14, !14, i64 0}
!33 = !{!12, !10, i64 6704}
!34 = !{!12, !6, i64 6696}
!35 = !{!36, !10, i64 8}
!36 = !{!"", !10, i64 0, !10, i64 8}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = !{!12, !10, i64 6736}
!40 = !{!12, !14, i64 6784}
!41 = !{!29, !6, i64 0}
!42 = !{!29, !6, i64 8}
!43 = !{!12, !14, i64 11432}
!44 = !{!7, !7, i64 0}
!45 = !{!46, !14, i64 12}
!46 = !{!"", !6, i64 0, !14, i64 8, !14, i64 12}
!47 = !{!46, !14, i64 8}
!48 = distinct !{!48, !38}
!49 = !{!36, !10, i64 0}
!50 = !{!12, !14, i64 6776}
!51 = distinct !{!51, !38}
!52 = !{!12, !14, i64 11440}
!53 = !{!12, !10, i64 11400}
!54 = !{!12, !10, i64 11408}
!55 = !{!12, !14, i64 11452}


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

%struct.bs_t = type { ptr, i32, i32 }
%struct.L3_gr_info_t = type { ptr, i16, i16, i16, i8, i8, i8, i8, i8, [3 x i8], [3 x i8], [3 x i8], i8, i8, i8, i8 }
%struct.mp3dec_frame_t = type { i64, i64 }

; Function Attrs: nounwind uwtable
declare dso_local void @mp3dec_init(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress 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_bytes(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i32 @hdr_padding(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 @bs_init(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @mp3dec_ex_seek(ptr noundef %0, i64 noundef %1) local_unnamed_addr #0 {
  %3 = alloca [1 x %struct.bs_t], align 16
  %4 = alloca [4 x %struct.L3_gr_info_t], align 16
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %.thread227, label %5

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 11420
  %7 = load i32, ptr %6, align 4, !tbaa !5
  %8 = and i32 %7, 1
  %.not182 = icmp eq i32 %8, 0
  br i1 %.not182, label %9, label %18

9:                                                ; preds = %5
  %10 = getelementptr inbounds i8, ptr %0, i64 6688
  %11 = load ptr, ptr %10, align 8, !tbaa !16
  %.not183 = icmp eq ptr %11, null
  br i1 %.not183, label %12, label %15

12:                                               ; preds = %9
  %13 = getelementptr inbounds i8, ptr %0, i64 6680
  %14 = load i64, ptr %13, align 8, !tbaa !17
  %. = tail call i64 @llvm.umin.i64(i64 %14, i64 %1)
  br label %15

15:                                               ; preds = %9, %12
  %.sink = phi i64 [ %., %12 ], [ %1, %9 ]
  %16 = getelementptr inbounds i8, ptr %0, i64 6720
  store i64 %.sink, ptr %16, align 8
  %17 = getelementptr inbounds i8, ptr %0, i64 6744
  store i64 0, ptr %17, align 8, !tbaa !18
  br label %.critedge

18:                                               ; preds = %5
  %19 = getelementptr inbounds i8, ptr %0, i64 6744
  store i64 %1, ptr %19, align 8, !tbaa !18
  %20 = getelementptr inbounds i8, ptr %0, i64 11448
  %21 = load i32, ptr %20, align 8, !tbaa !19
  %22 = sext i32 %21 to i64
  %23 = add i64 %22, %1
  %24 = icmp eq i64 %23, 0
  br i1 %24, label %25, label %30

25:                                               ; preds = %92, %18
  %26 = getelementptr inbounds i8, ptr %0, i64 6752
  %27 = load i64, ptr %26, align 8, !tbaa !20
  %28 = getelementptr inbounds i8, ptr %0, i64 6720
  store i64 %27, ptr %28, align 8, !tbaa !21
  %29 = getelementptr inbounds i8, ptr %0, i64 11444
  store i32 0, ptr %29, align 4, !tbaa !22
  br label %.critedge

30:                                               ; preds = %18
  %31 = getelementptr inbounds i8, ptr %0, i64 11428
  %32 = load i32, ptr %31, align 4, !tbaa !23
  %.not184 = icmp eq i32 %32, 0
  br i1 %.not184, label %33, label %92

33:                                               ; preds = %30
  store i32 1, ptr %31, align 4, !tbaa !23
  %34 = getelementptr inbounds i8, ptr %0, i64 6728
  store i64 0, ptr %34, align 8, !tbaa !24
  %35 = getelementptr inbounds i8, ptr %0, i64 11436
  store i32 0, ptr %35, align 4, !tbaa !25
  %36 = getelementptr inbounds i8, ptr %0, i64 6688
  %37 = load ptr, ptr %36, align 8, !tbaa !16
  %.not185 = icmp eq ptr %37, null
  %38 = getelementptr inbounds i8, ptr %0, i64 6752
  %39 = load i64, ptr %38, align 8, !tbaa !20
  br i1 %.not185, label %53, label %40

40:                                               ; preds = %33
  %41 = getelementptr inbounds i8, ptr %37, i64 16
  %42 = load ptr, ptr %41, align 8, !tbaa !26
  %43 = getelementptr inbounds i8, ptr %37, i64 24
  %44 = load ptr, ptr %43, align 8, !tbaa !28
  %45 = tail call i32 %42(i64 noundef %39, ptr noundef %44) #4
  %.not188 = icmp eq i32 %45, 0
  br i1 %.not188, label %46, label %.thread227

46:                                               ; preds = %40
  %47 = load ptr, ptr %36, align 8, !tbaa !16
  %48 = getelementptr inbounds i8, ptr %0, i64 6672
  %49 = load ptr, ptr %48, align 8, !tbaa !29
  %50 = getelementptr inbounds i8, ptr %0, i64 6680
  %51 = load i64, ptr %50, align 8, !tbaa !17
  %52 = tail call i32 @mp3dec_iterate_cb(ptr noundef %47, ptr noundef %49, i64 noundef %51, ptr noundef nonnull @mp3dec_load_index, ptr noundef nonnull %0)
  switch i32 %52, label %.thread227 [
    i32 -4, label %61
    i32 0, label %61
  ]

53:                                               ; preds = %33
  %54 = getelementptr inbounds i8, ptr %0, i64 6672
  %55 = load ptr, ptr %54, align 8, !tbaa !29
  %56 = getelementptr inbounds i8, ptr %55, i64 %39
  %57 = getelementptr inbounds i8, ptr %0, i64 6680
  %58 = load i64, ptr %57, align 8, !tbaa !17
  %59 = sub i64 %58, %39
  %60 = tail call i32 @mp3dec_iterate_buf(ptr noundef %56, i64 noundef %59, ptr noundef nonnull @mp3dec_load_index, ptr noundef nonnull %0)
  switch i32 %60, label %.thread227 [
    i32 -4, label %61
    i32 0, label %61
  ]

61:                                               ; preds = %53, %53, %46, %46
  %62 = getelementptr inbounds i8, ptr %0, i64 6704
  %63 = load i64, ptr %62, align 8, !tbaa !30
  %.not241 = icmp eq i64 %63, 0
  br i1 %.not241, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %61
  %64 = getelementptr inbounds i8, ptr %0, i64 6696
  %65 = getelementptr inbounds i8, ptr %0, i64 6752
  %66 = load i64, ptr %65, align 8, !tbaa !20
  %67 = load ptr, ptr %64, align 8, !tbaa !31
  %xtraiter = and i64 %63, 3
  %68 = icmp ult i64 %63, 4
  br i1 %68, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %63, -4
  br label %69

69:                                               ; preds = %69, %.lr.ph.new
  %.0156233 = phi i64 [ 0, %.lr.ph.new ], [ %85, %69 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %69 ]
  %70 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %67, i64 %.0156233, i32 1
  %71 = load i64, ptr %70, align 8, !tbaa !32
  %72 = add i64 %71, %66
  store i64 %72, ptr %70, align 8, !tbaa !32
  %73 = or disjoint i64 %.0156233, 1
  %74 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %67, i64 %73, i32 1
  %75 = load i64, ptr %74, align 8, !tbaa !32
  %76 = add i64 %75, %66
  store i64 %76, ptr %74, align 8, !tbaa !32
  %77 = or disjoint i64 %.0156233, 2
  %78 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %67, i64 %77, i32 1
  %79 = load i64, ptr %78, align 8, !tbaa !32
  %80 = add i64 %79, %66
  store i64 %80, ptr %78, align 8, !tbaa !32
  %81 = or disjoint i64 %.0156233, 3
  %82 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %67, i64 %81, i32 1
  %83 = load i64, ptr %82, align 8, !tbaa !32
  %84 = add i64 %83, %66
  store i64 %84, ptr %82, align 8, !tbaa !32
  %85 = add nuw i64 %.0156233, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %69, !llvm.loop !34

._crit_edge.loopexit.unr-lcssa:                   ; preds = %69, %.lr.ph
  %.0156233.unr = phi i64 [ 0, %.lr.ph ], [ %85, %69 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader
  %.0156233.epil = phi i64 [ %89, %.epil.preheader ], [ %.0156233.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %86 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %67, i64 %.0156233.epil, i32 1
  %87 = load i64, ptr %86, align 8, !tbaa !32
  %88 = add i64 %87, %66
  store i64 %88, ptr %86, align 8, !tbaa !32
  %89 = add nuw i64 %.0156233.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader, !llvm.loop !36

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader, %61
  %90 = getelementptr inbounds i8, ptr %0, i64 6736
  %91 = load i64, ptr %90, align 8, !tbaa !38
  store i64 %91, ptr %34, align 8, !tbaa !24
  br label %92

92:                                               ; preds = %._crit_edge, %30
  %93 = getelementptr inbounds i8, ptr %0, i64 6696
  %94 = load ptr, ptr %93, align 8, !tbaa !31
  %.not191 = icmp eq ptr %94, null
  br i1 %.not191, label %25, label %95

95:                                               ; preds = %92
  %96 = tail call i64 @mp3dec_idx_binary_search(ptr noundef nonnull %93, i64 noundef %23)
  %.not192 = icmp eq i64 %96, 0
  br i1 %.not192, label %.thread221, label %97

97:                                               ; preds = %95
  %98 = tail call i64 @llvm.usub.sat.i64(i64 %96, i64 2)
  %99 = getelementptr inbounds i8, ptr %0, i64 6784
  %100 = load i32, ptr %99, align 8, !tbaa !39
  %101 = icmp eq i32 %100, 3
  %102 = icmp ugt i64 %96, 2
  %or.cond = and i1 %101, %102
  br i1 %or.cond, label %.lr.ph236, label %.thread221

.lr.ph236:                                        ; preds = %97
  %103 = getelementptr inbounds i8, ptr %0, i64 6688
  %104 = getelementptr inbounds i8, ptr %0, i64 6672
  %105 = getelementptr inbounds i8, ptr %0, i64 11432
  %106 = getelementptr inbounds i8, ptr %3, i64 12
  %107 = getelementptr inbounds i8, ptr %3, i64 8
  br label %108

108:                                              ; preds = %.lr.ph236, %163
  %.1157235 = phi i64 [ %98, %.lr.ph236 ], [ %160, %163 ]
  %.0164234 = phi i32 [ 511, %.lr.ph236 ], [ %169, %163 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %4) #4
  %109 = load ptr, ptr %103, align 8, !tbaa !16
  %.not193 = icmp eq ptr %109, null
  %110 = load ptr, ptr %104, align 8, !tbaa !29
  br i1 %.not193, label %141, label %111

111:                                              ; preds = %108
  %112 = getelementptr inbounds i8, ptr %109, i64 16
  %113 = load ptr, ptr %112, align 8, !tbaa !26
  %114 = load ptr, ptr %93, align 8, !tbaa !31
  %115 = getelementptr %struct.mp3dec_frame_t, ptr %114, i64 %.1157235
  %116 = getelementptr i8, ptr %115, i64 -8
  %117 = load i64, ptr %116, align 8, !tbaa !32
  %118 = getelementptr inbounds i8, ptr %109, i64 24
  %119 = load ptr, ptr %118, align 8, !tbaa !28
  %120 = call i32 %113(i64 noundef %117, ptr noundef %119) #4
  %.not194 = icmp eq i32 %120, 0
  br i1 %.not194, label %121, label %.thread

121:                                              ; preds = %111
  %122 = load ptr, ptr %103, align 8, !tbaa !16
  %123 = load ptr, ptr %122, align 8, !tbaa !40
  %124 = getelementptr inbounds i8, ptr %122, i64 8
  %125 = load ptr, ptr %124, align 8, !tbaa !41
  %126 = call i64 %123(ptr noundef %110, i64 noundef 4, ptr noundef %125) #4
  %.not195 = icmp eq i64 %126, 4
  br i1 %.not195, label %127, label %.thread

127:                                              ; preds = %121
  %128 = load i32, ptr %105, align 8, !tbaa !42
  %129 = call i32 @hdr_frame_bytes(ptr noundef %110, i32 noundef %128)
  %130 = call i32 @hdr_padding(ptr noundef %110)
  %131 = load ptr, ptr %103, align 8, !tbaa !16
  %132 = load ptr, ptr %131, align 8, !tbaa !40
  %133 = getelementptr inbounds i8, ptr %110, i64 4
  %134 = add i32 %129, -4
  %135 = add i32 %134, %130
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds i8, ptr %131, i64 8
  %138 = load ptr, ptr %137, align 8, !tbaa !41
  %139 = call i64 %132(ptr noundef nonnull %133, i64 noundef %136, ptr noundef %138) #4
  %.not196 = icmp eq i64 %139, %136
  br i1 %.not196, label %140, label %.thread

140:                                              ; preds = %127
  call void @bs_init(ptr noundef nonnull %3, ptr noundef nonnull %133, i32 noundef %135)
  br label %153

141:                                              ; preds = %108
  %142 = load ptr, ptr %93, align 8, !tbaa !31
  %143 = getelementptr %struct.mp3dec_frame_t, ptr %142, i64 %.1157235
  %144 = getelementptr i8, ptr %143, i64 -8
  %145 = load i64, ptr %144, align 8, !tbaa !32
  %146 = getelementptr inbounds i8, ptr %110, i64 %145
  %147 = load i32, ptr %105, align 8, !tbaa !42
  %148 = call i32 @hdr_frame_bytes(ptr noundef %146, i32 noundef %147)
  %149 = call i32 @hdr_padding(ptr noundef %146)
  %150 = getelementptr inbounds i8, ptr %146, i64 4
  %151 = add i32 %148, -4
  %152 = add i32 %151, %149
  call void @bs_init(ptr noundef nonnull %3, ptr noundef nonnull %150, i32 noundef %152)
  br label %153

153:                                              ; preds = %140, %141
  %.0155 = phi ptr [ %110, %140 ], [ %146, %141 ]
  %154 = getelementptr inbounds i8, ptr %.0155, i64 1
  %155 = load i8, ptr %154, align 1, !tbaa !43
  %156 = and i8 %155, 1
  %.not197 = icmp eq i8 %156, 0
  br i1 %.not197, label %157, label %159

157:                                              ; preds = %153
  %158 = call i32 @get_bits(ptr noundef nonnull %3, i32 noundef 16)
  br label %159

159:                                              ; preds = %157, %153
  %160 = add i64 %.1157235, -1
  %161 = call i32 @L3_read_side_info(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %.0155)
  %162 = icmp slt i32 %161, 0
  br i1 %162, label %173, label %163

163:                                              ; preds = %159
  %164 = load i32, ptr %106, align 4, !tbaa !44
  %165 = load i32, ptr %107, align 8, !tbaa !46
  %166 = sub nsw i32 %164, %165
  %167 = sdiv i32 %166, 8
  %168 = call i32 @llvm.smin.i32(i32 %.0164234, i32 %167)
  %169 = sub nsw i32 %.0164234, %168
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #4
  %170 = icmp ne i64 %160, 0
  %171 = icmp ne i32 %169, 0
  %172 = select i1 %170, i1 %171, i1 false
  br i1 %172, label %108, label %.thread221

173:                                              ; preds = %159
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #4
  br label %.thread221

.thread:                                          ; preds = %127, %121, %111
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #4
  br label %.thread227

.thread221:                                       ; preds = %163, %173, %97, %95
  %.5161 = phi i64 [ 0, %95 ], [ %160, %173 ], [ %98, %97 ], [ %160, %163 ]
  %174 = load ptr, ptr %93, align 8, !tbaa !31
  %175 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %174, i64 %.5161, i32 1
  %176 = load i64, ptr %175, align 8, !tbaa !32
  %177 = getelementptr inbounds i8, ptr %0, i64 6720
  store i64 %176, ptr %177, align 8, !tbaa !21
  %178 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %174, i64 %.5161
  %179 = load i64, ptr %178, align 8, !tbaa !47
  %180 = sub i64 %23, %179
  %181 = trunc i64 %180 to i32
  %182 = getelementptr inbounds i8, ptr %0, i64 11444
  %183 = getelementptr inbounds i8, ptr %0, i64 6704
  store i32 %181, ptr %182, align 4, !tbaa !22
  %184 = add i64 %.5161, 1
  %185 = load i64, ptr %183, align 8, !tbaa !30
  %186 = icmp ult i64 %184, %185
  br i1 %186, label %.lr.ph238, label %.critedge

.lr.ph238:                                        ; preds = %.thread221
  %187 = getelementptr inbounds i8, ptr %0, i64 6688
  %188 = getelementptr inbounds i8, ptr %0, i64 6672
  %189 = getelementptr inbounds i8, ptr %0, i64 6776
  br label %190

190:                                              ; preds = %.lr.ph238, %219
  %191 = phi i64 [ %184, %.lr.ph238 ], [ %225, %219 ]
  %.6162237 = phi i64 [ %.5161, %.lr.ph238 ], [ %191, %219 ]
  %192 = load ptr, ptr %93, align 8, !tbaa !31
  %193 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %192, i64 %.6162237
  %194 = load i64, ptr %193, align 8, !tbaa !47
  %.not198 = icmp eq i64 %194, 0
  br i1 %.not198, label %195, label %.critedge

195:                                              ; preds = %190
  %196 = getelementptr inbounds %struct.mp3dec_frame_t, ptr %192, i64 %191
  %197 = load i64, ptr %196, align 8, !tbaa !47
  %.not199 = icmp eq i64 %197, 0
  br i1 %.not199, label %198, label %.critedge

198:                                              ; preds = %195
  %199 = load ptr, ptr %187, align 8, !tbaa !16
  %.not200 = icmp eq ptr %199, null
  %200 = load ptr, ptr %188, align 8, !tbaa !29
  br i1 %.not200, label %215, label %201

201:                                              ; preds = %198
  %202 = getelementptr inbounds i8, ptr %199, i64 16
  %203 = load ptr, ptr %202, align 8, !tbaa !26
  %204 = getelementptr inbounds i8, ptr %193, i64 8
  %205 = load i64, ptr %204, align 8, !tbaa !32
  %206 = getelementptr inbounds i8, ptr %199, i64 24
  %207 = load ptr, ptr %206, align 8, !tbaa !28
  %208 = call i32 %203(i64 noundef %205, ptr noundef %207) #4
  %.not201 = icmp eq i32 %208, 0
  br i1 %.not201, label %209, label %.thread227

209:                                              ; preds = %201
  %210 = load ptr, ptr %187, align 8, !tbaa !16
  %211 = load ptr, ptr %210, align 8, !tbaa !40
  %212 = getelementptr inbounds i8, ptr %210, i64 8
  %213 = load ptr, ptr %212, align 8, !tbaa !41
  %214 = call i64 %211(ptr noundef %200, i64 noundef 4, ptr noundef %213) #4
  %.not202 = icmp eq i64 %214, 4
  br i1 %.not202, label %219, label %.thread227

215:                                              ; preds = %198
  %216 = getelementptr inbounds i8, ptr %193, i64 8
  %217 = load i64, ptr %216, align 8, !tbaa !32
  %218 = getelementptr inbounds i8, ptr %200, i64 %217
  br label %219

219:                                              ; preds = %215, %209
  %.0154 = phi ptr [ %200, %209 ], [ %218, %215 ]
  %220 = call i32 @hdr_frame_samples(ptr noundef %.0154)
  %221 = load i32, ptr %189, align 8, !tbaa !48
  %222 = mul i32 %221, %220
  %223 = load i32, ptr %182, align 4, !tbaa !22
  %224 = add i32 %223, %222
  store i32 %224, ptr %182, align 4, !tbaa !22
  %225 = add nuw i64 %191, 1
  %226 = load i64, ptr %183, align 8, !tbaa !30
  %227 = icmp ult i64 %225, %226
  br i1 %227, label %190, label %.critedge, !llvm.loop !49

.critedge:                                        ; preds = %190, %219, %195, %.thread221, %25, %15
  %228 = getelementptr inbounds i8, ptr %0, i64 6688
  %229 = load ptr, ptr %228, align 8, !tbaa !16
  %.not203 = icmp eq ptr %229, null
  br i1 %.not203, label %238, label %230

230:                                              ; preds = %.critedge
  %231 = getelementptr inbounds i8, ptr %229, i64 16
  %232 = load ptr, ptr %231, align 8, !tbaa !26
  %233 = getelementptr inbounds i8, ptr %0, i64 6720
  %234 = load i64, ptr %233, align 8, !tbaa !21
  %235 = getelementptr inbounds i8, ptr %229, i64 24
  %236 = load ptr, ptr %235, align 8, !tbaa !28
  %237 = call i32 %232(i64 noundef %234, ptr noundef %236) #4
  %.not204 = icmp eq i32 %237, 0
  br i1 %.not204, label %238, label %.thread227

238:                                              ; preds = %230, %.critedge
  %239 = getelementptr inbounds i8, ptr %0, i64 11436
  store i32 0, ptr %239, align 4, !tbaa !25
  %240 = getelementptr inbounds i8, ptr %0, i64 11440
  store i32 0, ptr %240, align 8, !tbaa !50
  %241 = getelementptr inbounds i8, ptr %0, i64 11400
  %242 = getelementptr inbounds i8, ptr %0, i64 11452
  store i32 0, ptr %242, align 4, !tbaa !51
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %241, i8 0, i64 16, i1 false)
  call void @mp3dec_init(ptr noundef nonnull %0)
  br label %.thread227

.thread227:                                       ; preds = %201, %209, %.thread, %53, %46, %230, %40, %2, %238
  %.15 = phi i32 [ 0, %238 ], [ -3, %.thread ], [ %52, %46 ], [ %60, %53 ], [ -1, %2 ], [ -3, %40 ], [ -3, %230 ], [ -3, %209 ], [ -3, %201 ]
  ret i32 %.15
}

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

; 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 i64 @llvm.usub.sat.i64(i64, i64) #2

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { 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 11420}
!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, !12, i64 6688}
!17 = !{!6, !13, i64 6680}
!18 = !{!6, !13, i64 6744}
!19 = !{!6, !10, i64 11448}
!20 = !{!6, !13, i64 6752}
!21 = !{!6, !13, i64 6720}
!22 = !{!6, !10, i64 11444}
!23 = !{!6, !10, i64 11428}
!24 = !{!6, !13, i64 6728}
!25 = !{!6, !10, i64 11436}
!26 = !{!27, !12, i64 16}
!27 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!28 = !{!27, !12, i64 24}
!29 = !{!6, !12, i64 6672}
!30 = !{!6, !13, i64 6704}
!31 = !{!6, !12, i64 6696}
!32 = !{!33, !13, i64 8}
!33 = !{!"", !13, i64 0, !13, i64 8}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.unroll.disable"}
!38 = !{!6, !13, i64 6736}
!39 = !{!6, !10, i64 6784}
!40 = !{!27, !12, i64 0}
!41 = !{!27, !12, i64 8}
!42 = !{!6, !10, i64 11432}
!43 = !{!8, !8, i64 0}
!44 = !{!45, !10, i64 12}
!45 = !{!"", !12, i64 0, !10, i64 8, !10, i64 12}
!46 = !{!45, !10, i64 8}
!47 = !{!33, !13, i64 0}
!48 = !{!6, !10, i64 6776}
!49 = distinct !{!49, !35}
!50 = !{!6, !10, i64 11440}
!51 = !{!6, !10, i64 11452}


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