; LLVM IR from jan-van-bergen/GPU-Raytracer :: include/miniz (miniz)

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

; 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: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_set_error(ptr noundef, i32 noundef) #1

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #2

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

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

42:                                               ; preds = %3
  %43 = load ptr, ptr %5, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.mz_zip_archive, ptr %43, i32 0, i32 15
  %45 = load ptr, ptr %44, align 8, !tbaa !13
  %46 = icmp ne ptr %45, null
  br i1 %46, label %47, label %62

47:                                               ; preds = %42
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.mz_zip_archive, ptr %48, i32 0, i32 7
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  %51 = icmp ne ptr %50, null
  br i1 %51, label %52, label %62

52:                                               ; preds = %47
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.mz_zip_archive, ptr %53, i32 0, i32 8
  %55 = load ptr, ptr %54, align 8, !tbaa !16
  %56 = icmp ne ptr %55, null
  br i1 %56, label %57, label %62

57:                                               ; preds = %52
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.mz_zip_archive, ptr %58, i32 0, i32 11
  %60 = load ptr, ptr %59, align 8, !tbaa !17
  %61 = icmp ne ptr %60, null
  br i1 %61, label %65, label %62

62:                                               ; preds = %57, %52, %47, %42, %3
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = call i32 @mz_zip_set_error(ptr noundef %63, i32 noundef 24)
  store i32 %64, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

65:                                               ; preds = %57
  %66 = load i32, ptr %6, align 4, !tbaa !9
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.mz_zip_archive, ptr %67, i32 0, i32 2
  %69 = load i32, ptr %68, align 8, !tbaa !18
  %70 = icmp ugt i32 %66, %69
  br i1 %70, label %71, label %74

71:                                               ; preds = %65
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = call i32 @mz_zip_set_error(ptr noundef %72, i32 noundef 24)
  store i32 %73, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

74:                                               ; preds = %65
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.mz_zip_archive, ptr %75, i32 0, i32 15
  %77 = load ptr, ptr %76, align 8, !tbaa !13
  store ptr %77, ptr %9, align 8, !tbaa !5
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = load i32, ptr %6, align 4, !tbaa !9
  %80 = call ptr @mz_zip_get_cdh(ptr noundef %78, i32 noundef %79)
  store ptr %80, ptr %10, align 8, !tbaa !5
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = load i32, ptr %6, align 4, !tbaa !9
  %83 = load ptr, ptr %10, align 8, !tbaa !5
  %84 = call i32 @mz_zip_file_stat_internal(ptr noundef %81, i32 noundef %82, ptr noundef %83, ptr noundef %8, ptr noundef %11)
  %85 = icmp ne i32 %84, 0
  br i1 %85, label %87, label %86

86:                                               ; preds = %74
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

87:                                               ; preds = %74
  %88 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 14
  %89 = load i32, ptr %88, align 4, !tbaa !19
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %95, label %91

91:                                               ; preds = %87
  %92 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 9
  %93 = load i64, ptr %92, align 8, !tbaa !22
  %94 = icmp ne i64 %93, 0
  br i1 %94, label %96, label %95

95:                                               ; preds = %91, %87
  store i32 1, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

96:                                               ; preds = %91
  %97 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 15
  %98 = load i32, ptr %97, align 8, !tbaa !23
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %100, label %103

100:                                              ; preds = %96
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = call i32 @mz_zip_set_error(ptr noundef %101, i32 noundef 5)
  store i32 %102, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

103:                                              ; preds = %96
  %104 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 5
  %105 = load i16, ptr %104, align 2, !tbaa !24
  %106 = zext i16 %105 to i32
  %107 = icmp ne i32 %106, 0
  br i1 %107, label %108, label %116

108:                                              ; preds = %103
  %109 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 5
  %110 = load i16, ptr %109, align 2, !tbaa !24
  %111 = zext i16 %110 to i32
  %112 = icmp ne i32 %111, 8
  br i1 %112, label %113, label %116

113:                                              ; preds = %108
  %114 = load ptr, ptr %5, align 8, !tbaa !5
  %115 = call i32 @mz_zip_set_error(ptr noundef %114, i32 noundef 4)
  store i32 %115, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

116:                                              ; preds = %108, %103
  %117 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 16
  %118 = load i32, ptr %117, align 4, !tbaa !25
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %123, label %120

120:                                              ; preds = %116
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = call i32 @mz_zip_set_error(ptr noundef %121, i32 noundef 6)
  store i32 %122, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

123:                                              ; preds = %116
  %124 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 12
  %125 = load i64, ptr %124, align 8, !tbaa !26
  store i64 %125, ptr %15, align 8, !tbaa !11
  %126 = load ptr, ptr %5, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.mz_zip_archive, ptr %126, i32 0, i32 11
  %128 = load ptr, ptr %127, align 8, !tbaa !17
  %129 = load ptr, ptr %5, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.mz_zip_archive, ptr %129, i32 0, i32 14
  %131 = load ptr, ptr %130, align 8, !tbaa !27
  %132 = load i64, ptr %15, align 8, !tbaa !11
  %133 = load ptr, ptr %14, align 8, !tbaa !5
  %134 = call i64 %128(ptr noundef %131, i64 noundef %132, ptr noundef %133, i64 noundef 30)
  %135 = icmp ne i64 %134, 30
  br i1 %135, label %136, label %139

136:                                              ; preds = %123
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = call i32 @mz_zip_set_error(ptr noundef %137, i32 noundef 20)
  store i32 %138, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

139:                                              ; preds = %123
  %140 = load ptr, ptr %14, align 8, !tbaa !5
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = icmp ne i32 %141, 67324752
  br i1 %142, label %143, label %146

143:                                              ; preds = %139
  %144 = load ptr, ptr %5, align 8, !tbaa !5
  %145 = call i32 @mz_zip_set_error(ptr noundef %144, i32 noundef 9)
  store i32 %145, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

146:                                              ; preds = %139
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = getelementptr inbounds i8, ptr %147, i64 26
  %149 = load i16, ptr %148, align 2, !tbaa !28
  %150 = zext i16 %149 to i32
  store i32 %150, ptr %16, align 4, !tbaa !9
  %151 = load ptr, ptr %14, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i64 28
  %153 = load i16, ptr %152, align 2, !tbaa !28
  %154 = zext i16 %153 to i32
  store i32 %154, ptr %17, align 4, !tbaa !9
  %155 = load ptr, ptr %14, align 8, !tbaa !5
  %156 = getelementptr inbounds i8, ptr %155, i64 18
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = zext i32 %157 to i64
  store i64 %158, ptr %19, align 8, !tbaa !11
  %159 = load ptr, ptr %14, align 8, !tbaa !5
  %160 = getelementptr inbounds i8, ptr %159, i64 22
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = zext i32 %161 to i64
  store i64 %162, ptr %20, align 8, !tbaa !11
  %163 = load ptr, ptr %14, align 8, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %163, i64 14
  %165 = load i32, ptr %164, align 4, !tbaa !9
  store i32 %165, ptr %18, align 4, !tbaa !9
  %166 = load ptr, ptr %14, align 8, !tbaa !5
  %167 = getelementptr inbounds i8, ptr %166, i64 6
  %168 = load i16, ptr %167, align 2, !tbaa !28
  %169 = zext i16 %168 to i32
  store i32 %169, ptr %23, align 4, !tbaa !9
  %170 = load i32, ptr %23, align 4, !tbaa !9
  %171 = and i32 %170, 8
  %172 = icmp ne i32 %171, 0
  %173 = zext i1 %172 to i32
  store i32 %173, ptr %22, align 4, !tbaa !9
  %174 = load i32, ptr %16, align 4, !tbaa !9
  %175 = zext i32 %174 to i64
  %176 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 17
  %177 = getelementptr inbounds [512 x i8], ptr %176, i64 0, i64 0
  %178 = call i64 @strlen(ptr noundef %177) #5
  %179 = icmp ne i64 %175, %178
  br i1 %179, label %180, label %183

180:                                              ; preds = %146
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = call i32 @mz_zip_set_error(ptr noundef %181, i32 noundef 9)
  store i32 %182, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

183:                                              ; preds = %146
  %184 = load i64, ptr %15, align 8, !tbaa !11
  %185 = add i64 %184, 30
  %186 = load i32, ptr %16, align 4, !tbaa !9
  %187 = zext i32 %186 to i64
  %188 = add i64 %185, %187
  %189 = load i32, ptr %17, align 4, !tbaa !9
  %190 = zext i32 %189 to i64
  %191 = add i64 %188, %190
  %192 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 8
  %193 = load i64, ptr %192, align 8, !tbaa !29
  %194 = add i64 %191, %193
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.mz_zip_archive, ptr %195, i32 0, i32 0
  %197 = load i64, ptr %196, align 8, !tbaa !30
  %198 = icmp ugt i64 %194, %197
  br i1 %198, label %199, label %202

199:                                              ; preds = %183
  %200 = load ptr, ptr %5, align 8, !tbaa !5
  %201 = call i32 @mz_zip_set_error(ptr noundef %200, i32 noundef 9)
  store i32 %201, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

202:                                              ; preds = %183
  %203 = load ptr, ptr %5, align 8, !tbaa !5
  %204 = load i32, ptr %16, align 4, !tbaa !9
  %205 = load i32, ptr %17, align 4, !tbaa !9
  %206 = icmp ugt i32 %204, %205
  br i1 %206, label %207, label %209

207:                                              ; preds = %202
  %208 = load i32, ptr %16, align 4, !tbaa !9
  br label %211

209:                                              ; preds = %202
  %210 = load i32, ptr %17, align 4, !tbaa !9
  br label %211

211:                                              ; preds = %209, %207
  %212 = phi i32 [ %208, %207 ], [ %210, %209 ]
  %213 = zext i32 %212 to i64
  %214 = call i32 @mz_zip_array_resize(ptr noundef %203, ptr noundef %24, i64 noundef %213, i32 noundef 0)
  %215 = icmp ne i32 %214, 0
  br i1 %215, label %219, label %216

216:                                              ; preds = %211
  %217 = load ptr, ptr %5, align 8, !tbaa !5
  %218 = call i32 @mz_zip_set_error(ptr noundef %217, i32 noundef 16)
  br label %538

219:                                              ; preds = %211
  %220 = load i32, ptr %16, align 4, !tbaa !9
  %221 = icmp ne i32 %220, 0
  br i1 %221, label %222, label %255

222:                                              ; preds = %219
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.mz_zip_archive, ptr %223, i32 0, i32 11
  %225 = load ptr, ptr %224, align 8, !tbaa !17
  %226 = load ptr, ptr %5, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.mz_zip_archive, ptr %226, i32 0, i32 14
  %228 = load ptr, ptr %227, align 8, !tbaa !27
  %229 = load i64, ptr %15, align 8, !tbaa !11
  %230 = add i64 %229, 30
  %231 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %232 = load ptr, ptr %231, align 8, !tbaa !31
  %233 = load i32, ptr %16, align 4, !tbaa !9
  %234 = zext i32 %233 to i64
  %235 = call i64 %225(ptr noundef %228, i64 noundef %230, ptr noundef %232, i64 noundef %234)
  %236 = load i32, ptr %16, align 4, !tbaa !9
  %237 = zext i32 %236 to i64
  %238 = icmp ne i64 %235, %237
  br i1 %238, label %239, label %242

239:                                              ; preds = %222
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  %241 = call i32 @mz_zip_set_error(ptr noundef %240, i32 noundef 20)
  br label %538

242:                                              ; preds = %222
  %243 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 17
  %244 = getelementptr inbounds [512 x i8], ptr %243, i64 0, i64 0
  %245 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %246 = load ptr, ptr %245, align 8, !tbaa !31
  %247 = load i32, ptr %16, align 4, !tbaa !9
  %248 = zext i32 %247 to i64
  %249 = call i32 @memcmp(ptr noundef %244, ptr noundef %246, i64 noundef %248) #5
  %250 = icmp ne i32 %249, 0
  br i1 %250, label %251, label %254

251:                                              ; preds = %242
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = call i32 @mz_zip_set_error(ptr noundef %252, i32 noundef 30)
  br label %538

254:                                              ; preds = %242
  br label %255

255:                                              ; preds = %254, %219
  %256 = load i32, ptr %17, align 4, !tbaa !9
  %257 = icmp ne i32 %256, 0
  br i1 %257, label %258, label %368

258:                                              ; preds = %255
  %259 = load i64, ptr %19, align 8, !tbaa !11
  %260 = icmp eq i64 %259, 4294967295
  br i1 %260, label %264, label %261

261:                                              ; preds = %258
  %262 = load i64, ptr %20, align 8, !tbaa !11
  %263 = icmp eq i64 %262, 4294967295
  br i1 %263, label %264, label %368

264:                                              ; preds = %261, %258
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %265 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %265, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  %266 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %267 = load ptr, ptr %266, align 8, !tbaa !31
  store ptr %267, ptr %27, align 8, !tbaa !5
  %268 = load ptr, ptr %5, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.mz_zip_archive, ptr %268, i32 0, i32 11
  %270 = load ptr, ptr %269, align 8, !tbaa !17
  %271 = load ptr, ptr %5, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.mz_zip_archive, ptr %271, i32 0, i32 14
  %273 = load ptr, ptr %272, align 8, !tbaa !27
  %274 = load i64, ptr %15, align 8, !tbaa !11
  %275 = add i64 %274, 30
  %276 = load i32, ptr %16, align 4, !tbaa !9
  %277 = zext i32 %276 to i64
  %278 = add i64 %275, %277
  %279 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %280 = load ptr, ptr %279, align 8, !tbaa !31
  %281 = load i32, ptr %17, align 4, !tbaa !9
  %282 = zext i32 %281 to i64
  %283 = call i64 %270(ptr noundef %273, i64 noundef %278, ptr noundef %280, i64 noundef %282)
  %284 = load i32, ptr %17, align 4, !tbaa !9
  %285 = zext i32 %284 to i64
  %286 = icmp ne i64 %283, %285
  br i1 %286, label %287, label %290

287:                                              ; preds = %264
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = call i32 @mz_zip_set_error(ptr noundef %288, i32 noundef 20)
  store i32 2, ptr %25, align 4
  br label %365

290:                                              ; preds = %264
  br label %291

291:                                              ; preds = %361, %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %292 = load i32, ptr %26, align 4, !tbaa !9
  %293 = zext i32 %292 to i64
  %294 = icmp ult i64 %293, 4
  br i1 %294, label %295, label %298

295:                                              ; preds = %291
  %296 = load ptr, ptr %5, align 8, !tbaa !5
  %297 = call i32 @mz_zip_set_error(ptr noundef %296, i32 noundef 9)
  store i32 2, ptr %25, align 4
  br label %358

298:                                              ; preds = %291
  %299 = load ptr, ptr %27, align 8, !tbaa !5
  %300 = load i16, ptr %299, align 2, !tbaa !28
  %301 = zext i16 %300 to i32
  store i32 %301, ptr %28, align 4, !tbaa !9
  %302 = load ptr, ptr %27, align 8, !tbaa !5
  %303 = getelementptr inbounds i8, ptr %302, i64 2
  %304 = load i16, ptr %303, align 2, !tbaa !28
  %305 = zext i16 %304 to i32
  store i32 %305, ptr %29, align 4, !tbaa !9
  %306 = load i32, ptr %29, align 4, !tbaa !9
  %307 = zext i32 %306 to i64
  %308 = add i64 %307, 4
  %309 = trunc i64 %308 to i32
  store i32 %309, ptr %30, align 4, !tbaa !9
  %310 = load i32, ptr %30, align 4, !tbaa !9
  %311 = load i32, ptr %26, align 4, !tbaa !9
  %312 = icmp ugt i32 %310, %311
  br i1 %312, label %313, label %316

313:                                              ; preds = %298
  %314 = load ptr, ptr %5, align 8, !tbaa !5
  %315 = call i32 @mz_zip_set_error(ptr noundef %314, i32 noundef 9)
  store i32 2, ptr %25, align 4
  br label %358

316:                                              ; preds = %298
  %317 = load i32, ptr %28, align 4, !tbaa !9
  %318 = icmp eq i32 %317, 1
  br i1 %318, label %319, label %350

319:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %320 = load ptr, ptr %27, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %320, i64 4
  store ptr %321, ptr %31, align 8, !tbaa !5
  %322 = load i32, ptr %29, align 4, !tbaa !9
  %323 = zext i32 %322 to i64
  %324 = icmp ult i64 %323, 16
  br i1 %324, label %325, label %328

325:                                              ; preds = %319
  %326 = load ptr, ptr %5, align 8, !tbaa !5
  %327 = call i32 @mz_zip_set_error(ptr noundef %326, i32 noundef 9)
  store i32 2, ptr %25, align 4
  br label %349

328:                                              ; preds = %319
  %329 = load ptr, ptr %31, align 8, !tbaa !5
  %330 = load i32, ptr %329, align 4, !tbaa !9
  %331 = zext i32 %330 to i64
  %332 = load ptr, ptr %31, align 8, !tbaa !5
  %333 = getelementptr inbounds i8, ptr %332, i64 4
  %334 = load i32, ptr %333, align 4, !tbaa !9
  %335 = zext i32 %334 to i64
  %336 = shl i64 %335, 32
  %337 = or i64 %331, %336
  store i64 %337, ptr %20, align 8, !tbaa !11
  %338 = load ptr, ptr %31, align 8, !tbaa !5
  %339 = getelementptr inbounds i8, ptr %338, i64 8
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = zext i32 %340 to i64
  %342 = load ptr, ptr %31, align 8, !tbaa !5
  %343 = getelementptr inbounds i8, ptr %342, i64 8
  %344 = getelementptr inbounds i8, ptr %343, i64 4
  %345 = load i32, ptr %344, align 4, !tbaa !9
  %346 = zext i32 %345 to i64
  %347 = shl i64 %346, 32
  %348 = or i64 %341, %347
  store i64 %348, ptr %19, align 8, !tbaa !11
  store i32 1, ptr %12, align 4, !tbaa !9
  store i32 3, ptr %25, align 4
  br label %349

349:                                              ; preds = %328, %325
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  br label %358

350:                                              ; preds = %316
  %351 = load i32, ptr %30, align 4, !tbaa !9
  %352 = load ptr, ptr %27, align 8, !tbaa !5
  %353 = zext i32 %351 to i64
  %354 = getelementptr inbounds i8, ptr %352, i64 %353
  store ptr %354, ptr %27, align 8, !tbaa !5
  %355 = load i32, ptr %30, align 4, !tbaa !9
  %356 = load i32, ptr %26, align 4, !tbaa !9
  %357 = sub i32 %356, %355
  store i32 %357, ptr %26, align 4, !tbaa !9
  store i32 0, ptr %25, align 4
  br label %358

358:                                              ; preds = %350, %349, %313, %295
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  %359 = load i32, ptr %25, align 4
  switch i32 %359, label %365 [
    i32 0, label %360
    i32 3, label %364
  ]

360:                                              ; preds = %358
  br label %361

361:                                              ; preds = %360
  %362 = load i32, ptr %26, align 4, !tbaa !9
  %363 = icmp ne i32 %362, 0
  br i1 %363, label %291, label %364, !llvm.loop !33

364:                                              ; preds = %361, %358
  store i32 0, ptr %25, align 4
  br label %365

365:                                              ; preds = %364, %358, %287
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  %366 = load i32, ptr %25, align 4
  switch i32 %366, label %540 [
    i32 0, label %367
    i32 2, label %538
  ]

367:                                              ; preds = %365
  br label %368

368:                                              ; preds = %367, %261, %255
  %369 = load i32, ptr %22, align 4, !tbaa !9
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %498

371:                                              ; preds = %368
  %372 = load i64, ptr %19, align 8, !tbaa !11
  %373 = icmp ne i64 %372, 0
  br i1 %373, label %498, label %374

374:                                              ; preds = %371
  %375 = load i32, ptr %18, align 4, !tbaa !9
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %498, label %377

377:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  store i64 0, ptr %36, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  store i64 0, ptr %37, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %378 = load ptr, ptr %9, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %378, i32 0, i32 4
  %380 = load i32, ptr %379, align 4, !tbaa !35
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %385, label %382

382:                                              ; preds = %377
  %383 = load i32, ptr %12, align 4, !tbaa !9
  %384 = icmp ne i32 %383, 0
  br label %385

385:                                              ; preds = %382, %377
  %386 = phi i1 [ true, %377 ], [ %384, %382 ]
  %387 = zext i1 %386 to i64
  %388 = select i1 %386, i32 6, i32 4
  store i32 %388, ptr %38, align 4, !tbaa !9
  %389 = load ptr, ptr %5, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.mz_zip_archive, ptr %389, i32 0, i32 11
  %391 = load ptr, ptr %390, align 8, !tbaa !17
  %392 = load ptr, ptr %5, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.mz_zip_archive, ptr %392, i32 0, i32 14
  %394 = load ptr, ptr %393, align 8, !tbaa !27
  %395 = load i64, ptr %15, align 8, !tbaa !11
  %396 = add i64 %395, 30
  %397 = load i32, ptr %16, align 4, !tbaa !9
  %398 = zext i32 %397 to i64
  %399 = add i64 %396, %398
  %400 = load i32, ptr %17, align 4, !tbaa !9
  %401 = zext i32 %400 to i64
  %402 = add i64 %399, %401
  %403 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 8
  %404 = load i64, ptr %403, align 8, !tbaa !29
  %405 = add i64 %402, %404
  %406 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %407 = load i32, ptr %38, align 4, !tbaa !9
  %408 = zext i32 %407 to i64
  %409 = mul i64 4, %408
  %410 = call i64 %391(ptr noundef %394, i64 noundef %405, ptr noundef %406, i64 noundef %409)
  %411 = load i32, ptr %38, align 4, !tbaa !9
  %412 = zext i32 %411 to i64
  %413 = mul i64 4, %412
  %414 = icmp ne i64 %410, %413
  br i1 %414, label %415, label %418

415:                                              ; preds = %385
  %416 = load ptr, ptr %5, align 8, !tbaa !5
  %417 = call i32 @mz_zip_set_error(ptr noundef %416, i32 noundef 20)
  store i32 2, ptr %25, align 4
  br label %495

418:                                              ; preds = %385
  %419 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %420 = load i32, ptr %419, align 16, !tbaa !9
  %421 = icmp eq i32 %420, 134695760
  %422 = zext i1 %421 to i32
  store i32 %422, ptr %33, align 4, !tbaa !9
  %423 = load i32, ptr %33, align 4, !tbaa !9
  %424 = icmp ne i32 %423, 0
  br i1 %424, label %425, label %428

425:                                              ; preds = %418
  %426 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %427 = getelementptr inbounds i8, ptr %426, i64 4
  br label %430

428:                                              ; preds = %418
  %429 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  br label %430

430:                                              ; preds = %428, %425
  %431 = phi ptr [ %427, %425 ], [ %429, %428 ]
  store ptr %431, ptr %34, align 8, !tbaa !5
  %432 = load ptr, ptr %34, align 8, !tbaa !5
  %433 = load i32, ptr %432, align 4, !tbaa !9
  store i32 %433, ptr %35, align 4, !tbaa !9
  %434 = load ptr, ptr %9, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %434, i32 0, i32 4
  %436 = load i32, ptr %435, align 4, !tbaa !35
  %437 = icmp ne i32 %436, 0
  br i1 %437, label %441, label %438

438:                                              ; preds = %430
  %439 = load i32, ptr %12, align 4, !tbaa !9
  %440 = icmp ne i32 %439, 0
  br i1 %440, label %441, label %466

441:                                              ; preds = %438, %430
  %442 = load ptr, ptr %34, align 8, !tbaa !5
  %443 = getelementptr inbounds i8, ptr %442, i64 4
  %444 = load i32, ptr %443, align 4, !tbaa !9
  %445 = zext i32 %444 to i64
  %446 = load ptr, ptr %34, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %446, i64 4
  %448 = getelementptr inbounds i8, ptr %447, i64 4
  %449 = load i32, ptr %448, align 4, !tbaa !9
  %450 = zext i32 %449 to i64
  %451 = shl i64 %450, 32
  %452 = or i64 %445, %451
  store i64 %452, ptr %36, align 8, !tbaa !11
  %453 = load ptr, ptr %34, align 8, !tbaa !5
  %454 = getelementptr inbounds i8, ptr %453, i64 4
  %455 = getelementptr inbounds i8, ptr %454, i64 8
  %456 = load i32, ptr %455, align 4, !tbaa !9
  %457 = zext i32 %456 to i64
  %458 = load ptr, ptr %34, align 8, !tbaa !5
  %459 = getelementptr inbounds i8, ptr %458, i64 4
  %460 = getelementptr inbounds i8, ptr %459, i64 8
  %461 = getelementptr inbounds i8, ptr %460, i64 4
  %462 = load i32, ptr %461, align 4, !tbaa !9
  %463 = zext i32 %462 to i64
  %464 = shl i64 %463, 32
  %465 = or i64 %457, %464
  store i64 %465, ptr %37, align 8, !tbaa !11
  br label %476

466:                                              ; preds = %438
  %467 = load ptr, ptr %34, align 8, !tbaa !5
  %468 = getelementptr inbounds i8, ptr %467, i64 4
  %469 = load i32, ptr %468, align 4, !tbaa !9
  %470 = zext i32 %469 to i64
  store i64 %470, ptr %36, align 8, !tbaa !11
  %471 = load ptr, ptr %34, align 8, !tbaa !5
  %472 = getelementptr inbounds i8, ptr %471, i64 4
  %473 = getelementptr inbounds i8, ptr %472, i64 4
  %474 = load i32, ptr %473, align 4, !tbaa !9
  %475 = zext i32 %474 to i64
  store i64 %475, ptr %37, align 8, !tbaa !11
  br label %476

476:                                              ; preds = %466, %441
  %477 = load i32, ptr %35, align 4, !tbaa !9
  %478 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 7
  %479 = load i32, ptr %478, align 8, !tbaa !37
  %480 = icmp ne i32 %477, %479
  br i1 %480, label %491, label %481

481:                                              ; preds = %476
  %482 = load i64, ptr %36, align 8, !tbaa !11
  %483 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 8
  %484 = load i64, ptr %483, align 8, !tbaa !29
  %485 = icmp ne i64 %482, %484
  br i1 %485, label %491, label %486

486:                                              ; preds = %481
  %487 = load i64, ptr %37, align 8, !tbaa !11
  %488 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 9
  %489 = load i64, ptr %488, align 8, !tbaa !22
  %490 = icmp ne i64 %487, %489
  br i1 %490, label %491, label %494

491:                                              ; preds = %486, %481, %476
  %492 = load ptr, ptr %5, align 8, !tbaa !5
  %493 = call i32 @mz_zip_set_error(ptr noundef %492, i32 noundef 30)
  store i32 2, ptr %25, align 4
  br label %495

494:                                              ; preds = %486
  store i32 0, ptr %25, align 4
  br label %495

495:                                              ; preds = %494, %491, %415
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #4
  %496 = load i32, ptr %25, align 4
  switch i32 %496, label %540 [
    i32 0, label %497
    i32 2, label %538
  ]

497:                                              ; preds = %495
  br label %517

498:                                              ; preds = %374, %371, %368
  %499 = load i32, ptr %18, align 4, !tbaa !9
  %500 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 7
  %501 = load i32, ptr %500, align 8, !tbaa !37
  %502 = icmp ne i32 %499, %501
  br i1 %502, label %513, label %503

503:                                              ; preds = %498
  %504 = load i64, ptr %19, align 8, !tbaa !11
  %505 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 8
  %506 = load i64, ptr %505, align 8, !tbaa !29
  %507 = icmp ne i64 %504, %506
  br i1 %507, label %513, label %508

508:                                              ; preds = %503
  %509 = load i64, ptr %20, align 8, !tbaa !11
  %510 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 9
  %511 = load i64, ptr %510, align 8, !tbaa !22
  %512 = icmp ne i64 %509, %511
  br i1 %512, label %513, label %516

513:                                              ; preds = %508, %503, %498
  %514 = load ptr, ptr %5, align 8, !tbaa !5
  %515 = call i32 @mz_zip_set_error(ptr noundef %514, i32 noundef 30)
  br label %538

516:                                              ; preds = %508
  br label %517

517:                                              ; preds = %516, %497
  %518 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mz_zip_array_clear(ptr noundef %518, ptr noundef %24)
  %519 = load i32, ptr %7, align 4, !tbaa !9
  %520 = and i32 %519, 8192
  %521 = icmp eq i32 %520, 0
  br i1 %521, label %522, label %537

522:                                              ; preds = %517
  %523 = load ptr, ptr %5, align 8, !tbaa !5
  %524 = load i32, ptr %6, align 4, !tbaa !9
  %525 = call i32 @mz_zip_reader_extract_to_callback(ptr noundef %523, i32 noundef %524, ptr noundef @mz_zip_compute_crc32_callback, ptr noundef %21, i32 noundef 0)
  %526 = icmp ne i32 %525, 0
  br i1 %526, label %528, label %527

527:                                              ; preds = %522
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

528:                                              ; preds = %522
  %529 = load i32, ptr %21, align 4, !tbaa !9
  %530 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 7
  %531 = load i32, ptr %530, align 8, !tbaa !37
  %532 = icmp ne i32 %529, %531
  br i1 %532, label %533, label %536

533:                                              ; preds = %528
  %534 = load ptr, ptr %5, align 8, !tbaa !5
  %535 = call i32 @mz_zip_set_error(ptr noundef %534, i32 noundef 30)
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

536:                                              ; preds = %528
  br label %537

537:                                              ; preds = %536, %517
  store i32 1, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

538:                                              ; preds = %513, %495, %365, %251, %239, %216
  %539 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mz_zip_array_clear(ptr noundef %539, ptr noundef %24)
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %540

540:                                              ; preds = %538, %537, %533, %527, %495, %365, %199, %180, %143, %136, %120, %113, %100, %95, %86, %71, %62
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 1112, ptr %8) #4
  %541 = load i32, ptr %4, align 4
  ret i32 %541
}

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_zip_array_init(ptr noundef, i32 noundef) #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_array_resize(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #1

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_zip_array_clear(ptr noundef, ptr noundef) #1

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nounwind willreturn memory(read) "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 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 #4 = { nounwind }
attributes #5 = { nounwind willreturn memory(read) }

!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 40}
!16 = !{!14, !6, i64 48}
!17 = !{!14, !6, i64 72}
!18 = !{!14, !10, i64 16}
!19 = !{!20, !10, i64 76}
!20 = !{!"", !10, i64 0, !12, i64 8, !21, i64 16, !21, i64 18, !21, i64 20, !21, i64 22, !12, i64 24, !10, i64 32, !12, i64 40, !12, i64 48, !21, i64 56, !10, i64 60, !12, i64 64, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !7, i64 88, !7, i64 600}
!21 = !{!"short", !7, i64 0}
!22 = !{!20, !12, i64 48}
!23 = !{!20, !10, i64 80}
!24 = !{!20, !21, i64 22}
!25 = !{!20, !10, i64 84}
!26 = !{!20, !12, i64 64}
!27 = !{!14, !6, i64 96}
!28 = !{!21, !21, i64 0}
!29 = !{!20, !12, i64 40}
!30 = !{!14, !12, i64 0}
!31 = !{!32, !6, i64 0}
!32 = !{!"", !6, i64 0, !12, i64 8, !12, i64 16, !10, i64 24}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !10, i64 100}
!36 = !{!"mz_zip_internal_state_tag", !32, i64 0, !32, i64 32, !32, 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}
!37 = !{!20, !10, i64 32}


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

; 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: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_set_error(ptr noundef, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #2

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

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

10:                                               ; preds = %3
  %11 = getelementptr inbounds i8, ptr %0, i64 104
  %12 = load ptr, ptr %11, align 8, !tbaa !9
  %.not169 = icmp eq ptr %12, null
  br i1 %.not169, label %22, label %13

13:                                               ; preds = %10
  %14 = getelementptr inbounds i8, ptr %0, i64 40
  %15 = load ptr, ptr %14, align 8, !tbaa !13
  %.not170 = icmp eq ptr %15, null
  br i1 %.not170, label %22, label %16

16:                                               ; preds = %13
  %17 = getelementptr inbounds i8, ptr %0, i64 48
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  %.not171 = icmp eq ptr %18, null
  br i1 %.not171, label %22, label %19

19:                                               ; preds = %16
  %20 = getelementptr inbounds i8, ptr %0, i64 72
  %21 = load ptr, ptr %20, align 8, !tbaa !15
  %.not172 = icmp eq ptr %21, null
  br i1 %.not172, label %22, label %24

22:                                               ; preds = %19, %16, %13, %10, %3
  %23 = call i32 @mz_zip_set_error(ptr noundef %0, i32 noundef 24)
  br label %218

24:                                               ; preds = %19
  %25 = getelementptr inbounds i8, ptr %0, i64 16
  %26 = load i32, ptr %25, align 8, !tbaa !16
  %27 = icmp ult i32 %26, %1
  br i1 %27, label %28, label %30

28:                                               ; preds = %24
  %29 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 24)
  br label %218

30:                                               ; preds = %24
  %31 = call ptr @mz_zip_get_cdh(ptr noundef nonnull %0, i32 noundef %1)
  %32 = call i32 @mz_zip_file_stat_internal(ptr noundef nonnull %0, i32 noundef %1, ptr noundef %31, ptr noundef nonnull %4, ptr noundef nonnull %5)
  %.not173 = icmp eq i32 %32, 0
  br i1 %.not173, label %218, label %33

33:                                               ; preds = %30
  %34 = getelementptr inbounds i8, ptr %4, i64 76
  %35 = load i32, ptr %34, align 4, !tbaa !17
  %36 = icmp eq i32 %35, 0
  %37 = getelementptr inbounds i8, ptr %4, i64 48
  %38 = load i64, ptr %37, align 8
  %39 = icmp ne i64 %38, 0
  %or.cond = select i1 %36, i1 %39, i1 false
  br i1 %or.cond, label %40, label %218

40:                                               ; preds = %33
  %41 = getelementptr inbounds i8, ptr %4, i64 80
  %42 = load i32, ptr %41, align 8, !tbaa !20
  %.not174 = icmp eq i32 %42, 0
  br i1 %.not174, label %45, label %43

43:                                               ; preds = %40
  %44 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 5)
  br label %218

45:                                               ; preds = %40
  %46 = getelementptr inbounds i8, ptr %4, i64 22
  %47 = load i16, ptr %46, align 2
  %48 = and i16 %47, -9
  %or.cond6.not = icmp eq i16 %48, 0
  br i1 %or.cond6.not, label %51, label %49

49:                                               ; preds = %45
  %50 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 4)
  br label %218

51:                                               ; preds = %45
  %52 = getelementptr inbounds i8, ptr %4, i64 84
  %53 = load i32, ptr %52, align 4, !tbaa !21
  %.not175 = icmp eq i32 %53, 0
  br i1 %.not175, label %54, label %56

54:                                               ; preds = %51
  %55 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 6)
  br label %218

56:                                               ; preds = %51
  %57 = getelementptr inbounds i8, ptr %4, i64 64
  %58 = load i64, ptr %57, align 8, !tbaa !22
  %59 = load ptr, ptr %20, align 8, !tbaa !15
  %60 = getelementptr inbounds i8, ptr %0, i64 96
  %61 = load ptr, ptr %60, align 8, !tbaa !23
  %62 = call i64 %59(ptr noundef %61, i64 noundef %58, ptr noundef nonnull %6, i64 noundef 30) #6
  %.not176 = icmp eq i64 %62, 30
  br i1 %.not176, label %65, label %63

63:                                               ; preds = %56
  %64 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 20)
  br label %218

65:                                               ; preds = %56
  %66 = load i32, ptr %6, align 16, !tbaa !5
  %.not177 = icmp eq i32 %66, 67324752
  br i1 %.not177, label %69, label %67

67:                                               ; preds = %65
  %68 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %218

69:                                               ; preds = %65
  %70 = getelementptr inbounds i8, ptr %6, i64 26
  %71 = load i16, ptr %70, align 2, !tbaa !24
  %72 = getelementptr inbounds i8, ptr %6, i64 28
  %73 = load i16, ptr %72, align 4, !tbaa !24
  %74 = zext i16 %73 to i32
  %75 = getelementptr inbounds i8, ptr %6, i64 18
  %76 = load i32, ptr %75, align 4, !tbaa !5
  %77 = zext i32 %76 to i64
  %78 = getelementptr inbounds i8, ptr %6, i64 22
  %79 = load i32, ptr %78, align 4, !tbaa !5
  %80 = zext i32 %79 to i64
  %81 = getelementptr inbounds i8, ptr %6, i64 14
  %82 = load i32, ptr %81, align 4, !tbaa !5
  %83 = getelementptr inbounds i8, ptr %6, i64 6
  %84 = load i16, ptr %83, align 2, !tbaa !24
  %85 = zext i16 %71 to i64
  %86 = getelementptr inbounds i8, ptr %4, i64 88
  %87 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %86) #7
  %.not178 = icmp eq i64 %87, %85
  br i1 %.not178, label %90, label %88

88:                                               ; preds = %69
  %89 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %218

90:                                               ; preds = %69
  %91 = add i64 %58, 30
  %92 = add i64 %91, %85
  %93 = zext i16 %73 to i64
  %94 = add i64 %92, %93
  %95 = getelementptr inbounds i8, ptr %4, i64 40
  %96 = load i64, ptr %95, align 8, !tbaa !25
  %97 = add i64 %96, %94
  %98 = load i64, ptr %0, align 8, !tbaa !26
  %99 = icmp ugt i64 %97, %98
  br i1 %99, label %100, label %102

100:                                              ; preds = %90
  %101 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %218

102:                                              ; preds = %90
  %103 = call i16 @llvm.umax.i16(i16 %71, i16 %73)
  %104 = zext i16 %103 to i64
  %105 = call i32 @mz_zip_array_resize(ptr noundef nonnull %0, ptr noundef nonnull %8, i64 noundef %104, i32 noundef 0)
  %.not179 = icmp eq i32 %105, 0
  br i1 %.not179, label %106, label %108

106:                                              ; preds = %102
  %107 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 16)
  br label %.thread

108:                                              ; preds = %102
  %.not180 = icmp eq i16 %71, 0
  br i1 %.not180, label %120, label %109

109:                                              ; preds = %108
  %110 = load ptr, ptr %20, align 8, !tbaa !15
  %111 = load ptr, ptr %60, align 8, !tbaa !23
  %112 = load ptr, ptr %8, align 8, !tbaa !27
  %113 = call i64 %110(ptr noundef %111, i64 noundef %91, ptr noundef %112, i64 noundef %85) #6
  %.not181 = icmp eq i64 %113, %85
  br i1 %.not181, label %116, label %114

114:                                              ; preds = %109
  %115 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 20)
  br label %.thread

116:                                              ; preds = %109
  %117 = load ptr, ptr %8, align 8, !tbaa !27
  %bcmp = call i32 @bcmp(ptr nonnull %86, ptr %117, i64 %85)
  %.not182 = icmp eq i32 %bcmp, 0
  br i1 %.not182, label %120, label %118

118:                                              ; preds = %116
  %119 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 30)
  br label %.thread

120:                                              ; preds = %116, %108
  %.not183 = icmp eq i16 %73, 0
  br i1 %.not183, label %.thread238, label %121

121:                                              ; preds = %120
  %122 = icmp eq i32 %76, -1
  %123 = icmp eq i32 %79, -1
  %or.cond8 = select i1 %122, i1 true, i1 %123
  br i1 %or.cond8, label %124, label %.thread238

124:                                              ; preds = %121
  %125 = load ptr, ptr %8, align 8, !tbaa !27
  %126 = load ptr, ptr %20, align 8, !tbaa !15
  %127 = load ptr, ptr %60, align 8, !tbaa !23
  %128 = call i64 %126(ptr noundef %127, i64 noundef %92, ptr noundef %125, i64 noundef %93) #6
  %.not184 = icmp eq i64 %128, %93
  br i1 %.not184, label %.preheader, label %129

129:                                              ; preds = %124
  %130 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 20)
  br label %.thread

.preheader:                                       ; preds = %124, %154
  %.0159 = phi ptr [ %156, %154 ], [ %125, %124 ]
  %.0157 = phi i32 [ %157, %154 ], [ %74, %124 ]
  %131 = icmp ult i32 %.0157, 4
  br i1 %131, label %132, label %134

132:                                              ; preds = %.preheader
  %133 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %.thread

134:                                              ; preds = %.preheader
  %135 = getelementptr inbounds i8, ptr %.0159, i64 2
  %136 = load i16, ptr %135, align 2, !tbaa !24
  %137 = zext i16 %136 to i32
  %138 = add nuw nsw i32 %137, 4
  %139 = icmp ugt i32 %138, %.0157
  br i1 %139, label %140, label %142

140:                                              ; preds = %134
  %141 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %.thread

142:                                              ; preds = %134
  %143 = load i16, ptr %.0159, align 2, !tbaa !24
  %144 = icmp eq i16 %143, 1
  br i1 %144, label %145, label %154

145:                                              ; preds = %142
  %146 = icmp ult i16 %136, 16
  br i1 %146, label %147, label %149

147:                                              ; preds = %145
  %148 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %.thread

149:                                              ; preds = %145
  %150 = getelementptr inbounds i8, ptr %.0159, i64 4
  %151 = load i64, ptr %150, align 4
  %152 = getelementptr inbounds i8, ptr %.0159, i64 12
  %153 = load i64, ptr %152, align 4
  br label %.thread238

154:                                              ; preds = %142
  %155 = zext nneg i32 %138 to i64
  %156 = getelementptr inbounds i8, ptr %.0159, i64 %155
  %157 = sub i32 %.0157, %138
  %.not185 = icmp eq i32 %157, 0
  br i1 %.not185, label %.thread238, label %.preheader, !llvm.loop !29

.thread238:                                       ; preds = %154, %149, %121, %120
  %.4152 = phi i64 [ %80, %121 ], [ %80, %120 ], [ %151, %149 ], [ %80, %154 ]
  %.4147 = phi i64 [ %77, %121 ], [ %77, %120 ], [ %153, %149 ], [ %77, %154 ]
  %158 = phi i1 [ false, %121 ], [ false, %120 ], [ true, %149 ], [ false, %154 ]
  %159 = and i16 %84, 8
  %160 = icmp eq i16 %159, 0
  %161 = icmp ne i64 %.4147, 0
  %or.cond10 = select i1 %160, i1 true, i1 %161
  %162 = icmp ne i32 %82, 0
  %or.cond12 = select i1 %or.cond10, i1 true, i1 %162
  br i1 %or.cond12, label %200, label %163

163:                                              ; preds = %.thread238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  %164 = getelementptr inbounds i8, ptr %12, i64 100
  %165 = load i32, ptr %164, align 4, !tbaa !31
  %166 = icmp ne i32 %165, 0
  %167 = or i1 %158, %166
  %168 = load ptr, ptr %20, align 8, !tbaa !15
  %169 = load ptr, ptr %60, align 8, !tbaa !23
  %170 = load i64, ptr %95, align 8, !tbaa !25
  %171 = add i64 %170, %94
  %172 = select i1 %167, i64 24, i64 16
  %173 = call i64 %168(ptr noundef %169, i64 noundef %171, ptr noundef nonnull %9, i64 noundef %172) #6
  %.not186 = icmp eq i64 %173, %172
  br i1 %.not186, label %174, label %.thread244

174:                                              ; preds = %163
  %175 = load i32, ptr %9, align 16
  %176 = icmp eq i32 %175, 134695760
  %.sroa.gep = getelementptr inbounds i8, ptr %9, i64 4
  %.sroa.gep.val = load i32, ptr %.sroa.gep, align 4
  %177 = select i1 %176, i32 %.sroa.gep.val, i32 %175
  %178 = load i32, ptr %164, align 4, !tbaa !31
  %179 = icmp ne i32 %178, 0
  %or.cond14 = or i1 %158, %179
  %.sroa.gep.sroa.gep213 = getelementptr inbounds i8, ptr %9, i64 8
  %.sroa.gep.sroa.gep213.val = load i32, ptr %.sroa.gep.sroa.gep213, align 8
  %180 = select i1 %176, i32 %.sroa.gep.sroa.gep213.val, i32 %.sroa.gep.val
  %181 = zext i32 %180 to i64
  %.sroa.gep261 = getelementptr inbounds i8, ptr %9, i64 12
  %.sroa.gep261.val = load i32, ptr %.sroa.gep261, align 4
  %182 = select i1 %176, i32 %.sroa.gep261.val, i32 %.sroa.gep.sroa.gep213.val
  %183 = zext i32 %182 to i64
  br i1 %or.cond14, label %184, label %193

184:                                              ; preds = %174
  %185 = shl nuw i64 %183, 32
  %186 = or disjoint i64 %185, %181
  %.sroa.gep263 = getelementptr inbounds i8, ptr %9, i64 16
  %.sroa.gep263.val = load i32, ptr %.sroa.gep263, align 16
  %.sroa.gep261.val269 = load i32, ptr %.sroa.gep261, align 4
  %187 = select i1 %176, i32 %.sroa.gep263.val, i32 %.sroa.gep261.val269
  %188 = zext i32 %187 to i64
  %.sroa.gep265 = getelementptr inbounds i8, ptr %9, i64 20
  %.sroa.gep265.val = load i32, ptr %.sroa.gep265, align 4
  %189 = select i1 %176, i32 %.sroa.gep265.val, i32 %.sroa.gep263.val
  %190 = zext i32 %189 to i64
  %191 = shl nuw i64 %190, 32
  %192 = or disjoint i64 %191, %188
  br label %193

193:                                              ; preds = %174, %184
  %.0141 = phi i64 [ %186, %184 ], [ %181, %174 ]
  %.0140 = phi i64 [ %192, %184 ], [ %183, %174 ]
  %194 = getelementptr inbounds i8, ptr %4, i64 32
  %195 = load i32, ptr %194, align 8, !tbaa !33
  %.not187 = icmp eq i32 %177, %195
  %196 = load i64, ptr %95, align 8
  %.not188 = icmp eq i64 %.0141, %196
  %or.cond195 = select i1 %.not187, i1 %.not188, i1 false
  %197 = load i64, ptr %37, align 8
  %.not189 = icmp eq i64 %.0140, %197
  %or.cond196 = select i1 %or.cond195, i1 %.not189, i1 false
  br i1 %or.cond196, label %199, label %.thread244

.thread244:                                       ; preds = %193, %163
  %.sink = phi i32 [ 20, %163 ], [ 30, %193 ]
  %198 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef %.sink)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %.thread

199:                                              ; preds = %193
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %207

200:                                              ; preds = %.thread238
  %201 = getelementptr inbounds i8, ptr %4, i64 32
  %202 = load i32, ptr %201, align 8, !tbaa !33
  %.not190 = icmp eq i32 %82, %202
  %203 = load i64, ptr %95, align 8
  %.not191 = icmp eq i64 %.4147, %203
  %or.cond198 = select i1 %.not190, i1 %.not191, i1 false
  %204 = load i64, ptr %37, align 8
  %.not192 = icmp eq i64 %.4152, %204
  %or.cond199 = select i1 %or.cond198, i1 %.not192, i1 false
  br i1 %or.cond199, label %207, label %205

205:                                              ; preds = %200
  %206 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 30)
  br label %.thread

207:                                              ; preds = %199, %200
  call void @mz_zip_array_clear(ptr noundef nonnull %0, ptr noundef nonnull %8)
  %208 = and i32 %2, 8192
  %209 = icmp eq i32 %208, 0
  br i1 %209, label %210, label %218

210:                                              ; preds = %207
  %211 = call i32 @mz_zip_reader_extract_to_callback(ptr noundef nonnull %0, i32 noundef %1, ptr noundef nonnull @mz_zip_compute_crc32_callback, ptr noundef nonnull %7, i32 noundef 0)
  %.not193 = icmp eq i32 %211, 0
  br i1 %.not193, label %218, label %212

212:                                              ; preds = %210
  %213 = load i32, ptr %7, align 4, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %4, i64 32
  %215 = load i32, ptr %214, align 8, !tbaa !33
  %.not194 = icmp eq i32 %213, %215
  br i1 %.not194, label %218, label %216

216:                                              ; preds = %212
  %217 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 30)
  br label %218

.thread:                                          ; preds = %147, %140, %132, %.thread244, %129, %205, %118, %114, %106
  call void @mz_zip_array_clear(ptr noundef nonnull %0, ptr noundef nonnull %8)
  br label %218

218:                                              ; preds = %207, %212, %210, %33, %30, %.thread, %216, %100, %88, %67, %63, %54, %49, %43, %28, %22
  %.0 = phi i32 [ %29, %28 ], [ %44, %43 ], [ %50, %49 ], [ %64, %63 ], [ %68, %67 ], [ %89, %88 ], [ %101, %100 ], [ 0, %.thread ], [ 0, %216 ], [ %55, %54 ], [ %23, %22 ], [ 0, %30 ], [ 1, %33 ], [ 0, %210 ], [ 1, %212 ], [ 1, %207 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 1112, ptr nonnull %4) #6
  ret i32 %.0
}

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_zip_array_init(ptr noundef, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_array_resize(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_zip_array_clear(ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nofree nounwind willreturn memory(argmem: read) }
attributes #6 = { nounwind }
attributes #7 = { nounwind willreturn memory(read) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !12, i64 104}
!10 = !{!"", !11, i64 0, !11, i64 8, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !11, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104}
!11 = !{!"long", !7, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!10, !12, i64 40}
!14 = !{!10, !12, i64 48}
!15 = !{!10, !12, i64 72}
!16 = !{!10, !6, i64 16}
!17 = !{!18, !6, i64 76}
!18 = !{!"", !6, i64 0, !11, i64 8, !19, i64 16, !19, i64 18, !19, i64 20, !19, i64 22, !11, i64 24, !6, i64 32, !11, i64 40, !11, i64 48, !19, i64 56, !6, i64 60, !11, i64 64, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !7, i64 88, !7, i64 600}
!19 = !{!"short", !7, i64 0}
!20 = !{!18, !6, i64 80}
!21 = !{!18, !6, i64 84}
!22 = !{!18, !11, i64 64}
!23 = !{!10, !12, i64 96}
!24 = !{!19, !19, i64 0}
!25 = !{!18, !11, i64 40}
!26 = !{!10, !11, i64 0}
!27 = !{!28, !12, i64 0}
!28 = !{!"", !12, i64 0, !11, i64 8, !11, i64 16, !6, i64 24}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!32, !6, i64 100}
!32 = !{!"mz_zip_internal_state_tag", !28, i64 0, !28, i64 32, !28, i64 64, !6, i64 96, !6, i64 100, !6, i64 104, !12, i64 112, !11, i64 120, !12, i64 128, !11, i64 136, !11, i64 144}
!33 = !{!18, !6, i64 32}


; Effective O3 passes: AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass