; LLVM IR from niessner/Matterport :: code/gaps/pkgs/png (deflate)

; 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.config_s = type { i16, i16, i16, i16, ptr }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.internal_state = type { ptr, i32, ptr, i64, ptr, i32, i32, ptr, i32, i8, i32, i32, i32, i32, ptr, i64, ptr, ptr, i32, i32, i32, i32, i32, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [573 x %struct.ct_data_s], [61 x %struct.ct_data_s], [39 x %struct.ct_data_s], %struct.tree_desc_s, %struct.tree_desc_s, %struct.tree_desc_s, [16 x i16], [573 x i32], i32, i32, [573 x i8], ptr, i32, i32, ptr, i64, i64, i32, i32, i16, i32, i64 }
%struct.ct_data_s = type { %union.anon, %union.anon.0 }
%union.anon = type { i16 }
%union.anon.0 = type { i16 }
%struct.tree_desc_s = type { ptr, i32, ptr }
%struct.gz_header_s = type { i32, i64, i32, i32, ptr, i32, i32, ptr, i32, ptr, i32, i32, i32 }

@z_errmsg = external constant [10 x ptr], align 16
@configuration_table = external hidden constant [10 x %struct.config_s], align 16

; 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

declare i64 @adler32(i64 noundef, ptr noundef, i32 noundef) #1

declare i64 @crc32(i64 noundef, ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @deflate(ptr noundef %0, i32 noundef %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  %17 = load ptr, ptr %4, align 8, !tbaa !5
  %18 = icmp eq ptr %17, null
  br i1 %18, label %30, label %19

19:                                               ; preds = %2
  %20 = load ptr, ptr %4, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.z_stream_s, ptr %20, i32 0, i32 7
  %22 = load ptr, ptr %21, align 8, !tbaa !11
  %23 = icmp eq ptr %22, null
  br i1 %23, label %30, label %24

24:                                               ; preds = %19
  %25 = load i32, ptr %5, align 4, !tbaa !9
  %26 = icmp sgt i32 %25, 5
  br i1 %26, label %30, label %27

27:                                               ; preds = %24
  %28 = load i32, ptr %5, align 4, !tbaa !9
  %29 = icmp slt i32 %28, 0
  br i1 %29, label %30, label %31

30:                                               ; preds = %27, %24, %19, %2
  store i32 -2, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

31:                                               ; preds = %27
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.z_stream_s, ptr %32, i32 0, i32 7
  %34 = load ptr, ptr %33, align 8, !tbaa !11
  store ptr %34, ptr %7, align 8, !tbaa !5
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.z_stream_s, ptr %35, i32 0, i32 3
  %37 = load ptr, ptr %36, align 8, !tbaa !14
  %38 = icmp eq ptr %37, null
  br i1 %38, label %57, label %39

39:                                               ; preds = %31
  %40 = load ptr, ptr %4, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.z_stream_s, ptr %40, i32 0, i32 0
  %42 = load ptr, ptr %41, align 8, !tbaa !15
  %43 = icmp eq ptr %42, null
  br i1 %43, label %44, label %49

44:                                               ; preds = %39
  %45 = load ptr, ptr %4, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.z_stream_s, ptr %45, i32 0, i32 1
  %47 = load i32, ptr %46, align 8, !tbaa !16
  %48 = icmp ne i32 %47, 0
  br i1 %48, label %57, label %49

49:                                               ; preds = %44, %39
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.internal_state, ptr %50, i32 0, i32 1
  %52 = load i32, ptr %51, align 8, !tbaa !17
  %53 = icmp eq i32 %52, 666
  br i1 %53, label %54, label %61

54:                                               ; preds = %49
  %55 = load i32, ptr %5, align 4, !tbaa !9
  %56 = icmp ne i32 %55, 4
  br i1 %56, label %57, label %61

57:                                               ; preds = %54, %44, %31
  %58 = load ptr, ptr getelementptr inbounds ([10 x ptr], ptr @z_errmsg, i64 0, i64 4), align 16, !tbaa !5
  %59 = load ptr, ptr %4, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.z_stream_s, ptr %59, i32 0, i32 6
  store ptr %58, ptr %60, align 8, !tbaa !21
  store i32 -2, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

61:                                               ; preds = %54, %49
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.z_stream_s, ptr %62, i32 0, i32 4
  %64 = load i32, ptr %63, align 8, !tbaa !22
  %65 = icmp eq i32 %64, 0
  br i1 %65, label %66, label %70

66:                                               ; preds = %61
  %67 = load ptr, ptr getelementptr inbounds ([10 x ptr], ptr @z_errmsg, i64 0, i64 7), align 8, !tbaa !5
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.z_stream_s, ptr %68, i32 0, i32 6
  store ptr %67, ptr %69, align 8, !tbaa !21
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

70:                                               ; preds = %61
  %71 = load ptr, ptr %4, align 8, !tbaa !5
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.internal_state, ptr %72, i32 0, i32 0
  store ptr %71, ptr %73, align 8, !tbaa !23
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.internal_state, ptr %74, i32 0, i32 10
  %76 = load i32, ptr %75, align 8, !tbaa !24
  store i32 %76, ptr %6, align 4, !tbaa !9
  %77 = load i32, ptr %5, align 4, !tbaa !9
  %78 = load ptr, ptr %7, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.internal_state, ptr %78, i32 0, i32 10
  store i32 %77, ptr %79, align 8, !tbaa !24
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.internal_state, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 8, !tbaa !17
  %83 = icmp eq i32 %82, 42
  br i1 %83, label %84, label %524

84:                                               ; preds = %70
  %85 = load ptr, ptr %7, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.internal_state, ptr %85, i32 0, i32 6
  %87 = load i32, ptr %86, align 4, !tbaa !25
  %88 = icmp eq i32 %87, 2
  br i1 %88, label %89, label %447

89:                                               ; preds = %84
  %90 = call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0)
  %91 = load ptr, ptr %4, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.z_stream_s, ptr %91, i32 0, i32 12
  store i64 %90, ptr %92, align 8, !tbaa !26
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.internal_state, ptr %93, i32 0, i32 2
  %95 = load ptr, ptr %94, align 8, !tbaa !27
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.internal_state, ptr %96, i32 0, i32 5
  %98 = load i32, ptr %97, align 8, !tbaa !28
  %99 = add i32 %98, 1
  store i32 %99, ptr %97, align 8, !tbaa !28
  %100 = zext i32 %98 to i64
  %101 = getelementptr inbounds i8, ptr %95, i64 %100
  store i8 31, ptr %101, align 1, !tbaa !29
  %102 = load ptr, ptr %7, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.internal_state, ptr %102, i32 0, i32 2
  %104 = load ptr, ptr %103, align 8, !tbaa !27
  %105 = load ptr, ptr %7, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.internal_state, ptr %105, i32 0, i32 5
  %107 = load i32, ptr %106, align 8, !tbaa !28
  %108 = add i32 %107, 1
  store i32 %108, ptr %106, align 8, !tbaa !28
  %109 = zext i32 %107 to i64
  %110 = getelementptr inbounds i8, ptr %104, i64 %109
  store i8 -117, ptr %110, align 1, !tbaa !29
  %111 = load ptr, ptr %7, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.internal_state, ptr %111, i32 0, i32 2
  %113 = load ptr, ptr %112, align 8, !tbaa !27
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.internal_state, ptr %114, i32 0, i32 5
  %116 = load i32, ptr %115, align 8, !tbaa !28
  %117 = add i32 %116, 1
  store i32 %117, ptr %115, align 8, !tbaa !28
  %118 = zext i32 %116 to i64
  %119 = getelementptr inbounds i8, ptr %113, i64 %118
  store i8 8, ptr %119, align 1, !tbaa !29
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.internal_state, ptr %120, i32 0, i32 7
  %122 = load ptr, ptr %121, align 8, !tbaa !30
  %123 = icmp eq ptr %122, null
  br i1 %123, label %124, label %212

124:                                              ; preds = %89
  %125 = load ptr, ptr %7, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.internal_state, ptr %125, i32 0, i32 2
  %127 = load ptr, ptr %126, align 8, !tbaa !27
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.internal_state, ptr %128, i32 0, i32 5
  %130 = load i32, ptr %129, align 8, !tbaa !28
  %131 = add i32 %130, 1
  store i32 %131, ptr %129, align 8, !tbaa !28
  %132 = zext i32 %130 to i64
  %133 = getelementptr inbounds i8, ptr %127, i64 %132
  store i8 0, ptr %133, align 1, !tbaa !29
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.internal_state, ptr %134, i32 0, i32 2
  %136 = load ptr, ptr %135, align 8, !tbaa !27
  %137 = load ptr, ptr %7, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.internal_state, ptr %137, i32 0, i32 5
  %139 = load i32, ptr %138, align 8, !tbaa !28
  %140 = add i32 %139, 1
  store i32 %140, ptr %138, align 8, !tbaa !28
  %141 = zext i32 %139 to i64
  %142 = getelementptr inbounds i8, ptr %136, i64 %141
  store i8 0, ptr %142, align 1, !tbaa !29
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.internal_state, ptr %143, i32 0, i32 2
  %145 = load ptr, ptr %144, align 8, !tbaa !27
  %146 = load ptr, ptr %7, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.internal_state, ptr %146, i32 0, i32 5
  %148 = load i32, ptr %147, align 8, !tbaa !28
  %149 = add i32 %148, 1
  store i32 %149, ptr %147, align 8, !tbaa !28
  %150 = zext i32 %148 to i64
  %151 = getelementptr inbounds i8, ptr %145, i64 %150
  store i8 0, ptr %151, align 1, !tbaa !29
  %152 = load ptr, ptr %7, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.internal_state, ptr %152, i32 0, i32 2
  %154 = load ptr, ptr %153, align 8, !tbaa !27
  %155 = load ptr, ptr %7, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.internal_state, ptr %155, i32 0, i32 5
  %157 = load i32, ptr %156, align 8, !tbaa !28
  %158 = add i32 %157, 1
  store i32 %158, ptr %156, align 8, !tbaa !28
  %159 = zext i32 %157 to i64
  %160 = getelementptr inbounds i8, ptr %154, i64 %159
  store i8 0, ptr %160, align 1, !tbaa !29
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.internal_state, ptr %161, i32 0, i32 2
  %163 = load ptr, ptr %162, align 8, !tbaa !27
  %164 = load ptr, ptr %7, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.internal_state, ptr %164, i32 0, i32 5
  %166 = load i32, ptr %165, align 8, !tbaa !28
  %167 = add i32 %166, 1
  store i32 %167, ptr %165, align 8, !tbaa !28
  %168 = zext i32 %166 to i64
  %169 = getelementptr inbounds i8, ptr %163, i64 %168
  store i8 0, ptr %169, align 1, !tbaa !29
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.internal_state, ptr %170, i32 0, i32 33
  %172 = load i32, ptr %171, align 4, !tbaa !31
  %173 = icmp eq i32 %172, 9
  br i1 %173, label %174, label %175

174:                                              ; preds = %124
  br label %189

175:                                              ; preds = %124
  %176 = load ptr, ptr %7, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.internal_state, ptr %176, i32 0, i32 34
  %178 = load i32, ptr %177, align 8, !tbaa !32
  %179 = icmp sge i32 %178, 2
  br i1 %179, label %185, label %180

180:                                              ; preds = %175
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.internal_state, ptr %181, i32 0, i32 33
  %183 = load i32, ptr %182, align 4, !tbaa !31
  %184 = icmp slt i32 %183, 2
  br label %185

185:                                              ; preds = %180, %175
  %186 = phi i1 [ true, %175 ], [ %184, %180 ]
  %187 = zext i1 %186 to i64
  %188 = select i1 %186, i32 4, i32 0
  br label %189

189:                                              ; preds = %185, %174
  %190 = phi i32 [ 2, %174 ], [ %188, %185 ]
  %191 = trunc i32 %190 to i8
  %192 = load ptr, ptr %7, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.internal_state, ptr %192, i32 0, i32 2
  %194 = load ptr, ptr %193, align 8, !tbaa !27
  %195 = load ptr, ptr %7, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.internal_state, ptr %195, i32 0, i32 5
  %197 = load i32, ptr %196, align 8, !tbaa !28
  %198 = add i32 %197, 1
  store i32 %198, ptr %196, align 8, !tbaa !28
  %199 = zext i32 %197 to i64
  %200 = getelementptr inbounds i8, ptr %194, i64 %199
  store i8 %191, ptr %200, align 1, !tbaa !29
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.internal_state, ptr %201, i32 0, i32 2
  %203 = load ptr, ptr %202, align 8, !tbaa !27
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.internal_state, ptr %204, i32 0, i32 5
  %206 = load i32, ptr %205, align 8, !tbaa !28
  %207 = add i32 %206, 1
  store i32 %207, ptr %205, align 8, !tbaa !28
  %208 = zext i32 %206 to i64
  %209 = getelementptr inbounds i8, ptr %203, i64 %208
  store i8 3, ptr %209, align 1, !tbaa !29
  %210 = load ptr, ptr %7, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.internal_state, ptr %210, i32 0, i32 1
  store i32 113, ptr %211, align 8, !tbaa !17
  br label %446

212:                                              ; preds = %89
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.internal_state, ptr %213, i32 0, i32 7
  %215 = load ptr, ptr %214, align 8, !tbaa !30
  %216 = getelementptr inbounds %struct.gz_header_s, ptr %215, i32 0, i32 0
  %217 = load i32, ptr %216, align 8, !tbaa !33
  %218 = icmp ne i32 %217, 0
  %219 = zext i1 %218 to i64
  %220 = select i1 %218, i32 1, i32 0
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.internal_state, ptr %221, i32 0, i32 7
  %223 = load ptr, ptr %222, align 8, !tbaa !30
  %224 = getelementptr inbounds %struct.gz_header_s, ptr %223, i32 0, i32 11
  %225 = load i32, ptr %224, align 4, !tbaa !35
  %226 = icmp ne i32 %225, 0
  %227 = zext i1 %226 to i64
  %228 = select i1 %226, i32 2, i32 0
  %229 = add nsw i32 %220, %228
  %230 = load ptr, ptr %7, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.internal_state, ptr %230, i32 0, i32 7
  %232 = load ptr, ptr %231, align 8, !tbaa !30
  %233 = getelementptr inbounds %struct.gz_header_s, ptr %232, i32 0, i32 4
  %234 = load ptr, ptr %233, align 8, !tbaa !36
  %235 = icmp eq ptr %234, null
  %236 = zext i1 %235 to i64
  %237 = select i1 %235, i32 0, i32 4
  %238 = add nsw i32 %229, %237
  %239 = load ptr, ptr %7, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.internal_state, ptr %239, i32 0, i32 7
  %241 = load ptr, ptr %240, align 8, !tbaa !30
  %242 = getelementptr inbounds %struct.gz_header_s, ptr %241, i32 0, i32 7
  %243 = load ptr, ptr %242, align 8, !tbaa !37
  %244 = icmp eq ptr %243, null
  %245 = zext i1 %244 to i64
  %246 = select i1 %244, i32 0, i32 8
  %247 = add nsw i32 %238, %246
  %248 = load ptr, ptr %7, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.internal_state, ptr %248, i32 0, i32 7
  %250 = load ptr, ptr %249, align 8, !tbaa !30
  %251 = getelementptr inbounds %struct.gz_header_s, ptr %250, i32 0, i32 9
  %252 = load ptr, ptr %251, align 8, !tbaa !38
  %253 = icmp eq ptr %252, null
  %254 = zext i1 %253 to i64
  %255 = select i1 %253, i32 0, i32 16
  %256 = add nsw i32 %247, %255
  %257 = trunc i32 %256 to i8
  %258 = load ptr, ptr %7, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.internal_state, ptr %258, i32 0, i32 2
  %260 = load ptr, ptr %259, align 8, !tbaa !27
  %261 = load ptr, ptr %7, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.internal_state, ptr %261, i32 0, i32 5
  %263 = load i32, ptr %262, align 8, !tbaa !28
  %264 = add i32 %263, 1
  store i32 %264, ptr %262, align 8, !tbaa !28
  %265 = zext i32 %263 to i64
  %266 = getelementptr inbounds i8, ptr %260, i64 %265
  store i8 %257, ptr %266, align 1, !tbaa !29
  %267 = load ptr, ptr %7, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.internal_state, ptr %267, i32 0, i32 7
  %269 = load ptr, ptr %268, align 8, !tbaa !30
  %270 = getelementptr inbounds %struct.gz_header_s, ptr %269, i32 0, i32 1
  %271 = load i64, ptr %270, align 8, !tbaa !39
  %272 = and i64 %271, 255
  %273 = trunc i64 %272 to i8
  %274 = load ptr, ptr %7, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.internal_state, ptr %274, i32 0, i32 2
  %276 = load ptr, ptr %275, align 8, !tbaa !27
  %277 = load ptr, ptr %7, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.internal_state, ptr %277, i32 0, i32 5
  %279 = load i32, ptr %278, align 8, !tbaa !28
  %280 = add i32 %279, 1
  store i32 %280, ptr %278, align 8, !tbaa !28
  %281 = zext i32 %279 to i64
  %282 = getelementptr inbounds i8, ptr %276, i64 %281
  store i8 %273, ptr %282, align 1, !tbaa !29
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.internal_state, ptr %283, i32 0, i32 7
  %285 = load ptr, ptr %284, align 8, !tbaa !30
  %286 = getelementptr inbounds %struct.gz_header_s, ptr %285, i32 0, i32 1
  %287 = load i64, ptr %286, align 8, !tbaa !39
  %288 = lshr i64 %287, 8
  %289 = and i64 %288, 255
  %290 = trunc i64 %289 to i8
  %291 = load ptr, ptr %7, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.internal_state, ptr %291, i32 0, i32 2
  %293 = load ptr, ptr %292, align 8, !tbaa !27
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.internal_state, ptr %294, i32 0, i32 5
  %296 = load i32, ptr %295, align 8, !tbaa !28
  %297 = add i32 %296, 1
  store i32 %297, ptr %295, align 8, !tbaa !28
  %298 = zext i32 %296 to i64
  %299 = getelementptr inbounds i8, ptr %293, i64 %298
  store i8 %290, ptr %299, align 1, !tbaa !29
  %300 = load ptr, ptr %7, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.internal_state, ptr %300, i32 0, i32 7
  %302 = load ptr, ptr %301, align 8, !tbaa !30
  %303 = getelementptr inbounds %struct.gz_header_s, ptr %302, i32 0, i32 1
  %304 = load i64, ptr %303, align 8, !tbaa !39
  %305 = lshr i64 %304, 16
  %306 = and i64 %305, 255
  %307 = trunc i64 %306 to i8
  %308 = load ptr, ptr %7, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.internal_state, ptr %308, i32 0, i32 2
  %310 = load ptr, ptr %309, align 8, !tbaa !27
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.internal_state, ptr %311, i32 0, i32 5
  %313 = load i32, ptr %312, align 8, !tbaa !28
  %314 = add i32 %313, 1
  store i32 %314, ptr %312, align 8, !tbaa !28
  %315 = zext i32 %313 to i64
  %316 = getelementptr inbounds i8, ptr %310, i64 %315
  store i8 %307, ptr %316, align 1, !tbaa !29
  %317 = load ptr, ptr %7, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.internal_state, ptr %317, i32 0, i32 7
  %319 = load ptr, ptr %318, align 8, !tbaa !30
  %320 = getelementptr inbounds %struct.gz_header_s, ptr %319, i32 0, i32 1
  %321 = load i64, ptr %320, align 8, !tbaa !39
  %322 = lshr i64 %321, 24
  %323 = and i64 %322, 255
  %324 = trunc i64 %323 to i8
  %325 = load ptr, ptr %7, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.internal_state, ptr %325, i32 0, i32 2
  %327 = load ptr, ptr %326, align 8, !tbaa !27
  %328 = load ptr, ptr %7, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.internal_state, ptr %328, i32 0, i32 5
  %330 = load i32, ptr %329, align 8, !tbaa !28
  %331 = add i32 %330, 1
  store i32 %331, ptr %329, align 8, !tbaa !28
  %332 = zext i32 %330 to i64
  %333 = getelementptr inbounds i8, ptr %327, i64 %332
  store i8 %324, ptr %333, align 1, !tbaa !29
  %334 = load ptr, ptr %7, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.internal_state, ptr %334, i32 0, i32 33
  %336 = load i32, ptr %335, align 4, !tbaa !31
  %337 = icmp eq i32 %336, 9
  br i1 %337, label %338, label %339

338:                                              ; preds = %212
  br label %353

339:                                              ; preds = %212
  %340 = load ptr, ptr %7, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.internal_state, ptr %340, i32 0, i32 34
  %342 = load i32, ptr %341, align 8, !tbaa !32
  %343 = icmp sge i32 %342, 2
  br i1 %343, label %349, label %344

344:                                              ; preds = %339
  %345 = load ptr, ptr %7, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.internal_state, ptr %345, i32 0, i32 33
  %347 = load i32, ptr %346, align 4, !tbaa !31
  %348 = icmp slt i32 %347, 2
  br label %349

349:                                              ; preds = %344, %339
  %350 = phi i1 [ true, %339 ], [ %348, %344 ]
  %351 = zext i1 %350 to i64
  %352 = select i1 %350, i32 4, i32 0
  br label %353

353:                                              ; preds = %349, %338
  %354 = phi i32 [ 2, %338 ], [ %352, %349 ]
  %355 = trunc i32 %354 to i8
  %356 = load ptr, ptr %7, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.internal_state, ptr %356, i32 0, i32 2
  %358 = load ptr, ptr %357, align 8, !tbaa !27
  %359 = load ptr, ptr %7, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.internal_state, ptr %359, i32 0, i32 5
  %361 = load i32, ptr %360, align 8, !tbaa !28
  %362 = add i32 %361, 1
  store i32 %362, ptr %360, align 8, !tbaa !28
  %363 = zext i32 %361 to i64
  %364 = getelementptr inbounds i8, ptr %358, i64 %363
  store i8 %355, ptr %364, align 1, !tbaa !29
  %365 = load ptr, ptr %7, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.internal_state, ptr %365, i32 0, i32 7
  %367 = load ptr, ptr %366, align 8, !tbaa !30
  %368 = getelementptr inbounds %struct.gz_header_s, ptr %367, i32 0, i32 3
  %369 = load i32, ptr %368, align 4, !tbaa !40
  %370 = and i32 %369, 255
  %371 = trunc i32 %370 to i8
  %372 = load ptr, ptr %7, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.internal_state, ptr %372, i32 0, i32 2
  %374 = load ptr, ptr %373, align 8, !tbaa !27
  %375 = load ptr, ptr %7, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.internal_state, ptr %375, i32 0, i32 5
  %377 = load i32, ptr %376, align 8, !tbaa !28
  %378 = add i32 %377, 1
  store i32 %378, ptr %376, align 8, !tbaa !28
  %379 = zext i32 %377 to i64
  %380 = getelementptr inbounds i8, ptr %374, i64 %379
  store i8 %371, ptr %380, align 1, !tbaa !29
  %381 = load ptr, ptr %7, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.internal_state, ptr %381, i32 0, i32 7
  %383 = load ptr, ptr %382, align 8, !tbaa !30
  %384 = getelementptr inbounds %struct.gz_header_s, ptr %383, i32 0, i32 4
  %385 = load ptr, ptr %384, align 8, !tbaa !36
  %386 = icmp ne ptr %385, null
  br i1 %386, label %387, label %421

387:                                              ; preds = %353
  %388 = load ptr, ptr %7, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.internal_state, ptr %388, i32 0, i32 7
  %390 = load ptr, ptr %389, align 8, !tbaa !30
  %391 = getelementptr inbounds %struct.gz_header_s, ptr %390, i32 0, i32 5
  %392 = load i32, ptr %391, align 8, !tbaa !41
  %393 = and i32 %392, 255
  %394 = trunc i32 %393 to i8
  %395 = load ptr, ptr %7, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.internal_state, ptr %395, i32 0, i32 2
  %397 = load ptr, ptr %396, align 8, !tbaa !27
  %398 = load ptr, ptr %7, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.internal_state, ptr %398, i32 0, i32 5
  %400 = load i32, ptr %399, align 8, !tbaa !28
  %401 = add i32 %400, 1
  store i32 %401, ptr %399, align 8, !tbaa !28
  %402 = zext i32 %400 to i64
  %403 = getelementptr inbounds i8, ptr %397, i64 %402
  store i8 %394, ptr %403, align 1, !tbaa !29
  %404 = load ptr, ptr %7, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.internal_state, ptr %404, i32 0, i32 7
  %406 = load ptr, ptr %405, align 8, !tbaa !30
  %407 = getelementptr inbounds %struct.gz_header_s, ptr %406, i32 0, i32 5
  %408 = load i32, ptr %407, align 8, !tbaa !41
  %409 = lshr i32 %408, 8
  %410 = and i32 %409, 255
  %411 = trunc i32 %410 to i8
  %412 = load ptr, ptr %7, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.internal_state, ptr %412, i32 0, i32 2
  %414 = load ptr, ptr %413, align 8, !tbaa !27
  %415 = load ptr, ptr %7, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.internal_state, ptr %415, i32 0, i32 5
  %417 = load i32, ptr %416, align 8, !tbaa !28
  %418 = add i32 %417, 1
  store i32 %418, ptr %416, align 8, !tbaa !28
  %419 = zext i32 %417 to i64
  %420 = getelementptr inbounds i8, ptr %414, i64 %419
  store i8 %411, ptr %420, align 1, !tbaa !29
  br label %421

421:                                              ; preds = %387, %353
  %422 = load ptr, ptr %7, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.internal_state, ptr %422, i32 0, i32 7
  %424 = load ptr, ptr %423, align 8, !tbaa !30
  %425 = getelementptr inbounds %struct.gz_header_s, ptr %424, i32 0, i32 11
  %426 = load i32, ptr %425, align 4, !tbaa !35
  %427 = icmp ne i32 %426, 0
  br i1 %427, label %428, label %441

428:                                              ; preds = %421
  %429 = load ptr, ptr %4, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.z_stream_s, ptr %429, i32 0, i32 12
  %431 = load i64, ptr %430, align 8, !tbaa !26
  %432 = load ptr, ptr %7, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.internal_state, ptr %432, i32 0, i32 2
  %434 = load ptr, ptr %433, align 8, !tbaa !27
  %435 = load ptr, ptr %7, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.internal_state, ptr %435, i32 0, i32 5
  %437 = load i32, ptr %436, align 8, !tbaa !28
  %438 = call i64 @crc32(i64 noundef %431, ptr noundef %434, i32 noundef %437)
  %439 = load ptr, ptr %4, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.z_stream_s, ptr %439, i32 0, i32 12
  store i64 %438, ptr %440, align 8, !tbaa !26
  br label %441

441:                                              ; preds = %428, %421
  %442 = load ptr, ptr %7, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.internal_state, ptr %442, i32 0, i32 8
  store i32 0, ptr %443, align 8, !tbaa !42
  %444 = load ptr, ptr %7, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.internal_state, ptr %444, i32 0, i32 1
  store i32 69, ptr %445, align 8, !tbaa !17
  br label %446

446:                                              ; preds = %441, %189
  br label %523

447:                                              ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.internal_state, ptr %448, i32 0, i32 12
  %450 = load i32, ptr %449, align 8, !tbaa !43
  %451 = sub i32 %450, 8
  %452 = shl i32 %451, 4
  %453 = add i32 8, %452
  %454 = shl i32 %453, 8
  store i32 %454, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %455 = load ptr, ptr %7, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.internal_state, ptr %455, i32 0, i32 34
  %457 = load i32, ptr %456, align 8, !tbaa !32
  %458 = icmp sge i32 %457, 2
  br i1 %458, label %464, label %459

459:                                              ; preds = %447
  %460 = load ptr, ptr %7, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.internal_state, ptr %460, i32 0, i32 33
  %462 = load i32, ptr %461, align 4, !tbaa !31
  %463 = icmp slt i32 %462, 2
  br i1 %463, label %464, label %465

464:                                              ; preds = %459, %447
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %480

465:                                              ; preds = %459
  %466 = load ptr, ptr %7, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.internal_state, ptr %466, i32 0, i32 33
  %468 = load i32, ptr %467, align 4, !tbaa !31
  %469 = icmp slt i32 %468, 6
  br i1 %469, label %470, label %471

470:                                              ; preds = %465
  store i32 1, ptr %10, align 4, !tbaa !9
  br label %479

471:                                              ; preds = %465
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.internal_state, ptr %472, i32 0, i32 33
  %474 = load i32, ptr %473, align 4, !tbaa !31
  %475 = icmp eq i32 %474, 6
  br i1 %475, label %476, label %477

476:                                              ; preds = %471
  store i32 2, ptr %10, align 4, !tbaa !9
  br label %478

477:                                              ; preds = %471
  store i32 3, ptr %10, align 4, !tbaa !9
  br label %478

478:                                              ; preds = %477, %476
  br label %479

479:                                              ; preds = %478, %470
  br label %480

480:                                              ; preds = %479, %464
  %481 = load i32, ptr %10, align 4, !tbaa !9
  %482 = shl i32 %481, 6
  %483 = load i32, ptr %9, align 4, !tbaa !9
  %484 = or i32 %483, %482
  store i32 %484, ptr %9, align 4, !tbaa !9
  %485 = load ptr, ptr %7, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.internal_state, ptr %485, i32 0, i32 27
  %487 = load i32, ptr %486, align 4, !tbaa !44
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %489, label %492

489:                                              ; preds = %480
  %490 = load i32, ptr %9, align 4, !tbaa !9
  %491 = or i32 %490, 32
  store i32 %491, ptr %9, align 4, !tbaa !9
  br label %492

492:                                              ; preds = %489, %480
  %493 = load i32, ptr %9, align 4, !tbaa !9
  %494 = urem i32 %493, 31
  %495 = sub i32 31, %494
  %496 = load i32, ptr %9, align 4, !tbaa !9
  %497 = add i32 %496, %495
  store i32 %497, ptr %9, align 4, !tbaa !9
  %498 = load ptr, ptr %7, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.internal_state, ptr %498, i32 0, i32 1
  store i32 113, ptr %499, align 8, !tbaa !17
  %500 = load ptr, ptr %7, align 8, !tbaa !5
  %501 = load i32, ptr %9, align 4, !tbaa !9
  call void @putShortMSB(ptr noundef %500, i32 noundef %501)
  %502 = load ptr, ptr %7, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.internal_state, ptr %502, i32 0, i32 27
  %504 = load i32, ptr %503, align 4, !tbaa !44
  %505 = icmp ne i32 %504, 0
  br i1 %505, label %506, label %519

506:                                              ; preds = %492
  %507 = load ptr, ptr %7, align 8, !tbaa !5
  %508 = load ptr, ptr %4, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.z_stream_s, ptr %508, i32 0, i32 12
  %510 = load i64, ptr %509, align 8, !tbaa !26
  %511 = lshr i64 %510, 16
  %512 = trunc i64 %511 to i32
  call void @putShortMSB(ptr noundef %507, i32 noundef %512)
  %513 = load ptr, ptr %7, align 8, !tbaa !5
  %514 = load ptr, ptr %4, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.z_stream_s, ptr %514, i32 0, i32 12
  %516 = load i64, ptr %515, align 8, !tbaa !26
  %517 = and i64 %516, 65535
  %518 = trunc i64 %517 to i32
  call void @putShortMSB(ptr noundef %513, i32 noundef %518)
  br label %519

519:                                              ; preds = %506, %492
  %520 = call i64 @adler32(i64 noundef 0, ptr noundef null, i32 noundef 0)
  %521 = load ptr, ptr %4, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.z_stream_s, ptr %521, i32 0, i32 12
  store i64 %520, ptr %522, align 8, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %523

523:                                              ; preds = %519, %446
  br label %524

524:                                              ; preds = %523, %70
  %525 = load ptr, ptr %7, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.internal_state, ptr %525, i32 0, i32 1
  %527 = load i32, ptr %526, align 8, !tbaa !17
  %528 = icmp eq i32 %527, 69
  br i1 %528, label %529, label %682

529:                                              ; preds = %524
  %530 = load ptr, ptr %7, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.internal_state, ptr %530, i32 0, i32 7
  %532 = load ptr, ptr %531, align 8, !tbaa !30
  %533 = getelementptr inbounds %struct.gz_header_s, ptr %532, i32 0, i32 4
  %534 = load ptr, ptr %533, align 8, !tbaa !36
  %535 = icmp ne ptr %534, null
  br i1 %535, label %536, label %678

536:                                              ; preds = %529
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %537 = load ptr, ptr %7, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.internal_state, ptr %537, i32 0, i32 5
  %539 = load i32, ptr %538, align 8, !tbaa !28
  store i32 %539, ptr %11, align 4, !tbaa !9
  br label %540

540:                                              ; preds = %606, %536
  %541 = load ptr, ptr %7, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.internal_state, ptr %541, i32 0, i32 8
  %543 = load i32, ptr %542, align 8, !tbaa !42
  %544 = load ptr, ptr %7, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.internal_state, ptr %544, i32 0, i32 7
  %546 = load ptr, ptr %545, align 8, !tbaa !30
  %547 = getelementptr inbounds %struct.gz_header_s, ptr %546, i32 0, i32 5
  %548 = load i32, ptr %547, align 8, !tbaa !41
  %549 = and i32 %548, 65535
  %550 = icmp ult i32 %543, %549
  br i1 %550, label %551, label %631

551:                                              ; preds = %540
  %552 = load ptr, ptr %7, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.internal_state, ptr %552, i32 0, i32 5
  %554 = load i32, ptr %553, align 8, !tbaa !28
  %555 = zext i32 %554 to i64
  %556 = load ptr, ptr %7, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.internal_state, ptr %556, i32 0, i32 3
  %558 = load i64, ptr %557, align 8, !tbaa !45
  %559 = icmp eq i64 %555, %558
  br i1 %559, label %560, label %606

560:                                              ; preds = %551
  %561 = load ptr, ptr %7, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.internal_state, ptr %561, i32 0, i32 7
  %563 = load ptr, ptr %562, align 8, !tbaa !30
  %564 = getelementptr inbounds %struct.gz_header_s, ptr %563, i32 0, i32 11
  %565 = load i32, ptr %564, align 4, !tbaa !35
  %566 = icmp ne i32 %565, 0
  br i1 %566, label %567, label %591

567:                                              ; preds = %560
  %568 = load ptr, ptr %7, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.internal_state, ptr %568, i32 0, i32 5
  %570 = load i32, ptr %569, align 8, !tbaa !28
  %571 = load i32, ptr %11, align 4, !tbaa !9
  %572 = icmp ugt i32 %570, %571
  br i1 %572, label %573, label %591

573:                                              ; preds = %567
  %574 = load ptr, ptr %4, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.z_stream_s, ptr %574, i32 0, i32 12
  %576 = load i64, ptr %575, align 8, !tbaa !26
  %577 = load ptr, ptr %7, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.internal_state, ptr %577, i32 0, i32 2
  %579 = load ptr, ptr %578, align 8, !tbaa !27
  %580 = load i32, ptr %11, align 4, !tbaa !9
  %581 = zext i32 %580 to i64
  %582 = getelementptr inbounds i8, ptr %579, i64 %581
  %583 = load ptr, ptr %7, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.internal_state, ptr %583, i32 0, i32 5
  %585 = load i32, ptr %584, align 8, !tbaa !28
  %586 = load i32, ptr %11, align 4, !tbaa !9
  %587 = sub i32 %585, %586
  %588 = call i64 @crc32(i64 noundef %576, ptr noundef %582, i32 noundef %587)
  %589 = load ptr, ptr %4, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.z_stream_s, ptr %589, i32 0, i32 12
  store i64 %588, ptr %590, align 8, !tbaa !26
  br label %591

591:                                              ; preds = %573, %567, %560
  %592 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %592)
  %593 = load ptr, ptr %7, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.internal_state, ptr %593, i32 0, i32 5
  %595 = load i32, ptr %594, align 8, !tbaa !28
  store i32 %595, ptr %11, align 4, !tbaa !9
  %596 = load ptr, ptr %7, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.internal_state, ptr %596, i32 0, i32 5
  %598 = load i32, ptr %597, align 8, !tbaa !28
  %599 = zext i32 %598 to i64
  %600 = load ptr, ptr %7, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.internal_state, ptr %600, i32 0, i32 3
  %602 = load i64, ptr %601, align 8, !tbaa !45
  %603 = icmp eq i64 %599, %602
  br i1 %603, label %604, label %605

604:                                              ; preds = %591
  br label %631

605:                                              ; preds = %591
  br label %606

606:                                              ; preds = %605, %551
  %607 = load ptr, ptr %7, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.internal_state, ptr %607, i32 0, i32 7
  %609 = load ptr, ptr %608, align 8, !tbaa !30
  %610 = getelementptr inbounds %struct.gz_header_s, ptr %609, i32 0, i32 4
  %611 = load ptr, ptr %610, align 8, !tbaa !36
  %612 = load ptr, ptr %7, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.internal_state, ptr %612, i32 0, i32 8
  %614 = load i32, ptr %613, align 8, !tbaa !42
  %615 = zext i32 %614 to i64
  %616 = getelementptr inbounds i8, ptr %611, i64 %615
  %617 = load i8, ptr %616, align 1, !tbaa !29
  %618 = load ptr, ptr %7, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.internal_state, ptr %618, i32 0, i32 2
  %620 = load ptr, ptr %619, align 8, !tbaa !27
  %621 = load ptr, ptr %7, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.internal_state, ptr %621, i32 0, i32 5
  %623 = load i32, ptr %622, align 8, !tbaa !28
  %624 = add i32 %623, 1
  store i32 %624, ptr %622, align 8, !tbaa !28
  %625 = zext i32 %623 to i64
  %626 = getelementptr inbounds i8, ptr %620, i64 %625
  store i8 %617, ptr %626, align 1, !tbaa !29
  %627 = load ptr, ptr %7, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.internal_state, ptr %627, i32 0, i32 8
  %629 = load i32, ptr %628, align 8, !tbaa !42
  %630 = add i32 %629, 1
  store i32 %630, ptr %628, align 8, !tbaa !42
  br label %540, !llvm.loop !46

631:                                              ; preds = %604, %540
  %632 = load ptr, ptr %7, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.internal_state, ptr %632, i32 0, i32 7
  %634 = load ptr, ptr %633, align 8, !tbaa !30
  %635 = getelementptr inbounds %struct.gz_header_s, ptr %634, i32 0, i32 11
  %636 = load i32, ptr %635, align 4, !tbaa !35
  %637 = icmp ne i32 %636, 0
  br i1 %637, label %638, label %662

638:                                              ; preds = %631
  %639 = load ptr, ptr %7, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.internal_state, ptr %639, i32 0, i32 5
  %641 = load i32, ptr %640, align 8, !tbaa !28
  %642 = load i32, ptr %11, align 4, !tbaa !9
  %643 = icmp ugt i32 %641, %642
  br i1 %643, label %644, label %662

644:                                              ; preds = %638
  %645 = load ptr, ptr %4, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.z_stream_s, ptr %645, i32 0, i32 12
  %647 = load i64, ptr %646, align 8, !tbaa !26
  %648 = load ptr, ptr %7, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.internal_state, ptr %648, i32 0, i32 2
  %650 = load ptr, ptr %649, align 8, !tbaa !27
  %651 = load i32, ptr %11, align 4, !tbaa !9
  %652 = zext i32 %651 to i64
  %653 = getelementptr inbounds i8, ptr %650, i64 %652
  %654 = load ptr, ptr %7, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.internal_state, ptr %654, i32 0, i32 5
  %656 = load i32, ptr %655, align 8, !tbaa !28
  %657 = load i32, ptr %11, align 4, !tbaa !9
  %658 = sub i32 %656, %657
  %659 = call i64 @crc32(i64 noundef %647, ptr noundef %653, i32 noundef %658)
  %660 = load ptr, ptr %4, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.z_stream_s, ptr %660, i32 0, i32 12
  store i64 %659, ptr %661, align 8, !tbaa !26
  br label %662

662:                                              ; preds = %644, %638, %631
  %663 = load ptr, ptr %7, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.internal_state, ptr %663, i32 0, i32 8
  %665 = load i32, ptr %664, align 8, !tbaa !42
  %666 = load ptr, ptr %7, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.internal_state, ptr %666, i32 0, i32 7
  %668 = load ptr, ptr %667, align 8, !tbaa !30
  %669 = getelementptr inbounds %struct.gz_header_s, ptr %668, i32 0, i32 5
  %670 = load i32, ptr %669, align 8, !tbaa !41
  %671 = icmp eq i32 %665, %670
  br i1 %671, label %672, label %677

672:                                              ; preds = %662
  %673 = load ptr, ptr %7, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.internal_state, ptr %673, i32 0, i32 8
  store i32 0, ptr %674, align 8, !tbaa !42
  %675 = load ptr, ptr %7, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.internal_state, ptr %675, i32 0, i32 1
  store i32 73, ptr %676, align 8, !tbaa !17
  br label %677

677:                                              ; preds = %672, %662
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %681

678:                                              ; preds = %529
  %679 = load ptr, ptr %7, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.internal_state, ptr %679, i32 0, i32 1
  store i32 73, ptr %680, align 8, !tbaa !17
  br label %681

681:                                              ; preds = %678, %677
  br label %682

682:                                              ; preds = %681, %524
  %683 = load ptr, ptr %7, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.internal_state, ptr %683, i32 0, i32 1
  %685 = load i32, ptr %684, align 8, !tbaa !17
  %686 = icmp eq i32 %685, 73
  br i1 %686, label %687, label %825

687:                                              ; preds = %682
  %688 = load ptr, ptr %7, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.internal_state, ptr %688, i32 0, i32 7
  %690 = load ptr, ptr %689, align 8, !tbaa !30
  %691 = getelementptr inbounds %struct.gz_header_s, ptr %690, i32 0, i32 7
  %692 = load ptr, ptr %691, align 8, !tbaa !37
  %693 = icmp ne ptr %692, null
  br i1 %693, label %694, label %821

694:                                              ; preds = %687
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %695 = load ptr, ptr %7, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.internal_state, ptr %695, i32 0, i32 5
  %697 = load i32, ptr %696, align 8, !tbaa !28
  store i32 %697, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  br label %698

698:                                              ; preds = %778, %694
  %699 = load ptr, ptr %7, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.internal_state, ptr %699, i32 0, i32 5
  %701 = load i32, ptr %700, align 8, !tbaa !28
  %702 = zext i32 %701 to i64
  %703 = load ptr, ptr %7, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.internal_state, ptr %703, i32 0, i32 3
  %705 = load i64, ptr %704, align 8, !tbaa !45
  %706 = icmp eq i64 %702, %705
  br i1 %706, label %707, label %753

707:                                              ; preds = %698
  %708 = load ptr, ptr %7, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.internal_state, ptr %708, i32 0, i32 7
  %710 = load ptr, ptr %709, align 8, !tbaa !30
  %711 = getelementptr inbounds %struct.gz_header_s, ptr %710, i32 0, i32 11
  %712 = load i32, ptr %711, align 4, !tbaa !35
  %713 = icmp ne i32 %712, 0
  br i1 %713, label %714, label %738

714:                                              ; preds = %707
  %715 = load ptr, ptr %7, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.internal_state, ptr %715, i32 0, i32 5
  %717 = load i32, ptr %716, align 8, !tbaa !28
  %718 = load i32, ptr %12, align 4, !tbaa !9
  %719 = icmp ugt i32 %717, %718
  br i1 %719, label %720, label %738

720:                                              ; preds = %714
  %721 = load ptr, ptr %4, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.z_stream_s, ptr %721, i32 0, i32 12
  %723 = load i64, ptr %722, align 8, !tbaa !26
  %724 = load ptr, ptr %7, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.internal_state, ptr %724, i32 0, i32 2
  %726 = load ptr, ptr %725, align 8, !tbaa !27
  %727 = load i32, ptr %12, align 4, !tbaa !9
  %728 = zext i32 %727 to i64
  %729 = getelementptr inbounds i8, ptr %726, i64 %728
  %730 = load ptr, ptr %7, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.internal_state, ptr %730, i32 0, i32 5
  %732 = load i32, ptr %731, align 8, !tbaa !28
  %733 = load i32, ptr %12, align 4, !tbaa !9
  %734 = sub i32 %732, %733
  %735 = call i64 @crc32(i64 noundef %723, ptr noundef %729, i32 noundef %734)
  %736 = load ptr, ptr %4, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.z_stream_s, ptr %736, i32 0, i32 12
  store i64 %735, ptr %737, align 8, !tbaa !26
  br label %738

738:                                              ; preds = %720, %714, %707
  %739 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %739)
  %740 = load ptr, ptr %7, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.internal_state, ptr %740, i32 0, i32 5
  %742 = load i32, ptr %741, align 8, !tbaa !28
  store i32 %742, ptr %12, align 4, !tbaa !9
  %743 = load ptr, ptr %7, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.internal_state, ptr %743, i32 0, i32 5
  %745 = load i32, ptr %744, align 8, !tbaa !28
  %746 = zext i32 %745 to i64
  %747 = load ptr, ptr %7, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.internal_state, ptr %747, i32 0, i32 3
  %749 = load i64, ptr %748, align 8, !tbaa !45
  %750 = icmp eq i64 %746, %749
  br i1 %750, label %751, label %752

751:                                              ; preds = %738
  store i32 1, ptr %13, align 4, !tbaa !9
  br label %781

752:                                              ; preds = %738
  br label %753

753:                                              ; preds = %752, %698
  %754 = load ptr, ptr %7, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.internal_state, ptr %754, i32 0, i32 7
  %756 = load ptr, ptr %755, align 8, !tbaa !30
  %757 = getelementptr inbounds %struct.gz_header_s, ptr %756, i32 0, i32 7
  %758 = load ptr, ptr %757, align 8, !tbaa !37
  %759 = load ptr, ptr %7, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.internal_state, ptr %759, i32 0, i32 8
  %761 = load i32, ptr %760, align 8, !tbaa !42
  %762 = add i32 %761, 1
  store i32 %762, ptr %760, align 8, !tbaa !42
  %763 = zext i32 %761 to i64
  %764 = getelementptr inbounds i8, ptr %758, i64 %763
  %765 = load i8, ptr %764, align 1, !tbaa !29
  %766 = zext i8 %765 to i32
  store i32 %766, ptr %13, align 4, !tbaa !9
  %767 = load i32, ptr %13, align 4, !tbaa !9
  %768 = trunc i32 %767 to i8
  %769 = load ptr, ptr %7, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.internal_state, ptr %769, i32 0, i32 2
  %771 = load ptr, ptr %770, align 8, !tbaa !27
  %772 = load ptr, ptr %7, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.internal_state, ptr %772, i32 0, i32 5
  %774 = load i32, ptr %773, align 8, !tbaa !28
  %775 = add i32 %774, 1
  store i32 %775, ptr %773, align 8, !tbaa !28
  %776 = zext i32 %774 to i64
  %777 = getelementptr inbounds i8, ptr %771, i64 %776
  store i8 %768, ptr %777, align 1, !tbaa !29
  br label %778

778:                                              ; preds = %753
  %779 = load i32, ptr %13, align 4, !tbaa !9
  %780 = icmp ne i32 %779, 0
  br i1 %780, label %698, label %781, !llvm.loop !48

781:                                              ; preds = %778, %751
  %782 = load ptr, ptr %7, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.internal_state, ptr %782, i32 0, i32 7
  %784 = load ptr, ptr %783, align 8, !tbaa !30
  %785 = getelementptr inbounds %struct.gz_header_s, ptr %784, i32 0, i32 11
  %786 = load i32, ptr %785, align 4, !tbaa !35
  %787 = icmp ne i32 %786, 0
  br i1 %787, label %788, label %812

788:                                              ; preds = %781
  %789 = load ptr, ptr %7, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.internal_state, ptr %789, i32 0, i32 5
  %791 = load i32, ptr %790, align 8, !tbaa !28
  %792 = load i32, ptr %12, align 4, !tbaa !9
  %793 = icmp ugt i32 %791, %792
  br i1 %793, label %794, label %812

794:                                              ; preds = %788
  %795 = load ptr, ptr %4, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.z_stream_s, ptr %795, i32 0, i32 12
  %797 = load i64, ptr %796, align 8, !tbaa !26
  %798 = load ptr, ptr %7, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.internal_state, ptr %798, i32 0, i32 2
  %800 = load ptr, ptr %799, align 8, !tbaa !27
  %801 = load i32, ptr %12, align 4, !tbaa !9
  %802 = zext i32 %801 to i64
  %803 = getelementptr inbounds i8, ptr %800, i64 %802
  %804 = load ptr, ptr %7, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.internal_state, ptr %804, i32 0, i32 5
  %806 = load i32, ptr %805, align 8, !tbaa !28
  %807 = load i32, ptr %12, align 4, !tbaa !9
  %808 = sub i32 %806, %807
  %809 = call i64 @crc32(i64 noundef %797, ptr noundef %803, i32 noundef %808)
  %810 = load ptr, ptr %4, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.z_stream_s, ptr %810, i32 0, i32 12
  store i64 %809, ptr %811, align 8, !tbaa !26
  br label %812

812:                                              ; preds = %794, %788, %781
  %813 = load i32, ptr %13, align 4, !tbaa !9
  %814 = icmp eq i32 %813, 0
  br i1 %814, label %815, label %820

815:                                              ; preds = %812
  %816 = load ptr, ptr %7, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.internal_state, ptr %816, i32 0, i32 8
  store i32 0, ptr %817, align 8, !tbaa !42
  %818 = load ptr, ptr %7, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.internal_state, ptr %818, i32 0, i32 1
  store i32 91, ptr %819, align 8, !tbaa !17
  br label %820

820:                                              ; preds = %815, %812
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %824

821:                                              ; preds = %687
  %822 = load ptr, ptr %7, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.internal_state, ptr %822, i32 0, i32 1
  store i32 91, ptr %823, align 8, !tbaa !17
  br label %824

824:                                              ; preds = %821, %820
  br label %825

825:                                              ; preds = %824, %682
  %826 = load ptr, ptr %7, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.internal_state, ptr %826, i32 0, i32 1
  %828 = load i32, ptr %827, align 8, !tbaa !17
  %829 = icmp eq i32 %828, 91
  br i1 %829, label %830, label %966

830:                                              ; preds = %825
  %831 = load ptr, ptr %7, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.internal_state, ptr %831, i32 0, i32 7
  %833 = load ptr, ptr %832, align 8, !tbaa !30
  %834 = getelementptr inbounds %struct.gz_header_s, ptr %833, i32 0, i32 9
  %835 = load ptr, ptr %834, align 8, !tbaa !38
  %836 = icmp ne ptr %835, null
  br i1 %836, label %837, label %962

837:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %838 = load ptr, ptr %7, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.internal_state, ptr %838, i32 0, i32 5
  %840 = load i32, ptr %839, align 8, !tbaa !28
  store i32 %840, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  br label %841

841:                                              ; preds = %921, %837
  %842 = load ptr, ptr %7, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.internal_state, ptr %842, i32 0, i32 5
  %844 = load i32, ptr %843, align 8, !tbaa !28
  %845 = zext i32 %844 to i64
  %846 = load ptr, ptr %7, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.internal_state, ptr %846, i32 0, i32 3
  %848 = load i64, ptr %847, align 8, !tbaa !45
  %849 = icmp eq i64 %845, %848
  br i1 %849, label %850, label %896

850:                                              ; preds = %841
  %851 = load ptr, ptr %7, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.internal_state, ptr %851, i32 0, i32 7
  %853 = load ptr, ptr %852, align 8, !tbaa !30
  %854 = getelementptr inbounds %struct.gz_header_s, ptr %853, i32 0, i32 11
  %855 = load i32, ptr %854, align 4, !tbaa !35
  %856 = icmp ne i32 %855, 0
  br i1 %856, label %857, label %881

857:                                              ; preds = %850
  %858 = load ptr, ptr %7, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.internal_state, ptr %858, i32 0, i32 5
  %860 = load i32, ptr %859, align 8, !tbaa !28
  %861 = load i32, ptr %14, align 4, !tbaa !9
  %862 = icmp ugt i32 %860, %861
  br i1 %862, label %863, label %881

863:                                              ; preds = %857
  %864 = load ptr, ptr %4, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.z_stream_s, ptr %864, i32 0, i32 12
  %866 = load i64, ptr %865, align 8, !tbaa !26
  %867 = load ptr, ptr %7, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.internal_state, ptr %867, i32 0, i32 2
  %869 = load ptr, ptr %868, align 8, !tbaa !27
  %870 = load i32, ptr %14, align 4, !tbaa !9
  %871 = zext i32 %870 to i64
  %872 = getelementptr inbounds i8, ptr %869, i64 %871
  %873 = load ptr, ptr %7, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.internal_state, ptr %873, i32 0, i32 5
  %875 = load i32, ptr %874, align 8, !tbaa !28
  %876 = load i32, ptr %14, align 4, !tbaa !9
  %877 = sub i32 %875, %876
  %878 = call i64 @crc32(i64 noundef %866, ptr noundef %872, i32 noundef %877)
  %879 = load ptr, ptr %4, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.z_stream_s, ptr %879, i32 0, i32 12
  store i64 %878, ptr %880, align 8, !tbaa !26
  br label %881

881:                                              ; preds = %863, %857, %850
  %882 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %882)
  %883 = load ptr, ptr %7, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct.internal_state, ptr %883, i32 0, i32 5
  %885 = load i32, ptr %884, align 8, !tbaa !28
  store i32 %885, ptr %14, align 4, !tbaa !9
  %886 = load ptr, ptr %7, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.internal_state, ptr %886, i32 0, i32 5
  %888 = load i32, ptr %887, align 8, !tbaa !28
  %889 = zext i32 %888 to i64
  %890 = load ptr, ptr %7, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.internal_state, ptr %890, i32 0, i32 3
  %892 = load i64, ptr %891, align 8, !tbaa !45
  %893 = icmp eq i64 %889, %892
  br i1 %893, label %894, label %895

894:                                              ; preds = %881
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %924

895:                                              ; preds = %881
  br label %896

896:                                              ; preds = %895, %841
  %897 = load ptr, ptr %7, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.internal_state, ptr %897, i32 0, i32 7
  %899 = load ptr, ptr %898, align 8, !tbaa !30
  %900 = getelementptr inbounds %struct.gz_header_s, ptr %899, i32 0, i32 9
  %901 = load ptr, ptr %900, align 8, !tbaa !38
  %902 = load ptr, ptr %7, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.internal_state, ptr %902, i32 0, i32 8
  %904 = load i32, ptr %903, align 8, !tbaa !42
  %905 = add i32 %904, 1
  store i32 %905, ptr %903, align 8, !tbaa !42
  %906 = zext i32 %904 to i64
  %907 = getelementptr inbounds i8, ptr %901, i64 %906
  %908 = load i8, ptr %907, align 1, !tbaa !29
  %909 = zext i8 %908 to i32
  store i32 %909, ptr %15, align 4, !tbaa !9
  %910 = load i32, ptr %15, align 4, !tbaa !9
  %911 = trunc i32 %910 to i8
  %912 = load ptr, ptr %7, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.internal_state, ptr %912, i32 0, i32 2
  %914 = load ptr, ptr %913, align 8, !tbaa !27
  %915 = load ptr, ptr %7, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.internal_state, ptr %915, i32 0, i32 5
  %917 = load i32, ptr %916, align 8, !tbaa !28
  %918 = add i32 %917, 1
  store i32 %918, ptr %916, align 8, !tbaa !28
  %919 = zext i32 %917 to i64
  %920 = getelementptr inbounds i8, ptr %914, i64 %919
  store i8 %911, ptr %920, align 1, !tbaa !29
  br label %921

921:                                              ; preds = %896
  %922 = load i32, ptr %15, align 4, !tbaa !9
  %923 = icmp ne i32 %922, 0
  br i1 %923, label %841, label %924, !llvm.loop !49

924:                                              ; preds = %921, %894
  %925 = load ptr, ptr %7, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.internal_state, ptr %925, i32 0, i32 7
  %927 = load ptr, ptr %926, align 8, !tbaa !30
  %928 = getelementptr inbounds %struct.gz_header_s, ptr %927, i32 0, i32 11
  %929 = load i32, ptr %928, align 4, !tbaa !35
  %930 = icmp ne i32 %929, 0
  br i1 %930, label %931, label %955

931:                                              ; preds = %924
  %932 = load ptr, ptr %7, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.internal_state, ptr %932, i32 0, i32 5
  %934 = load i32, ptr %933, align 8, !tbaa !28
  %935 = load i32, ptr %14, align 4, !tbaa !9
  %936 = icmp ugt i32 %934, %935
  br i1 %936, label %937, label %955

937:                                              ; preds = %931
  %938 = load ptr, ptr %4, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.z_stream_s, ptr %938, i32 0, i32 12
  %940 = load i64, ptr %939, align 8, !tbaa !26
  %941 = load ptr, ptr %7, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.internal_state, ptr %941, i32 0, i32 2
  %943 = load ptr, ptr %942, align 8, !tbaa !27
  %944 = load i32, ptr %14, align 4, !tbaa !9
  %945 = zext i32 %944 to i64
  %946 = getelementptr inbounds i8, ptr %943, i64 %945
  %947 = load ptr, ptr %7, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.internal_state, ptr %947, i32 0, i32 5
  %949 = load i32, ptr %948, align 8, !tbaa !28
  %950 = load i32, ptr %14, align 4, !tbaa !9
  %951 = sub i32 %949, %950
  %952 = call i64 @crc32(i64 noundef %940, ptr noundef %946, i32 noundef %951)
  %953 = load ptr, ptr %4, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.z_stream_s, ptr %953, i32 0, i32 12
  store i64 %952, ptr %954, align 8, !tbaa !26
  br label %955

955:                                              ; preds = %937, %931, %924
  %956 = load i32, ptr %15, align 4, !tbaa !9
  %957 = icmp eq i32 %956, 0
  br i1 %957, label %958, label %961

958:                                              ; preds = %955
  %959 = load ptr, ptr %7, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.internal_state, ptr %959, i32 0, i32 1
  store i32 103, ptr %960, align 8, !tbaa !17
  br label %961

961:                                              ; preds = %958, %955
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %965

962:                                              ; preds = %830
  %963 = load ptr, ptr %7, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.internal_state, ptr %963, i32 0, i32 1
  store i32 103, ptr %964, align 8, !tbaa !17
  br label %965

965:                                              ; preds = %962, %961
  br label %966

966:                                              ; preds = %965, %825
  %967 = load ptr, ptr %7, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct.internal_state, ptr %967, i32 0, i32 1
  %969 = load i32, ptr %968, align 8, !tbaa !17
  %970 = icmp eq i32 %969, 103
  br i1 %970, label %971, label %1040

971:                                              ; preds = %966
  %972 = load ptr, ptr %7, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.internal_state, ptr %972, i32 0, i32 7
  %974 = load ptr, ptr %973, align 8, !tbaa !30
  %975 = getelementptr inbounds %struct.gz_header_s, ptr %974, i32 0, i32 11
  %976 = load i32, ptr %975, align 4, !tbaa !35
  %977 = icmp ne i32 %976, 0
  br i1 %977, label %978, label %1036

978:                                              ; preds = %971
  %979 = load ptr, ptr %7, align 8, !tbaa !5
  %980 = getelementptr inbounds %struct.internal_state, ptr %979, i32 0, i32 5
  %981 = load i32, ptr %980, align 8, !tbaa !28
  %982 = add i32 %981, 2
  %983 = zext i32 %982 to i64
  %984 = load ptr, ptr %7, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.internal_state, ptr %984, i32 0, i32 3
  %986 = load i64, ptr %985, align 8, !tbaa !45
  %987 = icmp ugt i64 %983, %986
  br i1 %987, label %988, label %990

988:                                              ; preds = %978
  %989 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %989)
  br label %990

990:                                              ; preds = %988, %978
  %991 = load ptr, ptr %7, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.internal_state, ptr %991, i32 0, i32 5
  %993 = load i32, ptr %992, align 8, !tbaa !28
  %994 = add i32 %993, 2
  %995 = zext i32 %994 to i64
  %996 = load ptr, ptr %7, align 8, !tbaa !5
  %997 = getelementptr inbounds %struct.internal_state, ptr %996, i32 0, i32 3
  %998 = load i64, ptr %997, align 8, !tbaa !45
  %999 = icmp ule i64 %995, %998
  br i1 %999, label %1000, label %1035

1000:                                             ; preds = %990
  %1001 = load ptr, ptr %4, align 8, !tbaa !5
  %1002 = getelementptr inbounds %struct.z_stream_s, ptr %1001, i32 0, i32 12
  %1003 = load i64, ptr %1002, align 8, !tbaa !26
  %1004 = and i64 %1003, 255
  %1005 = trunc i64 %1004 to i8
  %1006 = load ptr, ptr %7, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.internal_state, ptr %1006, i32 0, i32 2
  %1008 = load ptr, ptr %1007, align 8, !tbaa !27
  %1009 = load ptr, ptr %7, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.internal_state, ptr %1009, i32 0, i32 5
  %1011 = load i32, ptr %1010, align 8, !tbaa !28
  %1012 = add i32 %1011, 1
  store i32 %1012, ptr %1010, align 8, !tbaa !28
  %1013 = zext i32 %1011 to i64
  %1014 = getelementptr inbounds i8, ptr %1008, i64 %1013
  store i8 %1005, ptr %1014, align 1, !tbaa !29
  %1015 = load ptr, ptr %4, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.z_stream_s, ptr %1015, i32 0, i32 12
  %1017 = load i64, ptr %1016, align 8, !tbaa !26
  %1018 = lshr i64 %1017, 8
  %1019 = and i64 %1018, 255
  %1020 = trunc i64 %1019 to i8
  %1021 = load ptr, ptr %7, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.internal_state, ptr %1021, i32 0, i32 2
  %1023 = load ptr, ptr %1022, align 8, !tbaa !27
  %1024 = load ptr, ptr %7, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.internal_state, ptr %1024, i32 0, i32 5
  %1026 = load i32, ptr %1025, align 8, !tbaa !28
  %1027 = add i32 %1026, 1
  store i32 %1027, ptr %1025, align 8, !tbaa !28
  %1028 = zext i32 %1026 to i64
  %1029 = getelementptr inbounds i8, ptr %1023, i64 %1028
  store i8 %1020, ptr %1029, align 1, !tbaa !29
  %1030 = call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0)
  %1031 = load ptr, ptr %4, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.z_stream_s, ptr %1031, i32 0, i32 12
  store i64 %1030, ptr %1032, align 8, !tbaa !26
  %1033 = load ptr, ptr %7, align 8, !tbaa !5
  %1034 = getelementptr inbounds %struct.internal_state, ptr %1033, i32 0, i32 1
  store i32 113, ptr %1034, align 8, !tbaa !17
  br label %1035

1035:                                             ; preds = %1000, %990
  br label %1039

1036:                                             ; preds = %971
  %1037 = load ptr, ptr %7, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct.internal_state, ptr %1037, i32 0, i32 1
  store i32 113, ptr %1038, align 8, !tbaa !17
  br label %1039

1039:                                             ; preds = %1036, %1035
  br label %1040

1040:                                             ; preds = %1039, %966
  %1041 = load ptr, ptr %7, align 8, !tbaa !5
  %1042 = getelementptr inbounds %struct.internal_state, ptr %1041, i32 0, i32 5
  %1043 = load i32, ptr %1042, align 8, !tbaa !28
  %1044 = icmp ne i32 %1043, 0
  br i1 %1044, label %1045, label %1055

1045:                                             ; preds = %1040
  %1046 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %1046)
  %1047 = load ptr, ptr %4, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.z_stream_s, ptr %1047, i32 0, i32 4
  %1049 = load i32, ptr %1048, align 8, !tbaa !22
  %1050 = icmp eq i32 %1049, 0
  br i1 %1050, label %1051, label %1054

1051:                                             ; preds = %1045
  %1052 = load ptr, ptr %7, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct.internal_state, ptr %1052, i32 0, i32 10
  store i32 -1, ptr %1053, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

1054:                                             ; preds = %1045
  br label %1072

1055:                                             ; preds = %1040
  %1056 = load ptr, ptr %4, align 8, !tbaa !5
  %1057 = getelementptr inbounds %struct.z_stream_s, ptr %1056, i32 0, i32 1
  %1058 = load i32, ptr %1057, align 8, !tbaa !16
  %1059 = icmp eq i32 %1058, 0
  br i1 %1059, label %1060, label %1071

1060:                                             ; preds = %1055
  %1061 = load i32, ptr %5, align 4, !tbaa !9
  %1062 = load i32, ptr %6, align 4, !tbaa !9
  %1063 = icmp sle i32 %1061, %1062
  br i1 %1063, label %1064, label %1071

1064:                                             ; preds = %1060
  %1065 = load i32, ptr %5, align 4, !tbaa !9
  %1066 = icmp ne i32 %1065, 4
  br i1 %1066, label %1067, label %1071

1067:                                             ; preds = %1064
  %1068 = load ptr, ptr getelementptr inbounds ([10 x ptr], ptr @z_errmsg, i64 0, i64 7), align 8, !tbaa !5
  %1069 = load ptr, ptr %4, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.z_stream_s, ptr %1069, i32 0, i32 6
  store ptr %1068, ptr %1070, align 8, !tbaa !21
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

1071:                                             ; preds = %1064, %1060, %1055
  br label %1072

1072:                                             ; preds = %1071, %1054
  %1073 = load ptr, ptr %7, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.internal_state, ptr %1073, i32 0, i32 1
  %1075 = load i32, ptr %1074, align 8, !tbaa !17
  %1076 = icmp eq i32 %1075, 666
  br i1 %1076, label %1077, label %1086

1077:                                             ; preds = %1072
  %1078 = load ptr, ptr %4, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.z_stream_s, ptr %1078, i32 0, i32 1
  %1080 = load i32, ptr %1079, align 8, !tbaa !16
  %1081 = icmp ne i32 %1080, 0
  br i1 %1081, label %1082, label %1086

1082:                                             ; preds = %1077
  %1083 = load ptr, ptr getelementptr inbounds ([10 x ptr], ptr @z_errmsg, i64 0, i64 7), align 8, !tbaa !5
  %1084 = load ptr, ptr %4, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.z_stream_s, ptr %1084, i32 0, i32 6
  store ptr %1083, ptr %1085, align 8, !tbaa !21
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

1086:                                             ; preds = %1077, %1072
  %1087 = load ptr, ptr %4, align 8, !tbaa !5
  %1088 = getelementptr inbounds %struct.z_stream_s, ptr %1087, i32 0, i32 1
  %1089 = load i32, ptr %1088, align 8, !tbaa !16
  %1090 = icmp ne i32 %1089, 0
  br i1 %1090, label %1104, label %1091

1091:                                             ; preds = %1086
  %1092 = load ptr, ptr %7, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.internal_state, ptr %1092, i32 0, i32 29
  %1094 = load i32, ptr %1093, align 4, !tbaa !50
  %1095 = icmp ne i32 %1094, 0
  br i1 %1095, label %1104, label %1096

1096:                                             ; preds = %1091
  %1097 = load i32, ptr %5, align 4, !tbaa !9
  %1098 = icmp ne i32 %1097, 0
  br i1 %1098, label %1099, label %1220

1099:                                             ; preds = %1096
  %1100 = load ptr, ptr %7, align 8, !tbaa !5
  %1101 = getelementptr inbounds %struct.internal_state, ptr %1100, i32 0, i32 1
  %1102 = load i32, ptr %1101, align 8, !tbaa !17
  %1103 = icmp ne i32 %1102, 666
  br i1 %1103, label %1104, label %1220

1104:                                             ; preds = %1099, %1091, %1086
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %1105 = load ptr, ptr %7, align 8, !tbaa !5
  %1106 = getelementptr inbounds %struct.internal_state, ptr %1105, i32 0, i32 34
  %1107 = load i32, ptr %1106, align 8, !tbaa !32
  %1108 = icmp eq i32 %1107, 2
  br i1 %1108, label %1109, label %1113

1109:                                             ; preds = %1104
  %1110 = load ptr, ptr %7, align 8, !tbaa !5
  %1111 = load i32, ptr %5, align 4, !tbaa !9
  %1112 = call i32 @deflate_huff(ptr noundef %1110, i32 noundef %1111)
  br label %1135

1113:                                             ; preds = %1104
  %1114 = load ptr, ptr %7, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct.internal_state, ptr %1114, i32 0, i32 34
  %1116 = load i32, ptr %1115, align 8, !tbaa !32
  %1117 = icmp eq i32 %1116, 3
  br i1 %1117, label %1118, label %1122

1118:                                             ; preds = %1113
  %1119 = load ptr, ptr %7, align 8, !tbaa !5
  %1120 = load i32, ptr %5, align 4, !tbaa !9
  %1121 = call i32 @deflate_rle(ptr noundef %1119, i32 noundef %1120)
  br label %1133

1122:                                             ; preds = %1113
  %1123 = load ptr, ptr %7, align 8, !tbaa !5
  %1124 = getelementptr inbounds %struct.internal_state, ptr %1123, i32 0, i32 33
  %1125 = load i32, ptr %1124, align 4, !tbaa !31
  %1126 = sext i32 %1125 to i64
  %1127 = getelementptr inbounds [10 x %struct.config_s], ptr @configuration_table, i64 0, i64 %1126
  %1128 = getelementptr inbounds %struct.config_s, ptr %1127, i32 0, i32 4
  %1129 = load ptr, ptr %1128, align 8, !tbaa !51
  %1130 = load ptr, ptr %7, align 8, !tbaa !5
  %1131 = load i32, ptr %5, align 4, !tbaa !9
  %1132 = call i32 %1129(ptr noundef %1130, i32 noundef %1131)
  br label %1133

1133:                                             ; preds = %1122, %1118
  %1134 = phi i32 [ %1121, %1118 ], [ %1132, %1122 ]
  br label %1135

1135:                                             ; preds = %1133, %1109
  %1136 = phi i32 [ %1112, %1109 ], [ %1134, %1133 ]
  store i32 %1136, ptr %16, align 4, !tbaa !9
  %1137 = load i32, ptr %16, align 4, !tbaa !9
  %1138 = icmp eq i32 %1137, 2
  br i1 %1138, label %1142, label %1139

1139:                                             ; preds = %1135
  %1140 = load i32, ptr %16, align 4, !tbaa !9
  %1141 = icmp eq i32 %1140, 3
  br i1 %1141, label %1142, label %1145

1142:                                             ; preds = %1139, %1135
  %1143 = load ptr, ptr %7, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.internal_state, ptr %1143, i32 0, i32 1
  store i32 666, ptr %1144, align 8, !tbaa !17
  br label %1145

1145:                                             ; preds = %1142, %1139
  %1146 = load i32, ptr %16, align 4, !tbaa !9
  %1147 = icmp eq i32 %1146, 0
  br i1 %1147, label %1151, label %1148

1148:                                             ; preds = %1145
  %1149 = load i32, ptr %16, align 4, !tbaa !9
  %1150 = icmp eq i32 %1149, 2
  br i1 %1150, label %1151, label %1160

1151:                                             ; preds = %1148, %1145
  %1152 = load ptr, ptr %4, align 8, !tbaa !5
  %1153 = getelementptr inbounds %struct.z_stream_s, ptr %1152, i32 0, i32 4
  %1154 = load i32, ptr %1153, align 8, !tbaa !22
  %1155 = icmp eq i32 %1154, 0
  br i1 %1155, label %1156, label %1159

1156:                                             ; preds = %1151
  %1157 = load ptr, ptr %7, align 8, !tbaa !5
  %1158 = getelementptr inbounds %struct.internal_state, ptr %1157, i32 0, i32 10
  store i32 -1, ptr %1158, align 8, !tbaa !24
  br label %1159

1159:                                             ; preds = %1156, %1151
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1217

1160:                                             ; preds = %1148
  %1161 = load i32, ptr %16, align 4, !tbaa !9
  %1162 = icmp eq i32 %1161, 1
  br i1 %1162, label %1163, label %1216

1163:                                             ; preds = %1160
  %1164 = load i32, ptr %5, align 4, !tbaa !9
  %1165 = icmp eq i32 %1164, 1
  br i1 %1165, label %1166, label %1168

1166:                                             ; preds = %1163
  %1167 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_tr_align(ptr noundef %1167)
  br label %1206

1168:                                             ; preds = %1163
  %1169 = load i32, ptr %5, align 4, !tbaa !9
  %1170 = icmp ne i32 %1169, 5
  br i1 %1170, label %1171, label %1205

1171:                                             ; preds = %1168
  %1172 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_tr_stored_block(ptr noundef %1172, ptr noundef null, i64 noundef 0, i32 noundef 0)
  %1173 = load i32, ptr %5, align 4, !tbaa !9
  %1174 = icmp eq i32 %1173, 3
  br i1 %1174, label %1175, label %1204

1175:                                             ; preds = %1171
  %1176 = load ptr, ptr %7, align 8, !tbaa !5
  %1177 = getelementptr inbounds %struct.internal_state, ptr %1176, i32 0, i32 17
  %1178 = load ptr, ptr %1177, align 8, !tbaa !53
  %1179 = load ptr, ptr %7, align 8, !tbaa !5
  %1180 = getelementptr inbounds %struct.internal_state, ptr %1179, i32 0, i32 19
  %1181 = load i32, ptr %1180, align 4, !tbaa !54
  %1182 = sub i32 %1181, 1
  %1183 = zext i32 %1182 to i64
  %1184 = getelementptr inbounds i16, ptr %1178, i64 %1183
  store i16 0, ptr %1184, align 2, !tbaa !55
  %1185 = load ptr, ptr %7, align 8, !tbaa !5
  %1186 = getelementptr inbounds %struct.internal_state, ptr %1185, i32 0, i32 17
  %1187 = load ptr, ptr %1186, align 8, !tbaa !53
  %1188 = load ptr, ptr %7, align 8, !tbaa !5
  %1189 = getelementptr inbounds %struct.internal_state, ptr %1188, i32 0, i32 19
  %1190 = load i32, ptr %1189, align 4, !tbaa !54
  %1191 = sub i32 %1190, 1
  %1192 = zext i32 %1191 to i64
  %1193 = mul i64 %1192, 2
  call void @llvm.memset.p0.i64(ptr align 1 %1187, i8 0, i64 %1193, i1 false)
  %1194 = load ptr, ptr %7, align 8, !tbaa !5
  %1195 = getelementptr inbounds %struct.internal_state, ptr %1194, i32 0, i32 29
  %1196 = load i32, ptr %1195, align 4, !tbaa !50
  %1197 = icmp eq i32 %1196, 0
  br i1 %1197, label %1198, label %1203

1198:                                             ; preds = %1175
  %1199 = load ptr, ptr %7, align 8, !tbaa !5
  %1200 = getelementptr inbounds %struct.internal_state, ptr %1199, i32 0, i32 27
  store i32 0, ptr %1200, align 4, !tbaa !44
  %1201 = load ptr, ptr %7, align 8, !tbaa !5
  %1202 = getelementptr inbounds %struct.internal_state, ptr %1201, i32 0, i32 23
  store i64 0, ptr %1202, align 8, !tbaa !56
  br label %1203

1203:                                             ; preds = %1198, %1175
  br label %1204

1204:                                             ; preds = %1203, %1171
  br label %1205

1205:                                             ; preds = %1204, %1168
  br label %1206

1206:                                             ; preds = %1205, %1166
  %1207 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %1207)
  %1208 = load ptr, ptr %4, align 8, !tbaa !5
  %1209 = getelementptr inbounds %struct.z_stream_s, ptr %1208, i32 0, i32 4
  %1210 = load i32, ptr %1209, align 8, !tbaa !22
  %1211 = icmp eq i32 %1210, 0
  br i1 %1211, label %1212, label %1215

1212:                                             ; preds = %1206
  %1213 = load ptr, ptr %7, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.internal_state, ptr %1213, i32 0, i32 10
  store i32 -1, ptr %1214, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1217

1215:                                             ; preds = %1206
  br label %1216

1216:                                             ; preds = %1215, %1160
  store i32 0, ptr %8, align 4
  br label %1217

1217:                                             ; preds = %1216, %1212, %1159
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  %1218 = load i32, ptr %8, align 4
  switch i32 %1218, label %1387 [
    i32 0, label %1219
  ]

1219:                                             ; preds = %1217
  br label %1220

1220:                                             ; preds = %1219, %1099, %1096
  %1221 = load i32, ptr %5, align 4, !tbaa !9
  %1222 = icmp ne i32 %1221, 4
  br i1 %1222, label %1223, label %1224

1223:                                             ; preds = %1220
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

1224:                                             ; preds = %1220
  %1225 = load ptr, ptr %7, align 8, !tbaa !5
  %1226 = getelementptr inbounds %struct.internal_state, ptr %1225, i32 0, i32 6
  %1227 = load i32, ptr %1226, align 4, !tbaa !25
  %1228 = icmp sle i32 %1227, 0
  br i1 %1228, label %1229, label %1230

1229:                                             ; preds = %1224
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

1230:                                             ; preds = %1224
  %1231 = load ptr, ptr %7, align 8, !tbaa !5
  %1232 = getelementptr inbounds %struct.internal_state, ptr %1231, i32 0, i32 6
  %1233 = load i32, ptr %1232, align 4, !tbaa !25
  %1234 = icmp eq i32 %1233, 2
  br i1 %1234, label %1235, label %1354

1235:                                             ; preds = %1230
  %1236 = load ptr, ptr %4, align 8, !tbaa !5
  %1237 = getelementptr inbounds %struct.z_stream_s, ptr %1236, i32 0, i32 12
  %1238 = load i64, ptr %1237, align 8, !tbaa !26
  %1239 = and i64 %1238, 255
  %1240 = trunc i64 %1239 to i8
  %1241 = load ptr, ptr %7, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct.internal_state, ptr %1241, i32 0, i32 2
  %1243 = load ptr, ptr %1242, align 8, !tbaa !27
  %1244 = load ptr, ptr %7, align 8, !tbaa !5
  %1245 = getelementptr inbounds %struct.internal_state, ptr %1244, i32 0, i32 5
  %1246 = load i32, ptr %1245, align 8, !tbaa !28
  %1247 = add i32 %1246, 1
  store i32 %1247, ptr %1245, align 8, !tbaa !28
  %1248 = zext i32 %1246 to i64
  %1249 = getelementptr inbounds i8, ptr %1243, i64 %1248
  store i8 %1240, ptr %1249, align 1, !tbaa !29
  %1250 = load ptr, ptr %4, align 8, !tbaa !5
  %1251 = getelementptr inbounds %struct.z_stream_s, ptr %1250, i32 0, i32 12
  %1252 = load i64, ptr %1251, align 8, !tbaa !26
  %1253 = lshr i64 %1252, 8
  %1254 = and i64 %1253, 255
  %1255 = trunc i64 %1254 to i8
  %1256 = load ptr, ptr %7, align 8, !tbaa !5
  %1257 = getelementptr inbounds %struct.internal_state, ptr %1256, i32 0, i32 2
  %1258 = load ptr, ptr %1257, align 8, !tbaa !27
  %1259 = load ptr, ptr %7, align 8, !tbaa !5
  %1260 = getelementptr inbounds %struct.internal_state, ptr %1259, i32 0, i32 5
  %1261 = load i32, ptr %1260, align 8, !tbaa !28
  %1262 = add i32 %1261, 1
  store i32 %1262, ptr %1260, align 8, !tbaa !28
  %1263 = zext i32 %1261 to i64
  %1264 = getelementptr inbounds i8, ptr %1258, i64 %1263
  store i8 %1255, ptr %1264, align 1, !tbaa !29
  %1265 = load ptr, ptr %4, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.z_stream_s, ptr %1265, i32 0, i32 12
  %1267 = load i64, ptr %1266, align 8, !tbaa !26
  %1268 = lshr i64 %1267, 16
  %1269 = and i64 %1268, 255
  %1270 = trunc i64 %1269 to i8
  %1271 = load ptr, ptr %7, align 8, !tbaa !5
  %1272 = getelementptr inbounds %struct.internal_state, ptr %1271, i32 0, i32 2
  %1273 = load ptr, ptr %1272, align 8, !tbaa !27
  %1274 = load ptr, ptr %7, align 8, !tbaa !5
  %1275 = getelementptr inbounds %struct.internal_state, ptr %1274, i32 0, i32 5
  %1276 = load i32, ptr %1275, align 8, !tbaa !28
  %1277 = add i32 %1276, 1
  store i32 %1277, ptr %1275, align 8, !tbaa !28
  %1278 = zext i32 %1276 to i64
  %1279 = getelementptr inbounds i8, ptr %1273, i64 %1278
  store i8 %1270, ptr %1279, align 1, !tbaa !29
  %1280 = load ptr, ptr %4, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct.z_stream_s, ptr %1280, i32 0, i32 12
  %1282 = load i64, ptr %1281, align 8, !tbaa !26
  %1283 = lshr i64 %1282, 24
  %1284 = and i64 %1283, 255
  %1285 = trunc i64 %1284 to i8
  %1286 = load ptr, ptr %7, align 8, !tbaa !5
  %1287 = getelementptr inbounds %struct.internal_state, ptr %1286, i32 0, i32 2
  %1288 = load ptr, ptr %1287, align 8, !tbaa !27
  %1289 = load ptr, ptr %7, align 8, !tbaa !5
  %1290 = getelementptr inbounds %struct.internal_state, ptr %1289, i32 0, i32 5
  %1291 = load i32, ptr %1290, align 8, !tbaa !28
  %1292 = add i32 %1291, 1
  store i32 %1292, ptr %1290, align 8, !tbaa !28
  %1293 = zext i32 %1291 to i64
  %1294 = getelementptr inbounds i8, ptr %1288, i64 %1293
  store i8 %1285, ptr %1294, align 1, !tbaa !29
  %1295 = load ptr, ptr %4, align 8, !tbaa !5
  %1296 = getelementptr inbounds %struct.z_stream_s, ptr %1295, i32 0, i32 2
  %1297 = load i64, ptr %1296, align 8, !tbaa !57
  %1298 = and i64 %1297, 255
  %1299 = trunc i64 %1298 to i8
  %1300 = load ptr, ptr %7, align 8, !tbaa !5
  %1301 = getelementptr inbounds %struct.internal_state, ptr %1300, i32 0, i32 2
  %1302 = load ptr, ptr %1301, align 8, !tbaa !27
  %1303 = load ptr, ptr %7, align 8, !tbaa !5
  %1304 = getelementptr inbounds %struct.internal_state, ptr %1303, i32 0, i32 5
  %1305 = load i32, ptr %1304, align 8, !tbaa !28
  %1306 = add i32 %1305, 1
  store i32 %1306, ptr %1304, align 8, !tbaa !28
  %1307 = zext i32 %1305 to i64
  %1308 = getelementptr inbounds i8, ptr %1302, i64 %1307
  store i8 %1299, ptr %1308, align 1, !tbaa !29
  %1309 = load ptr, ptr %4, align 8, !tbaa !5
  %1310 = getelementptr inbounds %struct.z_stream_s, ptr %1309, i32 0, i32 2
  %1311 = load i64, ptr %1310, align 8, !tbaa !57
  %1312 = lshr i64 %1311, 8
  %1313 = and i64 %1312, 255
  %1314 = trunc i64 %1313 to i8
  %1315 = load ptr, ptr %7, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.internal_state, ptr %1315, i32 0, i32 2
  %1317 = load ptr, ptr %1316, align 8, !tbaa !27
  %1318 = load ptr, ptr %7, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.internal_state, ptr %1318, i32 0, i32 5
  %1320 = load i32, ptr %1319, align 8, !tbaa !28
  %1321 = add i32 %1320, 1
  store i32 %1321, ptr %1319, align 8, !tbaa !28
  %1322 = zext i32 %1320 to i64
  %1323 = getelementptr inbounds i8, ptr %1317, i64 %1322
  store i8 %1314, ptr %1323, align 1, !tbaa !29
  %1324 = load ptr, ptr %4, align 8, !tbaa !5
  %1325 = getelementptr inbounds %struct.z_stream_s, ptr %1324, i32 0, i32 2
  %1326 = load i64, ptr %1325, align 8, !tbaa !57
  %1327 = lshr i64 %1326, 16
  %1328 = and i64 %1327, 255
  %1329 = trunc i64 %1328 to i8
  %1330 = load ptr, ptr %7, align 8, !tbaa !5
  %1331 = getelementptr inbounds %struct.internal_state, ptr %1330, i32 0, i32 2
  %1332 = load ptr, ptr %1331, align 8, !tbaa !27
  %1333 = load ptr, ptr %7, align 8, !tbaa !5
  %1334 = getelementptr inbounds %struct.internal_state, ptr %1333, i32 0, i32 5
  %1335 = load i32, ptr %1334, align 8, !tbaa !28
  %1336 = add i32 %1335, 1
  store i32 %1336, ptr %1334, align 8, !tbaa !28
  %1337 = zext i32 %1335 to i64
  %1338 = getelementptr inbounds i8, ptr %1332, i64 %1337
  store i8 %1329, ptr %1338, align 1, !tbaa !29
  %1339 = load ptr, ptr %4, align 8, !tbaa !5
  %1340 = getelementptr inbounds %struct.z_stream_s, ptr %1339, i32 0, i32 2
  %1341 = load i64, ptr %1340, align 8, !tbaa !57
  %1342 = lshr i64 %1341, 24
  %1343 = and i64 %1342, 255
  %1344 = trunc i64 %1343 to i8
  %1345 = load ptr, ptr %7, align 8, !tbaa !5
  %1346 = getelementptr inbounds %struct.internal_state, ptr %1345, i32 0, i32 2
  %1347 = load ptr, ptr %1346, align 8, !tbaa !27
  %1348 = load ptr, ptr %7, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.internal_state, ptr %1348, i32 0, i32 5
  %1350 = load i32, ptr %1349, align 8, !tbaa !28
  %1351 = add i32 %1350, 1
  store i32 %1351, ptr %1349, align 8, !tbaa !28
  %1352 = zext i32 %1350 to i64
  %1353 = getelementptr inbounds i8, ptr %1347, i64 %1352
  store i8 %1344, ptr %1353, align 1, !tbaa !29
  br label %1367

1354:                                             ; preds = %1230
  %1355 = load ptr, ptr %7, align 8, !tbaa !5
  %1356 = load ptr, ptr %4, align 8, !tbaa !5
  %1357 = getelementptr inbounds %struct.z_stream_s, ptr %1356, i32 0, i32 12
  %1358 = load i64, ptr %1357, align 8, !tbaa !26
  %1359 = lshr i64 %1358, 16
  %1360 = trunc i64 %1359 to i32
  call void @putShortMSB(ptr noundef %1355, i32 noundef %1360)
  %1361 = load ptr, ptr %7, align 8, !tbaa !5
  %1362 = load ptr, ptr %4, align 8, !tbaa !5
  %1363 = getelementptr inbounds %struct.z_stream_s, ptr %1362, i32 0, i32 12
  %1364 = load i64, ptr %1363, align 8, !tbaa !26
  %1365 = and i64 %1364, 65535
  %1366 = trunc i64 %1365 to i32
  call void @putShortMSB(ptr noundef %1361, i32 noundef %1366)
  br label %1367

1367:                                             ; preds = %1354, %1235
  %1368 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %1368)
  %1369 = load ptr, ptr %7, align 8, !tbaa !5
  %1370 = getelementptr inbounds %struct.internal_state, ptr %1369, i32 0, i32 6
  %1371 = load i32, ptr %1370, align 4, !tbaa !25
  %1372 = icmp sgt i32 %1371, 0
  br i1 %1372, label %1373, label %1380

1373:                                             ; preds = %1367
  %1374 = load ptr, ptr %7, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct.internal_state, ptr %1374, i32 0, i32 6
  %1376 = load i32, ptr %1375, align 4, !tbaa !25
  %1377 = sub nsw i32 0, %1376
  %1378 = load ptr, ptr %7, align 8, !tbaa !5
  %1379 = getelementptr inbounds %struct.internal_state, ptr %1378, i32 0, i32 6
  store i32 %1377, ptr %1379, align 4, !tbaa !25
  br label %1380

1380:                                             ; preds = %1373, %1367
  %1381 = load ptr, ptr %7, align 8, !tbaa !5
  %1382 = getelementptr inbounds %struct.internal_state, ptr %1381, i32 0, i32 5
  %1383 = load i32, ptr %1382, align 8, !tbaa !28
  %1384 = icmp ne i32 %1383, 0
  %1385 = zext i1 %1384 to i64
  %1386 = select i1 %1384, i32 0, i32 1
  store i32 %1386, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1387

1387:                                             ; preds = %1380, %1229, %1223, %1217, %1082, %1067, %1051, %66, %57, %30
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  %1388 = load i32, ptr %3, align 4
  ret i32 %1388
}

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

; Function Attrs: nounwind uwtable
declare hidden void @flush_pending(ptr noundef) #2

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

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

declare void @_tr_align(ptr noundef) #1

declare void @_tr_stored_block(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #1

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

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

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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, !6, i64 56}
!12 = !{!"z_stream_s", !6, i64 0, !10, i64 8, !13, i64 16, !6, i64 24, !10, i64 32, !13, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !13, i64 96, !13, i64 104}
!13 = !{!"long", !7, i64 0}
!14 = !{!12, !6, i64 24}
!15 = !{!12, !6, i64 0}
!16 = !{!12, !10, i64 8}
!17 = !{!18, !10, i64 8}
!18 = !{!"internal_state", !6, i64 0, !10, i64 8, !6, i64 16, !13, i64 24, !6, i64 32, !10, i64 40, !10, i64 44, !6, i64 48, !10, i64 56, !7, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !6, i64 80, !13, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !13, i64 136, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !7, i64 196, !7, i64 2488, !7, i64 2732, !19, i64 2888, !19, i64 2912, !19, i64 2936, !7, i64 2960, !7, i64 2992, !10, i64 5284, !10, i64 5288, !7, i64 5292, !6, i64 5872, !10, i64 5880, !10, i64 5884, !6, i64 5888, !13, i64 5896, !13, i64 5904, !10, i64 5912, !10, i64 5916, !20, i64 5920, !10, i64 5924, !13, i64 5928}
!19 = !{!"tree_desc_s", !6, i64 0, !10, i64 8, !6, i64 16}
!20 = !{!"short", !7, i64 0}
!21 = !{!12, !6, i64 48}
!22 = !{!12, !10, i64 32}
!23 = !{!18, !6, i64 0}
!24 = !{!18, !10, i64 64}
!25 = !{!18, !10, i64 44}
!26 = !{!12, !13, i64 96}
!27 = !{!18, !6, i64 16}
!28 = !{!18, !10, i64 40}
!29 = !{!7, !7, i64 0}
!30 = !{!18, !6, i64 48}
!31 = !{!18, !10, i64 180}
!32 = !{!18, !10, i64 184}
!33 = !{!34, !10, i64 0}
!34 = !{!"gz_header_s", !10, i64 0, !13, i64 8, !10, i64 16, !10, i64 20, !6, i64 24, !10, i64 32, !10, i64 36, !6, i64 40, !10, i64 48, !6, i64 56, !10, i64 64, !10, i64 68, !10, i64 72}
!35 = !{!34, !10, i64 68}
!36 = !{!34, !6, i64 24}
!37 = !{!34, !6, i64 40}
!38 = !{!34, !6, i64 56}
!39 = !{!34, !13, i64 8}
!40 = !{!34, !10, i64 20}
!41 = !{!34, !10, i64 32}
!42 = !{!18, !10, i64 56}
!43 = !{!18, !10, i64 72}
!44 = !{!18, !10, i64 156}
!45 = !{!18, !13, i64 24}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = distinct !{!48, !47}
!49 = distinct !{!49, !47}
!50 = !{!18, !10, i64 164}
!51 = !{!52, !6, i64 8}
!52 = !{!"config_s", !20, i64 0, !20, i64 2, !20, i64 4, !20, i64 6, !6, i64 8}
!53 = !{!18, !6, i64 104}
!54 = !{!18, !10, i64 116}
!55 = !{!20, !20, i64 0}
!56 = !{!18, !13, i64 136}
!57 = !{!12, !13, i64 16}


; 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.config_s = type { i16, i16, i16, i16, ptr }

@z_errmsg = external local_unnamed_addr constant [10 x ptr], align 16
@configuration_table = external hidden local_unnamed_addr constant [10 x %struct.config_s], align 16

declare i64 @adler32(i64 noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare i64 @crc32(i64 noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local range(i32 -5, 2) i32 @deflate(ptr noundef %0, i32 noundef %1) local_unnamed_addr #1 {
  %3 = icmp eq ptr %0, null
  br i1 %3, label %.critedge, label %4

4:                                                ; preds = %2
  %5 = getelementptr inbounds i8, ptr %0, i64 56
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %7 = icmp eq ptr %6, null
  %8 = icmp ugt i32 %1, 5
  %or.cond3 = or i1 %8, %7
  br i1 %or.cond3, label %.critedge, label %9

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

13:                                               ; preds = %9
  %14 = load ptr, ptr %0, align 8, !tbaa !13
  %15 = icmp eq ptr %14, null
  br i1 %15, label %16, label %19

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

19:                                               ; preds = %16, %13
  %20 = getelementptr inbounds i8, ptr %6, i64 8
  %21 = load i32, ptr %20, align 8, !tbaa !15
  %22 = icmp eq i32 %21, 666
  %23 = icmp ne i32 %1, 4
  %or.cond5 = and i1 %23, %22
  br i1 %or.cond5, label %24, label %27

24:                                               ; preds = %19, %16, %9
  %25 = load ptr, ptr getelementptr inbounds (i8, ptr @z_errmsg, i64 32), align 16, !tbaa !19
  %26 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %25, ptr %26, align 8, !tbaa !20
  br label %.critedge

27:                                               ; preds = %19
  %28 = getelementptr inbounds i8, ptr %0, i64 32
  %29 = load i32, ptr %28, align 8, !tbaa !21
  %30 = icmp eq i32 %29, 0
  br i1 %30, label %31, label %34

31:                                               ; preds = %27
  %32 = load ptr, ptr getelementptr inbounds (i8, ptr @z_errmsg, i64 56), align 8, !tbaa !19
  %33 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %32, ptr %33, align 8, !tbaa !20
  br label %.critedge

34:                                               ; preds = %27
  store ptr %0, ptr %6, align 8, !tbaa !22
  %35 = getelementptr inbounds i8, ptr %6, i64 64
  %36 = load i32, ptr %35, align 8, !tbaa !23
  store i32 %1, ptr %35, align 8, !tbaa !23
  %37 = icmp eq i32 %21, 42
  br i1 %37, label %38, label %270

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %6, i64 44
  %40 = load i32, ptr %39, align 4, !tbaa !24
  %41 = icmp eq i32 %40, 2
  br i1 %41, label %42, label %234

42:                                               ; preds = %38
  %43 = tail call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0) #3
  %44 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 %43, ptr %44, align 8, !tbaa !25
  %45 = getelementptr inbounds i8, ptr %6, i64 16
  %46 = load ptr, ptr %45, align 8, !tbaa !26
  %47 = getelementptr inbounds i8, ptr %6, i64 40
  %48 = load i32, ptr %47, align 8, !tbaa !27
  %49 = add i32 %48, 1
  store i32 %49, ptr %47, align 8, !tbaa !27
  %50 = zext i32 %48 to i64
  %51 = getelementptr inbounds i8, ptr %46, i64 %50
  store i8 31, ptr %51, align 1, !tbaa !28
  %52 = load ptr, ptr %45, align 8, !tbaa !26
  %53 = load i32, ptr %47, align 8, !tbaa !27
  %54 = add i32 %53, 1
  store i32 %54, ptr %47, align 8, !tbaa !27
  %55 = zext i32 %53 to i64
  %56 = getelementptr inbounds i8, ptr %52, i64 %55
  store i8 -117, ptr %56, align 1, !tbaa !28
  %57 = load ptr, ptr %45, align 8, !tbaa !26
  %58 = load i32, ptr %47, align 8, !tbaa !27
  %59 = add i32 %58, 1
  store i32 %59, ptr %47, align 8, !tbaa !27
  %60 = zext i32 %58 to i64
  %61 = getelementptr inbounds i8, ptr %57, i64 %60
  store i8 8, ptr %61, align 1, !tbaa !28
  %62 = getelementptr inbounds i8, ptr %6, i64 48
  %63 = load ptr, ptr %62, align 8, !tbaa !29
  %64 = icmp eq ptr %63, null
  br i1 %64, label %65, label %111

65:                                               ; preds = %42
  %66 = load ptr, ptr %45, align 8, !tbaa !26
  %67 = load i32, ptr %47, align 8, !tbaa !27
  %68 = add i32 %67, 1
  store i32 %68, ptr %47, align 8, !tbaa !27
  %69 = zext i32 %67 to i64
  %70 = getelementptr inbounds i8, ptr %66, i64 %69
  store i8 0, ptr %70, align 1, !tbaa !28
  %71 = load ptr, ptr %45, align 8, !tbaa !26
  %72 = load i32, ptr %47, align 8, !tbaa !27
  %73 = add i32 %72, 1
  store i32 %73, ptr %47, align 8, !tbaa !27
  %74 = zext i32 %72 to i64
  %75 = getelementptr inbounds i8, ptr %71, i64 %74
  store i8 0, ptr %75, align 1, !tbaa !28
  %76 = load ptr, ptr %45, align 8, !tbaa !26
  %77 = load i32, ptr %47, align 8, !tbaa !27
  %78 = add i32 %77, 1
  store i32 %78, ptr %47, align 8, !tbaa !27
  %79 = zext i32 %77 to i64
  %80 = getelementptr inbounds i8, ptr %76, i64 %79
  store i8 0, ptr %80, align 1, !tbaa !28
  %81 = load ptr, ptr %45, align 8, !tbaa !26
  %82 = load i32, ptr %47, align 8, !tbaa !27
  %83 = add i32 %82, 1
  store i32 %83, ptr %47, align 8, !tbaa !27
  %84 = zext i32 %82 to i64
  %85 = getelementptr inbounds i8, ptr %81, i64 %84
  store i8 0, ptr %85, align 1, !tbaa !28
  %86 = load ptr, ptr %45, align 8, !tbaa !26
  %87 = load i32, ptr %47, align 8, !tbaa !27
  %88 = add i32 %87, 1
  store i32 %88, ptr %47, align 8, !tbaa !27
  %89 = zext i32 %87 to i64
  %90 = getelementptr inbounds i8, ptr %86, i64 %89
  store i8 0, ptr %90, align 1, !tbaa !28
  %91 = getelementptr inbounds i8, ptr %6, i64 180
  %92 = load i32, ptr %91, align 4, !tbaa !30
  %93 = icmp eq i32 %92, 9
  br i1 %93, label %.thread408, label %94

94:                                               ; preds = %65
  %95 = getelementptr inbounds i8, ptr %6, i64 184
  %96 = load i32, ptr %95, align 8, !tbaa !31
  %97 = icmp sgt i32 %96, 1
  %98 = icmp slt i32 %92, 2
  %spec.select = or i1 %98, %97
  %99 = select i1 %spec.select, i8 4, i8 0
  br label %.thread408

.thread408:                                       ; preds = %65, %94
  %100 = phi i8 [ %99, %94 ], [ 2, %65 ]
  %101 = load ptr, ptr %45, align 8, !tbaa !26
  %102 = load i32, ptr %47, align 8, !tbaa !27
  %103 = add i32 %102, 1
  store i32 %103, ptr %47, align 8, !tbaa !27
  %104 = zext i32 %102 to i64
  %105 = getelementptr inbounds i8, ptr %101, i64 %104
  store i8 %100, ptr %105, align 1, !tbaa !28
  %106 = load ptr, ptr %45, align 8, !tbaa !26
  %107 = load i32, ptr %47, align 8, !tbaa !27
  %108 = add i32 %107, 1
  store i32 %108, ptr %47, align 8, !tbaa !27
  %109 = zext i32 %107 to i64
  %110 = getelementptr inbounds i8, ptr %106, i64 %109
  store i8 3, ptr %110, align 1, !tbaa !28
  br label %.sink.split

111:                                              ; preds = %42
  %112 = load i32, ptr %63, align 8, !tbaa !32
  %.not364 = icmp ne i32 %112, 0
  %113 = zext i1 %.not364 to i8
  %114 = getelementptr inbounds i8, ptr %63, i64 68
  %115 = load i32, ptr %114, align 4, !tbaa !34
  %.not365 = icmp eq i32 %115, 0
  %116 = select i1 %.not365, i8 0, i8 2
  %117 = or disjoint i8 %116, %113
  %118 = getelementptr inbounds i8, ptr %63, i64 24
  %119 = load ptr, ptr %118, align 8, !tbaa !35
  %120 = icmp eq ptr %119, null
  %121 = select i1 %120, i8 0, i8 4
  %122 = or disjoint i8 %117, %121
  %123 = getelementptr inbounds i8, ptr %63, i64 40
  %124 = load ptr, ptr %123, align 8, !tbaa !36
  %125 = icmp eq ptr %124, null
  %126 = select i1 %125, i8 0, i8 8
  %127 = or disjoint i8 %122, %126
  %128 = getelementptr inbounds i8, ptr %63, i64 56
  %129 = load ptr, ptr %128, align 8, !tbaa !37
  %130 = icmp eq ptr %129, null
  %131 = select i1 %130, i8 0, i8 16
  %132 = or disjoint i8 %127, %131
  %133 = load ptr, ptr %45, align 8, !tbaa !26
  %134 = load i32, ptr %47, align 8, !tbaa !27
  %135 = add i32 %134, 1
  store i32 %135, ptr %47, align 8, !tbaa !27
  %136 = zext i32 %134 to i64
  %137 = getelementptr inbounds i8, ptr %133, i64 %136
  store i8 %132, ptr %137, align 1, !tbaa !28
  %138 = load ptr, ptr %62, align 8, !tbaa !29
  %139 = getelementptr inbounds i8, ptr %138, i64 8
  %140 = load i64, ptr %139, align 8, !tbaa !38
  %141 = trunc i64 %140 to i8
  %142 = load ptr, ptr %45, align 8, !tbaa !26
  %143 = load i32, ptr %47, align 8, !tbaa !27
  %144 = add i32 %143, 1
  store i32 %144, ptr %47, align 8, !tbaa !27
  %145 = zext i32 %143 to i64
  %146 = getelementptr inbounds i8, ptr %142, i64 %145
  store i8 %141, ptr %146, align 1, !tbaa !28
  %147 = load ptr, ptr %62, align 8, !tbaa !29
  %148 = getelementptr inbounds i8, ptr %147, i64 8
  %149 = load i64, ptr %148, align 8, !tbaa !38
  %150 = lshr i64 %149, 8
  %151 = trunc i64 %150 to i8
  %152 = load ptr, ptr %45, align 8, !tbaa !26
  %153 = load i32, ptr %47, align 8, !tbaa !27
  %154 = add i32 %153, 1
  store i32 %154, ptr %47, align 8, !tbaa !27
  %155 = zext i32 %153 to i64
  %156 = getelementptr inbounds i8, ptr %152, i64 %155
  store i8 %151, ptr %156, align 1, !tbaa !28
  %157 = load ptr, ptr %62, align 8, !tbaa !29
  %158 = getelementptr inbounds i8, ptr %157, i64 8
  %159 = load i64, ptr %158, align 8, !tbaa !38
  %160 = lshr i64 %159, 16
  %161 = trunc i64 %160 to i8
  %162 = load ptr, ptr %45, align 8, !tbaa !26
  %163 = load i32, ptr %47, align 8, !tbaa !27
  %164 = add i32 %163, 1
  store i32 %164, ptr %47, align 8, !tbaa !27
  %165 = zext i32 %163 to i64
  %166 = getelementptr inbounds i8, ptr %162, i64 %165
  store i8 %161, ptr %166, align 1, !tbaa !28
  %167 = load ptr, ptr %62, align 8, !tbaa !29
  %168 = getelementptr inbounds i8, ptr %167, i64 8
  %169 = load i64, ptr %168, align 8, !tbaa !38
  %170 = lshr i64 %169, 24
  %171 = trunc i64 %170 to i8
  %172 = load ptr, ptr %45, align 8, !tbaa !26
  %173 = load i32, ptr %47, align 8, !tbaa !27
  %174 = add i32 %173, 1
  store i32 %174, ptr %47, align 8, !tbaa !27
  %175 = zext i32 %173 to i64
  %176 = getelementptr inbounds i8, ptr %172, i64 %175
  store i8 %171, ptr %176, align 1, !tbaa !28
  %177 = getelementptr inbounds i8, ptr %6, i64 180
  %178 = load i32, ptr %177, align 4, !tbaa !30
  %179 = icmp eq i32 %178, 9
  br i1 %179, label %186, label %180

180:                                              ; preds = %111
  %181 = getelementptr inbounds i8, ptr %6, i64 184
  %182 = load i32, ptr %181, align 8, !tbaa !31
  %183 = icmp sgt i32 %182, 1
  %184 = icmp slt i32 %178, 2
  %spec.select389 = or i1 %184, %183
  %185 = select i1 %spec.select389, i8 4, i8 0
  br label %186

186:                                              ; preds = %111, %180
  %187 = phi i8 [ %185, %180 ], [ 2, %111 ]
  %188 = load ptr, ptr %45, align 8, !tbaa !26
  %189 = load i32, ptr %47, align 8, !tbaa !27
  %190 = add i32 %189, 1
  store i32 %190, ptr %47, align 8, !tbaa !27
  %191 = zext i32 %189 to i64
  %192 = getelementptr inbounds i8, ptr %188, i64 %191
  store i8 %187, ptr %192, align 1, !tbaa !28
  %193 = load ptr, ptr %62, align 8, !tbaa !29
  %194 = getelementptr inbounds i8, ptr %193, i64 20
  %195 = load i32, ptr %194, align 4, !tbaa !39
  %196 = trunc i32 %195 to i8
  %197 = load ptr, ptr %45, align 8, !tbaa !26
  %198 = load i32, ptr %47, align 8, !tbaa !27
  %199 = add i32 %198, 1
  store i32 %199, ptr %47, align 8, !tbaa !27
  %200 = zext i32 %198 to i64
  %201 = getelementptr inbounds i8, ptr %197, i64 %200
  store i8 %196, ptr %201, align 1, !tbaa !28
  %202 = load ptr, ptr %62, align 8, !tbaa !29
  %203 = getelementptr inbounds i8, ptr %202, i64 24
  %204 = load ptr, ptr %203, align 8, !tbaa !35
  %.not366 = icmp eq ptr %204, null
  br i1 %.not366, label %224, label %205

205:                                              ; preds = %186
  %206 = getelementptr inbounds i8, ptr %202, i64 32
  %207 = load i32, ptr %206, align 8, !tbaa !40
  %208 = trunc i32 %207 to i8
  %209 = load ptr, ptr %45, align 8, !tbaa !26
  %210 = load i32, ptr %47, align 8, !tbaa !27
  %211 = add i32 %210, 1
  store i32 %211, ptr %47, align 8, !tbaa !27
  %212 = zext i32 %210 to i64
  %213 = getelementptr inbounds i8, ptr %209, i64 %212
  store i8 %208, ptr %213, align 1, !tbaa !28
  %214 = load ptr, ptr %62, align 8, !tbaa !29
  %215 = getelementptr inbounds i8, ptr %214, i64 32
  %216 = load i32, ptr %215, align 8, !tbaa !40
  %217 = lshr i32 %216, 8
  %218 = trunc i32 %217 to i8
  %219 = load ptr, ptr %45, align 8, !tbaa !26
  %220 = load i32, ptr %47, align 8, !tbaa !27
  %221 = add i32 %220, 1
  store i32 %221, ptr %47, align 8, !tbaa !27
  %222 = zext i32 %220 to i64
  %223 = getelementptr inbounds i8, ptr %219, i64 %222
  store i8 %218, ptr %223, align 1, !tbaa !28
  %.pre = load ptr, ptr %62, align 8, !tbaa !29
  br label %224

224:                                              ; preds = %205, %186
  %225 = phi ptr [ %.pre, %205 ], [ %202, %186 ]
  %226 = getelementptr inbounds i8, ptr %225, i64 68
  %227 = load i32, ptr %226, align 4, !tbaa !34
  %.not367 = icmp eq i32 %227, 0
  br i1 %.not367, label %.thread, label %228

228:                                              ; preds = %224
  %229 = load i64, ptr %44, align 8, !tbaa !25
  %230 = load ptr, ptr %45, align 8, !tbaa !26
  %231 = load i32, ptr %47, align 8, !tbaa !27
  %232 = tail call i64 @crc32(i64 noundef %229, ptr noundef %230, i32 noundef %231) #3
  store i64 %232, ptr %44, align 8, !tbaa !25
  br label %.thread

.thread:                                          ; preds = %224, %228
  %233 = getelementptr inbounds i8, ptr %6, i64 56
  store i32 0, ptr %233, align 8, !tbaa !41
  store i32 69, ptr %20, align 8, !tbaa !15
  br label %272

234:                                              ; preds = %38
  %235 = getelementptr inbounds i8, ptr %6, i64 72
  %236 = load i32, ptr %235, align 8, !tbaa !42
  %237 = shl i32 %236, 12
  %238 = add i32 %237, -30720
  %239 = getelementptr inbounds i8, ptr %6, i64 184
  %240 = load i32, ptr %239, align 8, !tbaa !31
  %241 = icmp sgt i32 %240, 1
  br i1 %241, label %250, label %242

242:                                              ; preds = %234
  %243 = getelementptr inbounds i8, ptr %6, i64 180
  %244 = load i32, ptr %243, align 4, !tbaa !30
  %245 = icmp slt i32 %244, 2
  br i1 %245, label %250, label %246

246:                                              ; preds = %242
  %247 = icmp ult i32 %244, 6
  br i1 %247, label %250, label %248

248:                                              ; preds = %246
  %249 = icmp eq i32 %244, 6
  %. = select i1 %249, i32 128, i32 192
  br label %250

250:                                              ; preds = %248, %246, %234, %242
  %.0341 = phi i32 [ 0, %242 ], [ 0, %234 ], [ 64, %246 ], [ %., %248 ]
  %251 = or disjoint i32 %.0341, %238
  %252 = getelementptr inbounds i8, ptr %6, i64 156
  %253 = load i32, ptr %252, align 4, !tbaa !43
  %.not362 = icmp eq i32 %253, 0
  %254 = or disjoint i32 %251, 32
  %spec.select390 = select i1 %.not362, i32 %251, i32 %254
  %255 = urem i32 %spec.select390, 31
  %256 = or disjoint i32 %255, %spec.select390
  %257 = xor i32 %256, 31
  store i32 113, ptr %20, align 8, !tbaa !15
  tail call void @putShortMSB(ptr noundef nonnull %6, i32 noundef %257)
  %258 = load i32, ptr %252, align 4, !tbaa !43
  %.not363 = icmp eq i32 %258, 0
  br i1 %.not363, label %267, label %259

259:                                              ; preds = %250
  %260 = getelementptr inbounds i8, ptr %0, i64 96
  %261 = load i64, ptr %260, align 8, !tbaa !25
  %262 = lshr i64 %261, 16
  %263 = trunc i64 %262 to i32
  tail call void @putShortMSB(ptr noundef nonnull %6, i32 noundef %263)
  %264 = load i64, ptr %260, align 8, !tbaa !25
  %265 = trunc i64 %264 to i32
  %266 = and i32 %265, 65535
  tail call void @putShortMSB(ptr noundef nonnull %6, i32 noundef %266)
  br label %267

267:                                              ; preds = %259, %250
  %268 = tail call i64 @adler32(i64 noundef 0, ptr noundef null, i32 noundef 0) #3
  %269 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 %268, ptr %269, align 8, !tbaa !25
  %.pr.pre = load i32, ptr %20, align 8, !tbaa !15
  br label %270

270:                                              ; preds = %267, %34
  %.pr = phi i32 [ %.pr.pre, %267 ], [ %21, %34 ]
  %271 = icmp eq i32 %.pr, 69
  br i1 %271, label %272, label %354

272:                                              ; preds = %.thread, %270
  %273 = getelementptr inbounds i8, ptr %6, i64 48
  %274 = load ptr, ptr %273, align 8, !tbaa !29
  %275 = getelementptr inbounds i8, ptr %274, i64 24
  %276 = load ptr, ptr %275, align 8, !tbaa !35
  %.not368 = icmp eq ptr %276, null
  br i1 %.not368, label %353, label %277

277:                                              ; preds = %272
  %278 = getelementptr inbounds i8, ptr %6, i64 40
  %279 = load i32, ptr %278, align 8, !tbaa !27
  %280 = getelementptr inbounds i8, ptr %6, i64 56
  %281 = load i32, ptr %280, align 8, !tbaa !41
  %282 = getelementptr inbounds i8, ptr %274, i64 32
  %283 = load i32, ptr %282, align 8, !tbaa !40
  %284 = and i32 %283, 65535
  %285 = icmp ult i32 %281, %284
  br i1 %285, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %277
  %286 = getelementptr inbounds i8, ptr %6, i64 24
  %287 = getelementptr inbounds i8, ptr %0, i64 96
  %288 = getelementptr inbounds i8, ptr %6, i64 16
  br label %289

289:                                              ; preds = %.lr.ph, %312
  %290 = phi i32 [ %281, %.lr.ph ], [ %325, %312 ]
  %291 = phi ptr [ %274, %.lr.ph ], [ %326, %312 ]
  %.0338410 = phi i32 [ %279, %.lr.ph ], [ %.1339, %312 ]
  %292 = load i32, ptr %278, align 8, !tbaa !27
  %293 = zext i32 %292 to i64
  %294 = load i64, ptr %286, align 8, !tbaa !44
  %295 = icmp eq i64 %294, %293
  br i1 %295, label %296, label %312

296:                                              ; preds = %289
  %297 = getelementptr inbounds i8, ptr %291, i64 68
  %298 = load i32, ptr %297, align 4, !tbaa !34
  %.not369 = icmp ne i32 %298, 0
  %299 = icmp ugt i32 %292, %.0338410
  %or.cond = select i1 %.not369, i1 %299, i1 false
  br i1 %or.cond, label %300, label %307

300:                                              ; preds = %296
  %301 = load i64, ptr %287, align 8, !tbaa !25
  %302 = load ptr, ptr %288, align 8, !tbaa !26
  %303 = zext i32 %.0338410 to i64
  %304 = getelementptr inbounds i8, ptr %302, i64 %303
  %305 = sub i32 %292, %.0338410
  %306 = tail call i64 @crc32(i64 noundef %301, ptr noundef %304, i32 noundef %305) #3
  store i64 %306, ptr %287, align 8, !tbaa !25
  br label %307

307:                                              ; preds = %300, %296
  tail call void @flush_pending(ptr noundef nonnull %0)
  %308 = load i32, ptr %278, align 8, !tbaa !27
  %309 = zext i32 %308 to i64
  %310 = load i64, ptr %286, align 8, !tbaa !44
  %311 = icmp eq i64 %310, %309
  %.pre419.pre = load ptr, ptr %273, align 8, !tbaa !29
  br i1 %311, label %._crit_edge, label %._crit_edge416

._crit_edge416:                                   ; preds = %307
  %.pre418 = load i32, ptr %280, align 8, !tbaa !41
  br label %312

312:                                              ; preds = %._crit_edge416, %289
  %.pre-phi441 = phi i64 [ %309, %._crit_edge416 ], [ %293, %289 ]
  %313 = phi i32 [ %308, %._crit_edge416 ], [ %292, %289 ]
  %314 = phi i32 [ %.pre418, %._crit_edge416 ], [ %290, %289 ]
  %315 = phi ptr [ %.pre419.pre, %._crit_edge416 ], [ %291, %289 ]
  %.1339 = phi i32 [ %308, %._crit_edge416 ], [ %.0338410, %289 ]
  %316 = getelementptr inbounds i8, ptr %315, i64 24
  %317 = load ptr, ptr %316, align 8, !tbaa !35
  %318 = zext i32 %314 to i64
  %319 = getelementptr inbounds i8, ptr %317, i64 %318
  %320 = load i8, ptr %319, align 1, !tbaa !28
  %321 = load ptr, ptr %288, align 8, !tbaa !26
  %322 = add i32 %313, 1
  store i32 %322, ptr %278, align 8, !tbaa !27
  %323 = getelementptr inbounds i8, ptr %321, i64 %.pre-phi441
  store i8 %320, ptr %323, align 1, !tbaa !28
  %324 = load i32, ptr %280, align 8, !tbaa !41
  %325 = add i32 %324, 1
  store i32 %325, ptr %280, align 8, !tbaa !41
  %326 = load ptr, ptr %273, align 8, !tbaa !29
  %327 = getelementptr inbounds i8, ptr %326, i64 32
  %328 = load i32, ptr %327, align 8, !tbaa !40
  %329 = and i32 %328, 65535
  %330 = icmp ult i32 %325, %329
  br i1 %330, label %289, label %._crit_edge, !llvm.loop !45

._crit_edge:                                      ; preds = %312, %307, %277
  %331 = phi ptr [ %274, %277 ], [ %.pre419.pre, %307 ], [ %326, %312 ]
  %.2340 = phi i32 [ %279, %277 ], [ %308, %307 ], [ %.1339, %312 ]
  %332 = getelementptr inbounds i8, ptr %331, i64 68
  %333 = load i32, ptr %332, align 4, !tbaa !34
  %.not370 = icmp eq i32 %333, 0
  br i1 %.not370, label %346, label %334

334:                                              ; preds = %._crit_edge
  %335 = load i32, ptr %278, align 8, !tbaa !27
  %336 = icmp ugt i32 %335, %.2340
  br i1 %336, label %337, label %346

337:                                              ; preds = %334
  %338 = getelementptr inbounds i8, ptr %0, i64 96
  %339 = load i64, ptr %338, align 8, !tbaa !25
  %340 = getelementptr inbounds i8, ptr %6, i64 16
  %341 = load ptr, ptr %340, align 8, !tbaa !26
  %342 = zext i32 %.2340 to i64
  %343 = getelementptr inbounds i8, ptr %341, i64 %342
  %344 = sub i32 %335, %.2340
  %345 = tail call i64 @crc32(i64 noundef %339, ptr noundef %343, i32 noundef %344) #3
  store i64 %345, ptr %338, align 8, !tbaa !25
  %.pre420 = load ptr, ptr %273, align 8, !tbaa !29
  br label %346

346:                                              ; preds = %337, %334, %._crit_edge
  %347 = phi ptr [ %.pre420, %337 ], [ %331, %334 ], [ %331, %._crit_edge ]
  %348 = load i32, ptr %280, align 8, !tbaa !41
  %349 = getelementptr inbounds i8, ptr %347, i64 32
  %350 = load i32, ptr %349, align 8, !tbaa !40
  %351 = icmp eq i32 %348, %350
  br i1 %351, label %352, label %thread-pre-split395

352:                                              ; preds = %346
  store i32 0, ptr %280, align 8, !tbaa !41
  store i32 73, ptr %20, align 8, !tbaa !15
  br label %.thread397

353:                                              ; preds = %272
  store i32 73, ptr %20, align 8, !tbaa !15
  br label %.thread397

thread-pre-split395:                              ; preds = %346
  %.pr396 = load i32, ptr %20, align 8, !tbaa !15
  br label %354

354:                                              ; preds = %thread-pre-split395, %270
  %355 = phi i32 [ %.pr396, %thread-pre-split395 ], [ %.pr, %270 ]
  %356 = icmp eq i32 %355, 73
  br i1 %356, label %..thread397_crit_edge, label %419

..thread397_crit_edge:                            ; preds = %354
  %.phi.trans.insert = getelementptr inbounds i8, ptr %6, i64 48
  %.pre421 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !29
  br label %.thread397

.thread397:                                       ; preds = %..thread397_crit_edge, %353, %352
  %357 = phi ptr [ %.pre421, %..thread397_crit_edge ], [ %274, %353 ], [ %347, %352 ]
  %358 = getelementptr inbounds i8, ptr %6, i64 48
  %359 = getelementptr inbounds i8, ptr %357, i64 40
  %360 = load ptr, ptr %359, align 8, !tbaa !36
  %.not371 = icmp eq ptr %360, null
  br i1 %.not371, label %.thread402.sink.split, label %361

361:                                              ; preds = %.thread397
  %362 = getelementptr inbounds i8, ptr %6, i64 40
  %363 = load i32, ptr %362, align 8, !tbaa !27
  %364 = getelementptr inbounds i8, ptr %6, i64 24
  %365 = getelementptr inbounds i8, ptr %0, i64 96
  %366 = getelementptr inbounds i8, ptr %6, i64 16
  %367 = getelementptr inbounds i8, ptr %6, i64 56
  br label %368

368:                                              ; preds = %389, %361
  %.0335 = phi i32 [ %363, %361 ], [ %.1336, %389 ]
  %369 = load i32, ptr %362, align 8, !tbaa !27
  %370 = zext i32 %369 to i64
  %371 = load i64, ptr %364, align 8, !tbaa !44
  %372 = icmp eq i64 %371, %370
  %.pre424 = load ptr, ptr %358, align 8, !tbaa !29
  br i1 %372, label %373, label %389

373:                                              ; preds = %368
  %374 = getelementptr inbounds i8, ptr %.pre424, i64 68
  %375 = load i32, ptr %374, align 4, !tbaa !34
  %.not372 = icmp ne i32 %375, 0
  %376 = icmp ugt i32 %369, %.0335
  %or.cond391 = select i1 %.not372, i1 %376, i1 false
  br i1 %or.cond391, label %377, label %384

377:                                              ; preds = %373
  %378 = load i64, ptr %365, align 8, !tbaa !25
  %379 = load ptr, ptr %366, align 8, !tbaa !26
  %380 = zext i32 %.0335 to i64
  %381 = getelementptr inbounds i8, ptr %379, i64 %380
  %382 = sub i32 %369, %.0335
  %383 = tail call i64 @crc32(i64 noundef %378, ptr noundef %381, i32 noundef %382) #3
  store i64 %383, ptr %365, align 8, !tbaa !25
  br label %384

384:                                              ; preds = %377, %373
  tail call void @flush_pending(ptr noundef nonnull %0)
  %385 = load i32, ptr %362, align 8, !tbaa !27
  %386 = zext i32 %385 to i64
  %387 = load i64, ptr %364, align 8, !tbaa !44
  %388 = icmp eq i64 %387, %386
  br i1 %388, label %402, label %._crit_edge422

._crit_edge422:                                   ; preds = %384
  %.pre423 = load ptr, ptr %358, align 8, !tbaa !29
  br label %389

389:                                              ; preds = %._crit_edge422, %368
  %.pre-phi440 = phi i64 [ %386, %._crit_edge422 ], [ %370, %368 ]
  %390 = phi i32 [ %385, %._crit_edge422 ], [ %369, %368 ]
  %391 = phi ptr [ %.pre423, %._crit_edge422 ], [ %.pre424, %368 ]
  %.1336 = phi i32 [ %385, %._crit_edge422 ], [ %.0335, %368 ]
  %392 = getelementptr inbounds i8, ptr %391, i64 40
  %393 = load ptr, ptr %392, align 8, !tbaa !36
  %394 = load i32, ptr %367, align 8, !tbaa !41
  %395 = add i32 %394, 1
  store i32 %395, ptr %367, align 8, !tbaa !41
  %396 = zext i32 %394 to i64
  %397 = getelementptr inbounds i8, ptr %393, i64 %396
  %398 = load i8, ptr %397, align 1, !tbaa !28
  %399 = load ptr, ptr %366, align 8, !tbaa !26
  %400 = add i32 %390, 1
  store i32 %400, ptr %362, align 8, !tbaa !27
  %401 = getelementptr inbounds i8, ptr %399, i64 %.pre-phi440
  store i8 %398, ptr %401, align 1, !tbaa !28
  %.not373 = icmp eq i8 %398, 0
  br i1 %.not373, label %402, label %368, !llvm.loop !47

402:                                              ; preds = %384, %389
  %.2337 = phi i32 [ %.1336, %389 ], [ %385, %384 ]
  %403 = phi i1 [ true, %389 ], [ false, %384 ]
  %404 = load ptr, ptr %358, align 8, !tbaa !29
  %405 = getelementptr inbounds i8, ptr %404, i64 68
  %406 = load i32, ptr %405, align 4, !tbaa !34
  %.not374 = icmp eq i32 %406, 0
  br i1 %.not374, label %417, label %407

407:                                              ; preds = %402
  %408 = load i32, ptr %362, align 8, !tbaa !27
  %409 = icmp ugt i32 %408, %.2337
  br i1 %409, label %410, label %417

410:                                              ; preds = %407
  %411 = load i64, ptr %365, align 8, !tbaa !25
  %412 = load ptr, ptr %366, align 8, !tbaa !26
  %413 = zext i32 %.2337 to i64
  %414 = getelementptr inbounds i8, ptr %412, i64 %413
  %415 = sub i32 %408, %.2337
  %416 = tail call i64 @crc32(i64 noundef %411, ptr noundef %414, i32 noundef %415) #3
  store i64 %416, ptr %365, align 8, !tbaa !25
  br label %417

417:                                              ; preds = %410, %407, %402
  br i1 %403, label %418, label %._crit_edge425

._crit_edge425:                                   ; preds = %417
  %.pr400.pre = load i32, ptr %20, align 8, !tbaa !15
  br label %419

418:                                              ; preds = %417
  store i32 0, ptr %367, align 8, !tbaa !41
  br label %.thread402.sink.split

419:                                              ; preds = %._crit_edge425, %354
  %.pr400 = phi i32 [ %.pr400.pre, %._crit_edge425 ], [ %355, %354 ]
  %420 = icmp eq i32 %.pr400, 91
  br i1 %420, label %.thread402, label %482

.thread402.sink.split:                            ; preds = %.thread397, %418
  store i32 91, ptr %20, align 8, !tbaa !15
  br label %.thread402

.thread402:                                       ; preds = %.thread402.sink.split, %419
  %421 = getelementptr inbounds i8, ptr %6, i64 48
  %422 = load ptr, ptr %421, align 8, !tbaa !29
  %423 = getelementptr inbounds i8, ptr %422, i64 56
  %424 = load ptr, ptr %423, align 8, !tbaa !37
  %.not375 = icmp eq ptr %424, null
  br i1 %.not375, label %.thread407.sink.split, label %425

425:                                              ; preds = %.thread402
  %426 = getelementptr inbounds i8, ptr %6, i64 40
  %427 = load i32, ptr %426, align 8, !tbaa !27
  %428 = getelementptr inbounds i8, ptr %6, i64 24
  %429 = getelementptr inbounds i8, ptr %0, i64 96
  %430 = getelementptr inbounds i8, ptr %6, i64 16
  %431 = getelementptr inbounds i8, ptr %6, i64 56
  br label %432

432:                                              ; preds = %453, %425
  %.0332 = phi i32 [ %427, %425 ], [ %.1333, %453 ]
  %433 = load i32, ptr %426, align 8, !tbaa !27
  %434 = zext i32 %433 to i64
  %435 = load i64, ptr %428, align 8, !tbaa !44
  %436 = icmp eq i64 %435, %434
  %.pre429 = load ptr, ptr %421, align 8, !tbaa !29
  br i1 %436, label %437, label %453

437:                                              ; preds = %432
  %438 = getelementptr inbounds i8, ptr %.pre429, i64 68
  %439 = load i32, ptr %438, align 4, !tbaa !34
  %.not376 = icmp ne i32 %439, 0
  %440 = icmp ugt i32 %433, %.0332
  %or.cond392 = select i1 %.not376, i1 %440, i1 false
  br i1 %or.cond392, label %441, label %448

441:                                              ; preds = %437
  %442 = load i64, ptr %429, align 8, !tbaa !25
  %443 = load ptr, ptr %430, align 8, !tbaa !26
  %444 = zext i32 %.0332 to i64
  %445 = getelementptr inbounds i8, ptr %443, i64 %444
  %446 = sub i32 %433, %.0332
  %447 = tail call i64 @crc32(i64 noundef %442, ptr noundef %445, i32 noundef %446) #3
  store i64 %447, ptr %429, align 8, !tbaa !25
  br label %448

448:                                              ; preds = %441, %437
  tail call void @flush_pending(ptr noundef nonnull %0)
  %449 = load i32, ptr %426, align 8, !tbaa !27
  %450 = zext i32 %449 to i64
  %451 = load i64, ptr %428, align 8, !tbaa !44
  %452 = icmp eq i64 %451, %450
  br i1 %452, label %466, label %._crit_edge427

._crit_edge427:                                   ; preds = %448
  %.pre428 = load ptr, ptr %421, align 8, !tbaa !29
  br label %453

453:                                              ; preds = %._crit_edge427, %432
  %.pre-phi439 = phi i64 [ %450, %._crit_edge427 ], [ %434, %432 ]
  %454 = phi i32 [ %449, %._crit_edge427 ], [ %433, %432 ]
  %455 = phi ptr [ %.pre428, %._crit_edge427 ], [ %.pre429, %432 ]
  %.1333 = phi i32 [ %449, %._crit_edge427 ], [ %.0332, %432 ]
  %456 = getelementptr inbounds i8, ptr %455, i64 56
  %457 = load ptr, ptr %456, align 8, !tbaa !37
  %458 = load i32, ptr %431, align 8, !tbaa !41
  %459 = add i32 %458, 1
  store i32 %459, ptr %431, align 8, !tbaa !41
  %460 = zext i32 %458 to i64
  %461 = getelementptr inbounds i8, ptr %457, i64 %460
  %462 = load i8, ptr %461, align 1, !tbaa !28
  %463 = load ptr, ptr %430, align 8, !tbaa !26
  %464 = add i32 %454, 1
  store i32 %464, ptr %426, align 8, !tbaa !27
  %465 = getelementptr inbounds i8, ptr %463, i64 %.pre-phi439
  store i8 %462, ptr %465, align 1, !tbaa !28
  %.not377 = icmp eq i8 %462, 0
  br i1 %.not377, label %466, label %432, !llvm.loop !48

466:                                              ; preds = %448, %453
  %.2 = phi i32 [ %.1333, %453 ], [ %449, %448 ]
  %467 = phi i1 [ true, %453 ], [ false, %448 ]
  %468 = load ptr, ptr %421, align 8, !tbaa !29
  %469 = getelementptr inbounds i8, ptr %468, i64 68
  %470 = load i32, ptr %469, align 4, !tbaa !34
  %.not378 = icmp eq i32 %470, 0
  br i1 %.not378, label %481, label %471

471:                                              ; preds = %466
  %472 = load i32, ptr %426, align 8, !tbaa !27
  %473 = icmp ugt i32 %472, %.2
  br i1 %473, label %474, label %481

474:                                              ; preds = %471
  %475 = load i64, ptr %429, align 8, !tbaa !25
  %476 = load ptr, ptr %430, align 8, !tbaa !26
  %477 = zext i32 %.2 to i64
  %478 = getelementptr inbounds i8, ptr %476, i64 %477
  %479 = sub i32 %472, %.2
  %480 = tail call i64 @crc32(i64 noundef %475, ptr noundef %478, i32 noundef %479) #3
  store i64 %480, ptr %429, align 8, !tbaa !25
  br label %481

481:                                              ; preds = %474, %471, %466
  br i1 %467, label %.thread407.sink.split, label %thread-pre-split404

thread-pre-split404:                              ; preds = %481
  %.pr405 = load i32, ptr %20, align 8, !tbaa !15
  br label %482

482:                                              ; preds = %thread-pre-split404, %419
  %483 = phi i32 [ %.pr405, %thread-pre-split404 ], [ %.pr400, %419 ]
  %484 = icmp eq i32 %483, 103
  br i1 %484, label %.thread407, label %519

.thread407.sink.split:                            ; preds = %.thread402, %481
  store i32 103, ptr %20, align 8, !tbaa !15
  br label %.thread407

.thread407:                                       ; preds = %.thread407.sink.split, %482
  %485 = getelementptr inbounds i8, ptr %6, i64 48
  %486 = load ptr, ptr %485, align 8, !tbaa !29
  %487 = getelementptr inbounds i8, ptr %486, i64 68
  %488 = load i32, ptr %487, align 4, !tbaa !34
  %.not379 = icmp eq i32 %488, 0
  br i1 %.not379, label %.sink.split, label %489

489:                                              ; preds = %.thread407
  %490 = getelementptr inbounds i8, ptr %6, i64 40
  %491 = load i32, ptr %490, align 8, !tbaa !27
  %492 = add i32 %491, 2
  %493 = zext i32 %492 to i64
  %494 = getelementptr inbounds i8, ptr %6, i64 24
  %495 = load i64, ptr %494, align 8, !tbaa !44
  %496 = icmp ult i64 %495, %493
  br i1 %496, label %497, label %498

497:                                              ; preds = %489
  tail call void @flush_pending(ptr noundef nonnull %0)
  %.pre430 = load i32, ptr %490, align 8, !tbaa !27
  %.pre431 = load i64, ptr %494, align 8, !tbaa !44
  %.pre436 = add i32 %.pre430, 2
  %.pre437 = zext i32 %.pre436 to i64
  br label %498

498:                                              ; preds = %497, %489
  %.pre-phi438 = phi i64 [ %.pre437, %497 ], [ %493, %489 ]
  %499 = phi i64 [ %.pre431, %497 ], [ %495, %489 ]
  %500 = phi i32 [ %.pre430, %497 ], [ %491, %489 ]
  %.not380 = icmp ult i64 %499, %.pre-phi438
  br i1 %.not380, label %519, label %501

501:                                              ; preds = %498
  %502 = getelementptr inbounds i8, ptr %0, i64 96
  %503 = load i64, ptr %502, align 8, !tbaa !25
  %504 = trunc i64 %503 to i8
  %505 = getelementptr inbounds i8, ptr %6, i64 16
  %506 = load ptr, ptr %505, align 8, !tbaa !26
  %507 = add i32 %500, 1
  store i32 %507, ptr %490, align 8, !tbaa !27
  %508 = zext i32 %500 to i64
  %509 = getelementptr inbounds i8, ptr %506, i64 %508
  store i8 %504, ptr %509, align 1, !tbaa !28
  %510 = load i64, ptr %502, align 8, !tbaa !25
  %511 = lshr i64 %510, 8
  %512 = trunc i64 %511 to i8
  %513 = load ptr, ptr %505, align 8, !tbaa !26
  %514 = load i32, ptr %490, align 8, !tbaa !27
  %515 = add i32 %514, 1
  store i32 %515, ptr %490, align 8, !tbaa !27
  %516 = zext i32 %514 to i64
  %517 = getelementptr inbounds i8, ptr %513, i64 %516
  store i8 %512, ptr %517, align 1, !tbaa !28
  %518 = tail call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0) #3
  store i64 %518, ptr %502, align 8, !tbaa !25
  br label %.sink.split

.sink.split:                                      ; preds = %.thread407, %501, %.thread408
  store i32 113, ptr %20, align 8, !tbaa !15
  br label %519

519:                                              ; preds = %.sink.split, %498, %482
  %520 = getelementptr inbounds i8, ptr %6, i64 40
  %521 = load i32, ptr %520, align 8, !tbaa !27
  %.not381 = icmp eq i32 %521, 0
  br i1 %.not381, label %526, label %522

522:                                              ; preds = %519
  tail call void @flush_pending(ptr noundef nonnull %0)
  %523 = load i32, ptr %28, align 8, !tbaa !21
  %524 = icmp eq i32 %523, 0
  br i1 %524, label %525, label %534

525:                                              ; preds = %522
  store i32 -1, ptr %35, align 8, !tbaa !23
  br label %.critedge

526:                                              ; preds = %519
  %527 = getelementptr inbounds i8, ptr %0, i64 8
  %528 = load i32, ptr %527, align 8, !tbaa !14
  %529 = icmp eq i32 %528, 0
  %530 = icmp sge i32 %36, %1
  %or.cond7 = and i1 %23, %530
  %or.cond393 = select i1 %529, i1 %or.cond7, i1 false
  br i1 %or.cond393, label %531, label %534

531:                                              ; preds = %526
  %532 = load ptr, ptr getelementptr inbounds (i8, ptr @z_errmsg, i64 56), align 8, !tbaa !19
  %533 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %532, ptr %533, align 8, !tbaa !20
  br label %.critedge

534:                                              ; preds = %526, %522
  %535 = load i32, ptr %20, align 8, !tbaa !15
  %536 = icmp eq i32 %535, 666
  %537 = getelementptr inbounds i8, ptr %0, i64 8
  %538 = load i32, ptr %537, align 8, !tbaa !14
  %.not382 = icmp eq i32 %538, 0
  br i1 %536, label %539, label %543

539:                                              ; preds = %534
  br i1 %.not382, label %.thread442, label %540

540:                                              ; preds = %539
  %541 = load ptr, ptr getelementptr inbounds (i8, ptr @z_errmsg, i64 56), align 8, !tbaa !19
  %542 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %541, ptr %542, align 8, !tbaa !20
  br label %.critedge

543:                                              ; preds = %534
  br i1 %.not382, label %.thread442, label %548

.thread442:                                       ; preds = %539, %543
  %544 = getelementptr inbounds i8, ptr %6, i64 164
  %545 = load i32, ptr %544, align 4, !tbaa !49
  %.not384 = icmp eq i32 %545, 0
  br i1 %.not384, label %546, label %548

546:                                              ; preds = %.thread442
  %.not385 = icmp eq i32 %1, 0
  br i1 %.not385, label %.critedge, label %547

547:                                              ; preds = %546
  br i1 %536, label %597, label %548

548:                                              ; preds = %547, %.thread442, %543
  %549 = getelementptr inbounds i8, ptr %6, i64 184
  %550 = load i32, ptr %549, align 8, !tbaa !31
  switch i32 %550, label %555 [
    i32 2, label %551
    i32 3, label %553
  ]

551:                                              ; preds = %548
  %552 = tail call i32 @deflate_huff(ptr noundef nonnull %6, i32 noundef %1)
  br label %562

553:                                              ; preds = %548
  %554 = tail call i32 @deflate_rle(ptr noundef nonnull %6, i32 noundef %1)
  br label %562

555:                                              ; preds = %548
  %556 = getelementptr inbounds i8, ptr %6, i64 180
  %557 = load i32, ptr %556, align 4, !tbaa !30
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds [10 x %struct.config_s], ptr @configuration_table, i64 0, i64 %558, i32 4
  %560 = load ptr, ptr %559, align 8, !tbaa !50
  %561 = tail call i32 %560(ptr noundef nonnull %6, i32 noundef %1) #3
  br label %562

562:                                              ; preds = %553, %555, %551
  %563 = phi i32 [ %552, %551 ], [ %554, %553 ], [ %561, %555 ]
  %564 = and i32 %563, -2
  %or.cond9 = icmp eq i32 %564, 2
  br i1 %or.cond9, label %565, label %566

565:                                              ; preds = %562
  store i32 666, ptr %20, align 8, !tbaa !15
  br label %566

566:                                              ; preds = %562, %565
  %567 = and i32 %563, -3
  %or.cond11 = icmp eq i32 %567, 0
  br i1 %or.cond11, label %568, label %572

568:                                              ; preds = %566
  %569 = load i32, ptr %28, align 8, !tbaa !21
  %570 = icmp eq i32 %569, 0
  br i1 %570, label %571, label %.critedge

571:                                              ; preds = %568
  store i32 -1, ptr %35, align 8, !tbaa !23
  br label %.critedge

572:                                              ; preds = %566
  %573 = icmp eq i32 %563, 1
  br i1 %573, label %574, label %597

574:                                              ; preds = %572
  switch i32 %1, label %576 [
    i32 1, label %575
    i32 5, label %593
  ]

575:                                              ; preds = %574
  tail call void @_tr_align(ptr noundef nonnull %6) #3
  br label %593

576:                                              ; preds = %574
  tail call void @_tr_stored_block(ptr noundef nonnull %6, ptr noundef null, i64 noundef 0, i32 noundef 0) #3
  %577 = icmp eq i32 %1, 3
  br i1 %577, label %578, label %593

578:                                              ; preds = %576
  %579 = getelementptr inbounds i8, ptr %6, i64 104
  %580 = load ptr, ptr %579, align 8, !tbaa !52
  %581 = getelementptr inbounds i8, ptr %6, i64 116
  %582 = load i32, ptr %581, align 4, !tbaa !53
  %583 = add i32 %582, -1
  %584 = zext i32 %583 to i64
  %585 = getelementptr inbounds i16, ptr %580, i64 %584
  store i16 0, ptr %585, align 2, !tbaa !54
  %586 = shl nuw nsw i64 %584, 1
  tail call void @llvm.memset.p0.i64(ptr align 1 %580, i8 0, i64 %586, i1 false)
  %587 = getelementptr inbounds i8, ptr %6, i64 164
  %588 = load i32, ptr %587, align 4, !tbaa !49
  %589 = icmp eq i32 %588, 0
  br i1 %589, label %590, label %593

590:                                              ; preds = %578
  %591 = getelementptr inbounds i8, ptr %6, i64 156
  store i32 0, ptr %591, align 4, !tbaa !43
  %592 = getelementptr inbounds i8, ptr %6, i64 136
  store i64 0, ptr %592, align 8, !tbaa !55
  br label %593

593:                                              ; preds = %574, %578, %590, %576, %575
  tail call void @flush_pending(ptr noundef nonnull %0)
  %594 = load i32, ptr %28, align 8, !tbaa !21
  %595 = icmp eq i32 %594, 0
  br i1 %595, label %596, label %597

596:                                              ; preds = %593
  store i32 -1, ptr %35, align 8, !tbaa !23
  br label %.critedge

597:                                              ; preds = %593, %572, %547
  br i1 %23, label %.critedge, label %598

598:                                              ; preds = %597
  %599 = getelementptr inbounds i8, ptr %6, i64 44
  %600 = load i32, ptr %599, align 4, !tbaa !24
  %601 = icmp slt i32 %600, 1
  br i1 %601, label %.critedge, label %602

602:                                              ; preds = %598
  %603 = icmp eq i32 %600, 2
  %604 = getelementptr inbounds i8, ptr %0, i64 96
  %605 = load i64, ptr %604, align 8, !tbaa !25
  br i1 %603, label %606, label %670

606:                                              ; preds = %602
  %607 = trunc i64 %605 to i8
  %608 = getelementptr inbounds i8, ptr %6, i64 16
  %609 = load ptr, ptr %608, align 8, !tbaa !26
  %610 = load i32, ptr %520, align 8, !tbaa !27
  %611 = add i32 %610, 1
  store i32 %611, ptr %520, align 8, !tbaa !27
  %612 = zext i32 %610 to i64
  %613 = getelementptr inbounds i8, ptr %609, i64 %612
  store i8 %607, ptr %613, align 1, !tbaa !28
  %614 = load i64, ptr %604, align 8, !tbaa !25
  %615 = lshr i64 %614, 8
  %616 = trunc i64 %615 to i8
  %617 = load ptr, ptr %608, align 8, !tbaa !26
  %618 = load i32, ptr %520, align 8, !tbaa !27
  %619 = add i32 %618, 1
  store i32 %619, ptr %520, align 8, !tbaa !27
  %620 = zext i32 %618 to i64
  %621 = getelementptr inbounds i8, ptr %617, i64 %620
  store i8 %616, ptr %621, align 1, !tbaa !28
  %622 = load i64, ptr %604, align 8, !tbaa !25
  %623 = lshr i64 %622, 16
  %624 = trunc i64 %623 to i8
  %625 = load ptr, ptr %608, align 8, !tbaa !26
  %626 = load i32, ptr %520, align 8, !tbaa !27
  %627 = add i32 %626, 1
  store i32 %627, ptr %520, align 8, !tbaa !27
  %628 = zext i32 %626 to i64
  %629 = getelementptr inbounds i8, ptr %625, i64 %628
  store i8 %624, ptr %629, align 1, !tbaa !28
  %630 = load i64, ptr %604, align 8, !tbaa !25
  %631 = lshr i64 %630, 24
  %632 = trunc i64 %631 to i8
  %633 = load ptr, ptr %608, align 8, !tbaa !26
  %634 = load i32, ptr %520, align 8, !tbaa !27
  %635 = add i32 %634, 1
  store i32 %635, ptr %520, align 8, !tbaa !27
  %636 = zext i32 %634 to i64
  %637 = getelementptr inbounds i8, ptr %633, i64 %636
  store i8 %632, ptr %637, align 1, !tbaa !28
  %638 = getelementptr inbounds i8, ptr %0, i64 16
  %639 = load i64, ptr %638, align 8, !tbaa !56
  %640 = trunc i64 %639 to i8
  %641 = load ptr, ptr %608, align 8, !tbaa !26
  %642 = load i32, ptr %520, align 8, !tbaa !27
  %643 = add i32 %642, 1
  store i32 %643, ptr %520, align 8, !tbaa !27
  %644 = zext i32 %642 to i64
  %645 = getelementptr inbounds i8, ptr %641, i64 %644
  store i8 %640, ptr %645, align 1, !tbaa !28
  %646 = load i64, ptr %638, align 8, !tbaa !56
  %647 = lshr i64 %646, 8
  %648 = trunc i64 %647 to i8
  %649 = load ptr, ptr %608, align 8, !tbaa !26
  %650 = load i32, ptr %520, align 8, !tbaa !27
  %651 = add i32 %650, 1
  store i32 %651, ptr %520, align 8, !tbaa !27
  %652 = zext i32 %650 to i64
  %653 = getelementptr inbounds i8, ptr %649, i64 %652
  store i8 %648, ptr %653, align 1, !tbaa !28
  %654 = load i64, ptr %638, align 8, !tbaa !56
  %655 = lshr i64 %654, 16
  %656 = trunc i64 %655 to i8
  %657 = load ptr, ptr %608, align 8, !tbaa !26
  %658 = load i32, ptr %520, align 8, !tbaa !27
  %659 = add i32 %658, 1
  store i32 %659, ptr %520, align 8, !tbaa !27
  %660 = zext i32 %658 to i64
  %661 = getelementptr inbounds i8, ptr %657, i64 %660
  store i8 %656, ptr %661, align 1, !tbaa !28
  %662 = load i64, ptr %638, align 8, !tbaa !56
  %663 = lshr i64 %662, 24
  %664 = trunc i64 %663 to i8
  %665 = load ptr, ptr %608, align 8, !tbaa !26
  %666 = load i32, ptr %520, align 8, !tbaa !27
  %667 = add i32 %666, 1
  store i32 %667, ptr %520, align 8, !tbaa !27
  %668 = zext i32 %666 to i64
  %669 = getelementptr inbounds i8, ptr %665, i64 %668
  store i8 %664, ptr %669, align 1, !tbaa !28
  br label %676

670:                                              ; preds = %602
  %671 = lshr i64 %605, 16
  %672 = trunc i64 %671 to i32
  tail call void @putShortMSB(ptr noundef nonnull %6, i32 noundef %672)
  %673 = load i64, ptr %604, align 8, !tbaa !25
  %674 = trunc i64 %673 to i32
  %675 = and i32 %674, 65535
  tail call void @putShortMSB(ptr noundef nonnull %6, i32 noundef %675)
  br label %676

676:                                              ; preds = %670, %606
  tail call void @flush_pending(ptr noundef nonnull %0)
  %677 = load i32, ptr %599, align 4, !tbaa !24
  %678 = icmp sgt i32 %677, 0
  br i1 %678, label %679, label %681

679:                                              ; preds = %676
  %680 = sub nsw i32 0, %677
  store i32 %680, ptr %599, align 4, !tbaa !24
  br label %681

681:                                              ; preds = %679, %676
  %682 = load i32, ptr %520, align 8, !tbaa !27
  %.not388 = icmp eq i32 %682, 0
  %683 = zext i1 %.not388 to i32
  br label %.critedge

.critedge:                                        ; preds = %546, %596, %571, %568, %598, %597, %2, %4, %681, %540, %531, %525, %31, %24
  %.1 = phi i32 [ -2, %24 ], [ -5, %31 ], [ 0, %525 ], [ -5, %540 ], [ %683, %681 ], [ -5, %531 ], [ -2, %4 ], [ -2, %2 ], [ 0, %597 ], [ 1, %598 ], [ 0, %568 ], [ 0, %571 ], [ 0, %596 ], [ 0, %546 ]
  ret i32 %.1
}

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

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

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

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

declare void @_tr_align(ptr noundef) local_unnamed_addr #0

declare void @_tr_stored_block(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #0

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 56}
!6 = !{!"z_stream_s", !7, i64 0, !10, i64 8, !11, i64 16, !7, i64 24, !10, i64 32, !11, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !10, i64 88, !11, i64 96, !11, i64 104}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!6, !7, i64 24}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !10, i64 8}
!15 = !{!16, !10, i64 8}
!16 = !{!"internal_state", !7, i64 0, !10, i64 8, !7, i64 16, !11, i64 24, !7, i64 32, !10, i64 40, !10, i64 44, !7, i64 48, !10, i64 56, !8, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !7, i64 80, !11, i64 88, !7, i64 96, !7, i64 104, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !11, i64 136, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !8, i64 196, !8, i64 2488, !8, i64 2732, !17, i64 2888, !17, i64 2912, !17, i64 2936, !8, i64 2960, !8, i64 2992, !10, i64 5284, !10, i64 5288, !8, i64 5292, !7, i64 5872, !10, i64 5880, !10, i64 5884, !7, i64 5888, !11, i64 5896, !11, i64 5904, !10, i64 5912, !10, i64 5916, !18, i64 5920, !10, i64 5924, !11, i64 5928}
!17 = !{!"tree_desc_s", !7, i64 0, !10, i64 8, !7, i64 16}
!18 = !{!"short", !8, i64 0}
!19 = !{!7, !7, i64 0}
!20 = !{!6, !7, i64 48}
!21 = !{!6, !10, i64 32}
!22 = !{!16, !7, i64 0}
!23 = !{!16, !10, i64 64}
!24 = !{!16, !10, i64 44}
!25 = !{!6, !11, i64 96}
!26 = !{!16, !7, i64 16}
!27 = !{!16, !10, i64 40}
!28 = !{!8, !8, i64 0}
!29 = !{!16, !7, i64 48}
!30 = !{!16, !10, i64 180}
!31 = !{!16, !10, i64 184}
!32 = !{!33, !10, i64 0}
!33 = !{!"gz_header_s", !10, i64 0, !11, i64 8, !10, i64 16, !10, i64 20, !7, i64 24, !10, i64 32, !10, i64 36, !7, i64 40, !10, i64 48, !7, i64 56, !10, i64 64, !10, i64 68, !10, i64 72}
!34 = !{!33, !10, i64 68}
!35 = !{!33, !7, i64 24}
!36 = !{!33, !7, i64 40}
!37 = !{!33, !7, i64 56}
!38 = !{!33, !11, i64 8}
!39 = !{!33, !10, i64 20}
!40 = !{!33, !10, i64 32}
!41 = !{!16, !10, i64 56}
!42 = !{!16, !10, i64 72}
!43 = !{!16, !10, i64 156}
!44 = !{!16, !11, i64 24}
!45 = distinct !{!45, !46}
!46 = !{!"llvm.loop.mustprogress"}
!47 = distinct !{!47, !46}
!48 = distinct !{!48, !46}
!49 = !{!16, !10, i64 164}
!50 = !{!51, !7, i64 8}
!51 = !{!"config_s", !18, i64 0, !18, i64 2, !18, i64 4, !18, i64 6, !7, i64 8}
!52 = !{!16, !7, i64 104}
!53 = !{!16, !10, i64 116}
!54 = !{!18, !18, i64 0}
!55 = !{!16, !11, i64 136}
!56 = !{!6, !11, i64 16}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass