; LLVM IR from taichi-dev/taichi :: taichi/common (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, i32, i64, i64, i16, i32, i64, i32, i32, i32, i32, [512 x i8], [512 x i8], i64 }
%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 %953

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

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

87:                                               ; preds = %74
  %88 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 13
  %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 8
  %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 %953

96:                                               ; preds = %91
  %97 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 14
  %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 %953

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

116:                                              ; preds = %108, %103
  %117 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 15
  %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 %953

123:                                              ; preds = %116
  %124 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 11
  %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 %953

139:                                              ; preds = %123
  %140 = load ptr, ptr %14, align 8, !tbaa !5
  %141 = getelementptr inbounds i8, ptr %140, i64 0
  %142 = load i8, ptr %141, align 1, !tbaa !28
  %143 = zext i8 %142 to i32
  %144 = load ptr, ptr %14, align 8, !tbaa !5
  %145 = getelementptr inbounds i8, ptr %144, i64 1
  %146 = load i8, ptr %145, align 1, !tbaa !28
  %147 = zext i8 %146 to i32
  %148 = shl i32 %147, 8
  %149 = or i32 %143, %148
  %150 = load ptr, ptr %14, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i64 2
  %152 = load i8, ptr %151, align 1, !tbaa !28
  %153 = zext i8 %152 to i32
  %154 = shl i32 %153, 16
  %155 = or i32 %149, %154
  %156 = load ptr, ptr %14, align 8, !tbaa !5
  %157 = getelementptr inbounds i8, ptr %156, i64 3
  %158 = load i8, ptr %157, align 1, !tbaa !28
  %159 = zext i8 %158 to i32
  %160 = shl i32 %159, 24
  %161 = or i32 %155, %160
  %162 = icmp ne i32 %161, 67324752
  br i1 %162, label %163, label %166

163:                                              ; preds = %139
  %164 = load ptr, ptr %5, align 8, !tbaa !5
  %165 = call i32 @mz_zip_set_error(ptr noundef %164, i32 noundef 9)
  store i32 %165, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %953

166:                                              ; preds = %139
  %167 = load ptr, ptr %14, align 8, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %167, i64 26
  %169 = getelementptr inbounds i8, ptr %168, i64 0
  %170 = load i8, ptr %169, align 1, !tbaa !28
  %171 = zext i8 %170 to i32
  %172 = load ptr, ptr %14, align 8, !tbaa !5
  %173 = getelementptr inbounds i8, ptr %172, i64 26
  %174 = getelementptr inbounds i8, ptr %173, i64 1
  %175 = load i8, ptr %174, align 1, !tbaa !28
  %176 = zext i8 %175 to i32
  %177 = shl i32 %176, 8
  %178 = or i32 %171, %177
  store i32 %178, ptr %16, align 4, !tbaa !9
  %179 = load ptr, ptr %14, align 8, !tbaa !5
  %180 = getelementptr inbounds i8, ptr %179, i64 28
  %181 = getelementptr inbounds i8, ptr %180, i64 0
  %182 = load i8, ptr %181, align 1, !tbaa !28
  %183 = zext i8 %182 to i32
  %184 = load ptr, ptr %14, align 8, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %184, i64 28
  %186 = getelementptr inbounds i8, ptr %185, i64 1
  %187 = load i8, ptr %186, align 1, !tbaa !28
  %188 = zext i8 %187 to i32
  %189 = shl i32 %188, 8
  %190 = or i32 %183, %189
  store i32 %190, ptr %17, align 4, !tbaa !9
  %191 = load ptr, ptr %14, align 8, !tbaa !5
  %192 = getelementptr inbounds i8, ptr %191, i64 18
  %193 = getelementptr inbounds i8, ptr %192, i64 0
  %194 = load i8, ptr %193, align 1, !tbaa !28
  %195 = zext i8 %194 to i32
  %196 = load ptr, ptr %14, align 8, !tbaa !5
  %197 = getelementptr inbounds i8, ptr %196, i64 18
  %198 = getelementptr inbounds i8, ptr %197, i64 1
  %199 = load i8, ptr %198, align 1, !tbaa !28
  %200 = zext i8 %199 to i32
  %201 = shl i32 %200, 8
  %202 = or i32 %195, %201
  %203 = load ptr, ptr %14, align 8, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %203, i64 18
  %205 = getelementptr inbounds i8, ptr %204, i64 2
  %206 = load i8, ptr %205, align 1, !tbaa !28
  %207 = zext i8 %206 to i32
  %208 = shl i32 %207, 16
  %209 = or i32 %202, %208
  %210 = load ptr, ptr %14, align 8, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %210, i64 18
  %212 = getelementptr inbounds i8, ptr %211, i64 3
  %213 = load i8, ptr %212, align 1, !tbaa !28
  %214 = zext i8 %213 to i32
  %215 = shl i32 %214, 24
  %216 = or i32 %209, %215
  %217 = zext i32 %216 to i64
  store i64 %217, ptr %19, align 8, !tbaa !11
  %218 = load ptr, ptr %14, align 8, !tbaa !5
  %219 = getelementptr inbounds i8, ptr %218, i64 22
  %220 = getelementptr inbounds i8, ptr %219, i64 0
  %221 = load i8, ptr %220, align 1, !tbaa !28
  %222 = zext i8 %221 to i32
  %223 = load ptr, ptr %14, align 8, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %223, i64 22
  %225 = getelementptr inbounds i8, ptr %224, i64 1
  %226 = load i8, ptr %225, align 1, !tbaa !28
  %227 = zext i8 %226 to i32
  %228 = shl i32 %227, 8
  %229 = or i32 %222, %228
  %230 = load ptr, ptr %14, align 8, !tbaa !5
  %231 = getelementptr inbounds i8, ptr %230, i64 22
  %232 = getelementptr inbounds i8, ptr %231, i64 2
  %233 = load i8, ptr %232, align 1, !tbaa !28
  %234 = zext i8 %233 to i32
  %235 = shl i32 %234, 16
  %236 = or i32 %229, %235
  %237 = load ptr, ptr %14, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i64 22
  %239 = getelementptr inbounds i8, ptr %238, i64 3
  %240 = load i8, ptr %239, align 1, !tbaa !28
  %241 = zext i8 %240 to i32
  %242 = shl i32 %241, 24
  %243 = or i32 %236, %242
  %244 = zext i32 %243 to i64
  store i64 %244, ptr %20, align 8, !tbaa !11
  %245 = load ptr, ptr %14, align 8, !tbaa !5
  %246 = getelementptr inbounds i8, ptr %245, i64 14
  %247 = getelementptr inbounds i8, ptr %246, i64 0
  %248 = load i8, ptr %247, align 1, !tbaa !28
  %249 = zext i8 %248 to i32
  %250 = load ptr, ptr %14, align 8, !tbaa !5
  %251 = getelementptr inbounds i8, ptr %250, i64 14
  %252 = getelementptr inbounds i8, ptr %251, i64 1
  %253 = load i8, ptr %252, align 1, !tbaa !28
  %254 = zext i8 %253 to i32
  %255 = shl i32 %254, 8
  %256 = or i32 %249, %255
  %257 = load ptr, ptr %14, align 8, !tbaa !5
  %258 = getelementptr inbounds i8, ptr %257, i64 14
  %259 = getelementptr inbounds i8, ptr %258, i64 2
  %260 = load i8, ptr %259, align 1, !tbaa !28
  %261 = zext i8 %260 to i32
  %262 = shl i32 %261, 16
  %263 = or i32 %256, %262
  %264 = load ptr, ptr %14, align 8, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %264, i64 14
  %266 = getelementptr inbounds i8, ptr %265, i64 3
  %267 = load i8, ptr %266, align 1, !tbaa !28
  %268 = zext i8 %267 to i32
  %269 = shl i32 %268, 24
  %270 = or i32 %263, %269
  store i32 %270, ptr %18, align 4, !tbaa !9
  %271 = load ptr, ptr %14, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i64 6
  %273 = getelementptr inbounds i8, ptr %272, i64 0
  %274 = load i8, ptr %273, align 1, !tbaa !28
  %275 = zext i8 %274 to i32
  %276 = load ptr, ptr %14, align 8, !tbaa !5
  %277 = getelementptr inbounds i8, ptr %276, i64 6
  %278 = getelementptr inbounds i8, ptr %277, i64 1
  %279 = load i8, ptr %278, align 1, !tbaa !28
  %280 = zext i8 %279 to i32
  %281 = shl i32 %280, 8
  %282 = or i32 %275, %281
  store i32 %282, ptr %23, align 4, !tbaa !9
  %283 = load i32, ptr %23, align 4, !tbaa !9
  %284 = and i32 %283, 8
  %285 = icmp ne i32 %284, 0
  %286 = zext i1 %285 to i32
  store i32 %286, ptr %22, align 4, !tbaa !9
  %287 = load i32, ptr %16, align 4, !tbaa !9
  %288 = zext i32 %287 to i64
  %289 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 16
  %290 = getelementptr inbounds [512 x i8], ptr %289, i64 0, i64 0
  %291 = call i64 @strlen(ptr noundef %290) #5
  %292 = icmp ne i64 %288, %291
  br i1 %292, label %293, label %296

293:                                              ; preds = %166
  %294 = load ptr, ptr %5, align 8, !tbaa !5
  %295 = call i32 @mz_zip_set_error(ptr noundef %294, i32 noundef 9)
  store i32 %295, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %953

296:                                              ; preds = %166
  %297 = load i64, ptr %15, align 8, !tbaa !11
  %298 = add i64 %297, 30
  %299 = load i32, ptr %16, align 4, !tbaa !9
  %300 = zext i32 %299 to i64
  %301 = add i64 %298, %300
  %302 = load i32, ptr %17, align 4, !tbaa !9
  %303 = zext i32 %302 to i64
  %304 = add i64 %301, %303
  %305 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 7
  %306 = load i64, ptr %305, align 8, !tbaa !29
  %307 = add i64 %304, %306
  %308 = load ptr, ptr %5, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.mz_zip_archive, ptr %308, i32 0, i32 0
  %310 = load i64, ptr %309, align 8, !tbaa !30
  %311 = icmp ugt i64 %307, %310
  br i1 %311, label %312, label %315

312:                                              ; preds = %296
  %313 = load ptr, ptr %5, align 8, !tbaa !5
  %314 = call i32 @mz_zip_set_error(ptr noundef %313, i32 noundef 9)
  store i32 %314, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %953

315:                                              ; preds = %296
  %316 = load ptr, ptr %5, align 8, !tbaa !5
  %317 = load i32, ptr %16, align 4, !tbaa !9
  %318 = load i32, ptr %17, align 4, !tbaa !9
  %319 = icmp ugt i32 %317, %318
  br i1 %319, label %320, label %322

320:                                              ; preds = %315
  %321 = load i32, ptr %16, align 4, !tbaa !9
  br label %324

322:                                              ; preds = %315
  %323 = load i32, ptr %17, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %322, %320
  %325 = phi i32 [ %321, %320 ], [ %323, %322 ]
  %326 = zext i32 %325 to i64
  %327 = call i32 @mz_zip_array_resize(ptr noundef %316, ptr noundef %24, i64 noundef %326, i32 noundef 0)
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %332, label %329

329:                                              ; preds = %324
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = call i32 @mz_zip_set_error(ptr noundef %330, i32 noundef 16)
  br label %951

332:                                              ; preds = %324
  %333 = load i32, ptr %16, align 4, !tbaa !9
  %334 = icmp ne i32 %333, 0
  br i1 %334, label %335, label %368

335:                                              ; preds = %332
  %336 = load ptr, ptr %5, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.mz_zip_archive, ptr %336, i32 0, i32 11
  %338 = load ptr, ptr %337, align 8, !tbaa !17
  %339 = load ptr, ptr %5, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.mz_zip_archive, ptr %339, i32 0, i32 14
  %341 = load ptr, ptr %340, align 8, !tbaa !27
  %342 = load i64, ptr %15, align 8, !tbaa !11
  %343 = add i64 %342, 30
  %344 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %345 = load ptr, ptr %344, align 8, !tbaa !31
  %346 = load i32, ptr %16, align 4, !tbaa !9
  %347 = zext i32 %346 to i64
  %348 = call i64 %338(ptr noundef %341, i64 noundef %343, ptr noundef %345, i64 noundef %347)
  %349 = load i32, ptr %16, align 4, !tbaa !9
  %350 = zext i32 %349 to i64
  %351 = icmp ne i64 %348, %350
  br i1 %351, label %352, label %355

352:                                              ; preds = %335
  %353 = load ptr, ptr %5, align 8, !tbaa !5
  %354 = call i32 @mz_zip_set_error(ptr noundef %353, i32 noundef 20)
  br label %951

355:                                              ; preds = %335
  %356 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 16
  %357 = getelementptr inbounds [512 x i8], ptr %356, i64 0, i64 0
  %358 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %359 = load ptr, ptr %358, align 8, !tbaa !31
  %360 = load i32, ptr %16, align 4, !tbaa !9
  %361 = zext i32 %360 to i64
  %362 = call i32 @memcmp(ptr noundef %357, ptr noundef %359, i64 noundef %361) #5
  %363 = icmp ne i32 %362, 0
  br i1 %363, label %364, label %367

364:                                              ; preds = %355
  %365 = load ptr, ptr %5, align 8, !tbaa !5
  %366 = call i32 @mz_zip_set_error(ptr noundef %365, i32 noundef 30)
  br label %951

367:                                              ; preds = %355
  br label %368

368:                                              ; preds = %367, %332
  %369 = load i32, ptr %17, align 4, !tbaa !9
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %588

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

374:                                              ; preds = %371
  %375 = load i64, ptr %20, align 8, !tbaa !11
  %376 = icmp eq i64 %375, 4294967295
  br i1 %376, label %377, label %588

377:                                              ; preds = %374, %371
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %378 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %378, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  %379 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %380 = load ptr, ptr %379, align 8, !tbaa !31
  store ptr %380, ptr %27, align 8, !tbaa !5
  %381 = load ptr, ptr %5, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.mz_zip_archive, ptr %381, i32 0, i32 11
  %383 = load ptr, ptr %382, align 8, !tbaa !17
  %384 = load ptr, ptr %5, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.mz_zip_archive, ptr %384, i32 0, i32 14
  %386 = load ptr, ptr %385, align 8, !tbaa !27
  %387 = load i64, ptr %15, align 8, !tbaa !11
  %388 = add i64 %387, 30
  %389 = load i32, ptr %16, align 4, !tbaa !9
  %390 = zext i32 %389 to i64
  %391 = add i64 %388, %390
  %392 = getelementptr inbounds %struct.mz_zip_array, ptr %24, i32 0, i32 0
  %393 = load ptr, ptr %392, align 8, !tbaa !31
  %394 = load i32, ptr %17, align 4, !tbaa !9
  %395 = zext i32 %394 to i64
  %396 = call i64 %383(ptr noundef %386, i64 noundef %391, ptr noundef %393, i64 noundef %395)
  %397 = load i32, ptr %17, align 4, !tbaa !9
  %398 = zext i32 %397 to i64
  %399 = icmp ne i64 %396, %398
  br i1 %399, label %400, label %403

400:                                              ; preds = %377
  %401 = load ptr, ptr %5, align 8, !tbaa !5
  %402 = call i32 @mz_zip_set_error(ptr noundef %401, i32 noundef 20)
  store i32 2, ptr %25, align 4
  br label %585

403:                                              ; preds = %377
  br label %404

404:                                              ; preds = %581, %403
  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
  %405 = load i32, ptr %26, align 4, !tbaa !9
  %406 = zext i32 %405 to i64
  %407 = icmp ult i64 %406, 4
  br i1 %407, label %408, label %411

408:                                              ; preds = %404
  %409 = load ptr, ptr %5, align 8, !tbaa !5
  %410 = call i32 @mz_zip_set_error(ptr noundef %409, i32 noundef 9)
  store i32 2, ptr %25, align 4
  br label %578

411:                                              ; preds = %404
  %412 = load ptr, ptr %27, align 8, !tbaa !5
  %413 = getelementptr inbounds i8, ptr %412, i64 0
  %414 = load i8, ptr %413, align 1, !tbaa !28
  %415 = zext i8 %414 to i32
  %416 = load ptr, ptr %27, align 8, !tbaa !5
  %417 = getelementptr inbounds i8, ptr %416, i64 1
  %418 = load i8, ptr %417, align 1, !tbaa !28
  %419 = zext i8 %418 to i32
  %420 = shl i32 %419, 8
  %421 = or i32 %415, %420
  store i32 %421, ptr %28, align 4, !tbaa !9
  %422 = load ptr, ptr %27, align 8, !tbaa !5
  %423 = getelementptr inbounds i8, ptr %422, i64 2
  %424 = getelementptr inbounds i8, ptr %423, i64 0
  %425 = load i8, ptr %424, align 1, !tbaa !28
  %426 = zext i8 %425 to i32
  %427 = load ptr, ptr %27, align 8, !tbaa !5
  %428 = getelementptr inbounds i8, ptr %427, i64 2
  %429 = getelementptr inbounds i8, ptr %428, i64 1
  %430 = load i8, ptr %429, align 1, !tbaa !28
  %431 = zext i8 %430 to i32
  %432 = shl i32 %431, 8
  %433 = or i32 %426, %432
  store i32 %433, ptr %29, align 4, !tbaa !9
  %434 = load i32, ptr %29, align 4, !tbaa !9
  %435 = zext i32 %434 to i64
  %436 = add i64 %435, 4
  %437 = trunc i64 %436 to i32
  store i32 %437, ptr %30, align 4, !tbaa !9
  %438 = load i32, ptr %30, align 4, !tbaa !9
  %439 = load i32, ptr %26, align 4, !tbaa !9
  %440 = icmp ugt i32 %438, %439
  br i1 %440, label %441, label %444

441:                                              ; preds = %411
  %442 = load ptr, ptr %5, align 8, !tbaa !5
  %443 = call i32 @mz_zip_set_error(ptr noundef %442, i32 noundef 9)
  store i32 2, ptr %25, align 4
  br label %578

444:                                              ; preds = %411
  %445 = load i32, ptr %28, align 4, !tbaa !9
  %446 = icmp eq i32 %445, 1
  br i1 %446, label %447, label %570

447:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %448 = load ptr, ptr %27, align 8, !tbaa !5
  %449 = getelementptr inbounds i8, ptr %448, i64 4
  store ptr %449, ptr %31, align 8, !tbaa !5
  %450 = load i32, ptr %29, align 4, !tbaa !9
  %451 = zext i32 %450 to i64
  %452 = icmp ult i64 %451, 16
  br i1 %452, label %453, label %456

453:                                              ; preds = %447
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = call i32 @mz_zip_set_error(ptr noundef %454, i32 noundef 9)
  store i32 2, ptr %25, align 4
  br label %569

456:                                              ; preds = %447
  %457 = load ptr, ptr %31, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i64 0
  %459 = load i8, ptr %458, align 1, !tbaa !28
  %460 = zext i8 %459 to i32
  %461 = load ptr, ptr %31, align 8, !tbaa !5
  %462 = getelementptr inbounds i8, ptr %461, i64 1
  %463 = load i8, ptr %462, align 1, !tbaa !28
  %464 = zext i8 %463 to i32
  %465 = shl i32 %464, 8
  %466 = or i32 %460, %465
  %467 = load ptr, ptr %31, align 8, !tbaa !5
  %468 = getelementptr inbounds i8, ptr %467, i64 2
  %469 = load i8, ptr %468, align 1, !tbaa !28
  %470 = zext i8 %469 to i32
  %471 = shl i32 %470, 16
  %472 = or i32 %466, %471
  %473 = load ptr, ptr %31, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i64 3
  %475 = load i8, ptr %474, align 1, !tbaa !28
  %476 = zext i8 %475 to i32
  %477 = shl i32 %476, 24
  %478 = or i32 %472, %477
  %479 = zext i32 %478 to i64
  %480 = load ptr, ptr %31, align 8, !tbaa !5
  %481 = getelementptr inbounds i8, ptr %480, i64 4
  %482 = getelementptr inbounds i8, ptr %481, i64 0
  %483 = load i8, ptr %482, align 1, !tbaa !28
  %484 = zext i8 %483 to i32
  %485 = load ptr, ptr %31, align 8, !tbaa !5
  %486 = getelementptr inbounds i8, ptr %485, i64 4
  %487 = getelementptr inbounds i8, ptr %486, i64 1
  %488 = load i8, ptr %487, align 1, !tbaa !28
  %489 = zext i8 %488 to i32
  %490 = shl i32 %489, 8
  %491 = or i32 %484, %490
  %492 = load ptr, ptr %31, align 8, !tbaa !5
  %493 = getelementptr inbounds i8, ptr %492, i64 4
  %494 = getelementptr inbounds i8, ptr %493, i64 2
  %495 = load i8, ptr %494, align 1, !tbaa !28
  %496 = zext i8 %495 to i32
  %497 = shl i32 %496, 16
  %498 = or i32 %491, %497
  %499 = load ptr, ptr %31, align 8, !tbaa !5
  %500 = getelementptr inbounds i8, ptr %499, i64 4
  %501 = getelementptr inbounds i8, ptr %500, i64 3
  %502 = load i8, ptr %501, align 1, !tbaa !28
  %503 = zext i8 %502 to i32
  %504 = shl i32 %503, 24
  %505 = or i32 %498, %504
  %506 = zext i32 %505 to i64
  %507 = shl i64 %506, 32
  %508 = or i64 %479, %507
  store i64 %508, ptr %20, align 8, !tbaa !11
  %509 = load ptr, ptr %31, align 8, !tbaa !5
  %510 = getelementptr inbounds i8, ptr %509, i64 8
  %511 = getelementptr inbounds i8, ptr %510, i64 0
  %512 = load i8, ptr %511, align 1, !tbaa !28
  %513 = zext i8 %512 to i32
  %514 = load ptr, ptr %31, align 8, !tbaa !5
  %515 = getelementptr inbounds i8, ptr %514, i64 8
  %516 = getelementptr inbounds i8, ptr %515, i64 1
  %517 = load i8, ptr %516, align 1, !tbaa !28
  %518 = zext i8 %517 to i32
  %519 = shl i32 %518, 8
  %520 = or i32 %513, %519
  %521 = load ptr, ptr %31, align 8, !tbaa !5
  %522 = getelementptr inbounds i8, ptr %521, i64 8
  %523 = getelementptr inbounds i8, ptr %522, i64 2
  %524 = load i8, ptr %523, align 1, !tbaa !28
  %525 = zext i8 %524 to i32
  %526 = shl i32 %525, 16
  %527 = or i32 %520, %526
  %528 = load ptr, ptr %31, align 8, !tbaa !5
  %529 = getelementptr inbounds i8, ptr %528, i64 8
  %530 = getelementptr inbounds i8, ptr %529, i64 3
  %531 = load i8, ptr %530, align 1, !tbaa !28
  %532 = zext i8 %531 to i32
  %533 = shl i32 %532, 24
  %534 = or i32 %527, %533
  %535 = zext i32 %534 to i64
  %536 = load ptr, ptr %31, align 8, !tbaa !5
  %537 = getelementptr inbounds i8, ptr %536, i64 8
  %538 = getelementptr inbounds i8, ptr %537, i64 4
  %539 = getelementptr inbounds i8, ptr %538, i64 0
  %540 = load i8, ptr %539, align 1, !tbaa !28
  %541 = zext i8 %540 to i32
  %542 = load ptr, ptr %31, align 8, !tbaa !5
  %543 = getelementptr inbounds i8, ptr %542, i64 8
  %544 = getelementptr inbounds i8, ptr %543, i64 4
  %545 = getelementptr inbounds i8, ptr %544, i64 1
  %546 = load i8, ptr %545, align 1, !tbaa !28
  %547 = zext i8 %546 to i32
  %548 = shl i32 %547, 8
  %549 = or i32 %541, %548
  %550 = load ptr, ptr %31, align 8, !tbaa !5
  %551 = getelementptr inbounds i8, ptr %550, i64 8
  %552 = getelementptr inbounds i8, ptr %551, i64 4
  %553 = getelementptr inbounds i8, ptr %552, i64 2
  %554 = load i8, ptr %553, align 1, !tbaa !28
  %555 = zext i8 %554 to i32
  %556 = shl i32 %555, 16
  %557 = or i32 %549, %556
  %558 = load ptr, ptr %31, align 8, !tbaa !5
  %559 = getelementptr inbounds i8, ptr %558, i64 8
  %560 = getelementptr inbounds i8, ptr %559, i64 4
  %561 = getelementptr inbounds i8, ptr %560, i64 3
  %562 = load i8, ptr %561, align 1, !tbaa !28
  %563 = zext i8 %562 to i32
  %564 = shl i32 %563, 24
  %565 = or i32 %557, %564
  %566 = zext i32 %565 to i64
  %567 = shl i64 %566, 32
  %568 = or i64 %535, %567
  store i64 %568, ptr %19, align 8, !tbaa !11
  store i32 1, ptr %12, align 4, !tbaa !9
  store i32 3, ptr %25, align 4
  br label %569

569:                                              ; preds = %456, %453
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  br label %578

570:                                              ; preds = %444
  %571 = load i32, ptr %30, align 4, !tbaa !9
  %572 = load ptr, ptr %27, align 8, !tbaa !5
  %573 = zext i32 %571 to i64
  %574 = getelementptr inbounds i8, ptr %572, i64 %573
  store ptr %574, ptr %27, align 8, !tbaa !5
  %575 = load i32, ptr %30, align 4, !tbaa !9
  %576 = load i32, ptr %26, align 4, !tbaa !9
  %577 = sub i32 %576, %575
  store i32 %577, ptr %26, align 4, !tbaa !9
  store i32 0, ptr %25, align 4
  br label %578

578:                                              ; preds = %570, %569, %441, %408
  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
  %579 = load i32, ptr %25, align 4
  switch i32 %579, label %585 [
    i32 0, label %580
    i32 3, label %584
  ]

580:                                              ; preds = %578
  br label %581

581:                                              ; preds = %580
  %582 = load i32, ptr %26, align 4, !tbaa !9
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %404, label %584, !llvm.loop !33

584:                                              ; preds = %581, %578
  store i32 0, ptr %25, align 4
  br label %585

585:                                              ; preds = %584, %578, %400
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  %586 = load i32, ptr %25, align 4
  switch i32 %586, label %953 [
    i32 0, label %587
    i32 2, label %951
  ]

587:                                              ; preds = %585
  br label %588

588:                                              ; preds = %587, %374, %368
  %589 = load i32, ptr %22, align 4, !tbaa !9
  %590 = icmp ne i32 %589, 0
  br i1 %590, label %591, label %911

591:                                              ; preds = %588
  %592 = load i64, ptr %19, align 8, !tbaa !11
  %593 = icmp ne i64 %592, 0
  br i1 %593, label %911, label %594

594:                                              ; preds = %591
  %595 = load i32, ptr %18, align 4, !tbaa !9
  %596 = icmp ne i32 %595, 0
  br i1 %596, label %911, label %597

597:                                              ; preds = %594
  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
  %598 = load ptr, ptr %9, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %598, i32 0, i32 4
  %600 = load i32, ptr %599, align 4, !tbaa !35
  %601 = icmp ne i32 %600, 0
  br i1 %601, label %605, label %602

602:                                              ; preds = %597
  %603 = load i32, ptr %12, align 4, !tbaa !9
  %604 = icmp ne i32 %603, 0
  br label %605

605:                                              ; preds = %602, %597
  %606 = phi i1 [ true, %597 ], [ %604, %602 ]
  %607 = zext i1 %606 to i64
  %608 = select i1 %606, i32 6, i32 4
  store i32 %608, ptr %38, align 4, !tbaa !9
  %609 = load ptr, ptr %5, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.mz_zip_archive, ptr %609, i32 0, i32 11
  %611 = load ptr, ptr %610, align 8, !tbaa !17
  %612 = load ptr, ptr %5, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.mz_zip_archive, ptr %612, i32 0, i32 14
  %614 = load ptr, ptr %613, align 8, !tbaa !27
  %615 = load i64, ptr %15, align 8, !tbaa !11
  %616 = add i64 %615, 30
  %617 = load i32, ptr %16, align 4, !tbaa !9
  %618 = zext i32 %617 to i64
  %619 = add i64 %616, %618
  %620 = load i32, ptr %17, align 4, !tbaa !9
  %621 = zext i32 %620 to i64
  %622 = add i64 %619, %621
  %623 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 7
  %624 = load i64, ptr %623, align 8, !tbaa !29
  %625 = add i64 %622, %624
  %626 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %627 = load i32, ptr %38, align 4, !tbaa !9
  %628 = zext i32 %627 to i64
  %629 = mul i64 4, %628
  %630 = call i64 %611(ptr noundef %614, i64 noundef %625, ptr noundef %626, i64 noundef %629)
  %631 = load i32, ptr %38, align 4, !tbaa !9
  %632 = zext i32 %631 to i64
  %633 = mul i64 4, %632
  %634 = icmp ne i64 %630, %633
  br i1 %634, label %635, label %638

635:                                              ; preds = %605
  %636 = load ptr, ptr %5, align 8, !tbaa !5
  %637 = call i32 @mz_zip_set_error(ptr noundef %636, i32 noundef 20)
  store i32 2, ptr %25, align 4
  br label %908

638:                                              ; preds = %605
  %639 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %640 = getelementptr inbounds i8, ptr %639, i64 0
  %641 = load i8, ptr %640, align 16, !tbaa !28
  %642 = zext i8 %641 to i32
  %643 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %644 = getelementptr inbounds i8, ptr %643, i64 1
  %645 = load i8, ptr %644, align 1, !tbaa !28
  %646 = zext i8 %645 to i32
  %647 = shl i32 %646, 8
  %648 = or i32 %642, %647
  %649 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %650 = getelementptr inbounds i8, ptr %649, i64 2
  %651 = load i8, ptr %650, align 2, !tbaa !28
  %652 = zext i8 %651 to i32
  %653 = shl i32 %652, 16
  %654 = or i32 %648, %653
  %655 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %656 = getelementptr inbounds i8, ptr %655, i64 3
  %657 = load i8, ptr %656, align 1, !tbaa !28
  %658 = zext i8 %657 to i32
  %659 = shl i32 %658, 24
  %660 = or i32 %654, %659
  %661 = icmp eq i32 %660, 134695760
  %662 = zext i1 %661 to i32
  store i32 %662, ptr %33, align 4, !tbaa !9
  %663 = load i32, ptr %33, align 4, !tbaa !9
  %664 = icmp ne i32 %663, 0
  br i1 %664, label %665, label %668

665:                                              ; preds = %638
  %666 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %667 = getelementptr inbounds i8, ptr %666, i64 4
  br label %670

668:                                              ; preds = %638
  %669 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  br label %670

670:                                              ; preds = %668, %665
  %671 = phi ptr [ %667, %665 ], [ %669, %668 ]
  store ptr %671, ptr %34, align 8, !tbaa !5
  %672 = load ptr, ptr %34, align 8, !tbaa !5
  %673 = getelementptr inbounds i8, ptr %672, i64 0
  %674 = load i8, ptr %673, align 1, !tbaa !28
  %675 = zext i8 %674 to i32
  %676 = load ptr, ptr %34, align 8, !tbaa !5
  %677 = getelementptr inbounds i8, ptr %676, i64 1
  %678 = load i8, ptr %677, align 1, !tbaa !28
  %679 = zext i8 %678 to i32
  %680 = shl i32 %679, 8
  %681 = or i32 %675, %680
  %682 = load ptr, ptr %34, align 8, !tbaa !5
  %683 = getelementptr inbounds i8, ptr %682, i64 2
  %684 = load i8, ptr %683, align 1, !tbaa !28
  %685 = zext i8 %684 to i32
  %686 = shl i32 %685, 16
  %687 = or i32 %681, %686
  %688 = load ptr, ptr %34, align 8, !tbaa !5
  %689 = getelementptr inbounds i8, ptr %688, i64 3
  %690 = load i8, ptr %689, align 1, !tbaa !28
  %691 = zext i8 %690 to i32
  %692 = shl i32 %691, 24
  %693 = or i32 %687, %692
  store i32 %693, ptr %35, align 4, !tbaa !9
  %694 = load ptr, ptr %9, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %694, i32 0, i32 4
  %696 = load i32, ptr %695, align 4, !tbaa !35
  %697 = icmp ne i32 %696, 0
  br i1 %697, label %701, label %698

698:                                              ; preds = %670
  %699 = load i32, ptr %12, align 4, !tbaa !9
  %700 = icmp ne i32 %699, 0
  br i1 %700, label %701, label %830

701:                                              ; preds = %698, %670
  %702 = load ptr, ptr %34, align 8, !tbaa !5
  %703 = getelementptr inbounds i8, ptr %702, i64 4
  %704 = getelementptr inbounds i8, ptr %703, i64 0
  %705 = load i8, ptr %704, align 1, !tbaa !28
  %706 = zext i8 %705 to i32
  %707 = load ptr, ptr %34, align 8, !tbaa !5
  %708 = getelementptr inbounds i8, ptr %707, i64 4
  %709 = getelementptr inbounds i8, ptr %708, i64 1
  %710 = load i8, ptr %709, align 1, !tbaa !28
  %711 = zext i8 %710 to i32
  %712 = shl i32 %711, 8
  %713 = or i32 %706, %712
  %714 = load ptr, ptr %34, align 8, !tbaa !5
  %715 = getelementptr inbounds i8, ptr %714, i64 4
  %716 = getelementptr inbounds i8, ptr %715, i64 2
  %717 = load i8, ptr %716, align 1, !tbaa !28
  %718 = zext i8 %717 to i32
  %719 = shl i32 %718, 16
  %720 = or i32 %713, %719
  %721 = load ptr, ptr %34, align 8, !tbaa !5
  %722 = getelementptr inbounds i8, ptr %721, i64 4
  %723 = getelementptr inbounds i8, ptr %722, i64 3
  %724 = load i8, ptr %723, align 1, !tbaa !28
  %725 = zext i8 %724 to i32
  %726 = shl i32 %725, 24
  %727 = or i32 %720, %726
  %728 = zext i32 %727 to i64
  %729 = load ptr, ptr %34, align 8, !tbaa !5
  %730 = getelementptr inbounds i8, ptr %729, i64 4
  %731 = getelementptr inbounds i8, ptr %730, i64 4
  %732 = getelementptr inbounds i8, ptr %731, i64 0
  %733 = load i8, ptr %732, align 1, !tbaa !28
  %734 = zext i8 %733 to i32
  %735 = load ptr, ptr %34, align 8, !tbaa !5
  %736 = getelementptr inbounds i8, ptr %735, i64 4
  %737 = getelementptr inbounds i8, ptr %736, i64 4
  %738 = getelementptr inbounds i8, ptr %737, i64 1
  %739 = load i8, ptr %738, align 1, !tbaa !28
  %740 = zext i8 %739 to i32
  %741 = shl i32 %740, 8
  %742 = or i32 %734, %741
  %743 = load ptr, ptr %34, align 8, !tbaa !5
  %744 = getelementptr inbounds i8, ptr %743, i64 4
  %745 = getelementptr inbounds i8, ptr %744, i64 4
  %746 = getelementptr inbounds i8, ptr %745, i64 2
  %747 = load i8, ptr %746, align 1, !tbaa !28
  %748 = zext i8 %747 to i32
  %749 = shl i32 %748, 16
  %750 = or i32 %742, %749
  %751 = load ptr, ptr %34, align 8, !tbaa !5
  %752 = getelementptr inbounds i8, ptr %751, i64 4
  %753 = getelementptr inbounds i8, ptr %752, i64 4
  %754 = getelementptr inbounds i8, ptr %753, i64 3
  %755 = load i8, ptr %754, align 1, !tbaa !28
  %756 = zext i8 %755 to i32
  %757 = shl i32 %756, 24
  %758 = or i32 %750, %757
  %759 = zext i32 %758 to i64
  %760 = shl i64 %759, 32
  %761 = or i64 %728, %760
  store i64 %761, ptr %36, align 8, !tbaa !11
  %762 = load ptr, ptr %34, align 8, !tbaa !5
  %763 = getelementptr inbounds i8, ptr %762, i64 4
  %764 = getelementptr inbounds i8, ptr %763, i64 8
  %765 = getelementptr inbounds i8, ptr %764, i64 0
  %766 = load i8, ptr %765, align 1, !tbaa !28
  %767 = zext i8 %766 to i32
  %768 = load ptr, ptr %34, align 8, !tbaa !5
  %769 = getelementptr inbounds i8, ptr %768, i64 4
  %770 = getelementptr inbounds i8, ptr %769, i64 8
  %771 = getelementptr inbounds i8, ptr %770, i64 1
  %772 = load i8, ptr %771, align 1, !tbaa !28
  %773 = zext i8 %772 to i32
  %774 = shl i32 %773, 8
  %775 = or i32 %767, %774
  %776 = load ptr, ptr %34, align 8, !tbaa !5
  %777 = getelementptr inbounds i8, ptr %776, i64 4
  %778 = getelementptr inbounds i8, ptr %777, i64 8
  %779 = getelementptr inbounds i8, ptr %778, i64 2
  %780 = load i8, ptr %779, align 1, !tbaa !28
  %781 = zext i8 %780 to i32
  %782 = shl i32 %781, 16
  %783 = or i32 %775, %782
  %784 = load ptr, ptr %34, align 8, !tbaa !5
  %785 = getelementptr inbounds i8, ptr %784, i64 4
  %786 = getelementptr inbounds i8, ptr %785, i64 8
  %787 = getelementptr inbounds i8, ptr %786, i64 3
  %788 = load i8, ptr %787, align 1, !tbaa !28
  %789 = zext i8 %788 to i32
  %790 = shl i32 %789, 24
  %791 = or i32 %783, %790
  %792 = zext i32 %791 to i64
  %793 = load ptr, ptr %34, align 8, !tbaa !5
  %794 = getelementptr inbounds i8, ptr %793, i64 4
  %795 = getelementptr inbounds i8, ptr %794, i64 8
  %796 = getelementptr inbounds i8, ptr %795, i64 4
  %797 = getelementptr inbounds i8, ptr %796, i64 0
  %798 = load i8, ptr %797, align 1, !tbaa !28
  %799 = zext i8 %798 to i32
  %800 = load ptr, ptr %34, align 8, !tbaa !5
  %801 = getelementptr inbounds i8, ptr %800, i64 4
  %802 = getelementptr inbounds i8, ptr %801, i64 8
  %803 = getelementptr inbounds i8, ptr %802, i64 4
  %804 = getelementptr inbounds i8, ptr %803, i64 1
  %805 = load i8, ptr %804, align 1, !tbaa !28
  %806 = zext i8 %805 to i32
  %807 = shl i32 %806, 8
  %808 = or i32 %799, %807
  %809 = load ptr, ptr %34, align 8, !tbaa !5
  %810 = getelementptr inbounds i8, ptr %809, i64 4
  %811 = getelementptr inbounds i8, ptr %810, i64 8
  %812 = getelementptr inbounds i8, ptr %811, i64 4
  %813 = getelementptr inbounds i8, ptr %812, i64 2
  %814 = load i8, ptr %813, align 1, !tbaa !28
  %815 = zext i8 %814 to i32
  %816 = shl i32 %815, 16
  %817 = or i32 %808, %816
  %818 = load ptr, ptr %34, align 8, !tbaa !5
  %819 = getelementptr inbounds i8, ptr %818, i64 4
  %820 = getelementptr inbounds i8, ptr %819, i64 8
  %821 = getelementptr inbounds i8, ptr %820, i64 4
  %822 = getelementptr inbounds i8, ptr %821, i64 3
  %823 = load i8, ptr %822, align 1, !tbaa !28
  %824 = zext i8 %823 to i32
  %825 = shl i32 %824, 24
  %826 = or i32 %817, %825
  %827 = zext i32 %826 to i64
  %828 = shl i64 %827, 32
  %829 = or i64 %792, %828
  store i64 %829, ptr %37, align 8, !tbaa !11
  br label %889

830:                                              ; preds = %698
  %831 = load ptr, ptr %34, align 8, !tbaa !5
  %832 = getelementptr inbounds i8, ptr %831, i64 4
  %833 = getelementptr inbounds i8, ptr %832, i64 0
  %834 = load i8, ptr %833, align 1, !tbaa !28
  %835 = zext i8 %834 to i32
  %836 = load ptr, ptr %34, align 8, !tbaa !5
  %837 = getelementptr inbounds i8, ptr %836, i64 4
  %838 = getelementptr inbounds i8, ptr %837, i64 1
  %839 = load i8, ptr %838, align 1, !tbaa !28
  %840 = zext i8 %839 to i32
  %841 = shl i32 %840, 8
  %842 = or i32 %835, %841
  %843 = load ptr, ptr %34, align 8, !tbaa !5
  %844 = getelementptr inbounds i8, ptr %843, i64 4
  %845 = getelementptr inbounds i8, ptr %844, i64 2
  %846 = load i8, ptr %845, align 1, !tbaa !28
  %847 = zext i8 %846 to i32
  %848 = shl i32 %847, 16
  %849 = or i32 %842, %848
  %850 = load ptr, ptr %34, align 8, !tbaa !5
  %851 = getelementptr inbounds i8, ptr %850, i64 4
  %852 = getelementptr inbounds i8, ptr %851, i64 3
  %853 = load i8, ptr %852, align 1, !tbaa !28
  %854 = zext i8 %853 to i32
  %855 = shl i32 %854, 24
  %856 = or i32 %849, %855
  %857 = zext i32 %856 to i64
  store i64 %857, ptr %36, align 8, !tbaa !11
  %858 = load ptr, ptr %34, align 8, !tbaa !5
  %859 = getelementptr inbounds i8, ptr %858, i64 4
  %860 = getelementptr inbounds i8, ptr %859, i64 4
  %861 = getelementptr inbounds i8, ptr %860, i64 0
  %862 = load i8, ptr %861, align 1, !tbaa !28
  %863 = zext i8 %862 to i32
  %864 = load ptr, ptr %34, align 8, !tbaa !5
  %865 = getelementptr inbounds i8, ptr %864, i64 4
  %866 = getelementptr inbounds i8, ptr %865, i64 4
  %867 = getelementptr inbounds i8, ptr %866, i64 1
  %868 = load i8, ptr %867, align 1, !tbaa !28
  %869 = zext i8 %868 to i32
  %870 = shl i32 %869, 8
  %871 = or i32 %863, %870
  %872 = load ptr, ptr %34, align 8, !tbaa !5
  %873 = getelementptr inbounds i8, ptr %872, i64 4
  %874 = getelementptr inbounds i8, ptr %873, i64 4
  %875 = getelementptr inbounds i8, ptr %874, i64 2
  %876 = load i8, ptr %875, align 1, !tbaa !28
  %877 = zext i8 %876 to i32
  %878 = shl i32 %877, 16
  %879 = or i32 %871, %878
  %880 = load ptr, ptr %34, align 8, !tbaa !5
  %881 = getelementptr inbounds i8, ptr %880, i64 4
  %882 = getelementptr inbounds i8, ptr %881, i64 4
  %883 = getelementptr inbounds i8, ptr %882, i64 3
  %884 = load i8, ptr %883, align 1, !tbaa !28
  %885 = zext i8 %884 to i32
  %886 = shl i32 %885, 24
  %887 = or i32 %879, %886
  %888 = zext i32 %887 to i64
  store i64 %888, ptr %37, align 8, !tbaa !11
  br label %889

889:                                              ; preds = %830, %701
  %890 = load i32, ptr %35, align 4, !tbaa !9
  %891 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 6
  %892 = load i32, ptr %891, align 8, !tbaa !37
  %893 = icmp ne i32 %890, %892
  br i1 %893, label %904, label %894

894:                                              ; preds = %889
  %895 = load i64, ptr %36, align 8, !tbaa !11
  %896 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 7
  %897 = load i64, ptr %896, align 8, !tbaa !29
  %898 = icmp ne i64 %895, %897
  br i1 %898, label %904, label %899

899:                                              ; preds = %894
  %900 = load i64, ptr %37, align 8, !tbaa !11
  %901 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 8
  %902 = load i64, ptr %901, align 8, !tbaa !22
  %903 = icmp ne i64 %900, %902
  br i1 %903, label %904, label %907

904:                                              ; preds = %899, %894, %889
  %905 = load ptr, ptr %5, align 8, !tbaa !5
  %906 = call i32 @mz_zip_set_error(ptr noundef %905, i32 noundef 30)
  store i32 2, ptr %25, align 4
  br label %908

907:                                              ; preds = %899
  store i32 0, ptr %25, align 4
  br label %908

908:                                              ; preds = %907, %904, %635
  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
  %909 = load i32, ptr %25, align 4
  switch i32 %909, label %953 [
    i32 0, label %910
    i32 2, label %951
  ]

910:                                              ; preds = %908
  br label %930

911:                                              ; preds = %594, %591, %588
  %912 = load i32, ptr %18, align 4, !tbaa !9
  %913 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 6
  %914 = load i32, ptr %913, align 8, !tbaa !37
  %915 = icmp ne i32 %912, %914
  br i1 %915, label %926, label %916

916:                                              ; preds = %911
  %917 = load i64, ptr %19, align 8, !tbaa !11
  %918 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 7
  %919 = load i64, ptr %918, align 8, !tbaa !29
  %920 = icmp ne i64 %917, %919
  br i1 %920, label %926, label %921

921:                                              ; preds = %916
  %922 = load i64, ptr %20, align 8, !tbaa !11
  %923 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 8
  %924 = load i64, ptr %923, align 8, !tbaa !22
  %925 = icmp ne i64 %922, %924
  br i1 %925, label %926, label %929

926:                                              ; preds = %921, %916, %911
  %927 = load ptr, ptr %5, align 8, !tbaa !5
  %928 = call i32 @mz_zip_set_error(ptr noundef %927, i32 noundef 30)
  br label %951

929:                                              ; preds = %921
  br label %930

930:                                              ; preds = %929, %910
  %931 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mz_zip_array_clear(ptr noundef %931, ptr noundef %24)
  %932 = load i32, ptr %7, align 4, !tbaa !9
  %933 = and i32 %932, 8192
  %934 = icmp eq i32 %933, 0
  br i1 %934, label %935, label %950

935:                                              ; preds = %930
  %936 = load ptr, ptr %5, align 8, !tbaa !5
  %937 = load i32, ptr %6, align 4, !tbaa !9
  %938 = call i32 @mz_zip_reader_extract_to_callback(ptr noundef %936, i32 noundef %937, ptr noundef @mz_zip_compute_crc32_callback, ptr noundef %21, i32 noundef 0)
  %939 = icmp ne i32 %938, 0
  br i1 %939, label %941, label %940

940:                                              ; preds = %935
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %953

941:                                              ; preds = %935
  %942 = load i32, ptr %21, align 4, !tbaa !9
  %943 = getelementptr inbounds %struct.mz_zip_archive_file_stat, ptr %8, i32 0, i32 6
  %944 = load i32, ptr %943, align 8, !tbaa !37
  %945 = icmp ne i32 %942, %944
  br i1 %945, label %946, label %949

946:                                              ; preds = %941
  %947 = load ptr, ptr %5, align 8, !tbaa !5
  %948 = call i32 @mz_zip_set_error(ptr noundef %947, i32 noundef 30)
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %953

949:                                              ; preds = %941
  br label %950

950:                                              ; preds = %949, %930
  store i32 1, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %953

951:                                              ; preds = %926, %908, %585, %364, %352, %329
  %952 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mz_zip_array_clear(ptr noundef %952, ptr noundef %24)
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %953

953:                                              ; preds = %951, %950, %946, %940, %908, %585, %312, %293, %163, %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
  %954 = load i32, ptr %4, align 4
  ret i32 %954
}

; 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 68}
!20 = !{!"", !10, i64 0, !12, i64 8, !21, i64 16, !21, i64 18, !21, i64 20, !21, i64 22, !10, i64 24, !12, i64 32, !12, i64 40, !21, 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}
!21 = !{!"short", !7, i64 0}
!22 = !{!20, !12, i64 40}
!23 = !{!20, !10, i64 72}
!24 = !{!20, !21, i64 22}
!25 = !{!20, !10, i64 76}
!26 = !{!20, !12, i64 56}
!27 = !{!14, !6, i64 96}
!28 = !{!7, !7, i64 0}
!29 = !{!20, !12, i64 32}
!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 24}


; 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.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
  %.not219 = icmp eq ptr %12, null
  br i1 %.not219, label %22, label %13

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

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

19:                                               ; preds = %16
  %20 = getelementptr inbounds i8, ptr %0, i64 72
  %21 = load ptr, ptr %20, align 8, !tbaa !15
  %.not222 = icmp eq ptr %21, null
  br i1 %.not222, 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 %357

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

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)
  %.not223 = icmp eq i32 %32, 0
  br i1 %.not223, label %357, label %33

33:                                               ; preds = %30
  %34 = getelementptr inbounds i8, ptr %4, i64 68
  %35 = load i32, ptr %34, align 4, !tbaa !17
  %36 = icmp eq i32 %35, 0
  %37 = getelementptr inbounds i8, ptr %4, i64 40
  %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 %357

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

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

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

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

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

56:                                               ; preds = %51
  %57 = getelementptr inbounds i8, ptr %4, i64 56
  %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
  %.not226 = icmp eq i64 %62, 30
  br i1 %.not226, label %65, label %63

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

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

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

69:                                               ; preds = %65
  %70 = getelementptr inbounds i8, ptr %6, i64 26
  %71 = load i8, ptr %70, align 2, !tbaa !24
  %72 = zext i8 %71 to i32
  %73 = getelementptr inbounds i8, ptr %6, i64 27
  %74 = load i8, ptr %73, align 1, !tbaa !24
  %75 = zext i8 %74 to i32
  %76 = shl nuw nsw i32 %75, 8
  %77 = or disjoint i32 %76, %72
  %78 = getelementptr inbounds i8, ptr %6, i64 28
  %79 = load i8, ptr %78, align 4, !tbaa !24
  %80 = zext i8 %79 to i32
  %81 = getelementptr inbounds i8, ptr %6, i64 29
  %82 = load i8, ptr %81, align 1, !tbaa !24
  %83 = zext i8 %82 to i32
  %84 = shl nuw nsw i32 %83, 8
  %85 = or disjoint i32 %84, %80
  %86 = getelementptr inbounds i8, ptr %6, i64 18
  %87 = load i16, ptr %86, align 2
  %88 = zext i16 %87 to i64
  %89 = getelementptr inbounds i8, ptr %6, i64 20
  %90 = load i8, ptr %89, align 4, !tbaa !24
  %91 = zext i8 %90 to i64
  %92 = shl nuw nsw i64 %91, 16
  %93 = or disjoint i64 %92, %88
  %94 = getelementptr inbounds i8, ptr %6, i64 21
  %95 = load i8, ptr %94, align 1, !tbaa !24
  %96 = zext i8 %95 to i64
  %97 = shl nuw nsw i64 %96, 24
  %98 = or disjoint i64 %93, %97
  %99 = getelementptr inbounds i8, ptr %6, i64 22
  %100 = load i16, ptr %99, align 2
  %101 = zext i16 %100 to i64
  %102 = getelementptr inbounds i8, ptr %6, i64 24
  %103 = load i8, ptr %102, align 8, !tbaa !24
  %104 = zext i8 %103 to i64
  %105 = shl nuw nsw i64 %104, 16
  %106 = or disjoint i64 %105, %101
  %107 = getelementptr inbounds i8, ptr %6, i64 25
  %108 = load i8, ptr %107, align 1, !tbaa !24
  %109 = zext i8 %108 to i64
  %110 = shl nuw nsw i64 %109, 24
  %111 = or disjoint i64 %106, %110
  %112 = getelementptr inbounds i8, ptr %6, i64 14
  %113 = load i16, ptr %112, align 2
  %114 = zext i16 %113 to i32
  %115 = getelementptr inbounds i8, ptr %6, i64 16
  %116 = load i8, ptr %115, align 16, !tbaa !24
  %117 = zext i8 %116 to i32
  %118 = shl nuw nsw i32 %117, 16
  %119 = or disjoint i32 %118, %114
  %120 = getelementptr inbounds i8, ptr %6, i64 17
  %121 = load i8, ptr %120, align 1, !tbaa !24
  %122 = zext i8 %121 to i32
  %123 = shl nuw i32 %122, 24
  %124 = or disjoint i32 %119, %123
  %125 = getelementptr inbounds i8, ptr %6, i64 6
  %126 = load i8, ptr %125, align 2, !tbaa !24
  %127 = zext nneg i32 %77 to i64
  %128 = getelementptr inbounds i8, ptr %4, i64 80
  %129 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %128) #7
  %.not228 = icmp eq i64 %129, %127
  br i1 %.not228, label %132, label %130

130:                                              ; preds = %69
  %131 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %357

132:                                              ; preds = %69
  %133 = add i64 %58, 30
  %134 = add i64 %133, %127
  %135 = zext nneg i32 %85 to i64
  %136 = add i64 %134, %135
  %137 = getelementptr inbounds i8, ptr %4, i64 32
  %138 = load i64, ptr %137, align 8, !tbaa !25
  %139 = add i64 %138, %136
  %140 = load i64, ptr %0, align 8, !tbaa !26
  %141 = icmp ugt i64 %139, %140
  br i1 %141, label %142, label %144

142:                                              ; preds = %132
  %143 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %357

144:                                              ; preds = %132
  %145 = call i32 @llvm.umax.i32(i32 %77, i32 %85)
  %146 = zext nneg i32 %145 to i64
  %147 = call i32 @mz_zip_array_resize(ptr noundef nonnull %0, ptr noundef nonnull %8, i64 noundef %146, i32 noundef 0)
  %.not229 = icmp eq i32 %147, 0
  br i1 %.not229, label %148, label %150

148:                                              ; preds = %144
  %149 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 16)
  br label %.thread

150:                                              ; preds = %144
  %.not230 = icmp eq i32 %77, 0
  br i1 %.not230, label %162, label %151

151:                                              ; preds = %150
  %152 = load ptr, ptr %20, align 8, !tbaa !15
  %153 = load ptr, ptr %60, align 8, !tbaa !23
  %154 = load ptr, ptr %8, align 8, !tbaa !27
  %155 = call i64 %152(ptr noundef %153, i64 noundef %133, ptr noundef %154, i64 noundef %127) #6
  %.not231 = icmp eq i64 %155, %127
  br i1 %.not231, label %158, label %156

156:                                              ; preds = %151
  %157 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 20)
  br label %.thread

158:                                              ; preds = %151
  %159 = load ptr, ptr %8, align 8, !tbaa !27
  %bcmp = call i32 @bcmp(ptr nonnull %128, ptr %159, i64 %127)
  %.not232 = icmp eq i32 %bcmp, 0
  br i1 %.not232, label %162, label %160

160:                                              ; preds = %158
  %161 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 30)
  br label %.thread

162:                                              ; preds = %158, %150
  %.not233 = icmp eq i32 %85, 0
  br i1 %.not233, label %.thread351, label %163

163:                                              ; preds = %162
  %164 = icmp eq i64 %98, 4294967295
  %165 = icmp eq i64 %111, 4294967295
  %or.cond8 = select i1 %164, i1 true, i1 %165
  br i1 %or.cond8, label %166, label %.thread351

166:                                              ; preds = %163
  %167 = load ptr, ptr %8, align 8, !tbaa !27
  %168 = load ptr, ptr %20, align 8, !tbaa !15
  %169 = load ptr, ptr %60, align 8, !tbaa !23
  %170 = call i64 %168(ptr noundef %169, i64 noundef %134, ptr noundef %167, i64 noundef %135) #6
  %.not234 = icmp eq i64 %170, %135
  br i1 %.not234, label %.preheader, label %171

171:                                              ; preds = %166
  %172 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 20)
  br label %.thread

.preheader:                                       ; preds = %166, %214
  %.0209 = phi ptr [ %216, %214 ], [ %167, %166 ]
  %.0207 = phi i32 [ %217, %214 ], [ %85, %166 ]
  %173 = icmp ult i32 %.0207, 4
  br i1 %173, label %174, label %176

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

176:                                              ; preds = %.preheader
  %177 = getelementptr inbounds i8, ptr %.0209, i64 2
  %178 = load i8, ptr %177, align 1, !tbaa !24
  %179 = zext i8 %178 to i64
  %180 = getelementptr inbounds i8, ptr %.0209, i64 3
  %181 = load i8, ptr %180, align 1, !tbaa !24
  %182 = zext i8 %181 to i64
  %183 = shl nuw nsw i64 %182, 8
  %184 = or disjoint i64 %183, %179
  %185 = trunc nuw nsw i64 %184 to i32
  %186 = add nuw nsw i32 %185, 4
  %187 = icmp ugt i32 %186, %.0207
  br i1 %187, label %188, label %190

188:                                              ; preds = %176
  %189 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %.thread

190:                                              ; preds = %176
  %191 = load i16, ptr %.0209, align 1
  %192 = icmp eq i16 %191, 1
  br i1 %192, label %193, label %214

193:                                              ; preds = %190
  %194 = icmp ult i64 %184, 16
  br i1 %194, label %195, label %197

195:                                              ; preds = %193
  %196 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 9)
  br label %.thread

197:                                              ; preds = %193
  %198 = getelementptr inbounds i8, ptr %.0209, i64 4
  %199 = load i32, ptr %198, align 1
  %200 = zext i32 %199 to i64
  %201 = getelementptr inbounds i8, ptr %.0209, i64 8
  %202 = load i32, ptr %201, align 1
  %203 = zext i32 %202 to i64
  %204 = shl nuw i64 %203, 32
  %205 = or disjoint i64 %204, %200
  %206 = getelementptr inbounds i8, ptr %.0209, i64 12
  %207 = load i32, ptr %206, align 1
  %208 = zext i32 %207 to i64
  %209 = getelementptr inbounds i8, ptr %.0209, i64 16
  %210 = load i32, ptr %209, align 1
  %211 = zext i32 %210 to i64
  %212 = shl nuw i64 %211, 32
  %213 = or disjoint i64 %212, %208
  br label %.thread351

214:                                              ; preds = %190
  %215 = zext nneg i32 %186 to i64
  %216 = getelementptr inbounds i8, ptr %.0209, i64 %215
  %217 = sub i32 %.0207, %186
  %.not235 = icmp eq i32 %217, 0
  br i1 %.not235, label %.thread351, label %.preheader, !llvm.loop !29

.thread351:                                       ; preds = %214, %197, %163, %162
  %.4202 = phi i64 [ %111, %163 ], [ %111, %162 ], [ %205, %197 ], [ %111, %214 ]
  %.4197 = phi i64 [ %98, %163 ], [ %98, %162 ], [ %213, %197 ], [ %98, %214 ]
  %218 = phi i1 [ false, %163 ], [ false, %162 ], [ true, %197 ], [ false, %214 ]
  %219 = and i8 %126, 8
  %220 = icmp eq i8 %219, 0
  %221 = icmp ne i64 %.4197, 0
  %or.cond10 = select i1 %220, i1 true, i1 %221
  %222 = icmp ne i32 %124, 0
  %or.cond12 = select i1 %or.cond10, i1 true, i1 %222
  br i1 %or.cond12, label %339, label %223

223:                                              ; preds = %.thread351
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  %224 = getelementptr inbounds i8, ptr %12, i64 100
  %225 = load i32, ptr %224, align 4, !tbaa !31
  %226 = icmp ne i32 %225, 0
  %227 = or i1 %218, %226
  %228 = load ptr, ptr %20, align 8, !tbaa !15
  %229 = load ptr, ptr %60, align 8, !tbaa !23
  %230 = load i64, ptr %137, align 8, !tbaa !25
  %231 = add i64 %230, %136
  %232 = select i1 %227, i64 24, i64 16
  %233 = call i64 %228(ptr noundef %229, i64 noundef %231, ptr noundef nonnull %9, i64 noundef %232) #6
  %.not236 = icmp eq i64 %233, %232
  br i1 %.not236, label %234, label %.thread357

234:                                              ; preds = %223
  %235 = load i32, ptr %9, align 16
  %236 = icmp eq i32 %235, 134695760
  %.sroa.gep = getelementptr inbounds i8, ptr %9, i64 4
  %.sroa.gep.val = load i8, ptr %.sroa.gep, align 4
  %237 = trunc i32 %235 to i8
  %238 = select i1 %236, i8 %.sroa.gep.val, i8 %237
  %239 = zext i8 %238 to i32
  %.sroa.gep.sroa.gep326 = getelementptr inbounds i8, ptr %9, i64 5
  %.sroa.gep.sroa.gep326.val = load i8, ptr %.sroa.gep.sroa.gep326, align 1
  %240 = lshr i32 %235, 8
  %241 = trunc i32 %240 to i8
  %242 = select i1 %236, i8 %.sroa.gep.sroa.gep326.val, i8 %241
  %243 = zext i8 %242 to i32
  %244 = shl nuw nsw i32 %243, 8
  %245 = or disjoint i32 %244, %239
  %.sroa.gep.sroa.gep323 = getelementptr inbounds i8, ptr %9, i64 6
  %.sroa.gep.sroa.gep323.val = load i8, ptr %.sroa.gep.sroa.gep323, align 2
  %246 = lshr i32 %235, 16
  %247 = trunc i32 %246 to i8
  %248 = select i1 %236, i8 %.sroa.gep.sroa.gep323.val, i8 %247
  %249 = zext i8 %248 to i32
  %250 = shl nuw nsw i32 %249, 16
  %251 = or disjoint i32 %250, %245
  %.sroa.gep.sroa.gep320 = getelementptr inbounds i8, ptr %9, i64 7
  %.sroa.gep.sroa.gep320.val = load i8, ptr %.sroa.gep.sroa.gep320, align 1
  %252 = lshr i32 %235, 24
  %253 = trunc nuw i32 %252 to i8
  %254 = select i1 %236, i8 %.sroa.gep.sroa.gep320.val, i8 %253
  %255 = zext i8 %254 to i32
  %256 = shl nuw i32 %255, 24
  %257 = or disjoint i32 %256, %251
  %258 = load i32, ptr %224, align 4, !tbaa !31
  %259 = icmp ne i32 %258, 0
  %or.cond14 = or i1 %218, %259
  %.sroa.gep.sroa.gep317 = getelementptr inbounds i8, ptr %9, i64 8
  %.sroa.gep.sroa.gep317.val = load i8, ptr %.sroa.gep.sroa.gep317, align 8
  %260 = select i1 %236, i8 %.sroa.gep.sroa.gep317.val, i8 %.sroa.gep.val
  %261 = zext i8 %260 to i64
  %.sroa.gep389 = getelementptr inbounds i8, ptr %9, i64 9
  %.sroa.gep389.val = load i8, ptr %.sroa.gep389, align 1
  %.sroa.gep.sroa.gep326.val426 = load i8, ptr %.sroa.gep.sroa.gep326, align 1
  %262 = select i1 %236, i8 %.sroa.gep389.val, i8 %.sroa.gep.sroa.gep326.val426
  %263 = zext i8 %262 to i64
  %264 = shl nuw nsw i64 %263, 8
  %265 = or disjoint i64 %264, %261
  %.sroa.gep391 = getelementptr inbounds i8, ptr %9, i64 10
  %.sroa.gep391.val = load i8, ptr %.sroa.gep391, align 2
  %.sroa.gep.sroa.gep323.val427 = load i8, ptr %.sroa.gep.sroa.gep323, align 2
  %266 = select i1 %236, i8 %.sroa.gep391.val, i8 %.sroa.gep.sroa.gep323.val427
  %267 = zext i8 %266 to i64
  %268 = shl nuw nsw i64 %267, 16
  %269 = or disjoint i64 %265, %268
  %.sroa.gep393 = getelementptr inbounds i8, ptr %9, i64 11
  %.sroa.gep393.val = load i8, ptr %.sroa.gep393, align 1
  %.sroa.gep.sroa.gep320.val428 = load i8, ptr %.sroa.gep.sroa.gep320, align 1
  %270 = select i1 %236, i8 %.sroa.gep393.val, i8 %.sroa.gep.sroa.gep320.val428
  %271 = zext i8 %270 to i64
  %272 = shl nuw nsw i64 %271, 24
  %273 = or disjoint i64 %269, %272
  %.sroa.gep395 = getelementptr inbounds i8, ptr %9, i64 12
  %.sroa.gep395.val = load i8, ptr %.sroa.gep395, align 4
  %.sroa.gep.sroa.gep317.val429 = load i8, ptr %.sroa.gep.sroa.gep317, align 8
  %274 = select i1 %236, i8 %.sroa.gep395.val, i8 %.sroa.gep.sroa.gep317.val429
  %275 = zext i8 %274 to i64
  %.sroa.gep397 = getelementptr inbounds i8, ptr %9, i64 13
  %.sroa.gep397.val = load i8, ptr %.sroa.gep397, align 1
  %.sroa.gep389.val430 = load i8, ptr %.sroa.gep389, align 1
  %276 = select i1 %236, i8 %.sroa.gep397.val, i8 %.sroa.gep389.val430
  %277 = zext i8 %276 to i64
  br i1 %or.cond14, label %278, label %321

278:                                              ; preds = %234
  %.sroa.gep399 = getelementptr inbounds i8, ptr %9, i64 14
  %.sroa.gep399.val = load i8, ptr %.sroa.gep399, align 2
  %.sroa.gep391.val431 = load i8, ptr %.sroa.gep391, align 2
  %279 = select i1 %236, i8 %.sroa.gep399.val, i8 %.sroa.gep391.val431
  %280 = zext i8 %279 to i64
  %.sroa.gep401 = getelementptr inbounds i8, ptr %9, i64 15
  %.sroa.gep401.val = load i8, ptr %.sroa.gep401, align 1
  %.sroa.gep393.val432 = load i8, ptr %.sroa.gep393, align 1
  %281 = select i1 %236, i8 %.sroa.gep401.val, i8 %.sroa.gep393.val432
  %282 = zext i8 %281 to i64
  %283 = shl nuw i64 %282, 56
  %284 = shl nuw nsw i64 %280, 48
  %285 = shl nuw nsw i64 %277, 40
  %286 = shl nuw nsw i64 %275, 32
  %287 = or disjoint i64 %285, %286
  %288 = or disjoint i64 %287, %284
  %289 = or disjoint i64 %288, %283
  %290 = or disjoint i64 %289, %273
  %.sroa.gep403 = getelementptr inbounds i8, ptr %9, i64 16
  %.sroa.gep403.val = load i8, ptr %.sroa.gep403, align 16
  %.sroa.gep395.val433 = load i8, ptr %.sroa.gep395, align 4
  %291 = select i1 %236, i8 %.sroa.gep403.val, i8 %.sroa.gep395.val433
  %292 = zext i8 %291 to i64
  %.sroa.gep405 = getelementptr inbounds i8, ptr %9, i64 17
  %.sroa.gep405.val = load i8, ptr %.sroa.gep405, align 1
  %.sroa.gep397.val434 = load i8, ptr %.sroa.gep397, align 1
  %293 = select i1 %236, i8 %.sroa.gep405.val, i8 %.sroa.gep397.val434
  %294 = zext i8 %293 to i64
  %295 = shl nuw nsw i64 %294, 8
  %.sroa.gep407 = getelementptr inbounds i8, ptr %9, i64 18
  %.sroa.gep407.val = load i8, ptr %.sroa.gep407, align 2
  %.sroa.gep399.val435 = load i8, ptr %.sroa.gep399, align 2
  %296 = select i1 %236, i8 %.sroa.gep407.val, i8 %.sroa.gep399.val435
  %297 = zext i8 %296 to i64
  %298 = shl nuw nsw i64 %297, 16
  %.sroa.gep409 = getelementptr inbounds i8, ptr %9, i64 19
  %.sroa.gep409.val = load i8, ptr %.sroa.gep409, align 1
  %.sroa.gep401.val436 = load i8, ptr %.sroa.gep401, align 1
  %299 = select i1 %236, i8 %.sroa.gep409.val, i8 %.sroa.gep401.val436
  %300 = zext i8 %299 to i64
  %301 = shl nuw nsw i64 %300, 24
  %.sroa.gep411 = getelementptr inbounds i8, ptr %9, i64 20
  %.sroa.gep411.val = load i8, ptr %.sroa.gep411, align 4
  %.sroa.gep403.val437 = load i8, ptr %.sroa.gep403, align 16
  %302 = select i1 %236, i8 %.sroa.gep411.val, i8 %.sroa.gep403.val437
  %303 = zext i8 %302 to i64
  %.sroa.gep413 = getelementptr inbounds i8, ptr %9, i64 21
  %.sroa.gep413.val = load i8, ptr %.sroa.gep413, align 1
  %.sroa.gep405.val438 = load i8, ptr %.sroa.gep405, align 1
  %304 = select i1 %236, i8 %.sroa.gep413.val, i8 %.sroa.gep405.val438
  %305 = zext i8 %304 to i64
  %.sroa.gep415 = getelementptr inbounds i8, ptr %9, i64 22
  %.sroa.gep415.val = load i8, ptr %.sroa.gep415, align 2
  %.sroa.gep407.val439 = load i8, ptr %.sroa.gep407, align 2
  %306 = select i1 %236, i8 %.sroa.gep415.val, i8 %.sroa.gep407.val439
  %307 = zext i8 %306 to i64
  %.sroa.gep417 = getelementptr inbounds i8, ptr %9, i64 23
  %.sroa.gep417.val = load i8, ptr %.sroa.gep417, align 1
  %.sroa.gep409.val440 = load i8, ptr %.sroa.gep409, align 1
  %308 = select i1 %236, i8 %.sroa.gep417.val, i8 %.sroa.gep409.val440
  %309 = zext i8 %308 to i64
  %310 = shl nuw i64 %309, 56
  %311 = shl nuw nsw i64 %307, 48
  %312 = shl nuw nsw i64 %305, 40
  %313 = shl nuw nsw i64 %303, 32
  %314 = or disjoint i64 %295, %292
  %315 = or disjoint i64 %314, %298
  %316 = or disjoint i64 %315, %301
  %317 = or disjoint i64 %316, %313
  %318 = or i64 %317, %312
  %319 = or i64 %318, %311
  %320 = or i64 %319, %310
  br label %332

321:                                              ; preds = %234
  %322 = shl nuw nsw i64 %277, 8
  %.sroa.gep385 = getelementptr inbounds i8, ptr %9, i64 14
  %.sroa.gep385.val = load i8, ptr %.sroa.gep385, align 2
  %.sroa.gep377.val424 = load i8, ptr %.sroa.gep391, align 2
  %323 = select i1 %236, i8 %.sroa.gep385.val, i8 %.sroa.gep377.val424
  %324 = zext i8 %323 to i64
  %325 = shl nuw nsw i64 %324, 16
  %326 = or disjoint i64 %322, %325
  %.sroa.gep387 = getelementptr inbounds i8, ptr %9, i64 15
  %.sroa.gep387.val = load i8, ptr %.sroa.gep387, align 1
  %.sroa.gep379.val425 = load i8, ptr %.sroa.gep393, align 1
  %327 = select i1 %236, i8 %.sroa.gep387.val, i8 %.sroa.gep379.val425
  %328 = zext i8 %327 to i64
  %329 = shl nuw nsw i64 %328, 24
  %330 = or disjoint i64 %326, %329
  %331 = or disjoint i64 %330, %275
  br label %332

332:                                              ; preds = %321, %278
  %.0191 = phi i64 [ %290, %278 ], [ %273, %321 ]
  %.0190 = phi i64 [ %320, %278 ], [ %331, %321 ]
  %333 = getelementptr inbounds i8, ptr %4, i64 24
  %334 = load i32, ptr %333, align 8, !tbaa !33
  %.not237 = icmp eq i32 %257, %334
  %335 = load i64, ptr %137, align 8
  %.not238 = icmp eq i64 %.0191, %335
  %or.cond245 = select i1 %.not237, i1 %.not238, i1 false
  %336 = load i64, ptr %37, align 8
  %.not239 = icmp eq i64 %.0190, %336
  %or.cond246 = select i1 %or.cond245, i1 %.not239, i1 false
  br i1 %or.cond246, label %338, label %.thread357

.thread357:                                       ; preds = %332, %223
  %.sink = phi i32 [ 20, %223 ], [ 30, %332 ]
  %337 = 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

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

339:                                              ; preds = %.thread351
  %340 = getelementptr inbounds i8, ptr %4, i64 24
  %341 = load i32, ptr %340, align 8, !tbaa !33
  %.not240 = icmp eq i32 %124, %341
  %342 = load i64, ptr %137, align 8
  %.not241 = icmp eq i64 %.4197, %342
  %or.cond248 = select i1 %.not240, i1 %.not241, i1 false
  %343 = load i64, ptr %37, align 8
  %.not242 = icmp eq i64 %.4202, %343
  %or.cond249 = select i1 %or.cond248, i1 %.not242, i1 false
  br i1 %or.cond249, label %346, label %344

344:                                              ; preds = %339
  %345 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 30)
  br label %.thread

346:                                              ; preds = %338, %339
  call void @mz_zip_array_clear(ptr noundef nonnull %0, ptr noundef nonnull %8)
  %347 = and i32 %2, 8192
  %348 = icmp eq i32 %347, 0
  br i1 %348, label %349, label %357

349:                                              ; preds = %346
  %350 = 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)
  %.not243 = icmp eq i32 %350, 0
  br i1 %.not243, label %357, label %351

351:                                              ; preds = %349
  %352 = load i32, ptr %7, align 4, !tbaa !5
  %353 = getelementptr inbounds i8, ptr %4, i64 24
  %354 = load i32, ptr %353, align 8, !tbaa !33
  %.not244 = icmp eq i32 %352, %354
  br i1 %.not244, label %357, label %355

355:                                              ; preds = %351
  %356 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 30)
  br label %357

.thread:                                          ; preds = %195, %188, %174, %.thread357, %171, %344, %160, %156, %148
  call void @mz_zip_array_clear(ptr noundef nonnull %0, ptr noundef nonnull %8)
  br label %357

357:                                              ; preds = %346, %351, %349, %33, %30, %.thread, %355, %142, %130, %67, %63, %54, %49, %43, %28, %22
  %.0 = phi i32 [ %29, %28 ], [ %44, %43 ], [ %50, %49 ], [ %64, %63 ], [ %68, %67 ], [ %131, %130 ], [ %143, %142 ], [ 0, %.thread ], [ 0, %355 ], [ %55, %54 ], [ %23, %22 ], [ 0, %30 ], [ 1, %33 ], [ 0, %349 ], [ 1, %351 ], [ 1, %346 ]
  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 i32 @llvm.umax.i32(i32, i32) #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 68}
!18 = !{!"", !6, i64 0, !11, i64 8, !19, i64 16, !19, i64 18, !19, i64 20, !19, i64 22, !6, i64 24, !11, i64 32, !11, i64 40, !19, i64 48, !6, i64 52, !11, i64 56, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !7, i64 80, !7, i64 592, !11, i64 1104}
!19 = !{!"short", !7, i64 0}
!20 = !{!18, !6, i64 72}
!21 = !{!18, !6, i64 76}
!22 = !{!18, !11, i64 56}
!23 = !{!10, !12, i64 96}
!24 = !{!7, !7, i64 0}
!25 = !{!18, !11, i64 32}
!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 24}


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