; LLVM IR from wmcnamara/crynn :: lib/thirdparty/assimp/contrib/zlib (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, i64, i32, ptr, i64, 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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

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

; Function Attrs: nounwind uwtable
define dso_local i32 @deflate(ptr noundef %0, i32 noundef %1) #1 {
  %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 i64, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = 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) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  %20 = call i32 @deflateStateCheck(ptr noundef %19)
  %21 = icmp ne i32 %20, 0
  br i1 %21, label %28, label %22

22:                                               ; preds = %2
  %23 = load i32, ptr %5, align 4, !tbaa !9
  %24 = icmp sgt i32 %23, 5
  br i1 %24, label %28, label %25

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

28:                                               ; preds = %25, %22, %2
  store i32 -2, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

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

37:                                               ; preds = %29
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.z_stream_s, ptr %38, i32 0, i32 1
  %40 = load i32, ptr %39, align 8, !tbaa !15
  %41 = icmp ne i32 %40, 0
  br i1 %41, label %42, label %47

42:                                               ; preds = %37
  %43 = load ptr, ptr %4, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.z_stream_s, ptr %43, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8, !tbaa !16
  %46 = icmp eq ptr %45, null
  br i1 %46, label %55, label %47

47:                                               ; preds = %42, %37
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.internal_state, ptr %48, i32 0, i32 1
  %50 = load i32, ptr %49, align 8, !tbaa !17
  %51 = icmp eq i32 %50, 666
  br i1 %51, label %52, label %59

52:                                               ; preds = %47
  %53 = load i32, ptr %5, align 4, !tbaa !9
  %54 = icmp ne i32 %53, 4
  br i1 %54, label %55, label %59

55:                                               ; preds = %52, %42, %29
  %56 = load ptr, ptr getelementptr inbounds ([10 x ptr], ptr @z_errmsg, i64 0, i64 4), align 16, !tbaa !5
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.z_stream_s, ptr %57, i32 0, i32 6
  store ptr %56, ptr %58, align 8, !tbaa !21
  store i32 -2, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

59:                                               ; preds = %52, %47
  %60 = load ptr, ptr %4, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.z_stream_s, ptr %60, i32 0, i32 4
  %62 = load i32, ptr %61, align 8, !tbaa !22
  %63 = icmp eq i32 %62, 0
  br i1 %63, label %64, label %68

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

68:                                               ; preds = %59
  %69 = load ptr, ptr %7, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.internal_state, ptr %69, i32 0, i32 10
  %71 = load i32, ptr %70, align 4, !tbaa !23
  store i32 %71, ptr %6, align 4, !tbaa !9
  %72 = load i32, ptr %5, align 4, !tbaa !9
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.internal_state, ptr %73, i32 0, i32 10
  store i32 %72, ptr %74, align 4, !tbaa !23
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.internal_state, ptr %75, i32 0, i32 5
  %77 = load i64, ptr %76, align 8, !tbaa !24
  %78 = icmp ne i64 %77, 0
  br i1 %78, label %79, label %89

79:                                               ; preds = %68
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %80)
  %81 = load ptr, ptr %4, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.z_stream_s, ptr %81, i32 0, i32 4
  %83 = load i32, ptr %82, align 8, !tbaa !22
  %84 = icmp eq i32 %83, 0
  br i1 %84, label %85, label %88

85:                                               ; preds = %79
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.internal_state, ptr %86, i32 0, i32 10
  store i32 -1, ptr %87, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

88:                                               ; preds = %79
  br label %118

89:                                               ; preds = %68
  %90 = load ptr, ptr %4, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.z_stream_s, ptr %90, i32 0, i32 1
  %92 = load i32, ptr %91, align 8, !tbaa !15
  %93 = icmp eq i32 %92, 0
  br i1 %93, label %94, label %117

94:                                               ; preds = %89
  %95 = load i32, ptr %5, align 4, !tbaa !9
  %96 = mul nsw i32 %95, 2
  %97 = load i32, ptr %5, align 4, !tbaa !9
  %98 = icmp sgt i32 %97, 4
  %99 = zext i1 %98 to i64
  %100 = select i1 %98, i32 9, i32 0
  %101 = sub nsw i32 %96, %100
  %102 = load i32, ptr %6, align 4, !tbaa !9
  %103 = mul nsw i32 %102, 2
  %104 = load i32, ptr %6, align 4, !tbaa !9
  %105 = icmp sgt i32 %104, 4
  %106 = zext i1 %105 to i64
  %107 = select i1 %105, i32 9, i32 0
  %108 = sub nsw i32 %103, %107
  %109 = icmp sle i32 %101, %108
  br i1 %109, label %110, label %117

110:                                              ; preds = %94
  %111 = load i32, ptr %5, align 4, !tbaa !9
  %112 = icmp ne i32 %111, 4
  br i1 %112, label %113, label %117

113:                                              ; preds = %110
  %114 = load ptr, ptr getelementptr inbounds ([10 x ptr], ptr @z_errmsg, i64 0, i64 7), align 8, !tbaa !5
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.z_stream_s, ptr %115, i32 0, i32 6
  store ptr %114, ptr %116, align 8, !tbaa !21
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

117:                                              ; preds = %110, %94, %89
  br label %118

118:                                              ; preds = %117, %88
  %119 = load ptr, ptr %7, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.internal_state, ptr %119, i32 0, i32 1
  %121 = load i32, ptr %120, align 8, !tbaa !17
  %122 = icmp eq i32 %121, 666
  br i1 %122, label %123, label %132

123:                                              ; preds = %118
  %124 = load ptr, ptr %4, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.z_stream_s, ptr %124, i32 0, i32 1
  %126 = load i32, ptr %125, align 8, !tbaa !15
  %127 = icmp ne i32 %126, 0
  br i1 %127, label %128, label %132

128:                                              ; preds = %123
  %129 = load ptr, ptr getelementptr inbounds ([10 x ptr], ptr @z_errmsg, i64 0, i64 7), align 8, !tbaa !5
  %130 = load ptr, ptr %4, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.z_stream_s, ptr %130, i32 0, i32 6
  store ptr %129, ptr %131, align 8, !tbaa !21
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

132:                                              ; preds = %123, %118
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.internal_state, ptr %133, i32 0, i32 1
  %135 = load i32, ptr %134, align 8, !tbaa !17
  %136 = icmp eq i32 %135, 42
  br i1 %136, label %137, label %225

137:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.internal_state, ptr %138, i32 0, i32 12
  %140 = load i32, ptr %139, align 4, !tbaa !25
  %141 = sub i32 %140, 8
  %142 = shl i32 %141, 4
  %143 = add i32 8, %142
  %144 = shl i32 %143, 8
  store i32 %144, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %145 = load ptr, ptr %7, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.internal_state, ptr %145, i32 0, i32 34
  %147 = load i32, ptr %146, align 8, !tbaa !26
  %148 = icmp sge i32 %147, 2
  br i1 %148, label %154, label %149

149:                                              ; preds = %137
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.internal_state, ptr %150, i32 0, i32 33
  %152 = load i32, ptr %151, align 4, !tbaa !27
  %153 = icmp slt i32 %152, 2
  br i1 %153, label %154, label %155

154:                                              ; preds = %149, %137
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %170

155:                                              ; preds = %149
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.internal_state, ptr %156, i32 0, i32 33
  %158 = load i32, ptr %157, align 4, !tbaa !27
  %159 = icmp slt i32 %158, 6
  br i1 %159, label %160, label %161

160:                                              ; preds = %155
  store i32 1, ptr %10, align 4, !tbaa !9
  br label %169

161:                                              ; preds = %155
  %162 = load ptr, ptr %7, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.internal_state, ptr %162, i32 0, i32 33
  %164 = load i32, ptr %163, align 4, !tbaa !27
  %165 = icmp eq i32 %164, 6
  br i1 %165, label %166, label %167

166:                                              ; preds = %161
  store i32 2, ptr %10, align 4, !tbaa !9
  br label %168

167:                                              ; preds = %161
  store i32 3, ptr %10, align 4, !tbaa !9
  br label %168

168:                                              ; preds = %167, %166
  br label %169

169:                                              ; preds = %168, %160
  br label %170

170:                                              ; preds = %169, %154
  %171 = load i32, ptr %10, align 4, !tbaa !9
  %172 = shl i32 %171, 6
  %173 = load i32, ptr %9, align 4, !tbaa !9
  %174 = or i32 %173, %172
  store i32 %174, ptr %9, align 4, !tbaa !9
  %175 = load ptr, ptr %7, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.internal_state, ptr %175, i32 0, i32 27
  %177 = load i32, ptr %176, align 4, !tbaa !28
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %179, label %182

179:                                              ; preds = %170
  %180 = load i32, ptr %9, align 4, !tbaa !9
  %181 = or i32 %180, 32
  store i32 %181, ptr %9, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %179, %170
  %183 = load i32, ptr %9, align 4, !tbaa !9
  %184 = urem i32 %183, 31
  %185 = sub i32 31, %184
  %186 = load i32, ptr %9, align 4, !tbaa !9
  %187 = add i32 %186, %185
  store i32 %187, ptr %9, align 4, !tbaa !9
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = load i32, ptr %9, align 4, !tbaa !9
  call void @putShortMSB(ptr noundef %188, i32 noundef %189)
  %190 = load ptr, ptr %7, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.internal_state, ptr %190, i32 0, i32 27
  %192 = load i32, ptr %191, align 4, !tbaa !28
  %193 = icmp ne i32 %192, 0
  br i1 %193, label %194, label %207

194:                                              ; preds = %182
  %195 = load ptr, ptr %7, align 8, !tbaa !5
  %196 = load ptr, ptr %4, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.z_stream_s, ptr %196, i32 0, i32 12
  %198 = load i64, ptr %197, align 8, !tbaa !29
  %199 = lshr i64 %198, 16
  %200 = trunc i64 %199 to i32
  call void @putShortMSB(ptr noundef %195, i32 noundef %200)
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.z_stream_s, ptr %202, i32 0, i32 12
  %204 = load i64, ptr %203, align 8, !tbaa !29
  %205 = and i64 %204, 65535
  %206 = trunc i64 %205 to i32
  call void @putShortMSB(ptr noundef %201, i32 noundef %206)
  br label %207

207:                                              ; preds = %194, %182
  %208 = call i64 @adler32(i64 noundef 0, ptr noundef null, i32 noundef 0)
  %209 = load ptr, ptr %4, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.z_stream_s, ptr %209, i32 0, i32 12
  store i64 %208, ptr %210, align 8, !tbaa !29
  %211 = load ptr, ptr %7, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.internal_state, ptr %211, i32 0, i32 1
  store i32 113, ptr %212, align 8, !tbaa !17
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %213)
  %214 = load ptr, ptr %7, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.internal_state, ptr %214, i32 0, i32 5
  %216 = load i64, ptr %215, align 8, !tbaa !24
  %217 = icmp ne i64 %216, 0
  br i1 %217, label %218, label %221

218:                                              ; preds = %207
  %219 = load ptr, ptr %7, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.internal_state, ptr %219, i32 0, i32 10
  store i32 -1, ptr %220, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %222

221:                                              ; preds = %207
  store i32 0, ptr %8, align 4
  br label %222

222:                                              ; preds = %221, %218
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  %223 = load i32, ptr %8, align 4
  switch i32 %223, label %1427 [
    i32 0, label %224
  ]

224:                                              ; preds = %222
  br label %225

225:                                              ; preds = %224, %132
  %226 = load ptr, ptr %7, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.internal_state, ptr %226, i32 0, i32 1
  %228 = load i32, ptr %227, align 8, !tbaa !17
  %229 = icmp eq i32 %228, 57
  br i1 %229, label %230, label %579

230:                                              ; preds = %225
  %231 = call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0)
  %232 = load ptr, ptr %4, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.z_stream_s, ptr %232, i32 0, i32 12
  store i64 %231, ptr %233, align 8, !tbaa !29
  %234 = load ptr, ptr %7, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.internal_state, ptr %234, i32 0, i32 2
  %236 = load ptr, ptr %235, align 8, !tbaa !30
  %237 = load ptr, ptr %7, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.internal_state, ptr %237, i32 0, i32 5
  %239 = load i64, ptr %238, align 8, !tbaa !24
  %240 = add i64 %239, 1
  store i64 %240, ptr %238, align 8, !tbaa !24
  %241 = getelementptr inbounds i8, ptr %236, i64 %239
  store i8 31, ptr %241, align 1, !tbaa !31
  %242 = load ptr, ptr %7, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.internal_state, ptr %242, i32 0, i32 2
  %244 = load ptr, ptr %243, align 8, !tbaa !30
  %245 = load ptr, ptr %7, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.internal_state, ptr %245, i32 0, i32 5
  %247 = load i64, ptr %246, align 8, !tbaa !24
  %248 = add i64 %247, 1
  store i64 %248, ptr %246, align 8, !tbaa !24
  %249 = getelementptr inbounds i8, ptr %244, i64 %247
  store i8 -117, ptr %249, align 1, !tbaa !31
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.internal_state, ptr %250, i32 0, i32 2
  %252 = load ptr, ptr %251, align 8, !tbaa !30
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.internal_state, ptr %253, i32 0, i32 5
  %255 = load i64, ptr %254, align 8, !tbaa !24
  %256 = add i64 %255, 1
  store i64 %256, ptr %254, align 8, !tbaa !24
  %257 = getelementptr inbounds i8, ptr %252, i64 %255
  store i8 8, ptr %257, align 1, !tbaa !31
  %258 = load ptr, ptr %7, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.internal_state, ptr %258, i32 0, i32 7
  %260 = load ptr, ptr %259, align 8, !tbaa !32
  %261 = icmp eq ptr %260, null
  br i1 %261, label %262, label %352

262:                                              ; preds = %230
  %263 = load ptr, ptr %7, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.internal_state, ptr %263, i32 0, i32 2
  %265 = load ptr, ptr %264, align 8, !tbaa !30
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.internal_state, ptr %266, i32 0, i32 5
  %268 = load i64, ptr %267, align 8, !tbaa !24
  %269 = add i64 %268, 1
  store i64 %269, ptr %267, align 8, !tbaa !24
  %270 = getelementptr inbounds i8, ptr %265, i64 %268
  store i8 0, ptr %270, align 1, !tbaa !31
  %271 = load ptr, ptr %7, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.internal_state, ptr %271, i32 0, i32 2
  %273 = load ptr, ptr %272, align 8, !tbaa !30
  %274 = load ptr, ptr %7, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.internal_state, ptr %274, i32 0, i32 5
  %276 = load i64, ptr %275, align 8, !tbaa !24
  %277 = add i64 %276, 1
  store i64 %277, ptr %275, align 8, !tbaa !24
  %278 = getelementptr inbounds i8, ptr %273, i64 %276
  store i8 0, ptr %278, align 1, !tbaa !31
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.internal_state, ptr %279, i32 0, i32 2
  %281 = load ptr, ptr %280, align 8, !tbaa !30
  %282 = load ptr, ptr %7, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.internal_state, ptr %282, i32 0, i32 5
  %284 = load i64, ptr %283, align 8, !tbaa !24
  %285 = add i64 %284, 1
  store i64 %285, ptr %283, align 8, !tbaa !24
  %286 = getelementptr inbounds i8, ptr %281, i64 %284
  store i8 0, ptr %286, align 1, !tbaa !31
  %287 = load ptr, ptr %7, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.internal_state, ptr %287, i32 0, i32 2
  %289 = load ptr, ptr %288, align 8, !tbaa !30
  %290 = load ptr, ptr %7, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.internal_state, ptr %290, i32 0, i32 5
  %292 = load i64, ptr %291, align 8, !tbaa !24
  %293 = add i64 %292, 1
  store i64 %293, ptr %291, align 8, !tbaa !24
  %294 = getelementptr inbounds i8, ptr %289, i64 %292
  store i8 0, ptr %294, align 1, !tbaa !31
  %295 = load ptr, ptr %7, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.internal_state, ptr %295, i32 0, i32 2
  %297 = load ptr, ptr %296, align 8, !tbaa !30
  %298 = load ptr, ptr %7, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.internal_state, ptr %298, i32 0, i32 5
  %300 = load i64, ptr %299, align 8, !tbaa !24
  %301 = add i64 %300, 1
  store i64 %301, ptr %299, align 8, !tbaa !24
  %302 = getelementptr inbounds i8, ptr %297, i64 %300
  store i8 0, ptr %302, align 1, !tbaa !31
  %303 = load ptr, ptr %7, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.internal_state, ptr %303, i32 0, i32 33
  %305 = load i32, ptr %304, align 4, !tbaa !27
  %306 = icmp eq i32 %305, 9
  br i1 %306, label %307, label %308

307:                                              ; preds = %262
  br label %322

308:                                              ; preds = %262
  %309 = load ptr, ptr %7, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.internal_state, ptr %309, i32 0, i32 34
  %311 = load i32, ptr %310, align 8, !tbaa !26
  %312 = icmp sge i32 %311, 2
  br i1 %312, label %318, label %313

313:                                              ; preds = %308
  %314 = load ptr, ptr %7, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.internal_state, ptr %314, i32 0, i32 33
  %316 = load i32, ptr %315, align 4, !tbaa !27
  %317 = icmp slt i32 %316, 2
  br label %318

318:                                              ; preds = %313, %308
  %319 = phi i1 [ true, %308 ], [ %317, %313 ]
  %320 = zext i1 %319 to i64
  %321 = select i1 %319, i32 4, i32 0
  br label %322

322:                                              ; preds = %318, %307
  %323 = phi i32 [ 2, %307 ], [ %321, %318 ]
  %324 = trunc i32 %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 !30
  %328 = load ptr, ptr %7, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.internal_state, ptr %328, i32 0, i32 5
  %330 = load i64, ptr %329, align 8, !tbaa !24
  %331 = add i64 %330, 1
  store i64 %331, ptr %329, align 8, !tbaa !24
  %332 = getelementptr inbounds i8, ptr %327, i64 %330
  store i8 %324, ptr %332, align 1, !tbaa !31
  %333 = load ptr, ptr %7, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.internal_state, ptr %333, i32 0, i32 2
  %335 = load ptr, ptr %334, align 8, !tbaa !30
  %336 = load ptr, ptr %7, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.internal_state, ptr %336, i32 0, i32 5
  %338 = load i64, ptr %337, align 8, !tbaa !24
  %339 = add i64 %338, 1
  store i64 %339, ptr %337, align 8, !tbaa !24
  %340 = getelementptr inbounds i8, ptr %335, i64 %338
  store i8 3, ptr %340, align 1, !tbaa !31
  %341 = load ptr, ptr %7, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.internal_state, ptr %341, i32 0, i32 1
  store i32 113, ptr %342, align 8, !tbaa !17
  %343 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %343)
  %344 = load ptr, ptr %7, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.internal_state, ptr %344, i32 0, i32 5
  %346 = load i64, ptr %345, align 8, !tbaa !24
  %347 = icmp ne i64 %346, 0
  br i1 %347, label %348, label %351

348:                                              ; preds = %322
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.internal_state, ptr %349, i32 0, i32 10
  store i32 -1, ptr %350, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

351:                                              ; preds = %322
  br label %578

352:                                              ; preds = %230
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.internal_state, ptr %353, i32 0, i32 7
  %355 = load ptr, ptr %354, align 8, !tbaa !32
  %356 = getelementptr inbounds %struct.gz_header_s, ptr %355, i32 0, i32 0
  %357 = load i32, ptr %356, align 8, !tbaa !33
  %358 = icmp ne i32 %357, 0
  %359 = zext i1 %358 to i64
  %360 = select i1 %358, i32 1, i32 0
  %361 = load ptr, ptr %7, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.internal_state, ptr %361, i32 0, i32 7
  %363 = load ptr, ptr %362, align 8, !tbaa !32
  %364 = getelementptr inbounds %struct.gz_header_s, ptr %363, i32 0, i32 11
  %365 = load i32, ptr %364, align 4, !tbaa !35
  %366 = icmp ne i32 %365, 0
  %367 = zext i1 %366 to i64
  %368 = select i1 %366, i32 2, i32 0
  %369 = add nsw i32 %360, %368
  %370 = load ptr, ptr %7, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.internal_state, ptr %370, i32 0, i32 7
  %372 = load ptr, ptr %371, align 8, !tbaa !32
  %373 = getelementptr inbounds %struct.gz_header_s, ptr %372, i32 0, i32 4
  %374 = load ptr, ptr %373, align 8, !tbaa !36
  %375 = icmp eq ptr %374, null
  %376 = zext i1 %375 to i64
  %377 = select i1 %375, i32 0, i32 4
  %378 = add nsw i32 %369, %377
  %379 = load ptr, ptr %7, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.internal_state, ptr %379, i32 0, i32 7
  %381 = load ptr, ptr %380, align 8, !tbaa !32
  %382 = getelementptr inbounds %struct.gz_header_s, ptr %381, i32 0, i32 7
  %383 = load ptr, ptr %382, align 8, !tbaa !37
  %384 = icmp eq ptr %383, null
  %385 = zext i1 %384 to i64
  %386 = select i1 %384, i32 0, i32 8
  %387 = add nsw i32 %378, %386
  %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 !32
  %391 = getelementptr inbounds %struct.gz_header_s, ptr %390, i32 0, i32 9
  %392 = load ptr, ptr %391, align 8, !tbaa !38
  %393 = icmp eq ptr %392, null
  %394 = zext i1 %393 to i64
  %395 = select i1 %393, i32 0, i32 16
  %396 = add nsw i32 %387, %395
  %397 = trunc i32 %396 to i8
  %398 = load ptr, ptr %7, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.internal_state, ptr %398, i32 0, i32 2
  %400 = load ptr, ptr %399, align 8, !tbaa !30
  %401 = load ptr, ptr %7, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.internal_state, ptr %401, i32 0, i32 5
  %403 = load i64, ptr %402, align 8, !tbaa !24
  %404 = add i64 %403, 1
  store i64 %404, ptr %402, align 8, !tbaa !24
  %405 = getelementptr inbounds i8, ptr %400, i64 %403
  store i8 %397, ptr %405, align 1, !tbaa !31
  %406 = load ptr, ptr %7, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.internal_state, ptr %406, i32 0, i32 7
  %408 = load ptr, ptr %407, align 8, !tbaa !32
  %409 = getelementptr inbounds %struct.gz_header_s, ptr %408, i32 0, i32 1
  %410 = load i64, ptr %409, align 8, !tbaa !39
  %411 = and i64 %410, 255
  %412 = trunc i64 %411 to i8
  %413 = load ptr, ptr %7, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.internal_state, ptr %413, i32 0, i32 2
  %415 = load ptr, ptr %414, align 8, !tbaa !30
  %416 = load ptr, ptr %7, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.internal_state, ptr %416, i32 0, i32 5
  %418 = load i64, ptr %417, align 8, !tbaa !24
  %419 = add i64 %418, 1
  store i64 %419, ptr %417, align 8, !tbaa !24
  %420 = getelementptr inbounds i8, ptr %415, i64 %418
  store i8 %412, ptr %420, align 1, !tbaa !31
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.internal_state, ptr %421, i32 0, i32 7
  %423 = load ptr, ptr %422, align 8, !tbaa !32
  %424 = getelementptr inbounds %struct.gz_header_s, ptr %423, i32 0, i32 1
  %425 = load i64, ptr %424, align 8, !tbaa !39
  %426 = lshr i64 %425, 8
  %427 = and i64 %426, 255
  %428 = trunc i64 %427 to i8
  %429 = load ptr, ptr %7, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.internal_state, ptr %429, i32 0, i32 2
  %431 = load ptr, ptr %430, align 8, !tbaa !30
  %432 = load ptr, ptr %7, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.internal_state, ptr %432, i32 0, i32 5
  %434 = load i64, ptr %433, align 8, !tbaa !24
  %435 = add i64 %434, 1
  store i64 %435, ptr %433, align 8, !tbaa !24
  %436 = getelementptr inbounds i8, ptr %431, i64 %434
  store i8 %428, ptr %436, align 1, !tbaa !31
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.internal_state, ptr %437, i32 0, i32 7
  %439 = load ptr, ptr %438, align 8, !tbaa !32
  %440 = getelementptr inbounds %struct.gz_header_s, ptr %439, i32 0, i32 1
  %441 = load i64, ptr %440, align 8, !tbaa !39
  %442 = lshr i64 %441, 16
  %443 = and i64 %442, 255
  %444 = trunc i64 %443 to i8
  %445 = load ptr, ptr %7, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.internal_state, ptr %445, i32 0, i32 2
  %447 = load ptr, ptr %446, align 8, !tbaa !30
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.internal_state, ptr %448, i32 0, i32 5
  %450 = load i64, ptr %449, align 8, !tbaa !24
  %451 = add i64 %450, 1
  store i64 %451, ptr %449, align 8, !tbaa !24
  %452 = getelementptr inbounds i8, ptr %447, i64 %450
  store i8 %444, ptr %452, align 1, !tbaa !31
  %453 = load ptr, ptr %7, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.internal_state, ptr %453, i32 0, i32 7
  %455 = load ptr, ptr %454, align 8, !tbaa !32
  %456 = getelementptr inbounds %struct.gz_header_s, ptr %455, i32 0, i32 1
  %457 = load i64, ptr %456, align 8, !tbaa !39
  %458 = lshr i64 %457, 24
  %459 = and i64 %458, 255
  %460 = trunc i64 %459 to i8
  %461 = load ptr, ptr %7, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.internal_state, ptr %461, i32 0, i32 2
  %463 = load ptr, ptr %462, align 8, !tbaa !30
  %464 = load ptr, ptr %7, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.internal_state, ptr %464, i32 0, i32 5
  %466 = load i64, ptr %465, align 8, !tbaa !24
  %467 = add i64 %466, 1
  store i64 %467, ptr %465, align 8, !tbaa !24
  %468 = getelementptr inbounds i8, ptr %463, i64 %466
  store i8 %460, ptr %468, align 1, !tbaa !31
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.internal_state, ptr %469, i32 0, i32 33
  %471 = load i32, ptr %470, align 4, !tbaa !27
  %472 = icmp eq i32 %471, 9
  br i1 %472, label %473, label %474

473:                                              ; preds = %352
  br label %488

474:                                              ; preds = %352
  %475 = load ptr, ptr %7, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.internal_state, ptr %475, i32 0, i32 34
  %477 = load i32, ptr %476, align 8, !tbaa !26
  %478 = icmp sge i32 %477, 2
  br i1 %478, label %484, label %479

479:                                              ; preds = %474
  %480 = load ptr, ptr %7, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.internal_state, ptr %480, i32 0, i32 33
  %482 = load i32, ptr %481, align 4, !tbaa !27
  %483 = icmp slt i32 %482, 2
  br label %484

484:                                              ; preds = %479, %474
  %485 = phi i1 [ true, %474 ], [ %483, %479 ]
  %486 = zext i1 %485 to i64
  %487 = select i1 %485, i32 4, i32 0
  br label %488

488:                                              ; preds = %484, %473
  %489 = phi i32 [ 2, %473 ], [ %487, %484 ]
  %490 = trunc i32 %489 to i8
  %491 = load ptr, ptr %7, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.internal_state, ptr %491, i32 0, i32 2
  %493 = load ptr, ptr %492, align 8, !tbaa !30
  %494 = load ptr, ptr %7, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.internal_state, ptr %494, i32 0, i32 5
  %496 = load i64, ptr %495, align 8, !tbaa !24
  %497 = add i64 %496, 1
  store i64 %497, ptr %495, align 8, !tbaa !24
  %498 = getelementptr inbounds i8, ptr %493, i64 %496
  store i8 %490, ptr %498, align 1, !tbaa !31
  %499 = load ptr, ptr %7, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.internal_state, ptr %499, i32 0, i32 7
  %501 = load ptr, ptr %500, align 8, !tbaa !32
  %502 = getelementptr inbounds %struct.gz_header_s, ptr %501, i32 0, i32 3
  %503 = load i32, ptr %502, align 4, !tbaa !40
  %504 = and i32 %503, 255
  %505 = trunc i32 %504 to i8
  %506 = load ptr, ptr %7, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.internal_state, ptr %506, i32 0, i32 2
  %508 = load ptr, ptr %507, align 8, !tbaa !30
  %509 = load ptr, ptr %7, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.internal_state, ptr %509, i32 0, i32 5
  %511 = load i64, ptr %510, align 8, !tbaa !24
  %512 = add i64 %511, 1
  store i64 %512, ptr %510, align 8, !tbaa !24
  %513 = getelementptr inbounds i8, ptr %508, i64 %511
  store i8 %505, ptr %513, align 1, !tbaa !31
  %514 = load ptr, ptr %7, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.internal_state, ptr %514, i32 0, i32 7
  %516 = load ptr, ptr %515, align 8, !tbaa !32
  %517 = getelementptr inbounds %struct.gz_header_s, ptr %516, i32 0, i32 4
  %518 = load ptr, ptr %517, align 8, !tbaa !36
  %519 = icmp ne ptr %518, null
  br i1 %519, label %520, label %552

520:                                              ; preds = %488
  %521 = load ptr, ptr %7, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.internal_state, ptr %521, i32 0, i32 7
  %523 = load ptr, ptr %522, align 8, !tbaa !32
  %524 = getelementptr inbounds %struct.gz_header_s, ptr %523, i32 0, i32 5
  %525 = load i32, ptr %524, align 8, !tbaa !41
  %526 = and i32 %525, 255
  %527 = trunc i32 %526 to i8
  %528 = load ptr, ptr %7, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.internal_state, ptr %528, i32 0, i32 2
  %530 = load ptr, ptr %529, align 8, !tbaa !30
  %531 = load ptr, ptr %7, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.internal_state, ptr %531, i32 0, i32 5
  %533 = load i64, ptr %532, align 8, !tbaa !24
  %534 = add i64 %533, 1
  store i64 %534, ptr %532, align 8, !tbaa !24
  %535 = getelementptr inbounds i8, ptr %530, i64 %533
  store i8 %527, ptr %535, align 1, !tbaa !31
  %536 = load ptr, ptr %7, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.internal_state, ptr %536, i32 0, i32 7
  %538 = load ptr, ptr %537, align 8, !tbaa !32
  %539 = getelementptr inbounds %struct.gz_header_s, ptr %538, i32 0, i32 5
  %540 = load i32, ptr %539, align 8, !tbaa !41
  %541 = lshr i32 %540, 8
  %542 = and i32 %541, 255
  %543 = trunc i32 %542 to i8
  %544 = load ptr, ptr %7, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.internal_state, ptr %544, i32 0, i32 2
  %546 = load ptr, ptr %545, align 8, !tbaa !30
  %547 = load ptr, ptr %7, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.internal_state, ptr %547, i32 0, i32 5
  %549 = load i64, ptr %548, align 8, !tbaa !24
  %550 = add i64 %549, 1
  store i64 %550, ptr %548, align 8, !tbaa !24
  %551 = getelementptr inbounds i8, ptr %546, i64 %549
  store i8 %543, ptr %551, align 1, !tbaa !31
  br label %552

552:                                              ; preds = %520, %488
  %553 = load ptr, ptr %7, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.internal_state, ptr %553, i32 0, i32 7
  %555 = load ptr, ptr %554, align 8, !tbaa !32
  %556 = getelementptr inbounds %struct.gz_header_s, ptr %555, i32 0, i32 11
  %557 = load i32, ptr %556, align 4, !tbaa !35
  %558 = icmp ne i32 %557, 0
  br i1 %558, label %559, label %573

559:                                              ; preds = %552
  %560 = load ptr, ptr %4, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.z_stream_s, ptr %560, i32 0, i32 12
  %562 = load i64, ptr %561, align 8, !tbaa !29
  %563 = load ptr, ptr %7, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.internal_state, ptr %563, i32 0, i32 2
  %565 = load ptr, ptr %564, align 8, !tbaa !30
  %566 = load ptr, ptr %7, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.internal_state, ptr %566, i32 0, i32 5
  %568 = load i64, ptr %567, align 8, !tbaa !24
  %569 = trunc i64 %568 to i32
  %570 = call i64 @crc32(i64 noundef %562, ptr noundef %565, i32 noundef %569)
  %571 = load ptr, ptr %4, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.z_stream_s, ptr %571, i32 0, i32 12
  store i64 %570, ptr %572, align 8, !tbaa !29
  br label %573

573:                                              ; preds = %559, %552
  %574 = load ptr, ptr %7, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.internal_state, ptr %574, i32 0, i32 8
  store i64 0, ptr %575, align 8, !tbaa !42
  %576 = load ptr, ptr %7, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.internal_state, ptr %576, i32 0, i32 1
  store i32 69, ptr %577, align 8, !tbaa !17
  br label %578

578:                                              ; preds = %573, %351
  br label %579

579:                                              ; preds = %578, %225
  %580 = load ptr, ptr %7, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.internal_state, ptr %580, i32 0, i32 1
  %582 = load i32, ptr %581, align 8, !tbaa !17
  %583 = icmp eq i32 %582, 69
  br i1 %583, label %584, label %772

584:                                              ; preds = %579
  %585 = load ptr, ptr %7, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.internal_state, ptr %585, i32 0, i32 7
  %587 = load ptr, ptr %586, align 8, !tbaa !32
  %588 = getelementptr inbounds %struct.gz_header_s, ptr %587, i32 0, i32 4
  %589 = load ptr, ptr %588, align 8, !tbaa !36
  %590 = icmp ne ptr %589, null
  br i1 %590, label %591, label %769

591:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %592 = load ptr, ptr %7, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.internal_state, ptr %592, i32 0, i32 5
  %594 = load i64, ptr %593, align 8, !tbaa !24
  store i64 %594, ptr %11, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %595 = load ptr, ptr %7, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.internal_state, ptr %595, i32 0, i32 7
  %597 = load ptr, ptr %596, align 8, !tbaa !32
  %598 = getelementptr inbounds %struct.gz_header_s, ptr %597, i32 0, i32 5
  %599 = load i32, ptr %598, align 8, !tbaa !41
  %600 = and i32 %599, 65535
  %601 = zext i32 %600 to i64
  %602 = load ptr, ptr %7, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.internal_state, ptr %602, i32 0, i32 8
  %604 = load i64, ptr %603, align 8, !tbaa !42
  %605 = sub i64 %601, %604
  %606 = trunc i64 %605 to i32
  store i32 %606, ptr %12, align 4, !tbaa !9
  br label %607

607:                                              ; preds = %704, %591
  %608 = load ptr, ptr %7, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.internal_state, ptr %608, i32 0, i32 5
  %610 = load i64, ptr %609, align 8, !tbaa !24
  %611 = load i32, ptr %12, align 4, !tbaa !9
  %612 = zext i32 %611 to i64
  %613 = add i64 %610, %612
  %614 = load ptr, ptr %7, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.internal_state, ptr %614, i32 0, i32 3
  %616 = load i64, ptr %615, align 8, !tbaa !44
  %617 = icmp ugt i64 %613, %616
  br i1 %617, label %618, label %705

618:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %619 = load ptr, ptr %7, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.internal_state, ptr %619, i32 0, i32 3
  %621 = load i64, ptr %620, align 8, !tbaa !44
  %622 = load ptr, ptr %7, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.internal_state, ptr %622, i32 0, i32 5
  %624 = load i64, ptr %623, align 8, !tbaa !24
  %625 = sub i64 %621, %624
  %626 = trunc i64 %625 to i32
  store i32 %626, ptr %13, align 4, !tbaa !9
  %627 = load ptr, ptr %7, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.internal_state, ptr %627, i32 0, i32 2
  %629 = load ptr, ptr %628, align 8, !tbaa !30
  %630 = load ptr, ptr %7, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.internal_state, ptr %630, i32 0, i32 5
  %632 = load i64, ptr %631, align 8, !tbaa !24
  %633 = getelementptr inbounds i8, ptr %629, i64 %632
  %634 = load ptr, ptr %7, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.internal_state, ptr %634, i32 0, i32 7
  %636 = load ptr, ptr %635, align 8, !tbaa !32
  %637 = getelementptr inbounds %struct.gz_header_s, ptr %636, i32 0, i32 4
  %638 = load ptr, ptr %637, align 8, !tbaa !36
  %639 = load ptr, ptr %7, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.internal_state, ptr %639, i32 0, i32 8
  %641 = load i64, ptr %640, align 8, !tbaa !42
  %642 = getelementptr inbounds i8, ptr %638, i64 %641
  %643 = load i32, ptr %13, align 4, !tbaa !9
  %644 = zext i32 %643 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %633, ptr align 1 %642, i64 %644, i1 false)
  %645 = load ptr, ptr %7, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.internal_state, ptr %645, i32 0, i32 3
  %647 = load i64, ptr %646, align 8, !tbaa !44
  %648 = load ptr, ptr %7, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.internal_state, ptr %648, i32 0, i32 5
  store i64 %647, ptr %649, align 8, !tbaa !24
  br label %650

650:                                              ; preds = %618
  %651 = load ptr, ptr %7, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.internal_state, ptr %651, i32 0, i32 7
  %653 = load ptr, ptr %652, align 8, !tbaa !32
  %654 = getelementptr inbounds %struct.gz_header_s, ptr %653, i32 0, i32 11
  %655 = load i32, ptr %654, align 4, !tbaa !35
  %656 = icmp ne i32 %655, 0
  br i1 %656, label %657, label %681

657:                                              ; preds = %650
  %658 = load ptr, ptr %7, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.internal_state, ptr %658, i32 0, i32 5
  %660 = load i64, ptr %659, align 8, !tbaa !24
  %661 = load i64, ptr %11, align 8, !tbaa !43
  %662 = icmp ugt i64 %660, %661
  br i1 %662, label %663, label %681

663:                                              ; preds = %657
  %664 = load ptr, ptr %4, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.z_stream_s, ptr %664, i32 0, i32 12
  %666 = load i64, ptr %665, align 8, !tbaa !29
  %667 = load ptr, ptr %7, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.internal_state, ptr %667, i32 0, i32 2
  %669 = load ptr, ptr %668, align 8, !tbaa !30
  %670 = load i64, ptr %11, align 8, !tbaa !43
  %671 = getelementptr inbounds i8, ptr %669, i64 %670
  %672 = load ptr, ptr %7, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.internal_state, ptr %672, i32 0, i32 5
  %674 = load i64, ptr %673, align 8, !tbaa !24
  %675 = load i64, ptr %11, align 8, !tbaa !43
  %676 = sub i64 %674, %675
  %677 = trunc i64 %676 to i32
  %678 = call i64 @crc32(i64 noundef %666, ptr noundef %671, i32 noundef %677)
  %679 = load ptr, ptr %4, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.z_stream_s, ptr %679, i32 0, i32 12
  store i64 %678, ptr %680, align 8, !tbaa !29
  br label %681

681:                                              ; preds = %663, %657, %650
  br label %682

682:                                              ; preds = %681
  br label %683

683:                                              ; preds = %682
  %684 = load i32, ptr %13, align 4, !tbaa !9
  %685 = zext i32 %684 to i64
  %686 = load ptr, ptr %7, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.internal_state, ptr %686, i32 0, i32 8
  %688 = load i64, ptr %687, align 8, !tbaa !42
  %689 = add i64 %688, %685
  store i64 %689, ptr %687, align 8, !tbaa !42
  %690 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %690)
  %691 = load ptr, ptr %7, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.internal_state, ptr %691, i32 0, i32 5
  %693 = load i64, ptr %692, align 8, !tbaa !24
  %694 = icmp ne i64 %693, 0
  br i1 %694, label %695, label %698

695:                                              ; preds = %683
  %696 = load ptr, ptr %7, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.internal_state, ptr %696, i32 0, i32 10
  store i32 -1, ptr %697, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %702

698:                                              ; preds = %683
  store i64 0, ptr %11, align 8, !tbaa !43
  %699 = load i32, ptr %13, align 4, !tbaa !9
  %700 = load i32, ptr %12, align 4, !tbaa !9
  %701 = sub i32 %700, %699
  store i32 %701, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %8, align 4
  br label %702

702:                                              ; preds = %698, %695
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  %703 = load i32, ptr %8, align 4
  switch i32 %703, label %766 [
    i32 0, label %704
  ]

704:                                              ; preds = %702
  br label %607, !llvm.loop !45

705:                                              ; preds = %607
  %706 = load ptr, ptr %7, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.internal_state, ptr %706, i32 0, i32 2
  %708 = load ptr, ptr %707, align 8, !tbaa !30
  %709 = load ptr, ptr %7, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.internal_state, ptr %709, i32 0, i32 5
  %711 = load i64, ptr %710, align 8, !tbaa !24
  %712 = getelementptr inbounds i8, ptr %708, i64 %711
  %713 = load ptr, ptr %7, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.internal_state, ptr %713, i32 0, i32 7
  %715 = load ptr, ptr %714, align 8, !tbaa !32
  %716 = getelementptr inbounds %struct.gz_header_s, ptr %715, i32 0, i32 4
  %717 = load ptr, ptr %716, align 8, !tbaa !36
  %718 = load ptr, ptr %7, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.internal_state, ptr %718, i32 0, i32 8
  %720 = load i64, ptr %719, align 8, !tbaa !42
  %721 = getelementptr inbounds i8, ptr %717, i64 %720
  %722 = load i32, ptr %12, align 4, !tbaa !9
  %723 = zext i32 %722 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %712, ptr align 1 %721, i64 %723, i1 false)
  %724 = load i32, ptr %12, align 4, !tbaa !9
  %725 = zext i32 %724 to i64
  %726 = load ptr, ptr %7, align 8, !tbaa !5
  %727 = getelementptr inbounds %struct.internal_state, ptr %726, i32 0, i32 5
  %728 = load i64, ptr %727, align 8, !tbaa !24
  %729 = add i64 %728, %725
  store i64 %729, ptr %727, align 8, !tbaa !24
  br label %730

730:                                              ; preds = %705
  %731 = load ptr, ptr %7, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.internal_state, ptr %731, i32 0, i32 7
  %733 = load ptr, ptr %732, align 8, !tbaa !32
  %734 = getelementptr inbounds %struct.gz_header_s, ptr %733, i32 0, i32 11
  %735 = load i32, ptr %734, align 4, !tbaa !35
  %736 = icmp ne i32 %735, 0
  br i1 %736, label %737, label %761

737:                                              ; preds = %730
  %738 = load ptr, ptr %7, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.internal_state, ptr %738, i32 0, i32 5
  %740 = load i64, ptr %739, align 8, !tbaa !24
  %741 = load i64, ptr %11, align 8, !tbaa !43
  %742 = icmp ugt i64 %740, %741
  br i1 %742, label %743, label %761

743:                                              ; preds = %737
  %744 = load ptr, ptr %4, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.z_stream_s, ptr %744, i32 0, i32 12
  %746 = load i64, ptr %745, align 8, !tbaa !29
  %747 = load ptr, ptr %7, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.internal_state, ptr %747, i32 0, i32 2
  %749 = load ptr, ptr %748, align 8, !tbaa !30
  %750 = load i64, ptr %11, align 8, !tbaa !43
  %751 = getelementptr inbounds i8, ptr %749, i64 %750
  %752 = load ptr, ptr %7, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.internal_state, ptr %752, i32 0, i32 5
  %754 = load i64, ptr %753, align 8, !tbaa !24
  %755 = load i64, ptr %11, align 8, !tbaa !43
  %756 = sub i64 %754, %755
  %757 = trunc i64 %756 to i32
  %758 = call i64 @crc32(i64 noundef %746, ptr noundef %751, i32 noundef %757)
  %759 = load ptr, ptr %4, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.z_stream_s, ptr %759, i32 0, i32 12
  store i64 %758, ptr %760, align 8, !tbaa !29
  br label %761

761:                                              ; preds = %743, %737, %730
  br label %762

762:                                              ; preds = %761
  br label %763

763:                                              ; preds = %762
  %764 = load ptr, ptr %7, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.internal_state, ptr %764, i32 0, i32 8
  store i64 0, ptr %765, align 8, !tbaa !42
  store i32 0, ptr %8, align 4
  br label %766

766:                                              ; preds = %763, %702
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  %767 = load i32, ptr %8, align 4
  switch i32 %767, label %1427 [
    i32 0, label %768
  ]

768:                                              ; preds = %766
  br label %769

769:                                              ; preds = %768, %584
  %770 = load ptr, ptr %7, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.internal_state, ptr %770, i32 0, i32 1
  store i32 73, ptr %771, align 8, !tbaa !17
  br label %772

772:                                              ; preds = %769, %579
  %773 = load ptr, ptr %7, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.internal_state, ptr %773, i32 0, i32 1
  %775 = load i32, ptr %774, align 8, !tbaa !17
  %776 = icmp eq i32 %775, 73
  br i1 %776, label %777, label %909

777:                                              ; preds = %772
  %778 = load ptr, ptr %7, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.internal_state, ptr %778, i32 0, i32 7
  %780 = load ptr, ptr %779, align 8, !tbaa !32
  %781 = getelementptr inbounds %struct.gz_header_s, ptr %780, i32 0, i32 7
  %782 = load ptr, ptr %781, align 8, !tbaa !37
  %783 = icmp ne ptr %782, null
  br i1 %783, label %784, label %906

784:                                              ; preds = %777
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %785 = load ptr, ptr %7, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.internal_state, ptr %785, i32 0, i32 5
  %787 = load i64, ptr %786, align 8, !tbaa !24
  store i64 %787, ptr %14, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  br label %788

788:                                              ; preds = %863, %784
  %789 = load ptr, ptr %7, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.internal_state, ptr %789, i32 0, i32 5
  %791 = load i64, ptr %790, align 8, !tbaa !24
  %792 = load ptr, ptr %7, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.internal_state, ptr %792, i32 0, i32 3
  %794 = load i64, ptr %793, align 8, !tbaa !44
  %795 = icmp eq i64 %791, %794
  br i1 %795, label %796, label %840

796:                                              ; preds = %788
  br label %797

797:                                              ; preds = %796
  %798 = load ptr, ptr %7, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.internal_state, ptr %798, i32 0, i32 7
  %800 = load ptr, ptr %799, align 8, !tbaa !32
  %801 = getelementptr inbounds %struct.gz_header_s, ptr %800, i32 0, i32 11
  %802 = load i32, ptr %801, align 4, !tbaa !35
  %803 = icmp ne i32 %802, 0
  br i1 %803, label %804, label %828

804:                                              ; preds = %797
  %805 = load ptr, ptr %7, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.internal_state, ptr %805, i32 0, i32 5
  %807 = load i64, ptr %806, align 8, !tbaa !24
  %808 = load i64, ptr %14, align 8, !tbaa !43
  %809 = icmp ugt i64 %807, %808
  br i1 %809, label %810, label %828

810:                                              ; preds = %804
  %811 = load ptr, ptr %4, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.z_stream_s, ptr %811, i32 0, i32 12
  %813 = load i64, ptr %812, align 8, !tbaa !29
  %814 = load ptr, ptr %7, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.internal_state, ptr %814, i32 0, i32 2
  %816 = load ptr, ptr %815, align 8, !tbaa !30
  %817 = load i64, ptr %14, align 8, !tbaa !43
  %818 = getelementptr inbounds i8, ptr %816, i64 %817
  %819 = load ptr, ptr %7, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.internal_state, ptr %819, i32 0, i32 5
  %821 = load i64, ptr %820, align 8, !tbaa !24
  %822 = load i64, ptr %14, align 8, !tbaa !43
  %823 = sub i64 %821, %822
  %824 = trunc i64 %823 to i32
  %825 = call i64 @crc32(i64 noundef %813, ptr noundef %818, i32 noundef %824)
  %826 = load ptr, ptr %4, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.z_stream_s, ptr %826, i32 0, i32 12
  store i64 %825, ptr %827, align 8, !tbaa !29
  br label %828

828:                                              ; preds = %810, %804, %797
  br label %829

829:                                              ; preds = %828
  br label %830

830:                                              ; preds = %829
  %831 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %831)
  %832 = load ptr, ptr %7, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.internal_state, ptr %832, i32 0, i32 5
  %834 = load i64, ptr %833, align 8, !tbaa !24
  %835 = icmp ne i64 %834, 0
  br i1 %835, label %836, label %839

836:                                              ; preds = %830
  %837 = load ptr, ptr %7, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.internal_state, ptr %837, i32 0, i32 10
  store i32 -1, ptr %838, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %903

839:                                              ; preds = %830
  store i64 0, ptr %14, align 8, !tbaa !43
  br label %840

840:                                              ; preds = %839, %788
  %841 = load ptr, ptr %7, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.internal_state, ptr %841, i32 0, i32 7
  %843 = load ptr, ptr %842, align 8, !tbaa !32
  %844 = getelementptr inbounds %struct.gz_header_s, ptr %843, i32 0, i32 7
  %845 = load ptr, ptr %844, align 8, !tbaa !37
  %846 = load ptr, ptr %7, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.internal_state, ptr %846, i32 0, i32 8
  %848 = load i64, ptr %847, align 8, !tbaa !42
  %849 = add i64 %848, 1
  store i64 %849, ptr %847, align 8, !tbaa !42
  %850 = getelementptr inbounds i8, ptr %845, i64 %848
  %851 = load i8, ptr %850, align 1, !tbaa !31
  %852 = zext i8 %851 to i32
  store i32 %852, ptr %15, align 4, !tbaa !9
  %853 = load i32, ptr %15, align 4, !tbaa !9
  %854 = trunc i32 %853 to i8
  %855 = load ptr, ptr %7, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.internal_state, ptr %855, i32 0, i32 2
  %857 = load ptr, ptr %856, align 8, !tbaa !30
  %858 = load ptr, ptr %7, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.internal_state, ptr %858, i32 0, i32 5
  %860 = load i64, ptr %859, align 8, !tbaa !24
  %861 = add i64 %860, 1
  store i64 %861, ptr %859, align 8, !tbaa !24
  %862 = getelementptr inbounds i8, ptr %857, i64 %860
  store i8 %854, ptr %862, align 1, !tbaa !31
  br label %863

863:                                              ; preds = %840
  %864 = load i32, ptr %15, align 4, !tbaa !9
  %865 = icmp ne i32 %864, 0
  br i1 %865, label %788, label %866, !llvm.loop !47

866:                                              ; preds = %863
  br label %867

867:                                              ; preds = %866
  %868 = load ptr, ptr %7, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.internal_state, ptr %868, i32 0, i32 7
  %870 = load ptr, ptr %869, align 8, !tbaa !32
  %871 = getelementptr inbounds %struct.gz_header_s, ptr %870, i32 0, i32 11
  %872 = load i32, ptr %871, align 4, !tbaa !35
  %873 = icmp ne i32 %872, 0
  br i1 %873, label %874, label %898

874:                                              ; preds = %867
  %875 = load ptr, ptr %7, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.internal_state, ptr %875, i32 0, i32 5
  %877 = load i64, ptr %876, align 8, !tbaa !24
  %878 = load i64, ptr %14, align 8, !tbaa !43
  %879 = icmp ugt i64 %877, %878
  br i1 %879, label %880, label %898

880:                                              ; preds = %874
  %881 = load ptr, ptr %4, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.z_stream_s, ptr %881, i32 0, i32 12
  %883 = load i64, ptr %882, align 8, !tbaa !29
  %884 = load ptr, ptr %7, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.internal_state, ptr %884, i32 0, i32 2
  %886 = load ptr, ptr %885, align 8, !tbaa !30
  %887 = load i64, ptr %14, align 8, !tbaa !43
  %888 = getelementptr inbounds i8, ptr %886, i64 %887
  %889 = load ptr, ptr %7, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.internal_state, ptr %889, i32 0, i32 5
  %891 = load i64, ptr %890, align 8, !tbaa !24
  %892 = load i64, ptr %14, align 8, !tbaa !43
  %893 = sub i64 %891, %892
  %894 = trunc i64 %893 to i32
  %895 = call i64 @crc32(i64 noundef %883, ptr noundef %888, i32 noundef %894)
  %896 = load ptr, ptr %4, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.z_stream_s, ptr %896, i32 0, i32 12
  store i64 %895, ptr %897, align 8, !tbaa !29
  br label %898

898:                                              ; preds = %880, %874, %867
  br label %899

899:                                              ; preds = %898
  br label %900

900:                                              ; preds = %899
  %901 = load ptr, ptr %7, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.internal_state, ptr %901, i32 0, i32 8
  store i64 0, ptr %902, align 8, !tbaa !42
  store i32 0, ptr %8, align 4
  br label %903

903:                                              ; preds = %900, %836
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  %904 = load i32, ptr %8, align 4
  switch i32 %904, label %1427 [
    i32 0, label %905
  ]

905:                                              ; preds = %903
  br label %906

906:                                              ; preds = %905, %777
  %907 = load ptr, ptr %7, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.internal_state, ptr %907, i32 0, i32 1
  store i32 91, ptr %908, align 8, !tbaa !17
  br label %909

909:                                              ; preds = %906, %772
  %910 = load ptr, ptr %7, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.internal_state, ptr %910, i32 0, i32 1
  %912 = load i32, ptr %911, align 8, !tbaa !17
  %913 = icmp eq i32 %912, 91
  br i1 %913, label %914, label %1044

914:                                              ; preds = %909
  %915 = load ptr, ptr %7, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.internal_state, ptr %915, i32 0, i32 7
  %917 = load ptr, ptr %916, align 8, !tbaa !32
  %918 = getelementptr inbounds %struct.gz_header_s, ptr %917, i32 0, i32 9
  %919 = load ptr, ptr %918, align 8, !tbaa !38
  %920 = icmp ne ptr %919, null
  br i1 %920, label %921, label %1041

921:                                              ; preds = %914
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %922 = load ptr, ptr %7, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.internal_state, ptr %922, i32 0, i32 5
  %924 = load i64, ptr %923, align 8, !tbaa !24
  store i64 %924, ptr %16, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  br label %925

925:                                              ; preds = %1000, %921
  %926 = load ptr, ptr %7, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.internal_state, ptr %926, i32 0, i32 5
  %928 = load i64, ptr %927, align 8, !tbaa !24
  %929 = load ptr, ptr %7, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.internal_state, ptr %929, i32 0, i32 3
  %931 = load i64, ptr %930, align 8, !tbaa !44
  %932 = icmp eq i64 %928, %931
  br i1 %932, label %933, label %977

933:                                              ; preds = %925
  br label %934

934:                                              ; preds = %933
  %935 = load ptr, ptr %7, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.internal_state, ptr %935, i32 0, i32 7
  %937 = load ptr, ptr %936, align 8, !tbaa !32
  %938 = getelementptr inbounds %struct.gz_header_s, ptr %937, i32 0, i32 11
  %939 = load i32, ptr %938, align 4, !tbaa !35
  %940 = icmp ne i32 %939, 0
  br i1 %940, label %941, label %965

941:                                              ; preds = %934
  %942 = load ptr, ptr %7, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.internal_state, ptr %942, i32 0, i32 5
  %944 = load i64, ptr %943, align 8, !tbaa !24
  %945 = load i64, ptr %16, align 8, !tbaa !43
  %946 = icmp ugt i64 %944, %945
  br i1 %946, label %947, label %965

947:                                              ; preds = %941
  %948 = load ptr, ptr %4, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.z_stream_s, ptr %948, i32 0, i32 12
  %950 = load i64, ptr %949, align 8, !tbaa !29
  %951 = load ptr, ptr %7, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct.internal_state, ptr %951, i32 0, i32 2
  %953 = load ptr, ptr %952, align 8, !tbaa !30
  %954 = load i64, ptr %16, align 8, !tbaa !43
  %955 = getelementptr inbounds i8, ptr %953, i64 %954
  %956 = load ptr, ptr %7, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.internal_state, ptr %956, i32 0, i32 5
  %958 = load i64, ptr %957, align 8, !tbaa !24
  %959 = load i64, ptr %16, align 8, !tbaa !43
  %960 = sub i64 %958, %959
  %961 = trunc i64 %960 to i32
  %962 = call i64 @crc32(i64 noundef %950, ptr noundef %955, i32 noundef %961)
  %963 = load ptr, ptr %4, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.z_stream_s, ptr %963, i32 0, i32 12
  store i64 %962, ptr %964, align 8, !tbaa !29
  br label %965

965:                                              ; preds = %947, %941, %934
  br label %966

966:                                              ; preds = %965
  br label %967

967:                                              ; preds = %966
  %968 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %968)
  %969 = load ptr, ptr %7, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.internal_state, ptr %969, i32 0, i32 5
  %971 = load i64, ptr %970, align 8, !tbaa !24
  %972 = icmp ne i64 %971, 0
  br i1 %972, label %973, label %976

973:                                              ; preds = %967
  %974 = load ptr, ptr %7, align 8, !tbaa !5
  %975 = getelementptr inbounds %struct.internal_state, ptr %974, i32 0, i32 10
  store i32 -1, ptr %975, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1038

976:                                              ; preds = %967
  store i64 0, ptr %16, align 8, !tbaa !43
  br label %977

977:                                              ; preds = %976, %925
  %978 = load ptr, ptr %7, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.internal_state, ptr %978, i32 0, i32 7
  %980 = load ptr, ptr %979, align 8, !tbaa !32
  %981 = getelementptr inbounds %struct.gz_header_s, ptr %980, i32 0, i32 9
  %982 = load ptr, ptr %981, align 8, !tbaa !38
  %983 = load ptr, ptr %7, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.internal_state, ptr %983, i32 0, i32 8
  %985 = load i64, ptr %984, align 8, !tbaa !42
  %986 = add i64 %985, 1
  store i64 %986, ptr %984, align 8, !tbaa !42
  %987 = getelementptr inbounds i8, ptr %982, i64 %985
  %988 = load i8, ptr %987, align 1, !tbaa !31
  %989 = zext i8 %988 to i32
  store i32 %989, ptr %17, align 4, !tbaa !9
  %990 = load i32, ptr %17, align 4, !tbaa !9
  %991 = trunc i32 %990 to i8
  %992 = load ptr, ptr %7, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.internal_state, ptr %992, i32 0, i32 2
  %994 = load ptr, ptr %993, align 8, !tbaa !30
  %995 = load ptr, ptr %7, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.internal_state, ptr %995, i32 0, i32 5
  %997 = load i64, ptr %996, align 8, !tbaa !24
  %998 = add i64 %997, 1
  store i64 %998, ptr %996, align 8, !tbaa !24
  %999 = getelementptr inbounds i8, ptr %994, i64 %997
  store i8 %991, ptr %999, align 1, !tbaa !31
  br label %1000

1000:                                             ; preds = %977
  %1001 = load i32, ptr %17, align 4, !tbaa !9
  %1002 = icmp ne i32 %1001, 0
  br i1 %1002, label %925, label %1003, !llvm.loop !48

1003:                                             ; preds = %1000
  br label %1004

1004:                                             ; preds = %1003
  %1005 = load ptr, ptr %7, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.internal_state, ptr %1005, i32 0, i32 7
  %1007 = load ptr, ptr %1006, align 8, !tbaa !32
  %1008 = getelementptr inbounds %struct.gz_header_s, ptr %1007, i32 0, i32 11
  %1009 = load i32, ptr %1008, align 4, !tbaa !35
  %1010 = icmp ne i32 %1009, 0
  br i1 %1010, label %1011, label %1035

1011:                                             ; preds = %1004
  %1012 = load ptr, ptr %7, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.internal_state, ptr %1012, i32 0, i32 5
  %1014 = load i64, ptr %1013, align 8, !tbaa !24
  %1015 = load i64, ptr %16, align 8, !tbaa !43
  %1016 = icmp ugt i64 %1014, %1015
  br i1 %1016, label %1017, label %1035

1017:                                             ; preds = %1011
  %1018 = load ptr, ptr %4, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.z_stream_s, ptr %1018, i32 0, i32 12
  %1020 = load i64, ptr %1019, align 8, !tbaa !29
  %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 !30
  %1024 = load i64, ptr %16, align 8, !tbaa !43
  %1025 = getelementptr inbounds i8, ptr %1023, i64 %1024
  %1026 = load ptr, ptr %7, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.internal_state, ptr %1026, i32 0, i32 5
  %1028 = load i64, ptr %1027, align 8, !tbaa !24
  %1029 = load i64, ptr %16, align 8, !tbaa !43
  %1030 = sub i64 %1028, %1029
  %1031 = trunc i64 %1030 to i32
  %1032 = call i64 @crc32(i64 noundef %1020, ptr noundef %1025, i32 noundef %1031)
  %1033 = load ptr, ptr %4, align 8, !tbaa !5
  %1034 = getelementptr inbounds %struct.z_stream_s, ptr %1033, i32 0, i32 12
  store i64 %1032, ptr %1034, align 8, !tbaa !29
  br label %1035

1035:                                             ; preds = %1017, %1011, %1004
  br label %1036

1036:                                             ; preds = %1035
  br label %1037

1037:                                             ; preds = %1036
  store i32 0, ptr %8, align 4
  br label %1038

1038:                                             ; preds = %1037, %973
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  %1039 = load i32, ptr %8, align 4
  switch i32 %1039, label %1427 [
    i32 0, label %1040
  ]

1040:                                             ; preds = %1038
  br label %1041

1041:                                             ; preds = %1040, %914
  %1042 = load ptr, ptr %7, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.internal_state, ptr %1042, i32 0, i32 1
  store i32 103, ptr %1043, align 8, !tbaa !17
  br label %1044

1044:                                             ; preds = %1041, %909
  %1045 = load ptr, ptr %7, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct.internal_state, ptr %1045, i32 0, i32 1
  %1047 = load i32, ptr %1046, align 8, !tbaa !17
  %1048 = icmp eq i32 %1047, 103
  br i1 %1048, label %1049, label %1118

1049:                                             ; preds = %1044
  %1050 = load ptr, ptr %7, align 8, !tbaa !5
  %1051 = getelementptr inbounds %struct.internal_state, ptr %1050, i32 0, i32 7
  %1052 = load ptr, ptr %1051, align 8, !tbaa !32
  %1053 = getelementptr inbounds %struct.gz_header_s, ptr %1052, i32 0, i32 11
  %1054 = load i32, ptr %1053, align 4, !tbaa !35
  %1055 = icmp ne i32 %1054, 0
  br i1 %1055, label %1056, label %1106

1056:                                             ; preds = %1049
  %1057 = load ptr, ptr %7, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.internal_state, ptr %1057, i32 0, i32 5
  %1059 = load i64, ptr %1058, align 8, !tbaa !24
  %1060 = add i64 %1059, 2
  %1061 = load ptr, ptr %7, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.internal_state, ptr %1061, i32 0, i32 3
  %1063 = load i64, ptr %1062, align 8, !tbaa !44
  %1064 = icmp ugt i64 %1060, %1063
  br i1 %1064, label %1065, label %1075

1065:                                             ; preds = %1056
  %1066 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %1066)
  %1067 = load ptr, ptr %7, align 8, !tbaa !5
  %1068 = getelementptr inbounds %struct.internal_state, ptr %1067, i32 0, i32 5
  %1069 = load i64, ptr %1068, align 8, !tbaa !24
  %1070 = icmp ne i64 %1069, 0
  br i1 %1070, label %1071, label %1074

1071:                                             ; preds = %1065
  %1072 = load ptr, ptr %7, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.internal_state, ptr %1072, i32 0, i32 10
  store i32 -1, ptr %1073, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

1074:                                             ; preds = %1065
  br label %1075

1075:                                             ; preds = %1074, %1056
  %1076 = load ptr, ptr %4, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.z_stream_s, ptr %1076, i32 0, i32 12
  %1078 = load i64, ptr %1077, align 8, !tbaa !29
  %1079 = and i64 %1078, 255
  %1080 = trunc i64 %1079 to i8
  %1081 = load ptr, ptr %7, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.internal_state, ptr %1081, i32 0, i32 2
  %1083 = load ptr, ptr %1082, align 8, !tbaa !30
  %1084 = load ptr, ptr %7, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.internal_state, ptr %1084, i32 0, i32 5
  %1086 = load i64, ptr %1085, align 8, !tbaa !24
  %1087 = add i64 %1086, 1
  store i64 %1087, ptr %1085, align 8, !tbaa !24
  %1088 = getelementptr inbounds i8, ptr %1083, i64 %1086
  store i8 %1080, ptr %1088, align 1, !tbaa !31
  %1089 = load ptr, ptr %4, align 8, !tbaa !5
  %1090 = getelementptr inbounds %struct.z_stream_s, ptr %1089, i32 0, i32 12
  %1091 = load i64, ptr %1090, align 8, !tbaa !29
  %1092 = lshr i64 %1091, 8
  %1093 = and i64 %1092, 255
  %1094 = trunc i64 %1093 to i8
  %1095 = load ptr, ptr %7, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.internal_state, ptr %1095, i32 0, i32 2
  %1097 = load ptr, ptr %1096, align 8, !tbaa !30
  %1098 = load ptr, ptr %7, align 8, !tbaa !5
  %1099 = getelementptr inbounds %struct.internal_state, ptr %1098, i32 0, i32 5
  %1100 = load i64, ptr %1099, align 8, !tbaa !24
  %1101 = add i64 %1100, 1
  store i64 %1101, ptr %1099, align 8, !tbaa !24
  %1102 = getelementptr inbounds i8, ptr %1097, i64 %1100
  store i8 %1094, ptr %1102, align 1, !tbaa !31
  %1103 = call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0)
  %1104 = load ptr, ptr %4, align 8, !tbaa !5
  %1105 = getelementptr inbounds %struct.z_stream_s, ptr %1104, i32 0, i32 12
  store i64 %1103, ptr %1105, align 8, !tbaa !29
  br label %1106

1106:                                             ; preds = %1075, %1049
  %1107 = load ptr, ptr %7, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.internal_state, ptr %1107, i32 0, i32 1
  store i32 113, ptr %1108, align 8, !tbaa !17
  %1109 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %1109)
  %1110 = load ptr, ptr %7, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.internal_state, ptr %1110, i32 0, i32 5
  %1112 = load i64, ptr %1111, align 8, !tbaa !24
  %1113 = icmp ne i64 %1112, 0
  br i1 %1113, label %1114, label %1117

1114:                                             ; preds = %1106
  %1115 = load ptr, ptr %7, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.internal_state, ptr %1115, i32 0, i32 10
  store i32 -1, ptr %1116, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

1117:                                             ; preds = %1106
  br label %1118

1118:                                             ; preds = %1117, %1044
  %1119 = load ptr, ptr %4, align 8, !tbaa !5
  %1120 = getelementptr inbounds %struct.z_stream_s, ptr %1119, i32 0, i32 1
  %1121 = load i32, ptr %1120, align 8, !tbaa !15
  %1122 = icmp ne i32 %1121, 0
  br i1 %1122, label %1136, label %1123

1123:                                             ; preds = %1118
  %1124 = load ptr, ptr %7, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct.internal_state, ptr %1124, i32 0, i32 29
  %1126 = load i32, ptr %1125, align 4, !tbaa !49
  %1127 = icmp ne i32 %1126, 0
  br i1 %1127, label %1136, label %1128

1128:                                             ; preds = %1123
  %1129 = load i32, ptr %5, align 4, !tbaa !9
  %1130 = icmp ne i32 %1129, 0
  br i1 %1130, label %1131, label %1268

1131:                                             ; preds = %1128
  %1132 = load ptr, ptr %7, align 8, !tbaa !5
  %1133 = getelementptr inbounds %struct.internal_state, ptr %1132, i32 0, i32 1
  %1134 = load i32, ptr %1133, align 8, !tbaa !17
  %1135 = icmp ne i32 %1134, 666
  br i1 %1135, label %1136, label %1268

1136:                                             ; preds = %1131, %1123, %1118
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %1137 = load ptr, ptr %7, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.internal_state, ptr %1137, i32 0, i32 33
  %1139 = load i32, ptr %1138, align 4, !tbaa !27
  %1140 = icmp eq i32 %1139, 0
  br i1 %1140, label %1141, label %1145

1141:                                             ; preds = %1136
  %1142 = load ptr, ptr %7, align 8, !tbaa !5
  %1143 = load i32, ptr %5, align 4, !tbaa !9
  %1144 = call i32 @deflate_stored(ptr noundef %1142, i32 noundef %1143)
  br label %1178

1145:                                             ; preds = %1136
  %1146 = load ptr, ptr %7, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.internal_state, ptr %1146, i32 0, i32 34
  %1148 = load i32, ptr %1147, align 8, !tbaa !26
  %1149 = icmp eq i32 %1148, 2
  br i1 %1149, label %1150, label %1154

1150:                                             ; preds = %1145
  %1151 = load ptr, ptr %7, align 8, !tbaa !5
  %1152 = load i32, ptr %5, align 4, !tbaa !9
  %1153 = call i32 @deflate_huff(ptr noundef %1151, i32 noundef %1152)
  br label %1176

1154:                                             ; preds = %1145
  %1155 = load ptr, ptr %7, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.internal_state, ptr %1155, i32 0, i32 34
  %1157 = load i32, ptr %1156, align 8, !tbaa !26
  %1158 = icmp eq i32 %1157, 3
  br i1 %1158, label %1159, label %1163

1159:                                             ; preds = %1154
  %1160 = load ptr, ptr %7, align 8, !tbaa !5
  %1161 = load i32, ptr %5, align 4, !tbaa !9
  %1162 = call i32 @deflate_rle(ptr noundef %1160, i32 noundef %1161)
  br label %1174

1163:                                             ; preds = %1154
  %1164 = load ptr, ptr %7, align 8, !tbaa !5
  %1165 = getelementptr inbounds %struct.internal_state, ptr %1164, i32 0, i32 33
  %1166 = load i32, ptr %1165, align 4, !tbaa !27
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds [10 x %struct.config_s], ptr @configuration_table, i64 0, i64 %1167
  %1169 = getelementptr inbounds %struct.config_s, ptr %1168, i32 0, i32 4
  %1170 = load ptr, ptr %1169, align 8, !tbaa !50
  %1171 = load ptr, ptr %7, align 8, !tbaa !5
  %1172 = load i32, ptr %5, align 4, !tbaa !9
  %1173 = call i32 %1170(ptr noundef %1171, i32 noundef %1172)
  br label %1174

1174:                                             ; preds = %1163, %1159
  %1175 = phi i32 [ %1162, %1159 ], [ %1173, %1163 ]
  br label %1176

1176:                                             ; preds = %1174, %1150
  %1177 = phi i32 [ %1153, %1150 ], [ %1175, %1174 ]
  br label %1178

1178:                                             ; preds = %1176, %1141
  %1179 = phi i32 [ %1144, %1141 ], [ %1177, %1176 ]
  store i32 %1179, ptr %18, align 4, !tbaa !9
  %1180 = load i32, ptr %18, align 4, !tbaa !9
  %1181 = icmp eq i32 %1180, 2
  br i1 %1181, label %1185, label %1182

1182:                                             ; preds = %1178
  %1183 = load i32, ptr %18, align 4, !tbaa !9
  %1184 = icmp eq i32 %1183, 3
  br i1 %1184, label %1185, label %1188

1185:                                             ; preds = %1182, %1178
  %1186 = load ptr, ptr %7, align 8, !tbaa !5
  %1187 = getelementptr inbounds %struct.internal_state, ptr %1186, i32 0, i32 1
  store i32 666, ptr %1187, align 8, !tbaa !17
  br label %1188

1188:                                             ; preds = %1185, %1182
  %1189 = load i32, ptr %18, align 4, !tbaa !9
  %1190 = icmp eq i32 %1189, 0
  br i1 %1190, label %1194, label %1191

1191:                                             ; preds = %1188
  %1192 = load i32, ptr %18, align 4, !tbaa !9
  %1193 = icmp eq i32 %1192, 2
  br i1 %1193, label %1194, label %1203

1194:                                             ; preds = %1191, %1188
  %1195 = load ptr, ptr %4, align 8, !tbaa !5
  %1196 = getelementptr inbounds %struct.z_stream_s, ptr %1195, i32 0, i32 4
  %1197 = load i32, ptr %1196, align 8, !tbaa !22
  %1198 = icmp eq i32 %1197, 0
  br i1 %1198, label %1199, label %1202

1199:                                             ; preds = %1194
  %1200 = load ptr, ptr %7, align 8, !tbaa !5
  %1201 = getelementptr inbounds %struct.internal_state, ptr %1200, i32 0, i32 10
  store i32 -1, ptr %1201, align 4, !tbaa !23
  br label %1202

1202:                                             ; preds = %1199, %1194
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1265

1203:                                             ; preds = %1191
  %1204 = load i32, ptr %18, align 4, !tbaa !9
  %1205 = icmp eq i32 %1204, 1
  br i1 %1205, label %1206, label %1264

1206:                                             ; preds = %1203
  %1207 = load i32, ptr %5, align 4, !tbaa !9
  %1208 = icmp eq i32 %1207, 1
  br i1 %1208, label %1209, label %1211

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

1211:                                             ; preds = %1206
  %1212 = load i32, ptr %5, align 4, !tbaa !9
  %1213 = icmp ne i32 %1212, 5
  br i1 %1213, label %1214, label %1253

1214:                                             ; preds = %1211
  %1215 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_tr_stored_block(ptr noundef %1215, ptr noundef null, i64 noundef 0, i32 noundef 0)
  %1216 = load i32, ptr %5, align 4, !tbaa !9
  %1217 = icmp eq i32 %1216, 3
  br i1 %1217, label %1218, label %1252

1218:                                             ; preds = %1214
  br label %1219

1219:                                             ; preds = %1218
  %1220 = load ptr, ptr %7, align 8, !tbaa !5
  %1221 = getelementptr inbounds %struct.internal_state, ptr %1220, i32 0, i32 17
  %1222 = load ptr, ptr %1221, align 8, !tbaa !52
  %1223 = load ptr, ptr %7, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct.internal_state, ptr %1223, i32 0, i32 19
  %1225 = load i32, ptr %1224, align 4, !tbaa !53
  %1226 = sub i32 %1225, 1
  %1227 = zext i32 %1226 to i64
  %1228 = getelementptr inbounds i16, ptr %1222, i64 %1227
  store i16 0, ptr %1228, align 2, !tbaa !54
  %1229 = load ptr, ptr %7, align 8, !tbaa !5
  %1230 = getelementptr inbounds %struct.internal_state, ptr %1229, i32 0, i32 17
  %1231 = load ptr, ptr %1230, align 8, !tbaa !52
  %1232 = load ptr, ptr %7, align 8, !tbaa !5
  %1233 = getelementptr inbounds %struct.internal_state, ptr %1232, i32 0, i32 19
  %1234 = load i32, ptr %1233, align 4, !tbaa !53
  %1235 = sub i32 %1234, 1
  %1236 = zext i32 %1235 to i64
  %1237 = mul i64 %1236, 2
  call void @llvm.memset.p0.i64(ptr align 1 %1231, i8 0, i64 %1237, i1 false)
  br label %1238

1238:                                             ; preds = %1219
  br label %1239

1239:                                             ; preds = %1238
  %1240 = load ptr, ptr %7, align 8, !tbaa !5
  %1241 = getelementptr inbounds %struct.internal_state, ptr %1240, i32 0, i32 29
  %1242 = load i32, ptr %1241, align 4, !tbaa !49
  %1243 = icmp eq i32 %1242, 0
  br i1 %1243, label %1244, label %1251

1244:                                             ; preds = %1239
  %1245 = load ptr, ptr %7, align 8, !tbaa !5
  %1246 = getelementptr inbounds %struct.internal_state, ptr %1245, i32 0, i32 27
  store i32 0, ptr %1246, align 4, !tbaa !28
  %1247 = load ptr, ptr %7, align 8, !tbaa !5
  %1248 = getelementptr inbounds %struct.internal_state, ptr %1247, i32 0, i32 23
  store i64 0, ptr %1248, align 8, !tbaa !55
  %1249 = load ptr, ptr %7, align 8, !tbaa !5
  %1250 = getelementptr inbounds %struct.internal_state, ptr %1249, i32 0, i32 55
  store i32 0, ptr %1250, align 4, !tbaa !56
  br label %1251

1251:                                             ; preds = %1244, %1239
  br label %1252

1252:                                             ; preds = %1251, %1214
  br label %1253

1253:                                             ; preds = %1252, %1211
  br label %1254

1254:                                             ; preds = %1253, %1209
  %1255 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %1255)
  %1256 = load ptr, ptr %4, align 8, !tbaa !5
  %1257 = getelementptr inbounds %struct.z_stream_s, ptr %1256, i32 0, i32 4
  %1258 = load i32, ptr %1257, align 8, !tbaa !22
  %1259 = icmp eq i32 %1258, 0
  br i1 %1259, label %1260, label %1263

1260:                                             ; preds = %1254
  %1261 = load ptr, ptr %7, align 8, !tbaa !5
  %1262 = getelementptr inbounds %struct.internal_state, ptr %1261, i32 0, i32 10
  store i32 -1, ptr %1262, align 4, !tbaa !23
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1265

1263:                                             ; preds = %1254
  br label %1264

1264:                                             ; preds = %1263, %1203
  store i32 0, ptr %8, align 4
  br label %1265

1265:                                             ; preds = %1264, %1260, %1202
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  %1266 = load i32, ptr %8, align 4
  switch i32 %1266, label %1427 [
    i32 0, label %1267
  ]

1267:                                             ; preds = %1265
  br label %1268

1268:                                             ; preds = %1267, %1131, %1128
  %1269 = load i32, ptr %5, align 4, !tbaa !9
  %1270 = icmp ne i32 %1269, 4
  br i1 %1270, label %1271, label %1272

1271:                                             ; preds = %1268
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

1272:                                             ; preds = %1268
  %1273 = load ptr, ptr %7, align 8, !tbaa !5
  %1274 = getelementptr inbounds %struct.internal_state, ptr %1273, i32 0, i32 6
  %1275 = load i32, ptr %1274, align 8, !tbaa !57
  %1276 = icmp sle i32 %1275, 0
  br i1 %1276, label %1277, label %1278

1277:                                             ; preds = %1272
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

1278:                                             ; preds = %1272
  %1279 = load ptr, ptr %7, align 8, !tbaa !5
  %1280 = getelementptr inbounds %struct.internal_state, ptr %1279, i32 0, i32 6
  %1281 = load i32, ptr %1280, align 8, !tbaa !57
  %1282 = icmp eq i32 %1281, 2
  br i1 %1282, label %1283, label %1394

1283:                                             ; preds = %1278
  %1284 = load ptr, ptr %4, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.z_stream_s, ptr %1284, i32 0, i32 12
  %1286 = load i64, ptr %1285, align 8, !tbaa !29
  %1287 = and i64 %1286, 255
  %1288 = trunc i64 %1287 to i8
  %1289 = load ptr, ptr %7, align 8, !tbaa !5
  %1290 = getelementptr inbounds %struct.internal_state, ptr %1289, i32 0, i32 2
  %1291 = load ptr, ptr %1290, align 8, !tbaa !30
  %1292 = load ptr, ptr %7, align 8, !tbaa !5
  %1293 = getelementptr inbounds %struct.internal_state, ptr %1292, i32 0, i32 5
  %1294 = load i64, ptr %1293, align 8, !tbaa !24
  %1295 = add i64 %1294, 1
  store i64 %1295, ptr %1293, align 8, !tbaa !24
  %1296 = getelementptr inbounds i8, ptr %1291, i64 %1294
  store i8 %1288, ptr %1296, align 1, !tbaa !31
  %1297 = load ptr, ptr %4, align 8, !tbaa !5
  %1298 = getelementptr inbounds %struct.z_stream_s, ptr %1297, i32 0, i32 12
  %1299 = load i64, ptr %1298, align 8, !tbaa !29
  %1300 = lshr i64 %1299, 8
  %1301 = and i64 %1300, 255
  %1302 = trunc i64 %1301 to i8
  %1303 = load ptr, ptr %7, align 8, !tbaa !5
  %1304 = getelementptr inbounds %struct.internal_state, ptr %1303, i32 0, i32 2
  %1305 = load ptr, ptr %1304, align 8, !tbaa !30
  %1306 = load ptr, ptr %7, align 8, !tbaa !5
  %1307 = getelementptr inbounds %struct.internal_state, ptr %1306, i32 0, i32 5
  %1308 = load i64, ptr %1307, align 8, !tbaa !24
  %1309 = add i64 %1308, 1
  store i64 %1309, ptr %1307, align 8, !tbaa !24
  %1310 = getelementptr inbounds i8, ptr %1305, i64 %1308
  store i8 %1302, ptr %1310, align 1, !tbaa !31
  %1311 = load ptr, ptr %4, align 8, !tbaa !5
  %1312 = getelementptr inbounds %struct.z_stream_s, ptr %1311, i32 0, i32 12
  %1313 = load i64, ptr %1312, align 8, !tbaa !29
  %1314 = lshr i64 %1313, 16
  %1315 = and i64 %1314, 255
  %1316 = trunc i64 %1315 to i8
  %1317 = load ptr, ptr %7, align 8, !tbaa !5
  %1318 = getelementptr inbounds %struct.internal_state, ptr %1317, i32 0, i32 2
  %1319 = load ptr, ptr %1318, align 8, !tbaa !30
  %1320 = load ptr, ptr %7, align 8, !tbaa !5
  %1321 = getelementptr inbounds %struct.internal_state, ptr %1320, i32 0, i32 5
  %1322 = load i64, ptr %1321, align 8, !tbaa !24
  %1323 = add i64 %1322, 1
  store i64 %1323, ptr %1321, align 8, !tbaa !24
  %1324 = getelementptr inbounds i8, ptr %1319, i64 %1322
  store i8 %1316, ptr %1324, align 1, !tbaa !31
  %1325 = load ptr, ptr %4, align 8, !tbaa !5
  %1326 = getelementptr inbounds %struct.z_stream_s, ptr %1325, i32 0, i32 12
  %1327 = load i64, ptr %1326, align 8, !tbaa !29
  %1328 = lshr i64 %1327, 24
  %1329 = and i64 %1328, 255
  %1330 = trunc i64 %1329 to i8
  %1331 = load ptr, ptr %7, align 8, !tbaa !5
  %1332 = getelementptr inbounds %struct.internal_state, ptr %1331, i32 0, i32 2
  %1333 = load ptr, ptr %1332, align 8, !tbaa !30
  %1334 = load ptr, ptr %7, align 8, !tbaa !5
  %1335 = getelementptr inbounds %struct.internal_state, ptr %1334, i32 0, i32 5
  %1336 = load i64, ptr %1335, align 8, !tbaa !24
  %1337 = add i64 %1336, 1
  store i64 %1337, ptr %1335, align 8, !tbaa !24
  %1338 = getelementptr inbounds i8, ptr %1333, i64 %1336
  store i8 %1330, ptr %1338, align 1, !tbaa !31
  %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 !58
  %1342 = and i64 %1341, 255
  %1343 = trunc i64 %1342 to i8
  %1344 = load ptr, ptr %7, align 8, !tbaa !5
  %1345 = getelementptr inbounds %struct.internal_state, ptr %1344, i32 0, i32 2
  %1346 = load ptr, ptr %1345, align 8, !tbaa !30
  %1347 = load ptr, ptr %7, align 8, !tbaa !5
  %1348 = getelementptr inbounds %struct.internal_state, ptr %1347, i32 0, i32 5
  %1349 = load i64, ptr %1348, align 8, !tbaa !24
  %1350 = add i64 %1349, 1
  store i64 %1350, ptr %1348, align 8, !tbaa !24
  %1351 = getelementptr inbounds i8, ptr %1346, i64 %1349
  store i8 %1343, ptr %1351, align 1, !tbaa !31
  %1352 = load ptr, ptr %4, align 8, !tbaa !5
  %1353 = getelementptr inbounds %struct.z_stream_s, ptr %1352, i32 0, i32 2
  %1354 = load i64, ptr %1353, align 8, !tbaa !58
  %1355 = lshr i64 %1354, 8
  %1356 = and i64 %1355, 255
  %1357 = trunc i64 %1356 to i8
  %1358 = load ptr, ptr %7, align 8, !tbaa !5
  %1359 = getelementptr inbounds %struct.internal_state, ptr %1358, i32 0, i32 2
  %1360 = load ptr, ptr %1359, align 8, !tbaa !30
  %1361 = load ptr, ptr %7, align 8, !tbaa !5
  %1362 = getelementptr inbounds %struct.internal_state, ptr %1361, i32 0, i32 5
  %1363 = load i64, ptr %1362, align 8, !tbaa !24
  %1364 = add i64 %1363, 1
  store i64 %1364, ptr %1362, align 8, !tbaa !24
  %1365 = getelementptr inbounds i8, ptr %1360, i64 %1363
  store i8 %1357, ptr %1365, align 1, !tbaa !31
  %1366 = load ptr, ptr %4, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.z_stream_s, ptr %1366, i32 0, i32 2
  %1368 = load i64, ptr %1367, align 8, !tbaa !58
  %1369 = lshr i64 %1368, 16
  %1370 = and i64 %1369, 255
  %1371 = trunc i64 %1370 to i8
  %1372 = load ptr, ptr %7, align 8, !tbaa !5
  %1373 = getelementptr inbounds %struct.internal_state, ptr %1372, i32 0, i32 2
  %1374 = load ptr, ptr %1373, align 8, !tbaa !30
  %1375 = load ptr, ptr %7, align 8, !tbaa !5
  %1376 = getelementptr inbounds %struct.internal_state, ptr %1375, i32 0, i32 5
  %1377 = load i64, ptr %1376, align 8, !tbaa !24
  %1378 = add i64 %1377, 1
  store i64 %1378, ptr %1376, align 8, !tbaa !24
  %1379 = getelementptr inbounds i8, ptr %1374, i64 %1377
  store i8 %1371, ptr %1379, align 1, !tbaa !31
  %1380 = load ptr, ptr %4, align 8, !tbaa !5
  %1381 = getelementptr inbounds %struct.z_stream_s, ptr %1380, i32 0, i32 2
  %1382 = load i64, ptr %1381, align 8, !tbaa !58
  %1383 = lshr i64 %1382, 24
  %1384 = and i64 %1383, 255
  %1385 = trunc i64 %1384 to i8
  %1386 = load ptr, ptr %7, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.internal_state, ptr %1386, i32 0, i32 2
  %1388 = load ptr, ptr %1387, align 8, !tbaa !30
  %1389 = load ptr, ptr %7, align 8, !tbaa !5
  %1390 = getelementptr inbounds %struct.internal_state, ptr %1389, i32 0, i32 5
  %1391 = load i64, ptr %1390, align 8, !tbaa !24
  %1392 = add i64 %1391, 1
  store i64 %1392, ptr %1390, align 8, !tbaa !24
  %1393 = getelementptr inbounds i8, ptr %1388, i64 %1391
  store i8 %1385, ptr %1393, align 1, !tbaa !31
  br label %1407

1394:                                             ; preds = %1278
  %1395 = load ptr, ptr %7, align 8, !tbaa !5
  %1396 = load ptr, ptr %4, align 8, !tbaa !5
  %1397 = getelementptr inbounds %struct.z_stream_s, ptr %1396, i32 0, i32 12
  %1398 = load i64, ptr %1397, align 8, !tbaa !29
  %1399 = lshr i64 %1398, 16
  %1400 = trunc i64 %1399 to i32
  call void @putShortMSB(ptr noundef %1395, i32 noundef %1400)
  %1401 = load ptr, ptr %7, align 8, !tbaa !5
  %1402 = load ptr, ptr %4, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.z_stream_s, ptr %1402, i32 0, i32 12
  %1404 = load i64, ptr %1403, align 8, !tbaa !29
  %1405 = and i64 %1404, 65535
  %1406 = trunc i64 %1405 to i32
  call void @putShortMSB(ptr noundef %1401, i32 noundef %1406)
  br label %1407

1407:                                             ; preds = %1394, %1283
  %1408 = load ptr, ptr %4, align 8, !tbaa !5
  call void @flush_pending(ptr noundef %1408)
  %1409 = load ptr, ptr %7, align 8, !tbaa !5
  %1410 = getelementptr inbounds %struct.internal_state, ptr %1409, i32 0, i32 6
  %1411 = load i32, ptr %1410, align 8, !tbaa !57
  %1412 = icmp sgt i32 %1411, 0
  br i1 %1412, label %1413, label %1420

1413:                                             ; preds = %1407
  %1414 = load ptr, ptr %7, align 8, !tbaa !5
  %1415 = getelementptr inbounds %struct.internal_state, ptr %1414, i32 0, i32 6
  %1416 = load i32, ptr %1415, align 8, !tbaa !57
  %1417 = sub nsw i32 0, %1416
  %1418 = load ptr, ptr %7, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct.internal_state, ptr %1418, i32 0, i32 6
  store i32 %1417, ptr %1419, align 8, !tbaa !57
  br label %1420

1420:                                             ; preds = %1413, %1407
  %1421 = load ptr, ptr %7, align 8, !tbaa !5
  %1422 = getelementptr inbounds %struct.internal_state, ptr %1421, i32 0, i32 5
  %1423 = load i64, ptr %1422, align 8, !tbaa !24
  %1424 = icmp ne i64 %1423, 0
  %1425 = zext i1 %1424 to i64
  %1426 = select i1 %1424, i32 0, i32 1
  store i32 %1426, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %1427

1427:                                             ; preds = %1420, %1277, %1271, %1265, %1114, %1071, %1038, %903, %766, %348, %222, %128, %113, %85, %64, %55, %28
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  %1428 = load i32, ptr %3, align 4
  ret i32 %1428
}

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

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

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

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

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

declare void @_tr_align(ptr noundef) #2

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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, !10, i64 8}
!16 = !{!12, !6, i64 0}
!17 = !{!18, !10, i64 8}
!18 = !{!"internal_state", !6, i64 0, !10, i64 8, !6, i64 16, !13, i64 24, !6, i64 32, !13, i64 40, !10, i64 48, !6, i64 56, !13, i64 64, !7, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !6, i64 96, !13, i64 104, !6, i64 112, !6, i64 120, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !13, i64 152, !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, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !7, i64 212, !7, i64 2504, !7, i64 2748, !19, i64 2904, !19, i64 2928, !19, i64 2952, !7, i64 2976, !7, i64 3008, !10, i64 5300, !10, i64 5304, !7, i64 5308, !6, i64 5888, !10, i64 5896, !10, i64 5900, !6, i64 5904, !13, i64 5912, !13, i64 5920, !10, i64 5928, !10, i64 5932, !20, i64 5936, !10, i64 5940, !13, i64 5944}
!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, !10, i64 76}
!24 = !{!18, !13, i64 40}
!25 = !{!18, !10, i64 84}
!26 = !{!18, !10, i64 200}
!27 = !{!18, !10, i64 196}
!28 = !{!18, !10, i64 172}
!29 = !{!12, !13, i64 96}
!30 = !{!18, !6, i64 16}
!31 = !{!7, !7, i64 0}
!32 = !{!18, !6, i64 56}
!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, !13, i64 64}
!43 = !{!13, !13, i64 0}
!44 = !{!18, !13, i64 24}
!45 = distinct !{!45, !46}
!46 = !{!"llvm.loop.mustprogress"}
!47 = distinct !{!47, !46}
!48 = distinct !{!48, !46}
!49 = !{!18, !10, i64 180}
!50 = !{!51, !6, i64 8}
!51 = !{!"config_s", !20, i64 0, !20, i64 2, !20, i64 4, !20, i64 6, !6, i64 8}
!52 = !{!18, !6, i64 120}
!53 = !{!18, !10, i64 132}
!54 = !{!20, !20, i64 0}
!55 = !{!18, !13, i64 152}
!56 = !{!18, !10, i64 5932}
!57 = !{!18, !10, i64 48}
!58 = !{!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

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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -5, 2) i32 @deflate(ptr noundef %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = tail call i32 @deflateStateCheck(ptr noundef %0)
  %4 = icmp ne i32 %3, 0
  %5 = icmp ugt i32 %1, 5
  %or.cond8 = or i1 %5, %4
  br i1 %or.cond8, label %.critedge435, label %6

6:                                                ; preds = %2
  %7 = getelementptr inbounds i8, ptr %0, i64 56
  %8 = load ptr, ptr %7, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %0, i64 24
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = icmp eq ptr %10, null
  br i1 %11, label %23, label %12

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

15:                                               ; preds = %12
  %16 = load ptr, ptr %0, align 8, !tbaa !14
  %17 = icmp eq ptr %16, null
  br i1 %17, label %23, label %18

18:                                               ; preds = %15, %12
  %19 = getelementptr inbounds i8, ptr %8, i64 8
  %20 = load i32, ptr %19, align 8, !tbaa !15
  %21 = icmp eq i32 %20, 666
  %22 = icmp ne i32 %1, 4
  %or.cond10 = and i1 %22, %21
  br i1 %or.cond10, label %23, label %26

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

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

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

33:                                               ; preds = %26
  %34 = getelementptr inbounds i8, ptr %8, i64 76
  %35 = load i32, ptr %34, align 4, !tbaa !22
  store i32 %1, ptr %34, align 4, !tbaa !22
  %36 = getelementptr inbounds i8, ptr %8, i64 40
  %37 = load i64, ptr %36, align 8, !tbaa !23
  %.not390 = icmp eq i64 %37, 0
  br i1 %.not390, label %42, label %38

38:                                               ; preds = %33
  tail call void @flush_pending(ptr noundef nonnull %0)
  %39 = load i32, ptr %27, align 8, !tbaa !21
  %40 = icmp eq i32 %39, 0
  br i1 %40, label %41, label %._crit_edge462

._crit_edge462:                                   ; preds = %38
  %.pre = load i32, ptr %19, align 8, !tbaa !15
  br label %54

41:                                               ; preds = %38
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

42:                                               ; preds = %33
  br i1 %.not, label %43, label %54

43:                                               ; preds = %42
  %44 = shl nuw nsw i32 %1, 1
  %45 = icmp ugt i32 %1, 4
  %.neg = select i1 %45, i32 -9, i32 0
  %46 = add nsw i32 %.neg, %44
  %47 = shl nsw i32 %35, 1
  %48 = icmp sgt i32 %35, 4
  %.neg391 = select i1 %48, i32 -9, i32 0
  %49 = add i32 %.neg391, %47
  %50 = icmp sle i32 %46, %49
  %or.cond12 = and i1 %22, %50
  br i1 %or.cond12, label %51, label %54

51:                                               ; preds = %43
  %52 = load ptr, ptr getelementptr inbounds (i8, ptr @z_errmsg, i64 56), align 8, !tbaa !19
  %53 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %52, ptr %53, align 8, !tbaa !20
  br label %.critedge435

54:                                               ; preds = %._crit_edge462, %42, %43
  %55 = phi i32 [ %.pre, %._crit_edge462 ], [ %20, %42 ], [ %20, %43 ]
  switch i32 %55, label %.critedge [
    i32 666, label %56
    i32 42, label %61
  ]

56:                                               ; preds = %54
  %57 = load i32, ptr %13, align 8, !tbaa !13
  %.not392 = icmp eq i32 %57, 0
  br i1 %.not392, label %.thread480, label %58

58:                                               ; preds = %56
  %59 = load ptr, ptr getelementptr inbounds (i8, ptr @z_errmsg, i64 56), align 8, !tbaa !19
  %60 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %59, ptr %60, align 8, !tbaa !20
  br label %.critedge435

61:                                               ; preds = %54
  %62 = getelementptr inbounds i8, ptr %8, i64 84
  %63 = load i32, ptr %62, align 4, !tbaa !24
  %64 = shl i32 %63, 12
  %65 = add i32 %64, -30720
  %66 = getelementptr inbounds i8, ptr %8, i64 200
  %67 = load i32, ptr %66, align 8, !tbaa !25
  %68 = icmp sgt i32 %67, 1
  br i1 %68, label %77, label %69

69:                                               ; preds = %61
  %70 = getelementptr inbounds i8, ptr %8, i64 196
  %71 = load i32, ptr %70, align 4, !tbaa !26
  %72 = icmp slt i32 %71, 2
  br i1 %72, label %77, label %73

73:                                               ; preds = %69
  %74 = icmp ult i32 %71, 6
  br i1 %74, label %77, label %75

75:                                               ; preds = %73
  %76 = icmp eq i32 %71, 6
  %. = select i1 %76, i32 128, i32 192
  br label %77

77:                                               ; preds = %75, %73, %61, %69
  %.0369 = phi i32 [ 0, %69 ], [ 0, %61 ], [ 64, %73 ], [ %., %75 ]
  %78 = or disjoint i32 %.0369, %65
  %79 = getelementptr inbounds i8, ptr %8, i64 172
  %80 = load i32, ptr %79, align 4, !tbaa !27
  %.not393 = icmp eq i32 %80, 0
  %81 = or disjoint i32 %78, 32
  %spec.select = select i1 %.not393, i32 %78, i32 %81
  %82 = urem i32 %spec.select, 31
  %83 = or disjoint i32 %82, %spec.select
  %84 = xor i32 %83, 31
  tail call void @putShortMSB(ptr noundef nonnull %8, i32 noundef %84)
  %85 = load i32, ptr %79, align 4, !tbaa !27
  %.not394 = icmp eq i32 %85, 0
  br i1 %.not394, label %94, label %86

86:                                               ; preds = %77
  %87 = getelementptr inbounds i8, ptr %0, i64 96
  %88 = load i64, ptr %87, align 8, !tbaa !28
  %89 = lshr i64 %88, 16
  %90 = trunc i64 %89 to i32
  tail call void @putShortMSB(ptr noundef nonnull %8, i32 noundef %90)
  %91 = load i64, ptr %87, align 8, !tbaa !28
  %92 = trunc i64 %91 to i32
  %93 = and i32 %92, 65535
  tail call void @putShortMSB(ptr noundef nonnull %8, i32 noundef %93)
  br label %94

94:                                               ; preds = %86, %77
  %95 = tail call i64 @adler32(i64 noundef 0, ptr noundef null, i32 noundef 0) #4
  %96 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 %95, ptr %96, align 8, !tbaa !28
  store i32 113, ptr %19, align 8, !tbaa !15
  tail call void @flush_pending(ptr noundef nonnull %0)
  %97 = load i64, ptr %36, align 8, !tbaa !23
  %.not395 = icmp eq i64 %97, 0
  br i1 %.not395, label %..critedgethread-pre-split_crit_edge, label %98

..critedgethread-pre-split_crit_edge:             ; preds = %94
  %.pr.pre = load i32, ptr %19, align 8, !tbaa !15
  br label %.critedge

98:                                               ; preds = %94
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

.critedge:                                        ; preds = %..critedgethread-pre-split_crit_edge, %54
  %99 = phi i32 [ %55, %54 ], [ %.pr.pre, %..critedgethread-pre-split_crit_edge ]
  %100 = icmp eq i32 %99, 57
  br i1 %100, label %101, label %277

101:                                              ; preds = %.critedge
  %102 = tail call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0) #4
  %103 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 %102, ptr %103, align 8, !tbaa !28
  %104 = getelementptr inbounds i8, ptr %8, i64 16
  %105 = load ptr, ptr %104, align 8, !tbaa !29
  %106 = load i64, ptr %36, align 8, !tbaa !23
  %107 = add i64 %106, 1
  store i64 %107, ptr %36, align 8, !tbaa !23
  %108 = getelementptr inbounds i8, ptr %105, i64 %106
  store i8 31, ptr %108, align 1, !tbaa !30
  %109 = load ptr, ptr %104, align 8, !tbaa !29
  %110 = load i64, ptr %36, align 8, !tbaa !23
  %111 = add i64 %110, 1
  store i64 %111, ptr %36, align 8, !tbaa !23
  %112 = getelementptr inbounds i8, ptr %109, i64 %110
  store i8 -117, ptr %112, align 1, !tbaa !30
  %113 = load ptr, ptr %104, align 8, !tbaa !29
  %114 = load i64, ptr %36, align 8, !tbaa !23
  %115 = add i64 %114, 1
  store i64 %115, ptr %36, align 8, !tbaa !23
  %116 = getelementptr inbounds i8, ptr %113, i64 %114
  store i8 8, ptr %116, align 1, !tbaa !30
  %117 = getelementptr inbounds i8, ptr %8, i64 56
  %118 = load ptr, ptr %117, align 8, !tbaa !31
  %119 = icmp eq ptr %118, null
  br i1 %119, label %120, label %162

120:                                              ; preds = %101
  %121 = load ptr, ptr %104, align 8, !tbaa !29
  %122 = load i64, ptr %36, align 8, !tbaa !23
  %123 = add i64 %122, 1
  store i64 %123, ptr %36, align 8, !tbaa !23
  %124 = getelementptr inbounds i8, ptr %121, i64 %122
  store i8 0, ptr %124, align 1, !tbaa !30
  %125 = load ptr, ptr %104, align 8, !tbaa !29
  %126 = load i64, ptr %36, align 8, !tbaa !23
  %127 = add i64 %126, 1
  store i64 %127, ptr %36, align 8, !tbaa !23
  %128 = getelementptr inbounds i8, ptr %125, i64 %126
  store i8 0, ptr %128, align 1, !tbaa !30
  %129 = load ptr, ptr %104, align 8, !tbaa !29
  %130 = load i64, ptr %36, align 8, !tbaa !23
  %131 = add i64 %130, 1
  store i64 %131, ptr %36, align 8, !tbaa !23
  %132 = getelementptr inbounds i8, ptr %129, i64 %130
  store i8 0, ptr %132, align 1, !tbaa !30
  %133 = load ptr, ptr %104, align 8, !tbaa !29
  %134 = load i64, ptr %36, align 8, !tbaa !23
  %135 = add i64 %134, 1
  store i64 %135, ptr %36, align 8, !tbaa !23
  %136 = getelementptr inbounds i8, ptr %133, i64 %134
  store i8 0, ptr %136, align 1, !tbaa !30
  %137 = load ptr, ptr %104, align 8, !tbaa !29
  %138 = load i64, ptr %36, align 8, !tbaa !23
  %139 = add i64 %138, 1
  store i64 %139, ptr %36, align 8, !tbaa !23
  %140 = getelementptr inbounds i8, ptr %137, i64 %138
  store i8 0, ptr %140, align 1, !tbaa !30
  %141 = getelementptr inbounds i8, ptr %8, i64 196
  %142 = load i32, ptr %141, align 4, !tbaa !26
  %143 = icmp eq i32 %142, 9
  br i1 %143, label %150, label %144

144:                                              ; preds = %120
  %145 = getelementptr inbounds i8, ptr %8, i64 200
  %146 = load i32, ptr %145, align 8, !tbaa !25
  %147 = icmp sgt i32 %146, 1
  %148 = icmp slt i32 %142, 2
  %spec.select425 = or i1 %148, %147
  %149 = select i1 %spec.select425, i8 4, i8 0
  br label %150

150:                                              ; preds = %120, %144
  %151 = phi i8 [ %149, %144 ], [ 2, %120 ]
  %152 = load ptr, ptr %104, align 8, !tbaa !29
  %153 = load i64, ptr %36, align 8, !tbaa !23
  %154 = add i64 %153, 1
  store i64 %154, ptr %36, align 8, !tbaa !23
  %155 = getelementptr inbounds i8, ptr %152, i64 %153
  store i8 %151, ptr %155, align 1, !tbaa !30
  %156 = load ptr, ptr %104, align 8, !tbaa !29
  %157 = load i64, ptr %36, align 8, !tbaa !23
  %158 = add i64 %157, 1
  store i64 %158, ptr %36, align 8, !tbaa !23
  %159 = getelementptr inbounds i8, ptr %156, i64 %157
  store i8 3, ptr %159, align 1, !tbaa !30
  store i32 113, ptr %19, align 8, !tbaa !15
  tail call void @flush_pending(ptr noundef nonnull %0)
  %160 = load i64, ptr %36, align 8, !tbaa !23
  %.not400 = icmp eq i64 %160, 0
  br i1 %.not400, label %._crit_edge465, label %161

._crit_edge465:                                   ; preds = %150
  %.pr436.pre = load i32, ptr %19, align 8, !tbaa !15
  br label %277

161:                                              ; preds = %150
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

162:                                              ; preds = %101
  %163 = load i32, ptr %118, align 8, !tbaa !32
  %.not396 = icmp ne i32 %163, 0
  %164 = zext i1 %.not396 to i8
  %165 = getelementptr inbounds i8, ptr %118, i64 68
  %166 = load i32, ptr %165, align 4, !tbaa !34
  %.not397 = icmp eq i32 %166, 0
  %167 = select i1 %.not397, i8 0, i8 2
  %168 = or disjoint i8 %167, %164
  %169 = getelementptr inbounds i8, ptr %118, i64 24
  %170 = load ptr, ptr %169, align 8, !tbaa !35
  %171 = icmp eq ptr %170, null
  %172 = select i1 %171, i8 0, i8 4
  %173 = or disjoint i8 %168, %172
  %174 = getelementptr inbounds i8, ptr %118, i64 40
  %175 = load ptr, ptr %174, align 8, !tbaa !36
  %176 = icmp eq ptr %175, null
  %177 = select i1 %176, i8 0, i8 8
  %178 = or disjoint i8 %173, %177
  %179 = getelementptr inbounds i8, ptr %118, i64 56
  %180 = load ptr, ptr %179, align 8, !tbaa !37
  %181 = icmp eq ptr %180, null
  %182 = select i1 %181, i8 0, i8 16
  %183 = or disjoint i8 %178, %182
  %184 = load ptr, ptr %104, align 8, !tbaa !29
  %185 = load i64, ptr %36, align 8, !tbaa !23
  %186 = add i64 %185, 1
  store i64 %186, ptr %36, align 8, !tbaa !23
  %187 = getelementptr inbounds i8, ptr %184, i64 %185
  store i8 %183, ptr %187, align 1, !tbaa !30
  %188 = load ptr, ptr %117, align 8, !tbaa !31
  %189 = getelementptr inbounds i8, ptr %188, i64 8
  %190 = load i64, ptr %189, align 8, !tbaa !38
  %191 = trunc i64 %190 to i8
  %192 = load ptr, ptr %104, align 8, !tbaa !29
  %193 = load i64, ptr %36, align 8, !tbaa !23
  %194 = add i64 %193, 1
  store i64 %194, ptr %36, align 8, !tbaa !23
  %195 = getelementptr inbounds i8, ptr %192, i64 %193
  store i8 %191, ptr %195, align 1, !tbaa !30
  %196 = load ptr, ptr %117, align 8, !tbaa !31
  %197 = getelementptr inbounds i8, ptr %196, i64 8
  %198 = load i64, ptr %197, align 8, !tbaa !38
  %199 = lshr i64 %198, 8
  %200 = trunc i64 %199 to i8
  %201 = load ptr, ptr %104, align 8, !tbaa !29
  %202 = load i64, ptr %36, align 8, !tbaa !23
  %203 = add i64 %202, 1
  store i64 %203, ptr %36, align 8, !tbaa !23
  %204 = getelementptr inbounds i8, ptr %201, i64 %202
  store i8 %200, ptr %204, align 1, !tbaa !30
  %205 = load ptr, ptr %117, align 8, !tbaa !31
  %206 = getelementptr inbounds i8, ptr %205, i64 8
  %207 = load i64, ptr %206, align 8, !tbaa !38
  %208 = lshr i64 %207, 16
  %209 = trunc i64 %208 to i8
  %210 = load ptr, ptr %104, align 8, !tbaa !29
  %211 = load i64, ptr %36, align 8, !tbaa !23
  %212 = add i64 %211, 1
  store i64 %212, ptr %36, align 8, !tbaa !23
  %213 = getelementptr inbounds i8, ptr %210, i64 %211
  store i8 %209, ptr %213, align 1, !tbaa !30
  %214 = load ptr, ptr %117, align 8, !tbaa !31
  %215 = getelementptr inbounds i8, ptr %214, i64 8
  %216 = load i64, ptr %215, align 8, !tbaa !38
  %217 = lshr i64 %216, 24
  %218 = trunc i64 %217 to i8
  %219 = load ptr, ptr %104, align 8, !tbaa !29
  %220 = load i64, ptr %36, align 8, !tbaa !23
  %221 = add i64 %220, 1
  store i64 %221, ptr %36, align 8, !tbaa !23
  %222 = getelementptr inbounds i8, ptr %219, i64 %220
  store i8 %218, ptr %222, align 1, !tbaa !30
  %223 = getelementptr inbounds i8, ptr %8, i64 196
  %224 = load i32, ptr %223, align 4, !tbaa !26
  %225 = icmp eq i32 %224, 9
  br i1 %225, label %232, label %226

226:                                              ; preds = %162
  %227 = getelementptr inbounds i8, ptr %8, i64 200
  %228 = load i32, ptr %227, align 8, !tbaa !25
  %229 = icmp sgt i32 %228, 1
  %230 = icmp slt i32 %224, 2
  %spec.select426 = or i1 %230, %229
  %231 = select i1 %spec.select426, i8 4, i8 0
  br label %232

232:                                              ; preds = %162, %226
  %233 = phi i8 [ %231, %226 ], [ 2, %162 ]
  %234 = load ptr, ptr %104, align 8, !tbaa !29
  %235 = load i64, ptr %36, align 8, !tbaa !23
  %236 = add i64 %235, 1
  store i64 %236, ptr %36, align 8, !tbaa !23
  %237 = getelementptr inbounds i8, ptr %234, i64 %235
  store i8 %233, ptr %237, align 1, !tbaa !30
  %238 = load ptr, ptr %117, align 8, !tbaa !31
  %239 = getelementptr inbounds i8, ptr %238, i64 20
  %240 = load i32, ptr %239, align 4, !tbaa !39
  %241 = trunc i32 %240 to i8
  %242 = load ptr, ptr %104, align 8, !tbaa !29
  %243 = load i64, ptr %36, align 8, !tbaa !23
  %244 = add i64 %243, 1
  store i64 %244, ptr %36, align 8, !tbaa !23
  %245 = getelementptr inbounds i8, ptr %242, i64 %243
  store i8 %241, ptr %245, align 1, !tbaa !30
  %246 = load ptr, ptr %117, align 8, !tbaa !31
  %247 = getelementptr inbounds i8, ptr %246, i64 24
  %248 = load ptr, ptr %247, align 8, !tbaa !35
  %.not398 = icmp eq ptr %248, null
  br i1 %.not398, label %266, label %249

249:                                              ; preds = %232
  %250 = getelementptr inbounds i8, ptr %246, i64 32
  %251 = load i32, ptr %250, align 8, !tbaa !40
  %252 = trunc i32 %251 to i8
  %253 = load ptr, ptr %104, align 8, !tbaa !29
  %254 = load i64, ptr %36, align 8, !tbaa !23
  %255 = add i64 %254, 1
  store i64 %255, ptr %36, align 8, !tbaa !23
  %256 = getelementptr inbounds i8, ptr %253, i64 %254
  store i8 %252, ptr %256, align 1, !tbaa !30
  %257 = load ptr, ptr %117, align 8, !tbaa !31
  %258 = getelementptr inbounds i8, ptr %257, i64 32
  %259 = load i32, ptr %258, align 8, !tbaa !40
  %260 = lshr i32 %259, 8
  %261 = trunc i32 %260 to i8
  %262 = load ptr, ptr %104, align 8, !tbaa !29
  %263 = load i64, ptr %36, align 8, !tbaa !23
  %264 = add i64 %263, 1
  store i64 %264, ptr %36, align 8, !tbaa !23
  %265 = getelementptr inbounds i8, ptr %262, i64 %263
  store i8 %261, ptr %265, align 1, !tbaa !30
  %.pre464 = load ptr, ptr %117, align 8, !tbaa !31
  br label %266

266:                                              ; preds = %249, %232
  %267 = phi ptr [ %.pre464, %249 ], [ %246, %232 ]
  %268 = getelementptr inbounds i8, ptr %267, i64 68
  %269 = load i32, ptr %268, align 4, !tbaa !34
  %.not399 = icmp eq i32 %269, 0
  br i1 %.not399, label %.thread437, label %270

270:                                              ; preds = %266
  %271 = load i64, ptr %103, align 8, !tbaa !28
  %272 = load ptr, ptr %104, align 8, !tbaa !29
  %273 = load i64, ptr %36, align 8, !tbaa !23
  %274 = trunc i64 %273 to i32
  %275 = tail call i64 @crc32(i64 noundef %271, ptr noundef %272, i32 noundef %274) #4
  store i64 %275, ptr %103, align 8, !tbaa !28
  br label %.thread437

.thread437:                                       ; preds = %266, %270
  %276 = getelementptr inbounds i8, ptr %8, i64 64
  store i64 0, ptr %276, align 8, !tbaa !41
  store i32 69, ptr %19, align 8, !tbaa !15
  br label %278

277:                                              ; preds = %._crit_edge465, %.critedge
  %.pr445 = phi i32 [ %.pr436.pre, %._crit_edge465 ], [ %99, %.critedge ]
  switch i32 %.pr445, label %515 [
    i32 69, label %278
    i32 73, label %372
    i32 91, label %427
    i32 103, label %481
  ]

278:                                              ; preds = %277, %.thread437
  %279 = getelementptr inbounds i8, ptr %8, i64 56
  %280 = load ptr, ptr %279, align 8, !tbaa !31
  %281 = getelementptr inbounds i8, ptr %280, i64 24
  %282 = load ptr, ptr %281, align 8, !tbaa !35
  %.not401 = icmp eq ptr %282, null
  br i1 %.not401, label %.thread442, label %283

283:                                              ; preds = %278
  %284 = load i64, ptr %36, align 8, !tbaa !23
  %285 = getelementptr inbounds i8, ptr %280, i64 32
  %286 = load i32, ptr %285, align 8, !tbaa !40
  %287 = and i32 %286, 65535
  %288 = getelementptr inbounds i8, ptr %8, i64 64
  %289 = load i64, ptr %288, align 8, !tbaa !41
  %290 = trunc i64 %289 to i32
  %291 = sub i32 %287, %290
  %292 = getelementptr inbounds i8, ptr %8, i64 24
  %293 = zext i32 %291 to i64
  %294 = add i64 %284, %293
  %295 = load i64, ptr %292, align 8, !tbaa !42
  %.not405455 = icmp ugt i64 %294, %295
  br i1 %.not405455, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %283
  %296 = getelementptr inbounds i8, ptr %8, i64 16
  %297 = getelementptr inbounds i8, ptr %0, i64 96
  %298 = sub i64 %295, %284
  %299 = trunc i64 %298 to i32
  %300 = load ptr, ptr %296, align 8, !tbaa !29
  %301 = getelementptr inbounds i8, ptr %300, i64 %284
  %302 = getelementptr inbounds i8, ptr %282, i64 %289
  %303 = and i64 %298, 4294967295
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %301, ptr nonnull align 1 %302, i64 %303, i1 false)
  %304 = load i64, ptr %292, align 8, !tbaa !42
  store i64 %304, ptr %36, align 8, !tbaa !23
  %305 = load ptr, ptr %279, align 8, !tbaa !31
  %306 = getelementptr inbounds i8, ptr %305, i64 68
  %307 = load i32, ptr %306, align 4, !tbaa !34
  %.not403.peel = icmp ne i32 %307, 0
  %308 = icmp ugt i64 %304, %284
  %or.cond.peel = select i1 %.not403.peel, i1 %308, i1 false
  br i1 %or.cond.peel, label %309, label %316

309:                                              ; preds = %.lr.ph
  %310 = load i64, ptr %297, align 8, !tbaa !28
  %311 = load ptr, ptr %296, align 8, !tbaa !29
  %312 = getelementptr inbounds i8, ptr %311, i64 %284
  %313 = sub i64 %304, %284
  %314 = trunc i64 %313 to i32
  %315 = tail call i64 @crc32(i64 noundef %310, ptr noundef %312, i32 noundef %314) #4
  store i64 %315, ptr %297, align 8, !tbaa !28
  br label %316

316:                                              ; preds = %309, %.lr.ph
  %317 = load i64, ptr %288, align 8, !tbaa !41
  %318 = add i64 %317, %303
  store i64 %318, ptr %288, align 8, !tbaa !41
  tail call void @flush_pending(ptr noundef nonnull %0)
  %319 = load i64, ptr %36, align 8, !tbaa !23
  %.not404.peel = icmp eq i64 %319, 0
  br i1 %.not404.peel, label %320, label %.thread441

320:                                              ; preds = %316
  %321 = sub i32 %291, %299
  %322 = zext i32 %321 to i64
  %323 = load i64, ptr %292, align 8, !tbaa !42
  %.not405.peel = icmp ult i64 %323, %322
  br i1 %.not405.peel, label %.peel.next, label %._crit_edge.loopexit

324:                                              ; preds = %347
  %325 = sub i32 %.0370457, %329
  %326 = zext i32 %325 to i64
  %327 = load i64, ptr %292, align 8, !tbaa !42
  %.not405 = icmp ult i64 %327, %326
  br i1 %.not405, label %.peel.next, label %._crit_edge.loopexit, !llvm.loop !43

.peel.next:                                       ; preds = %320, %324
  %328 = phi i64 [ %327, %324 ], [ %323, %320 ]
  %.0370457 = phi i32 [ %325, %324 ], [ %321, %320 ]
  %329 = trunc i64 %328 to i32
  %330 = load ptr, ptr %296, align 8, !tbaa !29
  %331 = load ptr, ptr %279, align 8, !tbaa !31
  %332 = getelementptr inbounds i8, ptr %331, i64 24
  %333 = load ptr, ptr %332, align 8, !tbaa !35
  %334 = load i64, ptr %288, align 8, !tbaa !41
  %335 = getelementptr inbounds i8, ptr %333, i64 %334
  %336 = and i64 %328, 4294967295
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %330, ptr align 1 %335, i64 %336, i1 false)
  %337 = load i64, ptr %292, align 8, !tbaa !42
  store i64 %337, ptr %36, align 8, !tbaa !23
  %338 = load ptr, ptr %279, align 8, !tbaa !31
  %339 = getelementptr inbounds i8, ptr %338, i64 68
  %340 = load i32, ptr %339, align 4, !tbaa !34
  %.not403 = icmp ne i32 %340, 0
  %341 = icmp ne i64 %337, 0
  %or.cond = select i1 %.not403, i1 %341, i1 false
  br i1 %or.cond, label %342, label %347

342:                                              ; preds = %.peel.next
  %343 = load i64, ptr %297, align 8, !tbaa !28
  %344 = load ptr, ptr %296, align 8, !tbaa !29
  %345 = trunc i64 %337 to i32
  %346 = tail call i64 @crc32(i64 noundef %343, ptr noundef %344, i32 noundef %345) #4
  store i64 %346, ptr %297, align 8, !tbaa !28
  br label %347

347:                                              ; preds = %342, %.peel.next
  %348 = load i64, ptr %288, align 8, !tbaa !41
  %349 = add i64 %348, %336
  store i64 %349, ptr %288, align 8, !tbaa !41
  tail call void @flush_pending(ptr noundef %0)
  %350 = load i64, ptr %36, align 8, !tbaa !23
  %.not404 = icmp eq i64 %350, 0
  br i1 %.not404, label %324, label %.thread441

.thread441:                                       ; preds = %347, %316
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

._crit_edge.loopexit:                             ; preds = %324, %320
  %.lcssa = phi i64 [ %322, %320 ], [ %326, %324 ]
  %.pre467 = load ptr, ptr %279, align 8, !tbaa !31
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.pre467, i64 24
  %.pre468 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !35
  %.pre469 = load i64, ptr %288, align 8, !tbaa !41
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %283
  %351 = phi i64 [ %289, %283 ], [ %.pre469, %._crit_edge.loopexit ]
  %352 = phi ptr [ %282, %283 ], [ %.pre468, %._crit_edge.loopexit ]
  %.0372.lcssa = phi i64 [ %284, %283 ], [ 0, %._crit_edge.loopexit ]
  %.lcssa450 = phi i64 [ %293, %283 ], [ %.lcssa, %._crit_edge.loopexit ]
  %353 = getelementptr inbounds i8, ptr %8, i64 16
  %354 = load ptr, ptr %353, align 8, !tbaa !29
  %355 = getelementptr inbounds i8, ptr %354, i64 %.0372.lcssa
  %356 = getelementptr inbounds i8, ptr %352, i64 %351
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %355, ptr align 1 %356, i64 %.lcssa450, i1 false)
  %357 = load i64, ptr %36, align 8, !tbaa !23
  %358 = add i64 %357, %.lcssa450
  store i64 %358, ptr %36, align 8, !tbaa !23
  %359 = load ptr, ptr %279, align 8, !tbaa !31
  %360 = getelementptr inbounds i8, ptr %359, i64 68
  %361 = load i32, ptr %360, align 4, !tbaa !34
  %.not402 = icmp ne i32 %361, 0
  %362 = icmp ugt i64 %358, %.0372.lcssa
  %or.cond427 = select i1 %.not402, i1 %362, i1 false
  br i1 %or.cond427, label %363, label %371

363:                                              ; preds = %._crit_edge
  %364 = getelementptr inbounds i8, ptr %0, i64 96
  %365 = load i64, ptr %364, align 8, !tbaa !28
  %366 = load ptr, ptr %353, align 8, !tbaa !29
  %367 = getelementptr inbounds i8, ptr %366, i64 %.0372.lcssa
  %368 = sub i64 %358, %.0372.lcssa
  %369 = trunc i64 %368 to i32
  %370 = tail call i64 @crc32(i64 noundef %365, ptr noundef %367, i32 noundef %369) #4
  store i64 %370, ptr %364, align 8, !tbaa !28
  br label %371

371:                                              ; preds = %._crit_edge, %363
  store i64 0, ptr %288, align 8, !tbaa !41
  br label %.thread442

.thread442:                                       ; preds = %278, %371
  store i32 73, ptr %19, align 8, !tbaa !15
  br label %372

372:                                              ; preds = %277, %.thread442
  %373 = getelementptr inbounds i8, ptr %8, i64 56
  %374 = load ptr, ptr %373, align 8, !tbaa !31
  %375 = getelementptr inbounds i8, ptr %374, i64 40
  %376 = load ptr, ptr %375, align 8, !tbaa !36
  %.not406 = icmp eq ptr %376, null
  br i1 %.not406, label %.thread443, label %377

377:                                              ; preds = %372
  %378 = load i64, ptr %36, align 8, !tbaa !23
  %379 = getelementptr inbounds i8, ptr %8, i64 24
  %380 = getelementptr inbounds i8, ptr %0, i64 96
  %381 = getelementptr inbounds i8, ptr %8, i64 16
  %382 = getelementptr inbounds i8, ptr %8, i64 64
  br label %383

383:                                              ; preds = %400, %377
  %.0367 = phi i64 [ %378, %377 ], [ %.1368, %400 ]
  %384 = load i64, ptr %36, align 8, !tbaa !23
  %385 = load i64, ptr %379, align 8, !tbaa !42
  %386 = icmp eq i64 %384, %385
  %.pre472 = load ptr, ptr %373, align 8, !tbaa !31
  br i1 %386, label %387, label %400

387:                                              ; preds = %383
  %388 = getelementptr inbounds i8, ptr %.pre472, i64 68
  %389 = load i32, ptr %388, align 4, !tbaa !34
  %.not407 = icmp ne i32 %389, 0
  %390 = icmp ugt i64 %384, %.0367
  %or.cond428 = select i1 %.not407, i1 %390, i1 false
  br i1 %or.cond428, label %391, label %398

391:                                              ; preds = %387
  %392 = load i64, ptr %380, align 8, !tbaa !28
  %393 = load ptr, ptr %381, align 8, !tbaa !29
  %394 = getelementptr inbounds i8, ptr %393, i64 %.0367
  %395 = sub i64 %384, %.0367
  %396 = trunc i64 %395 to i32
  %397 = tail call i64 @crc32(i64 noundef %392, ptr noundef %394, i32 noundef %396) #4
  store i64 %397, ptr %380, align 8, !tbaa !28
  br label %398

398:                                              ; preds = %391, %387
  tail call void @flush_pending(ptr noundef %0)
  %399 = load i64, ptr %36, align 8, !tbaa !23
  %.not408 = icmp eq i64 %399, 0
  br i1 %.not408, label %._crit_edge470, label %.critedge430

._crit_edge470:                                   ; preds = %398
  %.pre471 = load ptr, ptr %373, align 8, !tbaa !31
  br label %400

.critedge430:                                     ; preds = %398
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

400:                                              ; preds = %._crit_edge470, %383
  %401 = phi i64 [ %384, %383 ], [ 0, %._crit_edge470 ]
  %402 = phi ptr [ %.pre472, %383 ], [ %.pre471, %._crit_edge470 ]
  %.1368 = phi i64 [ %.0367, %383 ], [ 0, %._crit_edge470 ]
  %403 = getelementptr inbounds i8, ptr %402, i64 40
  %404 = load ptr, ptr %403, align 8, !tbaa !36
  %405 = load i64, ptr %382, align 8, !tbaa !41
  %406 = add i64 %405, 1
  store i64 %406, ptr %382, align 8, !tbaa !41
  %407 = getelementptr inbounds i8, ptr %404, i64 %405
  %408 = load i8, ptr %407, align 1, !tbaa !30
  %409 = load ptr, ptr %381, align 8, !tbaa !29
  %410 = add i64 %401, 1
  store i64 %410, ptr %36, align 8, !tbaa !23
  %411 = getelementptr inbounds i8, ptr %409, i64 %401
  store i8 %408, ptr %411, align 1, !tbaa !30
  %.not409 = icmp eq i8 %408, 0
  br i1 %.not409, label %412, label %383, !llvm.loop !46

412:                                              ; preds = %400
  %413 = load ptr, ptr %373, align 8, !tbaa !31
  %414 = getelementptr inbounds i8, ptr %413, i64 68
  %415 = load i32, ptr %414, align 4, !tbaa !34
  %.not410 = icmp eq i32 %415, 0
  br i1 %.not410, label %426, label %416

416:                                              ; preds = %412
  %417 = load i64, ptr %36, align 8, !tbaa !23
  %418 = icmp ugt i64 %417, %.1368
  br i1 %418, label %419, label %426

419:                                              ; preds = %416
  %420 = load i64, ptr %380, align 8, !tbaa !28
  %421 = load ptr, ptr %381, align 8, !tbaa !29
  %422 = getelementptr inbounds i8, ptr %421, i64 %.1368
  %423 = sub i64 %417, %.1368
  %424 = trunc i64 %423 to i32
  %425 = tail call i64 @crc32(i64 noundef %420, ptr noundef %422, i32 noundef %424) #4
  store i64 %425, ptr %380, align 8, !tbaa !28
  br label %426

426:                                              ; preds = %419, %416, %412
  store i64 0, ptr %382, align 8, !tbaa !41
  br label %.thread443

.thread443:                                       ; preds = %372, %426
  store i32 91, ptr %19, align 8, !tbaa !15
  br label %427

427:                                              ; preds = %277, %.thread443
  %428 = getelementptr inbounds i8, ptr %8, i64 56
  %429 = load ptr, ptr %428, align 8, !tbaa !31
  %430 = getelementptr inbounds i8, ptr %429, i64 56
  %431 = load ptr, ptr %430, align 8, !tbaa !37
  %.not411 = icmp eq ptr %431, null
  br i1 %.not411, label %.thread446, label %432

432:                                              ; preds = %427
  %433 = load i64, ptr %36, align 8, !tbaa !23
  %434 = getelementptr inbounds i8, ptr %8, i64 24
  %435 = getelementptr inbounds i8, ptr %0, i64 96
  %436 = getelementptr inbounds i8, ptr %8, i64 16
  %437 = getelementptr inbounds i8, ptr %8, i64 64
  br label %438

438:                                              ; preds = %455, %432
  %.0364 = phi i64 [ %433, %432 ], [ %.1365, %455 ]
  %439 = load i64, ptr %36, align 8, !tbaa !23
  %440 = load i64, ptr %434, align 8, !tbaa !42
  %441 = icmp eq i64 %439, %440
  %.pre475 = load ptr, ptr %428, align 8, !tbaa !31
  br i1 %441, label %442, label %455

442:                                              ; preds = %438
  %443 = getelementptr inbounds i8, ptr %.pre475, i64 68
  %444 = load i32, ptr %443, align 4, !tbaa !34
  %.not412 = icmp ne i32 %444, 0
  %445 = icmp ugt i64 %439, %.0364
  %or.cond431 = select i1 %.not412, i1 %445, i1 false
  br i1 %or.cond431, label %446, label %453

446:                                              ; preds = %442
  %447 = load i64, ptr %435, align 8, !tbaa !28
  %448 = load ptr, ptr %436, align 8, !tbaa !29
  %449 = getelementptr inbounds i8, ptr %448, i64 %.0364
  %450 = sub i64 %439, %.0364
  %451 = trunc i64 %450 to i32
  %452 = tail call i64 @crc32(i64 noundef %447, ptr noundef %449, i32 noundef %451) #4
  store i64 %452, ptr %435, align 8, !tbaa !28
  br label %453

453:                                              ; preds = %446, %442
  tail call void @flush_pending(ptr noundef %0)
  %454 = load i64, ptr %36, align 8, !tbaa !23
  %.not413 = icmp eq i64 %454, 0
  br i1 %.not413, label %._crit_edge473, label %.critedge433

._crit_edge473:                                   ; preds = %453
  %.pre474 = load ptr, ptr %428, align 8, !tbaa !31
  br label %455

.critedge433:                                     ; preds = %453
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

455:                                              ; preds = %._crit_edge473, %438
  %456 = phi i64 [ %439, %438 ], [ 0, %._crit_edge473 ]
  %457 = phi ptr [ %.pre475, %438 ], [ %.pre474, %._crit_edge473 ]
  %.1365 = phi i64 [ %.0364, %438 ], [ 0, %._crit_edge473 ]
  %458 = getelementptr inbounds i8, ptr %457, i64 56
  %459 = load ptr, ptr %458, align 8, !tbaa !37
  %460 = load i64, ptr %437, align 8, !tbaa !41
  %461 = add i64 %460, 1
  store i64 %461, ptr %437, align 8, !tbaa !41
  %462 = getelementptr inbounds i8, ptr %459, i64 %460
  %463 = load i8, ptr %462, align 1, !tbaa !30
  %464 = load ptr, ptr %436, align 8, !tbaa !29
  %465 = add i64 %456, 1
  store i64 %465, ptr %36, align 8, !tbaa !23
  %466 = getelementptr inbounds i8, ptr %464, i64 %456
  store i8 %463, ptr %466, align 1, !tbaa !30
  %.not414 = icmp eq i8 %463, 0
  br i1 %.not414, label %467, label %438, !llvm.loop !47

467:                                              ; preds = %455
  %468 = load ptr, ptr %428, align 8, !tbaa !31
  %469 = getelementptr inbounds i8, ptr %468, i64 68
  %470 = load i32, ptr %469, align 4, !tbaa !34
  %.not415 = icmp eq i32 %470, 0
  br i1 %.not415, label %.thread446, label %471

471:                                              ; preds = %467
  %472 = load i64, ptr %36, align 8, !tbaa !23
  %473 = icmp ugt i64 %472, %.1365
  br i1 %473, label %474, label %.thread446

474:                                              ; preds = %471
  %475 = load i64, ptr %435, align 8, !tbaa !28
  %476 = load ptr, ptr %436, align 8, !tbaa !29
  %477 = getelementptr inbounds i8, ptr %476, i64 %.1365
  %478 = sub i64 %472, %.1365
  %479 = trunc i64 %478 to i32
  %480 = tail call i64 @crc32(i64 noundef %475, ptr noundef %477, i32 noundef %479) #4
  store i64 %480, ptr %435, align 8, !tbaa !28
  br label %.thread446

.thread446:                                       ; preds = %427, %467, %471, %474
  store i32 103, ptr %19, align 8, !tbaa !15
  br label %481

481:                                              ; preds = %277, %.thread446
  %482 = getelementptr inbounds i8, ptr %8, i64 56
  %483 = load ptr, ptr %482, align 8, !tbaa !31
  %484 = getelementptr inbounds i8, ptr %483, i64 68
  %485 = load i32, ptr %484, align 4, !tbaa !34
  %.not416 = icmp eq i32 %485, 0
  br i1 %.not416, label %512, label %486

486:                                              ; preds = %481
  %487 = load i64, ptr %36, align 8, !tbaa !23
  %488 = add i64 %487, 2
  %489 = getelementptr inbounds i8, ptr %8, i64 24
  %490 = load i64, ptr %489, align 8, !tbaa !42
  %491 = icmp ugt i64 %488, %490
  br i1 %491, label %492, label %495

492:                                              ; preds = %486
  tail call void @flush_pending(ptr noundef %0)
  %493 = load i64, ptr %36, align 8, !tbaa !23
  %.not417 = icmp eq i64 %493, 0
  br i1 %.not417, label %495, label %494

494:                                              ; preds = %492
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

495:                                              ; preds = %492, %486
  %496 = phi i64 [ 0, %492 ], [ %487, %486 ]
  %497 = getelementptr inbounds i8, ptr %0, i64 96
  %498 = load i64, ptr %497, align 8, !tbaa !28
  %499 = trunc i64 %498 to i8
  %500 = getelementptr inbounds i8, ptr %8, i64 16
  %501 = load ptr, ptr %500, align 8, !tbaa !29
  %502 = add i64 %496, 1
  store i64 %502, ptr %36, align 8, !tbaa !23
  %503 = getelementptr inbounds i8, ptr %501, i64 %496
  store i8 %499, ptr %503, align 1, !tbaa !30
  %504 = load i64, ptr %497, align 8, !tbaa !28
  %505 = lshr i64 %504, 8
  %506 = trunc i64 %505 to i8
  %507 = load ptr, ptr %500, align 8, !tbaa !29
  %508 = load i64, ptr %36, align 8, !tbaa !23
  %509 = add i64 %508, 1
  store i64 %509, ptr %36, align 8, !tbaa !23
  %510 = getelementptr inbounds i8, ptr %507, i64 %508
  store i8 %506, ptr %510, align 1, !tbaa !30
  %511 = tail call i64 @crc32(i64 noundef 0, ptr noundef null, i32 noundef 0) #4
  store i64 %511, ptr %497, align 8, !tbaa !28
  br label %512

512:                                              ; preds = %495, %481
  store i32 113, ptr %19, align 8, !tbaa !15
  tail call void @flush_pending(ptr noundef %0)
  %513 = load i64, ptr %36, align 8, !tbaa !23
  %.not418 = icmp eq i64 %513, 0
  br i1 %.not418, label %515, label %514

514:                                              ; preds = %512
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

515:                                              ; preds = %277, %512
  %.pr = load i32, ptr %13, align 8, !tbaa !13
  %.not419 = icmp eq i32 %.pr, 0
  br i1 %.not419, label %.thread480, label %521

.thread480:                                       ; preds = %56, %515
  %516 = getelementptr inbounds i8, ptr %8, i64 180
  %517 = load i32, ptr %516, align 4, !tbaa !48
  %.not420 = icmp eq i32 %517, 0
  br i1 %.not420, label %518, label %521

518:                                              ; preds = %.thread480
  %.not421 = icmp eq i32 %1, 0
  br i1 %.not421, label %.critedge435, label %519

519:                                              ; preds = %518
  %520 = load i32, ptr %19, align 8, !tbaa !15
  %.not422 = icmp eq i32 %520, 666
  br i1 %.not422, label %575, label %521

521:                                              ; preds = %519, %.thread480, %515
  %522 = getelementptr inbounds i8, ptr %8, i64 196
  %523 = load i32, ptr %522, align 4, !tbaa !26
  %524 = icmp eq i32 %523, 0
  br i1 %524, label %525, label %527

525:                                              ; preds = %521
  %526 = tail call i32 @deflate_stored(ptr noundef nonnull %8, i32 noundef %1)
  br label %539

527:                                              ; preds = %521
  %528 = getelementptr inbounds i8, ptr %8, i64 200
  %529 = load i32, ptr %528, align 8, !tbaa !25
  switch i32 %529, label %534 [
    i32 2, label %530
    i32 3, label %532
  ]

530:                                              ; preds = %527
  %531 = tail call i32 @deflate_huff(ptr noundef nonnull %8, i32 noundef %1)
  br label %539

532:                                              ; preds = %527
  %533 = tail call i32 @deflate_rle(ptr noundef nonnull %8, i32 noundef %1)
  br label %539

534:                                              ; preds = %527
  %535 = sext i32 %523 to i64
  %536 = getelementptr inbounds [10 x %struct.config_s], ptr @configuration_table, i64 0, i64 %535, i32 4
  %537 = load ptr, ptr %536, align 8, !tbaa !49
  %538 = tail call i32 %537(ptr noundef nonnull %8, i32 noundef %1) #4
  br label %539

539:                                              ; preds = %530, %534, %532, %525
  %540 = phi i32 [ %526, %525 ], [ %531, %530 ], [ %533, %532 ], [ %538, %534 ]
  %541 = and i32 %540, -2
  %or.cond14 = icmp eq i32 %541, 2
  br i1 %or.cond14, label %542, label %543

542:                                              ; preds = %539
  store i32 666, ptr %19, align 8, !tbaa !15
  br label %543

543:                                              ; preds = %539, %542
  %544 = and i32 %540, -3
  %or.cond16 = icmp eq i32 %544, 0
  br i1 %or.cond16, label %545, label %549

545:                                              ; preds = %543
  %546 = load i32, ptr %27, align 8, !tbaa !21
  %547 = icmp eq i32 %546, 0
  br i1 %547, label %548, label %.critedge435

548:                                              ; preds = %545
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

549:                                              ; preds = %543
  %550 = icmp eq i32 %540, 1
  br i1 %550, label %551, label %575

551:                                              ; preds = %549
  switch i32 %1, label %553 [
    i32 1, label %552
    i32 5, label %571
  ]

552:                                              ; preds = %551
  tail call void @_tr_align(ptr noundef nonnull %8) #4
  br label %571

553:                                              ; preds = %551
  tail call void @_tr_stored_block(ptr noundef nonnull %8, ptr noundef null, i64 noundef 0, i32 noundef 0) #4
  %554 = icmp eq i32 %1, 3
  br i1 %554, label %555, label %571

555:                                              ; preds = %553
  %556 = getelementptr inbounds i8, ptr %8, i64 120
  %557 = load ptr, ptr %556, align 8, !tbaa !51
  %558 = getelementptr inbounds i8, ptr %8, i64 132
  %559 = load i32, ptr %558, align 4, !tbaa !52
  %560 = add i32 %559, -1
  %561 = zext i32 %560 to i64
  %562 = getelementptr inbounds i16, ptr %557, i64 %561
  store i16 0, ptr %562, align 2, !tbaa !53
  %563 = shl nuw nsw i64 %561, 1
  tail call void @llvm.memset.p0.i64(ptr align 1 %557, i8 0, i64 %563, i1 false)
  %564 = getelementptr inbounds i8, ptr %8, i64 180
  %565 = load i32, ptr %564, align 4, !tbaa !48
  %566 = icmp eq i32 %565, 0
  br i1 %566, label %567, label %571

567:                                              ; preds = %555
  %568 = getelementptr inbounds i8, ptr %8, i64 172
  store i32 0, ptr %568, align 4, !tbaa !27
  %569 = getelementptr inbounds i8, ptr %8, i64 152
  store i64 0, ptr %569, align 8, !tbaa !54
  %570 = getelementptr inbounds i8, ptr %8, i64 5932
  store i32 0, ptr %570, align 4, !tbaa !55
  br label %571

571:                                              ; preds = %551, %555, %567, %553, %552
  tail call void @flush_pending(ptr noundef nonnull %0)
  %572 = load i32, ptr %27, align 8, !tbaa !21
  %573 = icmp eq i32 %572, 0
  br i1 %573, label %574, label %575

574:                                              ; preds = %571
  store i32 -1, ptr %34, align 4, !tbaa !22
  br label %.critedge435

575:                                              ; preds = %571, %549, %519
  br i1 %22, label %.critedge435, label %576

576:                                              ; preds = %575
  %577 = getelementptr inbounds i8, ptr %8, i64 48
  %578 = load i32, ptr %577, align 8, !tbaa !56
  %579 = icmp slt i32 %578, 1
  br i1 %579, label %.critedge435, label %580

580:                                              ; preds = %576
  %581 = icmp eq i32 %578, 2
  %582 = getelementptr inbounds i8, ptr %0, i64 96
  %583 = load i64, ptr %582, align 8, !tbaa !28
  br i1 %581, label %584, label %640

584:                                              ; preds = %580
  %585 = trunc i64 %583 to i8
  %586 = getelementptr inbounds i8, ptr %8, i64 16
  %587 = load ptr, ptr %586, align 8, !tbaa !29
  %588 = load i64, ptr %36, align 8, !tbaa !23
  %589 = add i64 %588, 1
  store i64 %589, ptr %36, align 8, !tbaa !23
  %590 = getelementptr inbounds i8, ptr %587, i64 %588
  store i8 %585, ptr %590, align 1, !tbaa !30
  %591 = load i64, ptr %582, align 8, !tbaa !28
  %592 = lshr i64 %591, 8
  %593 = trunc i64 %592 to i8
  %594 = load ptr, ptr %586, align 8, !tbaa !29
  %595 = load i64, ptr %36, align 8, !tbaa !23
  %596 = add i64 %595, 1
  store i64 %596, ptr %36, align 8, !tbaa !23
  %597 = getelementptr inbounds i8, ptr %594, i64 %595
  store i8 %593, ptr %597, align 1, !tbaa !30
  %598 = load i64, ptr %582, align 8, !tbaa !28
  %599 = lshr i64 %598, 16
  %600 = trunc i64 %599 to i8
  %601 = load ptr, ptr %586, align 8, !tbaa !29
  %602 = load i64, ptr %36, align 8, !tbaa !23
  %603 = add i64 %602, 1
  store i64 %603, ptr %36, align 8, !tbaa !23
  %604 = getelementptr inbounds i8, ptr %601, i64 %602
  store i8 %600, ptr %604, align 1, !tbaa !30
  %605 = load i64, ptr %582, align 8, !tbaa !28
  %606 = lshr i64 %605, 24
  %607 = trunc i64 %606 to i8
  %608 = load ptr, ptr %586, align 8, !tbaa !29
  %609 = load i64, ptr %36, align 8, !tbaa !23
  %610 = add i64 %609, 1
  store i64 %610, ptr %36, align 8, !tbaa !23
  %611 = getelementptr inbounds i8, ptr %608, i64 %609
  store i8 %607, ptr %611, align 1, !tbaa !30
  %612 = getelementptr inbounds i8, ptr %0, i64 16
  %613 = load i64, ptr %612, align 8, !tbaa !57
  %614 = trunc i64 %613 to i8
  %615 = load ptr, ptr %586, align 8, !tbaa !29
  %616 = load i64, ptr %36, align 8, !tbaa !23
  %617 = add i64 %616, 1
  store i64 %617, ptr %36, align 8, !tbaa !23
  %618 = getelementptr inbounds i8, ptr %615, i64 %616
  store i8 %614, ptr %618, align 1, !tbaa !30
  %619 = load i64, ptr %612, align 8, !tbaa !57
  %620 = lshr i64 %619, 8
  %621 = trunc i64 %620 to i8
  %622 = load ptr, ptr %586, align 8, !tbaa !29
  %623 = load i64, ptr %36, align 8, !tbaa !23
  %624 = add i64 %623, 1
  store i64 %624, ptr %36, align 8, !tbaa !23
  %625 = getelementptr inbounds i8, ptr %622, i64 %623
  store i8 %621, ptr %625, align 1, !tbaa !30
  %626 = load i64, ptr %612, align 8, !tbaa !57
  %627 = lshr i64 %626, 16
  %628 = trunc i64 %627 to i8
  %629 = load ptr, ptr %586, align 8, !tbaa !29
  %630 = load i64, ptr %36, align 8, !tbaa !23
  %631 = add i64 %630, 1
  store i64 %631, ptr %36, align 8, !tbaa !23
  %632 = getelementptr inbounds i8, ptr %629, i64 %630
  store i8 %628, ptr %632, align 1, !tbaa !30
  %633 = load i64, ptr %612, align 8, !tbaa !57
  %634 = lshr i64 %633, 24
  %635 = trunc i64 %634 to i8
  %636 = load ptr, ptr %586, align 8, !tbaa !29
  %637 = load i64, ptr %36, align 8, !tbaa !23
  %638 = add i64 %637, 1
  store i64 %638, ptr %36, align 8, !tbaa !23
  %639 = getelementptr inbounds i8, ptr %636, i64 %637
  store i8 %635, ptr %639, align 1, !tbaa !30
  br label %646

640:                                              ; preds = %580
  %641 = lshr i64 %583, 16
  %642 = trunc i64 %641 to i32
  tail call void @putShortMSB(ptr noundef nonnull %8, i32 noundef %642)
  %643 = load i64, ptr %582, align 8, !tbaa !28
  %644 = trunc i64 %643 to i32
  %645 = and i32 %644, 65535
  tail call void @putShortMSB(ptr noundef nonnull %8, i32 noundef %645)
  br label %646

646:                                              ; preds = %640, %584
  tail call void @flush_pending(ptr noundef nonnull %0)
  %647 = load i32, ptr %577, align 8, !tbaa !56
  %648 = icmp sgt i32 %647, 0
  br i1 %648, label %649, label %651

649:                                              ; preds = %646
  %650 = sub nsw i32 0, %647
  store i32 %650, ptr %577, align 8, !tbaa !56
  br label %651

651:                                              ; preds = %649, %646
  %652 = load i64, ptr %36, align 8, !tbaa !23
  %.not424 = icmp eq i64 %652, 0
  %653 = zext i1 %.not424 to i32
  br label %.critedge435

.critedge435:                                     ; preds = %518, %.thread441, %98, %574, %548, %545, %576, %575, %.critedge433, %.critedge430, %2, %651, %514, %494, %161, %58, %51, %41, %30, %23
  %.14 = phi i32 [ -2, %23 ], [ -5, %30 ], [ 0, %41 ], [ -5, %58 ], [ 0, %161 ], [ 0, %494 ], [ 0, %514 ], [ %653, %651 ], [ 0, %98 ], [ -5, %51 ], [ -2, %2 ], [ 0, %.critedge430 ], [ 0, %.critedge433 ], [ 0, %575 ], [ 1, %576 ], [ 0, %545 ], [ 0, %548 ], [ 0, %574 ], [ 0, %.thread441 ], [ 0, %518 ]
  ret i32 %.14
}

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

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

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

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

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

declare void @_tr_align(ptr noundef) local_unnamed_addr #1

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !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, !10, i64 8}
!14 = !{!6, !7, i64 0}
!15 = !{!16, !10, i64 8}
!16 = !{!"internal_state", !7, i64 0, !10, i64 8, !7, i64 16, !11, i64 24, !7, i64 32, !11, i64 40, !10, i64 48, !7, i64 56, !11, i64 64, !8, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !7, i64 96, !11, i64 104, !7, i64 112, !7, i64 120, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !11, i64 152, !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, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !8, i64 212, !8, i64 2504, !8, i64 2748, !17, i64 2904, !17, i64 2928, !17, i64 2952, !8, i64 2976, !8, i64 3008, !10, i64 5300, !10, i64 5304, !8, i64 5308, !7, i64 5888, !10, i64 5896, !10, i64 5900, !7, i64 5904, !11, i64 5912, !11, i64 5920, !10, i64 5928, !10, i64 5932, !18, i64 5936, !10, i64 5940, !11, i64 5944}
!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, !10, i64 76}
!23 = !{!16, !11, i64 40}
!24 = !{!16, !10, i64 84}
!25 = !{!16, !10, i64 200}
!26 = !{!16, !10, i64 196}
!27 = !{!16, !10, i64 172}
!28 = !{!6, !11, i64 96}
!29 = !{!16, !7, i64 16}
!30 = !{!8, !8, i64 0}
!31 = !{!16, !7, i64 56}
!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, !11, i64 64}
!42 = !{!16, !11, i64 24}
!43 = distinct !{!43, !44, !45}
!44 = !{!"llvm.loop.mustprogress"}
!45 = !{!"llvm.loop.peeled.count", i32 1}
!46 = distinct !{!46, !44}
!47 = distinct !{!47, !44}
!48 = !{!16, !10, i64 180}
!49 = !{!50, !7, i64 8}
!50 = !{!"config_s", !18, i64 0, !18, i64 2, !18, i64 4, !18, i64 6, !7, i64 8}
!51 = !{!16, !7, i64 120}
!52 = !{!16, !10, i64 132}
!53 = !{!18, !18, i64 0}
!54 = !{!16, !11, i64 152}
!55 = !{!16, !10, i64 5932}
!56 = !{!16, !10, i64 48}
!57 = !{!6, !11, i64 16}


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