; LLVM IR from kuba--/zip :: src (zip)

; 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.mz_zip_archive_file_stat = type { i32, i64, i16, i16, i16, i16, i32, i64, i64, i16, i32, i64, i32, i32, i32, i32, [512 x i8], [512 x i8], i64 }
%struct.tinfl_decompressor_tag = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i64, i64, [3 x [1024 x i16]], [576 x i16], [64 x i16], [38 x i16], [288 x i8], [32 x i8], [19 x i8], [4 x i8], [457 x i8] }
%struct.mz_zip_archive = type { i64, i64, i32, i32, i32, i32, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.mz_zip_internal_state_tag = type { %struct.mz_zip_array, %struct.mz_zip_array, %struct.mz_zip_array, i32, i32, i32, ptr, i64, ptr, i64, i64 }
%struct.mz_zip_array = type { ptr, i64, i64, i32 }

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @mz_crc32(i64 noundef, ptr noundef, i64 noundef) #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_set_error(ptr noundef, i32 noundef) #2

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mz_zip_reader_extract_to_callback(ptr noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4) #1 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca %struct.mz_zip_archive_file_stat, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca [8 x i32], align 16
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca %struct.tinfl_decompressor_tag, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store i32 %4, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  store i64 0, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  store i64 0, ptr %18, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 1112, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  store ptr null, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  %30 = getelementptr inbounds [8 x i32], ptr %23, i64 0, i64 0
  store ptr %30, ptr %24, align 8, !tbaa !5
  %31 = load ptr, ptr %7, align 8, !tbaa !5
  %32 = icmp ne ptr %31, null
  br i1 %32, label %33, label %46

33:                                               ; preds = %5
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.mz_zip_archive, ptr %34, i32 0, i32 15
  %36 = load ptr, ptr %35, align 8, !tbaa !13
  %37 = icmp ne ptr %36, null
  br i1 %37, label %38, label %46

38:                                               ; preds = %33
  %39 = load ptr, ptr %9, align 8, !tbaa !5
  %40 = icmp ne ptr %39, null
  br i1 %40, label %41, label %46

41:                                               ; preds = %38
  %42 = load ptr, ptr %7, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.mz_zip_archive, ptr %42, i32 0, i32 11
  %44 = load ptr, ptr %43, align 8, !tbaa !15
  %45 = icmp ne ptr %44, null
  br i1 %45, label %49, label %46

46:                                               ; preds = %41, %38, %33, %5
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = call i32 @mz_zip_set_error(ptr noundef %47, i32 noundef 24)
  store i32 %48, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

49:                                               ; preds = %41
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = load i32, ptr %8, align 4, !tbaa !9
  %52 = call i32 @mz_zip_reader_file_stat(ptr noundef %50, i32 noundef %51, ptr noundef %20)
  %53 = icmp ne i32 %52, 0
  br i1 %53, label %55, label %54

54:                                               ; preds = %49
  store i32 0, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

55:                                               ; preds = %49
  %56 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 13
  %57 = load i32, ptr %56, align 4, !tbaa !16
  %58 = icmp ne i32 %57, 0
  br i1 %58, label %63, label %59

59:                                               ; preds = %55
  %60 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %61 = load i64, ptr %60, align 8, !tbaa !19
  %62 = icmp ne i64 %61, 0
  br i1 %62, label %64, label %63

63:                                               ; preds = %59, %55
  store i32 1, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

64:                                               ; preds = %59
  %65 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 4
  %66 = load i16, ptr %65, align 4, !tbaa !20
  %67 = zext i16 %66 to i32
  %68 = and i32 %67, 97
  %69 = icmp ne i32 %68, 0
  br i1 %69, label %70, label %73

70:                                               ; preds = %64
  %71 = load ptr, ptr %7, align 8, !tbaa !5
  %72 = call i32 @mz_zip_set_error(ptr noundef %71, i32 noundef 5)
  store i32 %72, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

73:                                               ; preds = %64
  %74 = load i32, ptr %11, align 4, !tbaa !9
  %75 = and i32 %74, 1024
  %76 = icmp ne i32 %75, 0
  br i1 %76, label %90, label %77

77:                                               ; preds = %73
  %78 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 5
  %79 = load i16, ptr %78, align 2, !tbaa !21
  %80 = zext i16 %79 to i32
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %90

82:                                               ; preds = %77
  %83 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 5
  %84 = load i16, ptr %83, align 2, !tbaa !21
  %85 = zext i16 %84 to i32
  %86 = icmp ne i32 %85, 8
  br i1 %86, label %87, label %90

87:                                               ; preds = %82
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = call i32 @mz_zip_set_error(ptr noundef %88, i32 noundef 4)
  store i32 %89, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

90:                                               ; preds = %82, %77, %73
  %91 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 11
  %92 = load i64, ptr %91, align 8, !tbaa !22
  store i64 %92, ptr %19, align 8, !tbaa !11
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.mz_zip_archive, ptr %93, i32 0, i32 11
  %95 = load ptr, ptr %94, align 8, !tbaa !15
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.mz_zip_archive, ptr %96, i32 0, i32 14
  %98 = load ptr, ptr %97, align 8, !tbaa !23
  %99 = load i64, ptr %19, align 8, !tbaa !11
  %100 = load ptr, ptr %24, align 8, !tbaa !5
  %101 = call i64 %95(ptr noundef %98, i64 noundef %99, ptr noundef %100, i64 noundef 30)
  %102 = icmp ne i64 %101, 30
  br i1 %102, label %103, label %106

103:                                              ; preds = %90
  %104 = load ptr, ptr %7, align 8, !tbaa !5
  %105 = call i32 @mz_zip_set_error(ptr noundef %104, i32 noundef 20)
  store i32 %105, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

106:                                              ; preds = %90
  %107 = load ptr, ptr %24, align 8, !tbaa !5
  %108 = getelementptr inbounds i8, ptr %107, i64 0
  %109 = load i8, ptr %108, align 1, !tbaa !24
  %110 = zext i8 %109 to i32
  %111 = load ptr, ptr %24, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i64 1
  %113 = load i8, ptr %112, align 1, !tbaa !24
  %114 = zext i8 %113 to i32
  %115 = shl i32 %114, 8
  %116 = or i32 %110, %115
  %117 = load ptr, ptr %24, align 8, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %117, i64 2
  %119 = load i8, ptr %118, align 1, !tbaa !24
  %120 = zext i8 %119 to i32
  %121 = shl i32 %120, 16
  %122 = or i32 %116, %121
  %123 = load ptr, ptr %24, align 8, !tbaa !5
  %124 = getelementptr inbounds i8, ptr %123, i64 3
  %125 = load i8, ptr %124, align 1, !tbaa !24
  %126 = zext i8 %125 to i32
  %127 = shl i32 %126, 24
  %128 = or i32 %122, %127
  %129 = icmp ne i32 %128, 67324752
  br i1 %129, label %130, label %133

130:                                              ; preds = %106
  %131 = load ptr, ptr %7, align 8, !tbaa !5
  %132 = call i32 @mz_zip_set_error(ptr noundef %131, i32 noundef 9)
  store i32 %132, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

133:                                              ; preds = %106
  %134 = load ptr, ptr %24, align 8, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %134, i64 26
  %136 = getelementptr inbounds i8, ptr %135, i64 0
  %137 = load i8, ptr %136, align 1, !tbaa !24
  %138 = zext i8 %137 to i32
  %139 = load ptr, ptr %24, align 8, !tbaa !5
  %140 = getelementptr inbounds i8, ptr %139, i64 26
  %141 = getelementptr inbounds i8, ptr %140, i64 1
  %142 = load i8, ptr %141, align 1, !tbaa !24
  %143 = zext i8 %142 to i32
  %144 = shl i32 %143, 8
  %145 = or i32 %138, %144
  %146 = zext i32 %145 to i64
  %147 = add i64 30, %146
  %148 = load ptr, ptr %24, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 28
  %150 = getelementptr inbounds i8, ptr %149, i64 0
  %151 = load i8, ptr %150, align 1, !tbaa !24
  %152 = zext i8 %151 to i32
  %153 = load ptr, ptr %24, align 8, !tbaa !5
  %154 = getelementptr inbounds i8, ptr %153, i64 28
  %155 = getelementptr inbounds i8, ptr %154, i64 1
  %156 = load i8, ptr %155, align 1, !tbaa !24
  %157 = zext i8 %156 to i32
  %158 = shl i32 %157, 8
  %159 = or i32 %152, %158
  %160 = zext i32 %159 to i64
  %161 = add i64 %147, %160
  %162 = load i64, ptr %19, align 8, !tbaa !11
  %163 = add i64 %162, %161
  store i64 %163, ptr %19, align 8, !tbaa !11
  %164 = load i64, ptr %19, align 8, !tbaa !11
  %165 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %166 = load i64, ptr %165, align 8, !tbaa !19
  %167 = add i64 %164, %166
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.mz_zip_archive, ptr %168, i32 0, i32 0
  %170 = load i64, ptr %169, align 8, !tbaa !25
  %171 = icmp ugt i64 %167, %170
  br i1 %171, label %172, label %175

172:                                              ; preds = %133
  %173 = load ptr, ptr %7, align 8, !tbaa !5
  %174 = call i32 @mz_zip_set_error(ptr noundef %173, i32 noundef 9)
  store i32 %174, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

175:                                              ; preds = %133
  %176 = load ptr, ptr %7, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.mz_zip_archive, ptr %176, i32 0, i32 15
  %178 = load ptr, ptr %177, align 8, !tbaa !13
  %179 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %178, i32 0, i32 8
  %180 = load ptr, ptr %179, align 8, !tbaa !26
  %181 = icmp ne ptr %180, null
  br i1 %181, label %182, label %192

182:                                              ; preds = %175
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.mz_zip_archive, ptr %183, i32 0, i32 15
  %185 = load ptr, ptr %184, align 8, !tbaa !13
  %186 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %185, i32 0, i32 8
  %187 = load ptr, ptr %186, align 8, !tbaa !26
  %188 = load i64, ptr %19, align 8, !tbaa !11
  %189 = getelementptr inbounds i8, ptr %187, i64 %188
  store ptr %189, ptr %21, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %191 = load i64, ptr %190, align 8, !tbaa !19
  store i64 %191, ptr %16, align 8, !tbaa !11
  store i64 %191, ptr %14, align 8, !tbaa !11
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %217

192:                                              ; preds = %175
  %193 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %194 = load i64, ptr %193, align 8, !tbaa !19
  %195 = icmp ult i64 %194, 65536
  br i1 %195, label %196, label %199

196:                                              ; preds = %192
  %197 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %198 = load i64, ptr %197, align 8, !tbaa !19
  br label %200

199:                                              ; preds = %192
  br label %200

200:                                              ; preds = %199, %196
  %201 = phi i64 [ %198, %196 ], [ 65536, %199 ]
  store i64 %201, ptr %14, align 8, !tbaa !11
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.mz_zip_archive, ptr %202, i32 0, i32 7
  %204 = load ptr, ptr %203, align 8, !tbaa !29
  %205 = load ptr, ptr %7, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.mz_zip_archive, ptr %205, i32 0, i32 10
  %207 = load ptr, ptr %206, align 8, !tbaa !30
  %208 = load i64, ptr %14, align 8, !tbaa !11
  %209 = call ptr %204(ptr noundef %207, i64 noundef 1, i64 noundef %208)
  store ptr %209, ptr %21, align 8, !tbaa !5
  %210 = icmp eq ptr null, %209
  br i1 %210, label %211, label %214

211:                                              ; preds = %200
  %212 = load ptr, ptr %7, align 8, !tbaa !5
  %213 = call i32 @mz_zip_set_error(ptr noundef %212, i32 noundef 16)
  store i32 %213, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

214:                                              ; preds = %200
  store i64 0, ptr %16, align 8, !tbaa !11
  %215 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %216 = load i64, ptr %215, align 8, !tbaa !19
  store i64 %216, ptr %17, align 8, !tbaa !11
  br label %217

217:                                              ; preds = %214, %182
  %218 = load i32, ptr %11, align 4, !tbaa !9
  %219 = and i32 %218, 1024
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %225, label %221

221:                                              ; preds = %217
  %222 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 5
  %223 = load i16, ptr %222, align 2, !tbaa !21
  %224 = icmp ne i16 %223, 0
  br i1 %224, label %332, label %225

225:                                              ; preds = %221, %217
  %226 = load ptr, ptr %7, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.mz_zip_archive, ptr %226, i32 0, i32 15
  %228 = load ptr, ptr %227, align 8, !tbaa !13
  %229 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %228, i32 0, i32 8
  %230 = load ptr, ptr %229, align 8, !tbaa !26
  %231 = icmp ne ptr %230, null
  br i1 %231, label %232, label %268

232:                                              ; preds = %225
  %233 = load ptr, ptr %9, align 8, !tbaa !5
  %234 = load ptr, ptr %10, align 8, !tbaa !5
  %235 = load i64, ptr %18, align 8, !tbaa !11
  %236 = load ptr, ptr %21, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %238 = load i64, ptr %237, align 8, !tbaa !19
  %239 = call i64 %233(ptr noundef %234, i64 noundef %235, ptr noundef %236, i64 noundef %238)
  %240 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %241 = load i64, ptr %240, align 8, !tbaa !19
  %242 = icmp ne i64 %239, %241
  br i1 %242, label %243, label %246

243:                                              ; preds = %232
  %244 = load ptr, ptr %7, align 8, !tbaa !5
  %245 = call i32 @mz_zip_set_error(ptr noundef %244, i32 noundef 31)
  store i32 -1, ptr %12, align 4, !tbaa !9
  br label %259

246:                                              ; preds = %232
  %247 = load i32, ptr %11, align 4, !tbaa !9
  %248 = and i32 %247, 1024
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %258, label %250

250:                                              ; preds = %246
  %251 = load i32, ptr %13, align 4, !tbaa !9
  %252 = zext i32 %251 to i64
  %253 = load ptr, ptr %21, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %255 = load i64, ptr %254, align 8, !tbaa !19
  %256 = call i64 @mz_crc32(i64 noundef %252, ptr noundef %253, i64 noundef %255)
  %257 = trunc i64 %256 to i32
  store i32 %257, ptr %13, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %250, %246
  br label %259

259:                                              ; preds = %258, %243
  %260 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %261 = load i64, ptr %260, align 8, !tbaa !19
  %262 = load i64, ptr %19, align 8, !tbaa !11
  %263 = add i64 %262, %261
  store i64 %263, ptr %19, align 8, !tbaa !11
  %264 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 7
  %265 = load i64, ptr %264, align 8, !tbaa !19
  %266 = load i64, ptr %18, align 8, !tbaa !11
  %267 = add i64 %266, %265
  store i64 %267, ptr %18, align 8, !tbaa !11
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %331

268:                                              ; preds = %225
  br label %269

269:                                              ; preds = %320, %268
  %270 = load i64, ptr %17, align 8, !tbaa !11
  %271 = icmp ne i64 %270, 0
  br i1 %271, label %272, label %330

272:                                              ; preds = %269
  %273 = load i64, ptr %14, align 8, !tbaa !11
  %274 = load i64, ptr %17, align 8, !tbaa !11
  %275 = icmp ult i64 %273, %274
  br i1 %275, label %276, label %278

276:                                              ; preds = %272
  %277 = load i64, ptr %14, align 8, !tbaa !11
  br label %280

278:                                              ; preds = %272
  %279 = load i64, ptr %17, align 8, !tbaa !11
  br label %280

280:                                              ; preds = %278, %276
  %281 = phi i64 [ %277, %276 ], [ %279, %278 ]
  store i64 %281, ptr %16, align 8, !tbaa !11
  %282 = load ptr, ptr %7, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.mz_zip_archive, ptr %282, i32 0, i32 11
  %284 = load ptr, ptr %283, align 8, !tbaa !15
  %285 = load ptr, ptr %7, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.mz_zip_archive, ptr %285, i32 0, i32 14
  %287 = load ptr, ptr %286, align 8, !tbaa !23
  %288 = load i64, ptr %19, align 8, !tbaa !11
  %289 = load ptr, ptr %21, align 8, !tbaa !5
  %290 = load i64, ptr %16, align 8, !tbaa !11
  %291 = call i64 %284(ptr noundef %287, i64 noundef %288, ptr noundef %289, i64 noundef %290)
  %292 = load i64, ptr %16, align 8, !tbaa !11
  %293 = icmp ne i64 %291, %292
  br i1 %293, label %294, label %297

294:                                              ; preds = %280
  %295 = load ptr, ptr %7, align 8, !tbaa !5
  %296 = call i32 @mz_zip_set_error(ptr noundef %295, i32 noundef 20)
  store i32 -1, ptr %12, align 4, !tbaa !9
  br label %330

297:                                              ; preds = %280
  %298 = load i32, ptr %11, align 4, !tbaa !9
  %299 = and i32 %298, 1024
  %300 = icmp ne i32 %299, 0
  br i1 %300, label %308, label %301

301:                                              ; preds = %297
  %302 = load i32, ptr %13, align 4, !tbaa !9
  %303 = zext i32 %302 to i64
  %304 = load ptr, ptr %21, align 8, !tbaa !5
  %305 = load i64, ptr %16, align 8, !tbaa !11
  %306 = call i64 @mz_crc32(i64 noundef %303, ptr noundef %304, i64 noundef %305)
  %307 = trunc i64 %306 to i32
  store i32 %307, ptr %13, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %301, %297
  %309 = load ptr, ptr %9, align 8, !tbaa !5
  %310 = load ptr, ptr %10, align 8, !tbaa !5
  %311 = load i64, ptr %18, align 8, !tbaa !11
  %312 = load ptr, ptr %21, align 8, !tbaa !5
  %313 = load i64, ptr %16, align 8, !tbaa !11
  %314 = call i64 %309(ptr noundef %310, i64 noundef %311, ptr noundef %312, i64 noundef %313)
  %315 = load i64, ptr %16, align 8, !tbaa !11
  %316 = icmp ne i64 %314, %315
  br i1 %316, label %317, label %320

317:                                              ; preds = %308
  %318 = load ptr, ptr %7, align 8, !tbaa !5
  %319 = call i32 @mz_zip_set_error(ptr noundef %318, i32 noundef 31)
  store i32 -1, ptr %12, align 4, !tbaa !9
  br label %330

320:                                              ; preds = %308
  %321 = load i64, ptr %16, align 8, !tbaa !11
  %322 = load i64, ptr %19, align 8, !tbaa !11
  %323 = add i64 %322, %321
  store i64 %323, ptr %19, align 8, !tbaa !11
  %324 = load i64, ptr %16, align 8, !tbaa !11
  %325 = load i64, ptr %18, align 8, !tbaa !11
  %326 = add i64 %325, %324
  store i64 %326, ptr %18, align 8, !tbaa !11
  %327 = load i64, ptr %16, align 8, !tbaa !11
  %328 = load i64, ptr %17, align 8, !tbaa !11
  %329 = sub i64 %328, %327
  store i64 %329, ptr %17, align 8, !tbaa !11
  br label %269, !llvm.loop !31

330:                                              ; preds = %317, %294, %269
  br label %331

331:                                              ; preds = %330, %259
  br label %461

332:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8376, ptr %26) #3
  br label %333

333:                                              ; preds = %332
  %334 = getelementptr inbounds %struct.tinfl_decompressor_tag, ptr %26, i32 0, i32 0
  store i32 0, ptr %334, align 8, !tbaa !33
  br label %335

335:                                              ; preds = %333
  br label %336

336:                                              ; preds = %335
  %337 = load ptr, ptr %7, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.mz_zip_archive, ptr %337, i32 0, i32 7
  %339 = load ptr, ptr %338, align 8, !tbaa !29
  %340 = load ptr, ptr %7, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.mz_zip_archive, ptr %340, i32 0, i32 10
  %342 = load ptr, ptr %341, align 8, !tbaa !30
  %343 = call ptr %339(ptr noundef %342, i64 noundef 1, i64 noundef 32768)
  store ptr %343, ptr %22, align 8, !tbaa !5
  %344 = icmp eq ptr null, %343
  br i1 %344, label %345, label %348

345:                                              ; preds = %336
  %346 = load ptr, ptr %7, align 8, !tbaa !5
  %347 = call i32 @mz_zip_set_error(ptr noundef %346, i32 noundef 16)
  store i32 -1, ptr %12, align 4, !tbaa !9
  br label %460

348:                                              ; preds = %336
  br label %349

349:                                              ; preds = %457, %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  %350 = load ptr, ptr %22, align 8, !tbaa !5
  %351 = load i64, ptr %18, align 8, !tbaa !11
  %352 = and i64 %351, 32767
  %353 = getelementptr inbounds i8, ptr %350, i64 %352
  store ptr %353, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  %354 = load i64, ptr %18, align 8, !tbaa !11
  %355 = and i64 %354, 32767
  %356 = sub i64 32768, %355
  store i64 %356, ptr %29, align 8, !tbaa !11
  %357 = load i64, ptr %16, align 8, !tbaa !11
  %358 = icmp ne i64 %357, 0
  br i1 %358, label %398, label %359

359:                                              ; preds = %349
  %360 = load ptr, ptr %7, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.mz_zip_archive, ptr %360, i32 0, i32 15
  %362 = load ptr, ptr %361, align 8, !tbaa !13
  %363 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %362, i32 0, i32 8
  %364 = load ptr, ptr %363, align 8, !tbaa !26
  %365 = icmp ne ptr %364, null
  br i1 %365, label %398, label %366

366:                                              ; preds = %359
  %367 = load i64, ptr %14, align 8, !tbaa !11
  %368 = load i64, ptr %17, align 8, !tbaa !11
  %369 = icmp ult i64 %367, %368
  br i1 %369, label %370, label %372

370:                                              ; preds = %366
  %371 = load i64, ptr %14, align 8, !tbaa !11
  br label %374

372:                                              ; preds = %366
  %373 = load i64, ptr %17, align 8, !tbaa !11
  br label %374

374:                                              ; preds = %372, %370
  %375 = phi i64 [ %371, %370 ], [ %373, %372 ]
  store i64 %375, ptr %16, align 8, !tbaa !11
  %376 = load ptr, ptr %7, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.mz_zip_archive, ptr %376, i32 0, i32 11
  %378 = load ptr, ptr %377, align 8, !tbaa !15
  %379 = load ptr, ptr %7, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.mz_zip_archive, ptr %379, i32 0, i32 14
  %381 = load ptr, ptr %380, align 8, !tbaa !23
  %382 = load i64, ptr %19, align 8, !tbaa !11
  %383 = load ptr, ptr %21, align 8, !tbaa !5
  %384 = load i64, ptr %16, align 8, !tbaa !11
  %385 = call i64 %378(ptr noundef %381, i64 noundef %382, ptr noundef %383, i64 noundef %384)
  %386 = load i64, ptr %16, align 8, !tbaa !11
  %387 = icmp ne i64 %385, %386
  br i1 %387, label %388, label %391

388:                                              ; preds = %374
  %389 = load ptr, ptr %7, align 8, !tbaa !5
  %390 = call i32 @mz_zip_set_error(ptr noundef %389, i32 noundef 20)
  store i32 -1, ptr %12, align 4, !tbaa !9
  store i32 6, ptr %25, align 4
  br label %448

391:                                              ; preds = %374
  %392 = load i64, ptr %16, align 8, !tbaa !11
  %393 = load i64, ptr %19, align 8, !tbaa !11
  %394 = add i64 %393, %392
  store i64 %394, ptr %19, align 8, !tbaa !11
  %395 = load i64, ptr %16, align 8, !tbaa !11
  %396 = load i64, ptr %17, align 8, !tbaa !11
  %397 = sub i64 %396, %395
  store i64 %397, ptr %17, align 8, !tbaa !11
  store i64 0, ptr %15, align 8, !tbaa !11
  br label %398

398:                                              ; preds = %391, %359, %349
  %399 = load i64, ptr %16, align 8, !tbaa !11
  store i64 %399, ptr %28, align 8, !tbaa !11
  %400 = load ptr, ptr %21, align 8, !tbaa !5
  %401 = load i64, ptr %15, align 8, !tbaa !11
  %402 = getelementptr inbounds i8, ptr %400, i64 %401
  %403 = load ptr, ptr %22, align 8, !tbaa !5
  %404 = load ptr, ptr %27, align 8, !tbaa !5
  %405 = load i64, ptr %17, align 8, !tbaa !11
  %406 = icmp ne i64 %405, 0
  %407 = zext i1 %406 to i64
  %408 = select i1 %406, i32 2, i32 0
  %409 = call i32 @tinfl_decompress(ptr noundef %26, ptr noundef %402, ptr noundef %28, ptr noundef %403, ptr noundef %404, ptr noundef %29, i32 noundef %408)
  store i32 %409, ptr %12, align 4, !tbaa !9
  %410 = load i64, ptr %28, align 8, !tbaa !11
  %411 = load i64, ptr %16, align 8, !tbaa !11
  %412 = sub i64 %411, %410
  store i64 %412, ptr %16, align 8, !tbaa !11
  %413 = load i64, ptr %28, align 8, !tbaa !11
  %414 = load i64, ptr %15, align 8, !tbaa !11
  %415 = add i64 %414, %413
  store i64 %415, ptr %15, align 8, !tbaa !11
  %416 = load i64, ptr %29, align 8, !tbaa !11
  %417 = icmp ne i64 %416, 0
  br i1 %417, label %418, label %447

418:                                              ; preds = %398
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  %420 = load ptr, ptr %10, align 8, !tbaa !5
  %421 = load i64, ptr %18, align 8, !tbaa !11
  %422 = load ptr, ptr %27, align 8, !tbaa !5
  %423 = load i64, ptr %29, align 8, !tbaa !11
  %424 = call i64 %419(ptr noundef %420, i64 noundef %421, ptr noundef %422, i64 noundef %423)
  %425 = load i64, ptr %29, align 8, !tbaa !11
  %426 = icmp ne i64 %424, %425
  br i1 %426, label %427, label %430

427:                                              ; preds = %418
  %428 = load ptr, ptr %7, align 8, !tbaa !5
  %429 = call i32 @mz_zip_set_error(ptr noundef %428, i32 noundef 31)
  store i32 -1, ptr %12, align 4, !tbaa !9
  store i32 6, ptr %25, align 4
  br label %448

430:                                              ; preds = %418
  %431 = load i32, ptr %13, align 4, !tbaa !9
  %432 = zext i32 %431 to i64
  %433 = load ptr, ptr %27, align 8, !tbaa !5
  %434 = load i64, ptr %29, align 8, !tbaa !11
  %435 = call i64 @mz_crc32(i64 noundef %432, ptr noundef %433, i64 noundef %434)
  %436 = trunc i64 %435 to i32
  store i32 %436, ptr %13, align 4, !tbaa !9
  %437 = load i64, ptr %29, align 8, !tbaa !11
  %438 = load i64, ptr %18, align 8, !tbaa !11
  %439 = add i64 %438, %437
  store i64 %439, ptr %18, align 8, !tbaa !11
  %440 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 8
  %441 = load i64, ptr %440, align 8, !tbaa !35
  %442 = icmp ugt i64 %439, %441
  br i1 %442, label %443, label %446

443:                                              ; preds = %430
  %444 = load ptr, ptr %7, align 8, !tbaa !5
  %445 = call i32 @mz_zip_set_error(ptr noundef %444, i32 noundef 11)
  store i32 -1, ptr %12, align 4, !tbaa !9
  store i32 6, ptr %25, align 4
  br label %448

446:                                              ; preds = %430
  br label %447

447:                                              ; preds = %446, %398
  store i32 0, ptr %25, align 4
  br label %448

448:                                              ; preds = %447, %443, %427, %388
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  %449 = load i32, ptr %25, align 4
  switch i32 %449, label %518 [
    i32 0, label %450
    i32 6, label %459
  ]

450:                                              ; preds = %448
  br label %451

451:                                              ; preds = %450
  %452 = load i32, ptr %12, align 4, !tbaa !9
  %453 = icmp eq i32 %452, 1
  br i1 %453, label %457, label %454

454:                                              ; preds = %451
  %455 = load i32, ptr %12, align 4, !tbaa !9
  %456 = icmp eq i32 %455, 2
  br label %457

457:                                              ; preds = %454, %451
  %458 = phi i1 [ true, %451 ], [ %456, %454 ]
  br i1 %458, label %349, label %459, !llvm.loop !36

459:                                              ; preds = %457, %448
  br label %460

460:                                              ; preds = %459, %345
  call void @llvm.lifetime.end.p0(i64 8376, ptr %26) #3
  br label %461

461:                                              ; preds = %460, %331
  %462 = load i32, ptr %12, align 4, !tbaa !9
  %463 = icmp eq i32 %462, 0
  br i1 %463, label %464, label %486

464:                                              ; preds = %461
  %465 = load i32, ptr %11, align 4, !tbaa !9
  %466 = and i32 %465, 1024
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %486, label %468

468:                                              ; preds = %464
  %469 = load i64, ptr %18, align 8, !tbaa !11
  %470 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 8
  %471 = load i64, ptr %470, align 8, !tbaa !35
  %472 = icmp ne i64 %469, %471
  br i1 %472, label %473, label %476

473:                                              ; preds = %468
  %474 = load ptr, ptr %7, align 8, !tbaa !5
  %475 = call i32 @mz_zip_set_error(ptr noundef %474, i32 noundef 13)
  store i32 -1, ptr %12, align 4, !tbaa !9
  br label %485

476:                                              ; preds = %468
  %477 = load i32, ptr %13, align 4, !tbaa !9
  %478 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %20, i32 0, i32 6
  %479 = load i32, ptr %478, align 8, !tbaa !37
  %480 = icmp ne i32 %477, %479
  br i1 %480, label %481, label %484

481:                                              ; preds = %476
  %482 = load ptr, ptr %7, align 8, !tbaa !5
  %483 = call i32 @mz_zip_set_error(ptr noundef %482, i32 noundef 11)
  store i32 -1, ptr %12, align 4, !tbaa !9
  br label %484

484:                                              ; preds = %481, %476
  br label %485

485:                                              ; preds = %484, %473
  br label %486

486:                                              ; preds = %485, %464, %461
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.mz_zip_archive, ptr %487, i32 0, i32 15
  %489 = load ptr, ptr %488, align 8, !tbaa !13
  %490 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %489, i32 0, i32 8
  %491 = load ptr, ptr %490, align 8, !tbaa !26
  %492 = icmp ne ptr %491, null
  br i1 %492, label %501, label %493

493:                                              ; preds = %486
  %494 = load ptr, ptr %7, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.mz_zip_archive, ptr %494, i32 0, i32 8
  %496 = load ptr, ptr %495, align 8, !tbaa !38
  %497 = load ptr, ptr %7, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.mz_zip_archive, ptr %497, i32 0, i32 10
  %499 = load ptr, ptr %498, align 8, !tbaa !30
  %500 = load ptr, ptr %21, align 8, !tbaa !5
  call void %496(ptr noundef %499, ptr noundef %500)
  br label %501

501:                                              ; preds = %493, %486
  %502 = load ptr, ptr %22, align 8, !tbaa !5
  %503 = icmp ne ptr %502, null
  br i1 %503, label %504, label %512

504:                                              ; preds = %501
  %505 = load ptr, ptr %7, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.mz_zip_archive, ptr %505, i32 0, i32 8
  %507 = load ptr, ptr %506, align 8, !tbaa !38
  %508 = load ptr, ptr %7, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.mz_zip_archive, ptr %508, i32 0, i32 10
  %510 = load ptr, ptr %509, align 8, !tbaa !30
  %511 = load ptr, ptr %22, align 8, !tbaa !5
  call void %507(ptr noundef %510, ptr noundef %511)
  br label %512

512:                                              ; preds = %504, %501
  %513 = load i32, ptr %12, align 4, !tbaa !9
  %514 = icmp eq i32 %513, 0
  %515 = zext i1 %514 to i32
  store i32 %515, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %516

516:                                              ; preds = %512, %211, %172, %130, %103, %87, %70, %63, %54, %46
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 1112, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  %517 = load i32, ptr %6, align 4
  ret i32 %517

518:                                              ; preds = %448
  unreachable
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { alwaysinline 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 #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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !6, i64 104}
!14 = !{!"", !12, i64 0, !12, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !12, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104}
!15 = !{!14, !6, i64 72}
!16 = !{!17, !10, i64 68}
!17 = !{!"", !10, i64 0, !12, i64 8, !18, i64 16, !18, i64 18, !18, i64 20, !18, i64 22, !10, i64 24, !12, i64 32, !12, i64 40, !18, i64 48, !10, i64 52, !12, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !7, i64 80, !7, i64 592, !12, i64 1104}
!18 = !{!"short", !7, i64 0}
!19 = !{!17, !12, i64 32}
!20 = !{!17, !18, i64 20}
!21 = !{!17, !18, i64 22}
!22 = !{!17, !12, i64 56}
!23 = !{!14, !6, i64 96}
!24 = !{!7, !7, i64 0}
!25 = !{!14, !12, i64 0}
!26 = !{!27, !6, i64 128}
!27 = !{!"mz_zip_internal_state_tag", !28, i64 0, !28, i64 32, !28, i64 64, !10, i64 96, !10, i64 100, !10, i64 104, !6, i64 112, !12, i64 120, !6, i64 128, !12, i64 136, !12, i64 144}
!28 = !{!"", !6, i64 0, !12, i64 8, !12, i64 16, !10, i64 24}
!29 = !{!14, !6, i64 40}
!30 = !{!14, !6, i64 64}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!34, !10, i64 0}
!34 = !{!"tinfl_decompressor_tag", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !7, i64 44, !12, i64 56, !12, i64 64, !7, i64 72, !7, i64 6216, !7, i64 7368, !7, i64 7496, !7, i64 7572, !7, i64 7860, !7, i64 7892, !7, i64 7911, !7, i64 7915}
!35 = !{!17, !12, i64 40}
!36 = distinct !{!36, !32}
!37 = !{!17, !10, i64 24}
!38 = !{!14, !6, i64 48}


; 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.mz_zip_archive_file_stat = type { i32, i64, i16, i16, i16, i16, i32, i64, i64, i16, i32, i64, i32, i32, i32, i32, [512 x i8], [512 x i8], i64 }
%struct.tinfl_decompressor_tag = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i64, i64, [3 x [1024 x i16]], [576 x i16], [64 x i16], [38 x i16], [288 x i8], [32 x i8], [19 x i8], [4 x i8], [457 x i8] }

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @mz_crc32(i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_set_error(ptr noundef, i32 noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mz_zip_reader_extract_to_callback(ptr noundef %0, i32 noundef %1, ptr noundef readonly %2, ptr noundef %3, i32 noundef %4) local_unnamed_addr #1 {
  %6 = alloca %struct.mz_zip_archive_file_stat, align 8
  %7 = alloca [8 x i32], align 16
  %8 = alloca %struct.tinfl_decompressor_tag, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 1112, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #4
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %19, label %11

11:                                               ; preds = %5
  %12 = getelementptr inbounds i8, ptr %0, i64 104
  %13 = load ptr, ptr %12, align 8, !tbaa !5
  %14 = icmp ne ptr %13, null
  %15 = icmp ne ptr %2, null
  %or.cond = and i1 %15, %14
  br i1 %or.cond, label %16, label %19

16:                                               ; preds = %11
  %17 = getelementptr inbounds i8, ptr %0, i64 72
  %18 = load ptr, ptr %17, align 8, !tbaa !12
  %.not193 = icmp eq ptr %18, null
  br i1 %.not193, label %19, label %21

19:                                               ; preds = %16, %11, %5
  %20 = tail call i32 @mz_zip_set_error(ptr noundef %0, i32 noundef 24)
  br label %206

21:                                               ; preds = %16
  %22 = call i32 @mz_zip_reader_file_stat(ptr noundef nonnull %0, i32 noundef %1, ptr noundef nonnull %6)
  %.not194 = icmp eq i32 %22, 0
  br i1 %.not194, label %206, label %23

23:                                               ; preds = %21
  %24 = getelementptr inbounds i8, ptr %6, i64 68
  %25 = load i32, ptr %24, align 4, !tbaa !13
  %26 = icmp eq i32 %25, 0
  %27 = getelementptr inbounds i8, ptr %6, i64 32
  %28 = load i64, ptr %27, align 8
  %29 = icmp ne i64 %28, 0
  %or.cond4 = select i1 %26, i1 %29, i1 false
  br i1 %or.cond4, label %30, label %206

30:                                               ; preds = %23
  %31 = getelementptr inbounds i8, ptr %6, i64 20
  %32 = load i16, ptr %31, align 4, !tbaa !16
  %33 = and i16 %32, 97
  %.not195 = icmp eq i16 %33, 0
  br i1 %.not195, label %36, label %34

34:                                               ; preds = %30
  %35 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 5)
  br label %206

36:                                               ; preds = %30
  %37 = and i32 %4, 1024
  %38 = icmp eq i32 %37, 0
  %39 = getelementptr inbounds i8, ptr %6, i64 22
  %40 = load i16, ptr %39, align 2
  %41 = and i16 %40, -9
  %42 = icmp ne i16 %41, 0
  %or.cond12 = select i1 %38, i1 %42, i1 false
  br i1 %or.cond12, label %43, label %45

43:                                               ; preds = %36
  %44 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 4)
  br label %206

45:                                               ; preds = %36
  %46 = getelementptr inbounds i8, ptr %6, i64 56
  %47 = load i64, ptr %46, align 8, !tbaa !17
  %48 = load ptr, ptr %17, align 8, !tbaa !12
  %49 = getelementptr inbounds i8, ptr %0, i64 96
  %50 = load ptr, ptr %49, align 8, !tbaa !18
  %51 = call i64 %48(ptr noundef %50, i64 noundef %47, ptr noundef nonnull %7, i64 noundef 30) #4
  %.not196 = icmp eq i64 %51, 30
  br i1 %.not196, label %54, label %52

52:                                               ; preds = %45
  %53 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 20)
  br label %206

54:                                               ; preds = %45
  %55 = load i32, ptr %7, align 16
  %.not197 = icmp eq i32 %55, 67324752
  br i1 %.not197, label %58, label %56

56:                                               ; preds = %54
  %57 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %206

58:                                               ; preds = %54
  %59 = getelementptr inbounds i8, ptr %7, i64 26
  %60 = load i16, ptr %59, align 2
  %61 = zext i16 %60 to i64
  %62 = getelementptr inbounds i8, ptr %7, i64 28
  %63 = load i16, ptr %62, align 4
  %64 = zext i16 %63 to i64
  %65 = add i64 %47, 30
  %66 = add i64 %65, %61
  %67 = add i64 %66, %64
  %68 = load i64, ptr %27, align 8
  %69 = add i64 %67, %68
  %70 = load i64, ptr %0, align 8, !tbaa !19
  %71 = icmp ugt i64 %69, %70
  br i1 %71, label %72, label %74

72:                                               ; preds = %58
  %73 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %206

74:                                               ; preds = %58
  %75 = load ptr, ptr %12, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %75, i64 128
  %77 = load ptr, ptr %76, align 8, !tbaa !20
  %.not198 = icmp eq ptr %77, null
  br i1 %.not198, label %80, label %78

78:                                               ; preds = %74
  %79 = getelementptr inbounds i8, ptr %77, i64 %67
  br label %92

80:                                               ; preds = %74
  %81 = call i64 @llvm.umin.i64(i64 %68, i64 65536)
  %82 = getelementptr inbounds i8, ptr %0, i64 40
  %83 = load ptr, ptr %82, align 8, !tbaa !23
  %84 = getelementptr inbounds i8, ptr %0, i64 64
  %85 = load ptr, ptr %84, align 8, !tbaa !24
  %86 = call ptr %83(ptr noundef %85, i64 noundef 1, i64 noundef %81) #4
  %87 = icmp eq ptr %86, null
  br i1 %87, label %88, label %90

88:                                               ; preds = %80
  %89 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 16)
  br label %206

90:                                               ; preds = %80
  %91 = load i64, ptr %27, align 8, !tbaa !25
  br label %92

92:                                               ; preds = %90, %78
  %93 = phi i64 [ %68, %78 ], [ %91, %90 ]
  %.0174 = phi i64 [ %68, %78 ], [ %81, %90 ]
  %.0167 = phi i64 [ %68, %78 ], [ 0, %90 ]
  %.0162 = phi i64 [ 0, %78 ], [ %91, %90 ]
  %.0152 = phi ptr [ %79, %78 ], [ %86, %90 ]
  %94 = load i16, ptr %39, align 2
  %95 = icmp ne i16 %94, 0
  %or.cond15 = select i1 %38, i1 %95, i1 false
  br i1 %or.cond15, label %133, label %96

96:                                               ; preds = %92
  %97 = load ptr, ptr %12, align 8, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %97, i64 128
  %99 = load ptr, ptr %98, align 8, !tbaa !20
  %.not199 = icmp eq ptr %99, null
  br i1 %.not199, label %.preheader244, label %112

.preheader244:                                    ; preds = %96
  %.not200259 = icmp eq i64 %.0162, 0
  br i1 %.not200259, label %.thread236, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader244
  br i1 %38, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %108
  %.0153263.us = phi i64 [ %109, %108 ], [ %67, %.lr.ph ]
  %.0157262.us = phi i64 [ %110, %108 ], [ 0, %.lr.ph ]
  %.1163261.us = phi i64 [ %111, %108 ], [ %.0162, %.lr.ph ]
  %.1176260.us = phi i64 [ %106, %108 ], [ 0, %.lr.ph ]
  %100 = call i64 @llvm.umin.i64(i64 %.0174, i64 %.1163261.us)
  %101 = load ptr, ptr %17, align 8, !tbaa !12
  %102 = load ptr, ptr %49, align 8, !tbaa !18
  %103 = call i64 %101(ptr noundef %102, i64 noundef %.0153263.us, ptr noundef %.0152, i64 noundef %100) #4
  %.not201.us = icmp eq i64 %103, %100
  br i1 %.not201.us, label %104, label %.thread230.sink.split

104:                                              ; preds = %.lr.ph.split.us
  %105 = and i64 %.1176260.us, 4294967295
  %106 = call i64 @mz_crc32(i64 noundef %105, ptr noundef %.0152, i64 noundef %100)
  %107 = call i64 %2(ptr noundef %3, i64 noundef %.0157262.us, ptr noundef %.0152, i64 noundef %100) #4
  %.not203.us = icmp eq i64 %107, %100
  br i1 %.not203.us, label %108, label %.thread230.sink.split

108:                                              ; preds = %104
  %109 = add i64 %.0153263.us, %100
  %110 = add i64 %.0157262.us, %100
  %111 = sub i64 %.1163261.us, %100
  %.not200.us = icmp eq i64 %111, 0
  br i1 %.not200.us, label %.thread236.loopexit, label %.lr.ph.split.us, !llvm.loop !26

112:                                              ; preds = %96
  %113 = call i64 %2(ptr noundef %3, i64 noundef 0, ptr noundef %.0152, i64 noundef %93) #4
  %114 = load i64, ptr %27, align 8, !tbaa !25
  %.not204 = icmp eq i64 %113, %114
  br i1 %.not204, label %117, label %115

115:                                              ; preds = %112
  %116 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 31)
  br label %121

117:                                              ; preds = %112
  br i1 %38, label %118, label %121

118:                                              ; preds = %117
  %119 = call i64 @mz_crc32(i64 noundef 0, ptr noundef %.0152, i64 noundef %113)
  %120 = trunc i64 %119 to i32
  br label %121

121:                                              ; preds = %117, %118, %115
  %.0175 = phi i32 [ 0, %115 ], [ 0, %117 ], [ %120, %118 ]
  %.0150 = phi i32 [ -1, %115 ], [ 0, %117 ], [ 0, %118 ]
  %122 = load i64, ptr %27, align 8, !tbaa !25
  br label %182

.lr.ph.split:                                     ; preds = %.lr.ph, %129
  %.0153263 = phi i64 [ %130, %129 ], [ %67, %.lr.ph ]
  %.0157262 = phi i64 [ %131, %129 ], [ 0, %.lr.ph ]
  %.1163261 = phi i64 [ %132, %129 ], [ %.0162, %.lr.ph ]
  %123 = call i64 @llvm.umin.i64(i64 %.0174, i64 %.1163261)
  %124 = load ptr, ptr %17, align 8, !tbaa !12
  %125 = load ptr, ptr %49, align 8, !tbaa !18
  %126 = call i64 %124(ptr noundef %125, i64 noundef %.0153263, ptr noundef %.0152, i64 noundef %123) #4
  %.not201 = icmp eq i64 %126, %123
  br i1 %.not201, label %127, label %.thread230.sink.split

127:                                              ; preds = %.lr.ph.split
  %128 = call i64 %2(ptr noundef %3, i64 noundef %.0157262, ptr noundef %.0152, i64 noundef %123) #4
  %.not203 = icmp eq i64 %128, %123
  br i1 %.not203, label %129, label %.thread230.sink.split

129:                                              ; preds = %127
  %130 = add i64 %.0153263, %123
  %131 = add i64 %.0157262, %123
  %132 = sub i64 %.1163261, %123
  %.not200 = icmp eq i64 %132, 0
  br i1 %.not200, label %.thread236, label %.lr.ph.split, !llvm.loop !26

133:                                              ; preds = %92
  call void @llvm.lifetime.start.p0(i64 8376, ptr nonnull %8) #4
  store i32 0, ptr %8, align 8, !tbaa !28
  %134 = getelementptr inbounds i8, ptr %0, i64 40
  %135 = load ptr, ptr %134, align 8, !tbaa !23
  %136 = getelementptr inbounds i8, ptr %0, i64 64
  %137 = load ptr, ptr %136, align 8, !tbaa !24
  %138 = call ptr %135(ptr noundef %137, i64 noundef 1, i64 noundef 32768) #4
  %139 = icmp eq ptr %138, null
  br i1 %139, label %141, label %.preheader

.preheader:                                       ; preds = %133
  %140 = getelementptr inbounds i8, ptr %6, i64 40
  br label %143

141:                                              ; preds = %133
  %142 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 16)
  br label %.loopexit

143:                                              ; preds = %.preheader, %179
  %.3178 = phi i32 [ %.5180, %179 ], [ 0, %.preheader ]
  %.0171 = phi i64 [ %165, %179 ], [ 0, %.preheader ]
  %.1168 = phi i64 [ %164, %179 ], [ %.0167, %.preheader ]
  %.2164 = phi i64 [ %.3165, %179 ], [ %.0162, %.preheader ]
  %.1158 = phi i64 [ %.3160, %179 ], [ 0, %.preheader ]
  %.1154 = phi i64 [ %.2155, %179 ], [ %67, %.preheader ]
  %144 = and i64 %.1158, 32767
  %145 = getelementptr inbounds i8, ptr %138, i64 %144
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #4
  %146 = sub nuw nsw i64 32768, %144
  store i64 %146, ptr %10, align 8, !tbaa !30
  %.not206 = icmp eq i64 %.1168, 0
  br i1 %.not206, label %147, label %159

147:                                              ; preds = %143
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 128
  %150 = load ptr, ptr %149, align 8, !tbaa !20
  %.not207 = icmp eq ptr %150, null
  br i1 %.not207, label %151, label %159

151:                                              ; preds = %147
  %152 = call i64 @llvm.umin.i64(i64 %.0174, i64 %.2164)
  %153 = load ptr, ptr %17, align 8, !tbaa !12
  %154 = load ptr, ptr %49, align 8, !tbaa !18
  %155 = call i64 %153(ptr noundef %154, i64 noundef %.1154, ptr noundef %.0152, i64 noundef %152) #4
  %.not208 = icmp eq i64 %155, %152
  br i1 %.not208, label %156, label %.thread

156:                                              ; preds = %151
  %157 = add i64 %.1154, %152
  %158 = sub i64 %.2164, %152
  br label %159

159:                                              ; preds = %156, %147, %143
  %.1172 = phi i64 [ %.0171, %143 ], [ %.0171, %147 ], [ 0, %156 ]
  %.2169 = phi i64 [ %.1168, %143 ], [ 0, %147 ], [ %152, %156 ]
  %.3165 = phi i64 [ %.2164, %143 ], [ %.2164, %147 ], [ %158, %156 ]
  %.2155 = phi i64 [ %.1154, %143 ], [ %.1154, %147 ], [ %157, %156 ]
  store i64 %.2169, ptr %9, align 8, !tbaa !30
  %160 = getelementptr inbounds i8, ptr %.0152, i64 %.1172
  %.not209 = icmp eq i64 %.3165, 0
  %161 = select i1 %.not209, i32 0, i32 2
  %162 = call i32 @tinfl_decompress(ptr noundef nonnull %8, ptr noundef %160, ptr noundef nonnull %9, ptr noundef nonnull %138, ptr noundef nonnull %145, ptr noundef nonnull %10, i32 noundef %161)
  %163 = load i64, ptr %9, align 8, !tbaa !30
  %164 = sub i64 %.2169, %163
  %165 = add i64 %163, %.1172
  %166 = load i64, ptr %10, align 8, !tbaa !30
  %.not210 = icmp eq i64 %166, 0
  br i1 %.not210, label %179, label %167

167:                                              ; preds = %159
  %168 = call i64 %2(ptr noundef %3, i64 noundef %.1158, ptr noundef nonnull %145, i64 noundef %166) #4
  %169 = load i64, ptr %10, align 8, !tbaa !30
  %.not211 = icmp eq i64 %168, %169
  br i1 %.not211, label %170, label %.thread

170:                                              ; preds = %167
  %171 = zext i32 %.3178 to i64
  %172 = call i64 @mz_crc32(i64 noundef %171, ptr noundef nonnull %145, i64 noundef %168)
  %173 = trunc i64 %172 to i32
  %174 = load i64, ptr %10, align 8, !tbaa !30
  %175 = add i64 %174, %.1158
  %176 = load i64, ptr %140, align 8, !tbaa !31
  %177 = icmp ugt i64 %175, %176
  br i1 %177, label %.thread, label %179

.thread:                                          ; preds = %170, %167, %151
  %.sink = phi i32 [ 20, %151 ], [ 31, %167 ], [ 11, %170 ]
  %.5180.ph = phi i32 [ %.3178, %151 ], [ %.3178, %167 ], [ %173, %170 ]
  %.3160.ph = phi i64 [ %.1158, %151 ], [ %.1158, %167 ], [ %175, %170 ]
  %178 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef %.sink)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  br label %.loopexit

179:                                              ; preds = %159, %170
  %.5180 = phi i32 [ %173, %170 ], [ %.3178, %159 ]
  %.3160 = phi i64 [ %175, %170 ], [ %.1158, %159 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  %180 = add i32 %162, -1
  %181 = icmp ult i32 %180, 2
  br i1 %181, label %143, label %.loopexit, !llvm.loop !32

.loopexit:                                        ; preds = %179, %.thread, %141
  %.6 = phi i32 [ 0, %141 ], [ %.5180.ph, %.thread ], [ %.5180, %179 ]
  %.4161 = phi i64 [ 0, %141 ], [ %.3160.ph, %.thread ], [ %.3160, %179 ]
  %.2 = phi i32 [ -1, %141 ], [ -1, %.thread ], [ %162, %179 ]
  call void @llvm.lifetime.end.p0(i64 8376, ptr nonnull %8) #4
  br label %182

182:                                              ; preds = %121, %.loopexit
  %.7 = phi i32 [ %.6, %.loopexit ], [ %.0175, %121 ]
  %.5 = phi i64 [ %.4161, %.loopexit ], [ %122, %121 ]
  %.0151 = phi ptr [ %138, %.loopexit ], [ null, %121 ]
  %.3 = phi i32 [ %.2, %.loopexit ], [ %.0150, %121 ]
  %183 = icmp eq i32 %.3, 0
  br i1 %183, label %.thread236, label %.thread230

.thread236.loopexit:                              ; preds = %108
  %184 = trunc i64 %106 to i32
  br label %.thread236

.thread236:                                       ; preds = %129, %.thread236.loopexit, %.preheader244, %182
  %.0151243 = phi ptr [ %.0151, %182 ], [ null, %.preheader244 ], [ null, %.thread236.loopexit ], [ null, %129 ]
  %.5242 = phi i64 [ %.5, %182 ], [ 0, %.preheader244 ], [ %110, %.thread236.loopexit ], [ %131, %129 ]
  %.7241 = phi i32 [ %.7, %182 ], [ 0, %.preheader244 ], [ %184, %.thread236.loopexit ], [ 0, %129 ]
  br i1 %38, label %185, label %.thread230

185:                                              ; preds = %.thread236
  %186 = getelementptr inbounds i8, ptr %6, i64 40
  %187 = load i64, ptr %186, align 8, !tbaa !31
  %.not213 = icmp eq i64 %.5242, %187
  br i1 %.not213, label %188, label %.thread230.sink.split

188:                                              ; preds = %185
  %189 = getelementptr inbounds i8, ptr %6, i64 24
  %190 = load i32, ptr %189, align 8, !tbaa !33
  %.not214 = icmp eq i32 %.7241, %190
  br i1 %.not214, label %.thread230, label %.thread230.sink.split

.thread230.sink.split:                            ; preds = %127, %.lr.ph.split, %104, %.lr.ph.split.us, %188, %185
  %.sink301 = phi i32 [ 13, %185 ], [ 11, %188 ], [ 20, %.lr.ph.split.us ], [ 31, %104 ], [ 20, %.lr.ph.split ], [ 31, %127 ]
  %.0151235.ph = phi ptr [ %.0151243, %185 ], [ %.0151243, %188 ], [ null, %.lr.ph.split.us ], [ null, %104 ], [ null, %.lr.ph.split ], [ null, %127 ]
  %191 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef %.sink301)
  br label %.thread230

.thread230:                                       ; preds = %.thread230.sink.split, %188, %.thread236, %182
  %.0151235 = phi ptr [ %.0151243, %.thread236 ], [ %.0151243, %188 ], [ %.0151, %182 ], [ %.0151235.ph, %.thread230.sink.split ]
  %.4 = phi i32 [ 1, %.thread236 ], [ 1, %188 ], [ 0, %182 ], [ 0, %.thread230.sink.split ]
  %192 = load ptr, ptr %12, align 8, !tbaa !5
  %193 = getelementptr inbounds i8, ptr %192, i64 128
  %194 = load ptr, ptr %193, align 8, !tbaa !20
  %.not215 = icmp eq ptr %194, null
  br i1 %.not215, label %195, label %200

195:                                              ; preds = %.thread230
  %196 = getelementptr inbounds i8, ptr %0, i64 48
  %197 = load ptr, ptr %196, align 8, !tbaa !34
  %198 = getelementptr inbounds i8, ptr %0, i64 64
  %199 = load ptr, ptr %198, align 8, !tbaa !24
  call void %197(ptr noundef %199, ptr noundef %.0152) #4
  br label %200

200:                                              ; preds = %195, %.thread230
  %.not216 = icmp eq ptr %.0151235, null
  br i1 %.not216, label %206, label %201

201:                                              ; preds = %200
  %202 = getelementptr inbounds i8, ptr %0, i64 48
  %203 = load ptr, ptr %202, align 8, !tbaa !34
  %204 = getelementptr inbounds i8, ptr %0, i64 64
  %205 = load ptr, ptr %204, align 8, !tbaa !24
  call void %203(ptr noundef %205, ptr noundef nonnull %.0151235) #4
  br label %206

206:                                              ; preds = %200, %201, %23, %21, %88, %72, %56, %52, %43, %34, %19
  %.0 = phi i32 [ %35, %34 ], [ %44, %43 ], [ %53, %52 ], [ %57, %56 ], [ %73, %72 ], [ %89, %88 ], [ %20, %19 ], [ 0, %21 ], [ 1, %23 ], [ %.4, %201 ], [ %.4, %200 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 1112, ptr nonnull %6) #4
  ret i32 %.0
}

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { alwaysinline 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !11, i64 104}
!6 = !{!"", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !7, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!6, !11, i64 72}
!13 = !{!14, !10, i64 68}
!14 = !{!"", !10, i64 0, !7, i64 8, !15, i64 16, !15, i64 18, !15, i64 20, !15, i64 22, !10, i64 24, !7, i64 32, !7, i64 40, !15, i64 48, !10, i64 52, !7, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !8, i64 80, !8, i64 592, !7, i64 1104}
!15 = !{!"short", !8, i64 0}
!16 = !{!14, !15, i64 20}
!17 = !{!14, !7, i64 56}
!18 = !{!6, !11, i64 96}
!19 = !{!6, !7, i64 0}
!20 = !{!21, !11, i64 128}
!21 = !{!"mz_zip_internal_state_tag", !22, i64 0, !22, i64 32, !22, i64 64, !10, i64 96, !10, i64 100, !10, i64 104, !11, i64 112, !7, i64 120, !11, i64 128, !7, i64 136, !7, i64 144}
!22 = !{!"", !11, i64 0, !7, i64 8, !7, i64 16, !10, i64 24}
!23 = !{!6, !11, i64 40}
!24 = !{!6, !11, i64 64}
!25 = !{!14, !7, i64 32}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!29, !10, i64 0}
!29 = !{!"tinfl_decompressor_tag", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !8, i64 44, !7, i64 56, !7, i64 64, !8, i64 72, !8, i64 6216, !8, i64 7368, !8, i64 7496, !8, i64 7572, !8, i64 7860, !8, i64 7892, !8, i64 7911, !8, i64 7915}
!30 = !{!7, !7, i64 0}
!31 = !{!14, !7, i64 40}
!32 = distinct !{!32, !27}
!33 = !{!14, !10, i64 24}
!34 = !{!6, !11, i64 48}


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