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

; 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.code = type { i8, i8, i16 }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.inflate_state = type { i32, i32, i32, i32, i32, i32, i64, i64, ptr, i32, i32, i32, i32, ptr, i64, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, i32, i32, i32, ptr, [320 x i16], [288 x i16], [1444 x %struct.code], i32, i32, i32 }

@inflateBack.order = external hidden constant [19 x i16], align 16
@.str.1 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1

; 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
define dso_local i32 @inflateBack(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #1 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca %struct.code, align 2
  %22 = alloca %struct.code, align 2
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %26 = load ptr, ptr %7, align 8, !tbaa !5
  %27 = icmp eq ptr %26, null
  br i1 %27, label %33, label %28

28:                                               ; preds = %5
  %29 = load ptr, ptr %7, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.z_stream_s, ptr %29, i32 0, i32 7
  %31 = load ptr, ptr %30, align 8, !tbaa !9
  %32 = icmp eq ptr %31, null
  br i1 %32, label %33, label %34

33:                                               ; preds = %28, %5
  store i32 -2, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %1804

34:                                               ; preds = %28
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.z_stream_s, ptr %35, i32 0, i32 7
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  store ptr %37, ptr %12, align 8, !tbaa !5
  %38 = load ptr, ptr %7, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.z_stream_s, ptr %38, i32 0, i32 6
  store ptr null, ptr %39, align 8, !tbaa !13
  %40 = load ptr, ptr %12, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.inflate_state, ptr %40, i32 0, i32 0
  store i32 11, ptr %41, align 8, !tbaa !14
  %42 = load ptr, ptr %12, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.inflate_state, ptr %42, i32 0, i32 1
  store i32 0, ptr %43, align 4, !tbaa !16
  %44 = load ptr, ptr %12, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.inflate_state, ptr %44, i32 0, i32 11
  store i32 0, ptr %45, align 8, !tbaa !17
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.z_stream_s, ptr %46, i32 0, i32 0
  %48 = load ptr, ptr %47, align 8, !tbaa !18
  store ptr %48, ptr %13, align 8, !tbaa !5
  %49 = load ptr, ptr %13, align 8, !tbaa !5
  %50 = icmp ne ptr %49, null
  br i1 %50, label %51, label %55

51:                                               ; preds = %34
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.z_stream_s, ptr %52, i32 0, i32 1
  %54 = load i32, ptr %53, align 8, !tbaa !19
  br label %56

55:                                               ; preds = %34
  br label %56

56:                                               ; preds = %55, %51
  %57 = phi i32 [ %54, %51 ], [ 0, %55 ]
  store i32 %57, ptr %15, align 4, !tbaa !20
  store i64 0, ptr %17, align 8, !tbaa !21
  store i32 0, ptr %18, align 4, !tbaa !20
  %58 = load ptr, ptr %12, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.inflate_state, ptr %58, i32 0, i32 13
  %60 = load ptr, ptr %59, align 8, !tbaa !22
  store ptr %60, ptr %14, align 8, !tbaa !5
  %61 = load ptr, ptr %12, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.inflate_state, ptr %61, i32 0, i32 10
  %63 = load i32, ptr %62, align 4, !tbaa !23
  store i32 %63, ptr %16, align 4, !tbaa !20
  br label %64

64:                                               ; preds = %1795, %56
  %65 = load ptr, ptr %12, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.inflate_state, ptr %65, i32 0, i32 0
  %67 = load i32, ptr %66, align 8, !tbaa !14
  switch i32 %67, label %1794 [
    i32 11, label %68
    i32 13, label %165
    i32 16, label %321
    i32 20, label %1033
    i32 28, label %1771
    i32 29, label %1793
  ]

68:                                               ; preds = %64
  %69 = load ptr, ptr %12, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.inflate_state, ptr %69, i32 0, i32 1
  %71 = load i32, ptr %70, align 4, !tbaa !16
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %88

73:                                               ; preds = %68
  br label %74

74:                                               ; preds = %73
  %75 = load i32, ptr %18, align 4, !tbaa !20
  %76 = and i32 %75, 7
  %77 = load i64, ptr %17, align 8, !tbaa !21
  %78 = zext i32 %76 to i64
  %79 = lshr i64 %77, %78
  store i64 %79, ptr %17, align 8, !tbaa !21
  %80 = load i32, ptr %18, align 4, !tbaa !20
  %81 = and i32 %80, 7
  %82 = load i32, ptr %18, align 4, !tbaa !20
  %83 = sub i32 %82, %81
  store i32 %83, ptr %18, align 4, !tbaa !20
  br label %84

84:                                               ; preds = %74
  br label %85

85:                                               ; preds = %84
  %86 = load ptr, ptr %12, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.inflate_state, ptr %86, i32 0, i32 0
  store i32 28, ptr %87, align 8, !tbaa !14
  br label %1795

88:                                               ; preds = %68
  br label %89

89:                                               ; preds = %88
  br label %90

90:                                               ; preds = %123, %89
  %91 = load i32, ptr %18, align 4, !tbaa !20
  %92 = icmp ult i32 %91, 3
  br i1 %92, label %93, label %124

93:                                               ; preds = %90
  br label %94

94:                                               ; preds = %93
  br label %95

95:                                               ; preds = %94
  %96 = load i32, ptr %15, align 4, !tbaa !20
  %97 = icmp eq i32 %96, 0
  br i1 %97, label %98, label %106

98:                                               ; preds = %95
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = call i32 %99(ptr noundef %100, ptr noundef %13)
  store i32 %101, ptr %15, align 4, !tbaa !20
  %102 = load i32, ptr %15, align 4, !tbaa !20
  %103 = icmp eq i32 %102, 0
  br i1 %103, label %104, label %105

104:                                              ; preds = %98
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

105:                                              ; preds = %98
  br label %106

106:                                              ; preds = %105, %95
  br label %107

107:                                              ; preds = %106
  br label %108

108:                                              ; preds = %107
  %109 = load i32, ptr %15, align 4, !tbaa !20
  %110 = add i32 %109, -1
  store i32 %110, ptr %15, align 4, !tbaa !20
  %111 = load ptr, ptr %13, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i32 1
  store ptr %112, ptr %13, align 8, !tbaa !5
  %113 = load i8, ptr %111, align 1, !tbaa !24
  %114 = zext i8 %113 to i64
  %115 = load i32, ptr %18, align 4, !tbaa !20
  %116 = zext i32 %115 to i64
  %117 = shl i64 %114, %116
  %118 = load i64, ptr %17, align 8, !tbaa !21
  %119 = add i64 %118, %117
  store i64 %119, ptr %17, align 8, !tbaa !21
  %120 = load i32, ptr %18, align 4, !tbaa !20
  %121 = add i32 %120, 8
  store i32 %121, ptr %18, align 4, !tbaa !20
  br label %122

122:                                              ; preds = %108
  br label %123

123:                                              ; preds = %122
  br label %90, !llvm.loop !25

124:                                              ; preds = %90
  br label %125

125:                                              ; preds = %124
  br label %126

126:                                              ; preds = %125
  %127 = load i64, ptr %17, align 8, !tbaa !21
  %128 = trunc i64 %127 to i32
  %129 = and i32 %128, 1
  %130 = load ptr, ptr %12, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.inflate_state, ptr %130, i32 0, i32 1
  store i32 %129, ptr %131, align 4, !tbaa !16
  br label %132

132:                                              ; preds = %126
  %133 = load i64, ptr %17, align 8, !tbaa !21
  %134 = lshr i64 %133, 1
  store i64 %134, ptr %17, align 8, !tbaa !21
  %135 = load i32, ptr %18, align 4, !tbaa !20
  %136 = sub i32 %135, 1
  store i32 %136, ptr %18, align 4, !tbaa !20
  br label %137

137:                                              ; preds = %132
  br label %138

138:                                              ; preds = %137
  %139 = load i64, ptr %17, align 8, !tbaa !21
  %140 = trunc i64 %139 to i32
  %141 = and i32 %140, 3
  switch i32 %141, label %157 [
    i32 0, label %142
    i32 1, label %145
    i32 2, label %149
    i32 3, label %152
  ]

142:                                              ; preds = %138
  %143 = load ptr, ptr %12, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.inflate_state, ptr %143, i32 0, i32 0
  store i32 13, ptr %144, align 8, !tbaa !14
  br label %157

145:                                              ; preds = %138
  %146 = load ptr, ptr %12, align 8, !tbaa !5
  call void @fixedtables(ptr noundef %146)
  %147 = load ptr, ptr %12, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.inflate_state, ptr %147, i32 0, i32 0
  store i32 20, ptr %148, align 8, !tbaa !14
  br label %157

149:                                              ; preds = %138
  %150 = load ptr, ptr %12, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.inflate_state, ptr %150, i32 0, i32 0
  store i32 16, ptr %151, align 8, !tbaa !14
  br label %157

152:                                              ; preds = %138
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.z_stream_s, ptr %153, i32 0, i32 6
  store ptr @.str.1, ptr %154, align 8, !tbaa !13
  %155 = load ptr, ptr %12, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.inflate_state, ptr %155, i32 0, i32 0
  store i32 29, ptr %156, align 8, !tbaa !14
  br label %157

157:                                              ; preds = %152, %149, %145, %142, %138
  br label %158

158:                                              ; preds = %157
  %159 = load i64, ptr %17, align 8, !tbaa !21
  %160 = lshr i64 %159, 2
  store i64 %160, ptr %17, align 8, !tbaa !21
  %161 = load i32, ptr %18, align 4, !tbaa !20
  %162 = sub i32 %161, 2
  store i32 %162, ptr %18, align 4, !tbaa !20
  br label %163

163:                                              ; preds = %158
  br label %164

164:                                              ; preds = %163
  br label %1795

165:                                              ; preds = %64
  br label %166

166:                                              ; preds = %165
  %167 = load i32, ptr %18, align 4, !tbaa !20
  %168 = and i32 %167, 7
  %169 = load i64, ptr %17, align 8, !tbaa !21
  %170 = zext i32 %168 to i64
  %171 = lshr i64 %169, %170
  store i64 %171, ptr %17, align 8, !tbaa !21
  %172 = load i32, ptr %18, align 4, !tbaa !20
  %173 = and i32 %172, 7
  %174 = load i32, ptr %18, align 4, !tbaa !20
  %175 = sub i32 %174, %173
  store i32 %175, ptr %18, align 4, !tbaa !20
  br label %176

176:                                              ; preds = %166
  br label %177

177:                                              ; preds = %176
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %212, %178
  %180 = load i32, ptr %18, align 4, !tbaa !20
  %181 = icmp ult i32 %180, 32
  br i1 %181, label %182, label %213

182:                                              ; preds = %179
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  %185 = load i32, ptr %15, align 4, !tbaa !20
  %186 = icmp eq i32 %185, 0
  br i1 %186, label %187, label %195

187:                                              ; preds = %184
  %188 = load ptr, ptr %8, align 8, !tbaa !5
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = call i32 %188(ptr noundef %189, ptr noundef %13)
  store i32 %190, ptr %15, align 4, !tbaa !20
  %191 = load i32, ptr %15, align 4, !tbaa !20
  %192 = icmp eq i32 %191, 0
  br i1 %192, label %193, label %194

193:                                              ; preds = %187
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

194:                                              ; preds = %187
  br label %195

195:                                              ; preds = %194, %184
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  %198 = load i32, ptr %15, align 4, !tbaa !20
  %199 = add i32 %198, -1
  store i32 %199, ptr %15, align 4, !tbaa !20
  %200 = load ptr, ptr %13, align 8, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %200, i32 1
  store ptr %201, ptr %13, align 8, !tbaa !5
  %202 = load i8, ptr %200, align 1, !tbaa !24
  %203 = zext i8 %202 to i64
  %204 = load i32, ptr %18, align 4, !tbaa !20
  %205 = zext i32 %204 to i64
  %206 = shl i64 %203, %205
  %207 = load i64, ptr %17, align 8, !tbaa !21
  %208 = add i64 %207, %206
  store i64 %208, ptr %17, align 8, !tbaa !21
  %209 = load i32, ptr %18, align 4, !tbaa !20
  %210 = add i32 %209, 8
  store i32 %210, ptr %18, align 4, !tbaa !20
  br label %211

211:                                              ; preds = %197
  br label %212

212:                                              ; preds = %211
  br label %179, !llvm.loop !27

213:                                              ; preds = %179
  br label %214

214:                                              ; preds = %213
  br label %215

215:                                              ; preds = %214
  %216 = load i64, ptr %17, align 8, !tbaa !21
  %217 = and i64 %216, 65535
  %218 = load i64, ptr %17, align 8, !tbaa !21
  %219 = lshr i64 %218, 16
  %220 = xor i64 %219, 65535
  %221 = icmp ne i64 %217, %220
  br i1 %221, label %222, label %227

222:                                              ; preds = %215
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.z_stream_s, ptr %223, i32 0, i32 6
  store ptr @.str.2, ptr %224, align 8, !tbaa !13
  %225 = load ptr, ptr %12, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.inflate_state, ptr %225, i32 0, i32 0
  store i32 29, ptr %226, align 8, !tbaa !14
  br label %1795

227:                                              ; preds = %215
  %228 = load i64, ptr %17, align 8, !tbaa !21
  %229 = trunc i64 %228 to i32
  %230 = and i32 %229, 65535
  %231 = load ptr, ptr %12, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.inflate_state, ptr %231, i32 0, i32 16
  store i32 %230, ptr %232, align 4, !tbaa !28
  br label %233

233:                                              ; preds = %227
  store i64 0, ptr %17, align 8, !tbaa !21
  store i32 0, ptr %18, align 4, !tbaa !20
  br label %234

234:                                              ; preds = %233
  br label %235

235:                                              ; preds = %234
  br label %236

236:                                              ; preds = %294, %235
  %237 = load ptr, ptr %12, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.inflate_state, ptr %237, i32 0, i32 16
  %239 = load i32, ptr %238, align 4, !tbaa !28
  %240 = icmp ne i32 %239, 0
  br i1 %240, label %241, label %318

241:                                              ; preds = %236
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.inflate_state, ptr %242, i32 0, i32 16
  %244 = load i32, ptr %243, align 4, !tbaa !28
  store i32 %244, ptr %19, align 4, !tbaa !20
  br label %245

245:                                              ; preds = %241
  %246 = load i32, ptr %15, align 4, !tbaa !20
  %247 = icmp eq i32 %246, 0
  br i1 %247, label %248, label %256

248:                                              ; preds = %245
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = load ptr, ptr %9, align 8, !tbaa !5
  %251 = call i32 %249(ptr noundef %250, ptr noundef %13)
  store i32 %251, ptr %15, align 4, !tbaa !20
  %252 = load i32, ptr %15, align 4, !tbaa !20
  %253 = icmp eq i32 %252, 0
  br i1 %253, label %254, label %255

254:                                              ; preds = %248
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

255:                                              ; preds = %248
  br label %256

256:                                              ; preds = %255, %245
  br label %257

257:                                              ; preds = %256
  br label %258

258:                                              ; preds = %257
  br label %259

259:                                              ; preds = %258
  %260 = load i32, ptr %16, align 4, !tbaa !20
  %261 = icmp eq i32 %260, 0
  br i1 %261, label %262, label %280

262:                                              ; preds = %259
  %263 = load ptr, ptr %12, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.inflate_state, ptr %263, i32 0, i32 13
  %265 = load ptr, ptr %264, align 8, !tbaa !22
  store ptr %265, ptr %14, align 8, !tbaa !5
  %266 = load ptr, ptr %12, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.inflate_state, ptr %266, i32 0, i32 10
  %268 = load i32, ptr %267, align 4, !tbaa !23
  store i32 %268, ptr %16, align 4, !tbaa !20
  %269 = load i32, ptr %16, align 4, !tbaa !20
  %270 = load ptr, ptr %12, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.inflate_state, ptr %270, i32 0, i32 11
  store i32 %269, ptr %271, align 8, !tbaa !17
  %272 = load ptr, ptr %10, align 8, !tbaa !5
  %273 = load ptr, ptr %11, align 8, !tbaa !5
  %274 = load ptr, ptr %14, align 8, !tbaa !5
  %275 = load i32, ptr %16, align 4, !tbaa !20
  %276 = call i32 %272(ptr noundef %273, ptr noundef %274, i32 noundef %275)
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %279

278:                                              ; preds = %262
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

279:                                              ; preds = %262
  br label %280

280:                                              ; preds = %279, %259
  br label %281

281:                                              ; preds = %280
  br label %282

282:                                              ; preds = %281
  %283 = load i32, ptr %19, align 4, !tbaa !20
  %284 = load i32, ptr %15, align 4, !tbaa !20
  %285 = icmp ugt i32 %283, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %282
  %287 = load i32, ptr %15, align 4, !tbaa !20
  store i32 %287, ptr %19, align 4, !tbaa !20
  br label %288

288:                                              ; preds = %286, %282
  %289 = load i32, ptr %19, align 4, !tbaa !20
  %290 = load i32, ptr %16, align 4, !tbaa !20
  %291 = icmp ugt i32 %289, %290
  br i1 %291, label %292, label %294

292:                                              ; preds = %288
  %293 = load i32, ptr %16, align 4, !tbaa !20
  store i32 %293, ptr %19, align 4, !tbaa !20
  br label %294

294:                                              ; preds = %292, %288
  %295 = load ptr, ptr %14, align 8, !tbaa !5
  %296 = load ptr, ptr %13, align 8, !tbaa !5
  %297 = load i32, ptr %19, align 4, !tbaa !20
  %298 = zext i32 %297 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %295, ptr align 1 %296, i64 %298, i1 false)
  %299 = load i32, ptr %19, align 4, !tbaa !20
  %300 = load i32, ptr %15, align 4, !tbaa !20
  %301 = sub i32 %300, %299
  store i32 %301, ptr %15, align 4, !tbaa !20
  %302 = load i32, ptr %19, align 4, !tbaa !20
  %303 = load ptr, ptr %13, align 8, !tbaa !5
  %304 = zext i32 %302 to i64
  %305 = getelementptr inbounds i8, ptr %303, i64 %304
  store ptr %305, ptr %13, align 8, !tbaa !5
  %306 = load i32, ptr %19, align 4, !tbaa !20
  %307 = load i32, ptr %16, align 4, !tbaa !20
  %308 = sub i32 %307, %306
  store i32 %308, ptr %16, align 4, !tbaa !20
  %309 = load i32, ptr %19, align 4, !tbaa !20
  %310 = load ptr, ptr %14, align 8, !tbaa !5
  %311 = zext i32 %309 to i64
  %312 = getelementptr inbounds i8, ptr %310, i64 %311
  store ptr %312, ptr %14, align 8, !tbaa !5
  %313 = load i32, ptr %19, align 4, !tbaa !20
  %314 = load ptr, ptr %12, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.inflate_state, ptr %314, i32 0, i32 16
  %316 = load i32, ptr %315, align 4, !tbaa !28
  %317 = sub i32 %316, %313
  store i32 %317, ptr %315, align 4, !tbaa !28
  br label %236, !llvm.loop !29

318:                                              ; preds = %236
  %319 = load ptr, ptr %12, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.inflate_state, ptr %319, i32 0, i32 0
  store i32 11, ptr %320, align 8, !tbaa !14
  br label %1795

321:                                              ; preds = %64
  br label %322

322:                                              ; preds = %321
  br label %323

323:                                              ; preds = %356, %322
  %324 = load i32, ptr %18, align 4, !tbaa !20
  %325 = icmp ult i32 %324, 14
  br i1 %325, label %326, label %357

326:                                              ; preds = %323
  br label %327

327:                                              ; preds = %326
  br label %328

328:                                              ; preds = %327
  %329 = load i32, ptr %15, align 4, !tbaa !20
  %330 = icmp eq i32 %329, 0
  br i1 %330, label %331, label %339

331:                                              ; preds = %328
  %332 = load ptr, ptr %8, align 8, !tbaa !5
  %333 = load ptr, ptr %9, align 8, !tbaa !5
  %334 = call i32 %332(ptr noundef %333, ptr noundef %13)
  store i32 %334, ptr %15, align 4, !tbaa !20
  %335 = load i32, ptr %15, align 4, !tbaa !20
  %336 = icmp eq i32 %335, 0
  br i1 %336, label %337, label %338

337:                                              ; preds = %331
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

338:                                              ; preds = %331
  br label %339

339:                                              ; preds = %338, %328
  br label %340

340:                                              ; preds = %339
  br label %341

341:                                              ; preds = %340
  %342 = load i32, ptr %15, align 4, !tbaa !20
  %343 = add i32 %342, -1
  store i32 %343, ptr %15, align 4, !tbaa !20
  %344 = load ptr, ptr %13, align 8, !tbaa !5
  %345 = getelementptr inbounds i8, ptr %344, i32 1
  store ptr %345, ptr %13, align 8, !tbaa !5
  %346 = load i8, ptr %344, align 1, !tbaa !24
  %347 = zext i8 %346 to i64
  %348 = load i32, ptr %18, align 4, !tbaa !20
  %349 = zext i32 %348 to i64
  %350 = shl i64 %347, %349
  %351 = load i64, ptr %17, align 8, !tbaa !21
  %352 = add i64 %351, %350
  store i64 %352, ptr %17, align 8, !tbaa !21
  %353 = load i32, ptr %18, align 4, !tbaa !20
  %354 = add i32 %353, 8
  store i32 %354, ptr %18, align 4, !tbaa !20
  br label %355

355:                                              ; preds = %341
  br label %356

356:                                              ; preds = %355
  br label %323, !llvm.loop !30

357:                                              ; preds = %323
  br label %358

358:                                              ; preds = %357
  br label %359

359:                                              ; preds = %358
  %360 = load i64, ptr %17, align 8, !tbaa !21
  %361 = trunc i64 %360 to i32
  %362 = and i32 %361, 31
  %363 = add i32 %362, 257
  %364 = load ptr, ptr %12, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.inflate_state, ptr %364, i32 0, i32 24
  store i32 %363, ptr %365, align 4, !tbaa !31
  br label %366

366:                                              ; preds = %359
  %367 = load i64, ptr %17, align 8, !tbaa !21
  %368 = lshr i64 %367, 5
  store i64 %368, ptr %17, align 8, !tbaa !21
  %369 = load i32, ptr %18, align 4, !tbaa !20
  %370 = sub i32 %369, 5
  store i32 %370, ptr %18, align 4, !tbaa !20
  br label %371

371:                                              ; preds = %366
  br label %372

372:                                              ; preds = %371
  %373 = load i64, ptr %17, align 8, !tbaa !21
  %374 = trunc i64 %373 to i32
  %375 = and i32 %374, 31
  %376 = add i32 %375, 1
  %377 = load ptr, ptr %12, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.inflate_state, ptr %377, i32 0, i32 25
  store i32 %376, ptr %378, align 8, !tbaa !32
  br label %379

379:                                              ; preds = %372
  %380 = load i64, ptr %17, align 8, !tbaa !21
  %381 = lshr i64 %380, 5
  store i64 %381, ptr %17, align 8, !tbaa !21
  %382 = load i32, ptr %18, align 4, !tbaa !20
  %383 = sub i32 %382, 5
  store i32 %383, ptr %18, align 4, !tbaa !20
  br label %384

384:                                              ; preds = %379
  br label %385

385:                                              ; preds = %384
  %386 = load i64, ptr %17, align 8, !tbaa !21
  %387 = trunc i64 %386 to i32
  %388 = and i32 %387, 15
  %389 = add i32 %388, 4
  %390 = load ptr, ptr %12, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.inflate_state, ptr %390, i32 0, i32 23
  store i32 %389, ptr %391, align 8, !tbaa !33
  br label %392

392:                                              ; preds = %385
  %393 = load i64, ptr %17, align 8, !tbaa !21
  %394 = lshr i64 %393, 4
  store i64 %394, ptr %17, align 8, !tbaa !21
  %395 = load i32, ptr %18, align 4, !tbaa !20
  %396 = sub i32 %395, 4
  store i32 %396, ptr %18, align 4, !tbaa !20
  br label %397

397:                                              ; preds = %392
  br label %398

398:                                              ; preds = %397
  %399 = load ptr, ptr %12, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.inflate_state, ptr %399, i32 0, i32 24
  %401 = load i32, ptr %400, align 4, !tbaa !31
  %402 = icmp ugt i32 %401, 286
  br i1 %402, label %408, label %403

403:                                              ; preds = %398
  %404 = load ptr, ptr %12, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.inflate_state, ptr %404, i32 0, i32 25
  %406 = load i32, ptr %405, align 8, !tbaa !32
  %407 = icmp ugt i32 %406, 30
  br i1 %407, label %408, label %413

408:                                              ; preds = %403, %398
  %409 = load ptr, ptr %7, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.z_stream_s, ptr %409, i32 0, i32 6
  store ptr @.str.3, ptr %410, align 8, !tbaa !13
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.inflate_state, ptr %411, i32 0, i32 0
  store i32 29, ptr %412, align 8, !tbaa !14
  br label %1795

413:                                              ; preds = %403
  %414 = load ptr, ptr %12, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.inflate_state, ptr %414, i32 0, i32 26
  store i32 0, ptr %415, align 4, !tbaa !34
  br label %416

416:                                              ; preds = %484, %413
  %417 = load ptr, ptr %12, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.inflate_state, ptr %417, i32 0, i32 26
  %419 = load i32, ptr %418, align 4, !tbaa !34
  %420 = load ptr, ptr %12, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.inflate_state, ptr %420, i32 0, i32 23
  %422 = load i32, ptr %421, align 8, !tbaa !33
  %423 = icmp ult i32 %419, %422
  br i1 %423, label %424, label %485

424:                                              ; preds = %416
  br label %425

425:                                              ; preds = %424
  br label %426

426:                                              ; preds = %459, %425
  %427 = load i32, ptr %18, align 4, !tbaa !20
  %428 = icmp ult i32 %427, 3
  br i1 %428, label %429, label %460

429:                                              ; preds = %426
  br label %430

430:                                              ; preds = %429
  br label %431

431:                                              ; preds = %430
  %432 = load i32, ptr %15, align 4, !tbaa !20
  %433 = icmp eq i32 %432, 0
  br i1 %433, label %434, label %442

434:                                              ; preds = %431
  %435 = load ptr, ptr %8, align 8, !tbaa !5
  %436 = load ptr, ptr %9, align 8, !tbaa !5
  %437 = call i32 %435(ptr noundef %436, ptr noundef %13)
  store i32 %437, ptr %15, align 4, !tbaa !20
  %438 = load i32, ptr %15, align 4, !tbaa !20
  %439 = icmp eq i32 %438, 0
  br i1 %439, label %440, label %441

440:                                              ; preds = %434
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

441:                                              ; preds = %434
  br label %442

442:                                              ; preds = %441, %431
  br label %443

443:                                              ; preds = %442
  br label %444

444:                                              ; preds = %443
  %445 = load i32, ptr %15, align 4, !tbaa !20
  %446 = add i32 %445, -1
  store i32 %446, ptr %15, align 4, !tbaa !20
  %447 = load ptr, ptr %13, align 8, !tbaa !5
  %448 = getelementptr inbounds i8, ptr %447, i32 1
  store ptr %448, ptr %13, align 8, !tbaa !5
  %449 = load i8, ptr %447, align 1, !tbaa !24
  %450 = zext i8 %449 to i64
  %451 = load i32, ptr %18, align 4, !tbaa !20
  %452 = zext i32 %451 to i64
  %453 = shl i64 %450, %452
  %454 = load i64, ptr %17, align 8, !tbaa !21
  %455 = add i64 %454, %453
  store i64 %455, ptr %17, align 8, !tbaa !21
  %456 = load i32, ptr %18, align 4, !tbaa !20
  %457 = add i32 %456, 8
  store i32 %457, ptr %18, align 4, !tbaa !20
  br label %458

458:                                              ; preds = %444
  br label %459

459:                                              ; preds = %458
  br label %426, !llvm.loop !35

460:                                              ; preds = %426
  br label %461

461:                                              ; preds = %460
  br label %462

462:                                              ; preds = %461
  %463 = load i64, ptr %17, align 8, !tbaa !21
  %464 = trunc i64 %463 to i32
  %465 = and i32 %464, 7
  %466 = trunc i32 %465 to i16
  %467 = load ptr, ptr %12, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.inflate_state, ptr %467, i32 0, i32 28
  %469 = load ptr, ptr %12, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.inflate_state, ptr %469, i32 0, i32 26
  %471 = load i32, ptr %470, align 4, !tbaa !34
  %472 = add i32 %471, 1
  store i32 %472, ptr %470, align 4, !tbaa !34
  %473 = zext i32 %471 to i64
  %474 = getelementptr inbounds [19 x i16], ptr @inflateBack.order, i64 0, i64 %473
  %475 = load i16, ptr %474, align 2, !tbaa !36
  %476 = zext i16 %475 to i64
  %477 = getelementptr inbounds [320 x i16], ptr %468, i64 0, i64 %476
  store i16 %466, ptr %477, align 2, !tbaa !36
  br label %478

478:                                              ; preds = %462
  %479 = load i64, ptr %17, align 8, !tbaa !21
  %480 = lshr i64 %479, 3
  store i64 %480, ptr %17, align 8, !tbaa !21
  %481 = load i32, ptr %18, align 4, !tbaa !20
  %482 = sub i32 %481, 3
  store i32 %482, ptr %18, align 4, !tbaa !20
  br label %483

483:                                              ; preds = %478
  br label %484

484:                                              ; preds = %483
  br label %416, !llvm.loop !38

485:                                              ; preds = %416
  br label %486

486:                                              ; preds = %491, %485
  %487 = load ptr, ptr %12, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.inflate_state, ptr %487, i32 0, i32 26
  %489 = load i32, ptr %488, align 4, !tbaa !34
  %490 = icmp ult i32 %489, 19
  br i1 %490, label %491, label %503

491:                                              ; preds = %486
  %492 = load ptr, ptr %12, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.inflate_state, ptr %492, i32 0, i32 28
  %494 = load ptr, ptr %12, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.inflate_state, ptr %494, i32 0, i32 26
  %496 = load i32, ptr %495, align 4, !tbaa !34
  %497 = add i32 %496, 1
  store i32 %497, ptr %495, align 4, !tbaa !34
  %498 = zext i32 %496 to i64
  %499 = getelementptr inbounds [19 x i16], ptr @inflateBack.order, i64 0, i64 %498
  %500 = load i16, ptr %499, align 2, !tbaa !36
  %501 = zext i16 %500 to i64
  %502 = getelementptr inbounds [320 x i16], ptr %493, i64 0, i64 %501
  store i16 0, ptr %502, align 2, !tbaa !36
  br label %486, !llvm.loop !39

503:                                              ; preds = %486
  %504 = load ptr, ptr %12, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.inflate_state, ptr %504, i32 0, i32 30
  %506 = getelementptr inbounds [1444 x %struct.code], ptr %505, i64 0, i64 0
  %507 = load ptr, ptr %12, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.inflate_state, ptr %507, i32 0, i32 27
  store ptr %506, ptr %508, align 8, !tbaa !40
  %509 = load ptr, ptr %12, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.inflate_state, ptr %509, i32 0, i32 27
  %511 = load ptr, ptr %510, align 8, !tbaa !40
  %512 = load ptr, ptr %12, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.inflate_state, ptr %512, i32 0, i32 19
  store ptr %511, ptr %513, align 8, !tbaa !41
  %514 = load ptr, ptr %12, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.inflate_state, ptr %514, i32 0, i32 21
  store i32 7, ptr %515, align 8, !tbaa !42
  %516 = load ptr, ptr %12, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.inflate_state, ptr %516, i32 0, i32 28
  %518 = getelementptr inbounds [320 x i16], ptr %517, i64 0, i64 0
  %519 = load ptr, ptr %12, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.inflate_state, ptr %519, i32 0, i32 27
  %521 = load ptr, ptr %12, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.inflate_state, ptr %521, i32 0, i32 21
  %523 = load ptr, ptr %12, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.inflate_state, ptr %523, i32 0, i32 29
  %525 = getelementptr inbounds [288 x i16], ptr %524, i64 0, i64 0
  %526 = call i32 @inflate_table(i32 noundef 0, ptr noundef %518, i32 noundef 19, ptr noundef %520, ptr noundef %522, ptr noundef %525)
  store i32 %526, ptr %24, align 4, !tbaa !20
  %527 = load i32, ptr %24, align 4, !tbaa !20
  %528 = icmp ne i32 %527, 0
  br i1 %528, label %529, label %534

529:                                              ; preds = %503
  %530 = load ptr, ptr %7, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.z_stream_s, ptr %530, i32 0, i32 6
  store ptr @.str.4, ptr %531, align 8, !tbaa !13
  %532 = load ptr, ptr %12, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.inflate_state, ptr %532, i32 0, i32 0
  store i32 29, ptr %533, align 8, !tbaa !14
  br label %1795

534:                                              ; preds = %503
  %535 = load ptr, ptr %12, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.inflate_state, ptr %535, i32 0, i32 26
  store i32 0, ptr %536, align 4, !tbaa !34
  br label %537

537:                                              ; preds = %943, %534
  %538 = load ptr, ptr %12, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.inflate_state, ptr %538, i32 0, i32 26
  %540 = load i32, ptr %539, align 4, !tbaa !34
  %541 = load ptr, ptr %12, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.inflate_state, ptr %541, i32 0, i32 24
  %543 = load i32, ptr %542, align 4, !tbaa !31
  %544 = load ptr, ptr %12, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.inflate_state, ptr %544, i32 0, i32 25
  %546 = load i32, ptr %545, align 8, !tbaa !32
  %547 = add i32 %543, %546
  %548 = icmp ult i32 %540, %547
  br i1 %548, label %549, label %944

549:                                              ; preds = %537
  br label %550

550:                                              ; preds = %600, %549
  %551 = load ptr, ptr %12, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.inflate_state, ptr %551, i32 0, i32 19
  %553 = load ptr, ptr %552, align 8, !tbaa !41
  %554 = load i64, ptr %17, align 8, !tbaa !21
  %555 = trunc i64 %554 to i32
  %556 = load ptr, ptr %12, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.inflate_state, ptr %556, i32 0, i32 21
  %558 = load i32, ptr %557, align 8, !tbaa !42
  %559 = shl i32 1, %558
  %560 = sub i32 %559, 1
  %561 = and i32 %555, %560
  %562 = zext i32 %561 to i64
  %563 = getelementptr inbounds %struct.code, ptr %553, i64 %562
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %563, i64 4, i1 false), !tbaa.struct !43
  %564 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %565 = load i8, ptr %564, align 1, !tbaa !44
  %566 = zext i8 %565 to i32
  %567 = load i32, ptr %18, align 4, !tbaa !20
  %568 = icmp ule i32 %566, %567
  br i1 %568, label %569, label %570

569:                                              ; preds = %550
  br label %601

570:                                              ; preds = %550
  br label %571

571:                                              ; preds = %570
  br label %572

572:                                              ; preds = %571
  %573 = load i32, ptr %15, align 4, !tbaa !20
  %574 = icmp eq i32 %573, 0
  br i1 %574, label %575, label %583

575:                                              ; preds = %572
  %576 = load ptr, ptr %8, align 8, !tbaa !5
  %577 = load ptr, ptr %9, align 8, !tbaa !5
  %578 = call i32 %576(ptr noundef %577, ptr noundef %13)
  store i32 %578, ptr %15, align 4, !tbaa !20
  %579 = load i32, ptr %15, align 4, !tbaa !20
  %580 = icmp eq i32 %579, 0
  br i1 %580, label %581, label %582

581:                                              ; preds = %575
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

582:                                              ; preds = %575
  br label %583

583:                                              ; preds = %582, %572
  br label %584

584:                                              ; preds = %583
  br label %585

585:                                              ; preds = %584
  %586 = load i32, ptr %15, align 4, !tbaa !20
  %587 = add i32 %586, -1
  store i32 %587, ptr %15, align 4, !tbaa !20
  %588 = load ptr, ptr %13, align 8, !tbaa !5
  %589 = getelementptr inbounds i8, ptr %588, i32 1
  store ptr %589, ptr %13, align 8, !tbaa !5
  %590 = load i8, ptr %588, align 1, !tbaa !24
  %591 = zext i8 %590 to i64
  %592 = load i32, ptr %18, align 4, !tbaa !20
  %593 = zext i32 %592 to i64
  %594 = shl i64 %591, %593
  %595 = load i64, ptr %17, align 8, !tbaa !21
  %596 = add i64 %595, %594
  store i64 %596, ptr %17, align 8, !tbaa !21
  %597 = load i32, ptr %18, align 4, !tbaa !20
  %598 = add i32 %597, 8
  store i32 %598, ptr %18, align 4, !tbaa !20
  br label %599

599:                                              ; preds = %585
  br label %600

600:                                              ; preds = %599
  br label %550

601:                                              ; preds = %569
  %602 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %603 = load i16, ptr %602, align 2, !tbaa !46
  %604 = zext i16 %603 to i32
  %605 = icmp slt i32 %604, 16
  br i1 %605, label %606, label %672

606:                                              ; preds = %601
  br label %607

607:                                              ; preds = %606
  br label %608

608:                                              ; preds = %644, %607
  %609 = load i32, ptr %18, align 4, !tbaa !20
  %610 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %611 = load i8, ptr %610, align 1, !tbaa !44
  %612 = zext i8 %611 to i32
  %613 = icmp ult i32 %609, %612
  br i1 %613, label %614, label %645

614:                                              ; preds = %608
  br label %615

615:                                              ; preds = %614
  br label %616

616:                                              ; preds = %615
  %617 = load i32, ptr %15, align 4, !tbaa !20
  %618 = icmp eq i32 %617, 0
  br i1 %618, label %619, label %627

619:                                              ; preds = %616
  %620 = load ptr, ptr %8, align 8, !tbaa !5
  %621 = load ptr, ptr %9, align 8, !tbaa !5
  %622 = call i32 %620(ptr noundef %621, ptr noundef %13)
  store i32 %622, ptr %15, align 4, !tbaa !20
  %623 = load i32, ptr %15, align 4, !tbaa !20
  %624 = icmp eq i32 %623, 0
  br i1 %624, label %625, label %626

625:                                              ; preds = %619
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

626:                                              ; preds = %619
  br label %627

627:                                              ; preds = %626, %616
  br label %628

628:                                              ; preds = %627
  br label %629

629:                                              ; preds = %628
  %630 = load i32, ptr %15, align 4, !tbaa !20
  %631 = add i32 %630, -1
  store i32 %631, ptr %15, align 4, !tbaa !20
  %632 = load ptr, ptr %13, align 8, !tbaa !5
  %633 = getelementptr inbounds i8, ptr %632, i32 1
  store ptr %633, ptr %13, align 8, !tbaa !5
  %634 = load i8, ptr %632, align 1, !tbaa !24
  %635 = zext i8 %634 to i64
  %636 = load i32, ptr %18, align 4, !tbaa !20
  %637 = zext i32 %636 to i64
  %638 = shl i64 %635, %637
  %639 = load i64, ptr %17, align 8, !tbaa !21
  %640 = add i64 %639, %638
  store i64 %640, ptr %17, align 8, !tbaa !21
  %641 = load i32, ptr %18, align 4, !tbaa !20
  %642 = add i32 %641, 8
  store i32 %642, ptr %18, align 4, !tbaa !20
  br label %643

643:                                              ; preds = %629
  br label %644

644:                                              ; preds = %643
  br label %608, !llvm.loop !47

645:                                              ; preds = %608
  br label %646

646:                                              ; preds = %645
  br label %647

647:                                              ; preds = %646
  br label %648

648:                                              ; preds = %647
  %649 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %650 = load i8, ptr %649, align 1, !tbaa !44
  %651 = zext i8 %650 to i32
  %652 = load i64, ptr %17, align 8, !tbaa !21
  %653 = zext i32 %651 to i64
  %654 = lshr i64 %652, %653
  store i64 %654, ptr %17, align 8, !tbaa !21
  %655 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %656 = load i8, ptr %655, align 1, !tbaa !44
  %657 = zext i8 %656 to i32
  %658 = load i32, ptr %18, align 4, !tbaa !20
  %659 = sub i32 %658, %657
  store i32 %659, ptr %18, align 4, !tbaa !20
  br label %660

660:                                              ; preds = %648
  br label %661

661:                                              ; preds = %660
  %662 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %663 = load i16, ptr %662, align 2, !tbaa !46
  %664 = load ptr, ptr %12, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.inflate_state, ptr %664, i32 0, i32 28
  %666 = load ptr, ptr %12, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.inflate_state, ptr %666, i32 0, i32 26
  %668 = load i32, ptr %667, align 4, !tbaa !34
  %669 = add i32 %668, 1
  store i32 %669, ptr %667, align 4, !tbaa !34
  %670 = zext i32 %668 to i64
  %671 = getelementptr inbounds [320 x i16], ptr %665, i64 0, i64 %670
  store i16 %663, ptr %671, align 2, !tbaa !36
  br label %943

672:                                              ; preds = %601
  %673 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %674 = load i16, ptr %673, align 2, !tbaa !46
  %675 = zext i16 %674 to i32
  %676 = icmp eq i32 %675, 16
  br i1 %676, label %677, label %765

677:                                              ; preds = %672
  br label %678

678:                                              ; preds = %677
  br label %679

679:                                              ; preds = %716, %678
  %680 = load i32, ptr %18, align 4, !tbaa !20
  %681 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %682 = load i8, ptr %681, align 1, !tbaa !44
  %683 = zext i8 %682 to i32
  %684 = add nsw i32 %683, 2
  %685 = icmp ult i32 %680, %684
  br i1 %685, label %686, label %717

686:                                              ; preds = %679
  br label %687

687:                                              ; preds = %686
  br label %688

688:                                              ; preds = %687
  %689 = load i32, ptr %15, align 4, !tbaa !20
  %690 = icmp eq i32 %689, 0
  br i1 %690, label %691, label %699

691:                                              ; preds = %688
  %692 = load ptr, ptr %8, align 8, !tbaa !5
  %693 = load ptr, ptr %9, align 8, !tbaa !5
  %694 = call i32 %692(ptr noundef %693, ptr noundef %13)
  store i32 %694, ptr %15, align 4, !tbaa !20
  %695 = load i32, ptr %15, align 4, !tbaa !20
  %696 = icmp eq i32 %695, 0
  br i1 %696, label %697, label %698

697:                                              ; preds = %691
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

698:                                              ; preds = %691
  br label %699

699:                                              ; preds = %698, %688
  br label %700

700:                                              ; preds = %699
  br label %701

701:                                              ; preds = %700
  %702 = load i32, ptr %15, align 4, !tbaa !20
  %703 = add i32 %702, -1
  store i32 %703, ptr %15, align 4, !tbaa !20
  %704 = load ptr, ptr %13, align 8, !tbaa !5
  %705 = getelementptr inbounds i8, ptr %704, i32 1
  store ptr %705, ptr %13, align 8, !tbaa !5
  %706 = load i8, ptr %704, align 1, !tbaa !24
  %707 = zext i8 %706 to i64
  %708 = load i32, ptr %18, align 4, !tbaa !20
  %709 = zext i32 %708 to i64
  %710 = shl i64 %707, %709
  %711 = load i64, ptr %17, align 8, !tbaa !21
  %712 = add i64 %711, %710
  store i64 %712, ptr %17, align 8, !tbaa !21
  %713 = load i32, ptr %18, align 4, !tbaa !20
  %714 = add i32 %713, 8
  store i32 %714, ptr %18, align 4, !tbaa !20
  br label %715

715:                                              ; preds = %701
  br label %716

716:                                              ; preds = %715
  br label %679, !llvm.loop !48

717:                                              ; preds = %679
  br label %718

718:                                              ; preds = %717
  br label %719

719:                                              ; preds = %718
  br label %720

720:                                              ; preds = %719
  %721 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %722 = load i8, ptr %721, align 1, !tbaa !44
  %723 = zext i8 %722 to i32
  %724 = load i64, ptr %17, align 8, !tbaa !21
  %725 = zext i32 %723 to i64
  %726 = lshr i64 %724, %725
  store i64 %726, ptr %17, align 8, !tbaa !21
  %727 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %728 = load i8, ptr %727, align 1, !tbaa !44
  %729 = zext i8 %728 to i32
  %730 = load i32, ptr %18, align 4, !tbaa !20
  %731 = sub i32 %730, %729
  store i32 %731, ptr %18, align 4, !tbaa !20
  br label %732

732:                                              ; preds = %720
  br label %733

733:                                              ; preds = %732
  %734 = load ptr, ptr %12, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.inflate_state, ptr %734, i32 0, i32 26
  %736 = load i32, ptr %735, align 4, !tbaa !34
  %737 = icmp eq i32 %736, 0
  br i1 %737, label %738, label %743

738:                                              ; preds = %733
  %739 = load ptr, ptr %7, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.z_stream_s, ptr %739, i32 0, i32 6
  store ptr @.str.5, ptr %740, align 8, !tbaa !13
  %741 = load ptr, ptr %12, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.inflate_state, ptr %741, i32 0, i32 0
  store i32 29, ptr %742, align 8, !tbaa !14
  br label %944

743:                                              ; preds = %733
  %744 = load ptr, ptr %12, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.inflate_state, ptr %744, i32 0, i32 28
  %746 = load ptr, ptr %12, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.inflate_state, ptr %746, i32 0, i32 26
  %748 = load i32, ptr %747, align 4, !tbaa !34
  %749 = sub i32 %748, 1
  %750 = zext i32 %749 to i64
  %751 = getelementptr inbounds [320 x i16], ptr %745, i64 0, i64 %750
  %752 = load i16, ptr %751, align 2, !tbaa !36
  %753 = zext i16 %752 to i32
  store i32 %753, ptr %23, align 4, !tbaa !20
  %754 = load i64, ptr %17, align 8, !tbaa !21
  %755 = trunc i64 %754 to i32
  %756 = and i32 %755, 3
  %757 = add i32 3, %756
  store i32 %757, ptr %19, align 4, !tbaa !20
  br label %758

758:                                              ; preds = %743
  %759 = load i64, ptr %17, align 8, !tbaa !21
  %760 = lshr i64 %759, 2
  store i64 %760, ptr %17, align 8, !tbaa !21
  %761 = load i32, ptr %18, align 4, !tbaa !20
  %762 = sub i32 %761, 2
  store i32 %762, ptr %18, align 4, !tbaa !20
  br label %763

763:                                              ; preds = %758
  br label %764

764:                                              ; preds = %763
  br label %907

765:                                              ; preds = %672
  %766 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %767 = load i16, ptr %766, align 2, !tbaa !46
  %768 = zext i16 %767 to i32
  %769 = icmp eq i32 %768, 17
  br i1 %769, label %770, label %838

770:                                              ; preds = %765
  br label %771

771:                                              ; preds = %770
  br label %772

772:                                              ; preds = %809, %771
  %773 = load i32, ptr %18, align 4, !tbaa !20
  %774 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %775 = load i8, ptr %774, align 1, !tbaa !44
  %776 = zext i8 %775 to i32
  %777 = add nsw i32 %776, 3
  %778 = icmp ult i32 %773, %777
  br i1 %778, label %779, label %810

779:                                              ; preds = %772
  br label %780

780:                                              ; preds = %779
  br label %781

781:                                              ; preds = %780
  %782 = load i32, ptr %15, align 4, !tbaa !20
  %783 = icmp eq i32 %782, 0
  br i1 %783, label %784, label %792

784:                                              ; preds = %781
  %785 = load ptr, ptr %8, align 8, !tbaa !5
  %786 = load ptr, ptr %9, align 8, !tbaa !5
  %787 = call i32 %785(ptr noundef %786, ptr noundef %13)
  store i32 %787, ptr %15, align 4, !tbaa !20
  %788 = load i32, ptr %15, align 4, !tbaa !20
  %789 = icmp eq i32 %788, 0
  br i1 %789, label %790, label %791

790:                                              ; preds = %784
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

791:                                              ; preds = %784
  br label %792

792:                                              ; preds = %791, %781
  br label %793

793:                                              ; preds = %792
  br label %794

794:                                              ; preds = %793
  %795 = load i32, ptr %15, align 4, !tbaa !20
  %796 = add i32 %795, -1
  store i32 %796, ptr %15, align 4, !tbaa !20
  %797 = load ptr, ptr %13, align 8, !tbaa !5
  %798 = getelementptr inbounds i8, ptr %797, i32 1
  store ptr %798, ptr %13, align 8, !tbaa !5
  %799 = load i8, ptr %797, align 1, !tbaa !24
  %800 = zext i8 %799 to i64
  %801 = load i32, ptr %18, align 4, !tbaa !20
  %802 = zext i32 %801 to i64
  %803 = shl i64 %800, %802
  %804 = load i64, ptr %17, align 8, !tbaa !21
  %805 = add i64 %804, %803
  store i64 %805, ptr %17, align 8, !tbaa !21
  %806 = load i32, ptr %18, align 4, !tbaa !20
  %807 = add i32 %806, 8
  store i32 %807, ptr %18, align 4, !tbaa !20
  br label %808

808:                                              ; preds = %794
  br label %809

809:                                              ; preds = %808
  br label %772, !llvm.loop !49

810:                                              ; preds = %772
  br label %811

811:                                              ; preds = %810
  br label %812

812:                                              ; preds = %811
  br label %813

813:                                              ; preds = %812
  %814 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %815 = load i8, ptr %814, align 1, !tbaa !44
  %816 = zext i8 %815 to i32
  %817 = load i64, ptr %17, align 8, !tbaa !21
  %818 = zext i32 %816 to i64
  %819 = lshr i64 %817, %818
  store i64 %819, ptr %17, align 8, !tbaa !21
  %820 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %821 = load i8, ptr %820, align 1, !tbaa !44
  %822 = zext i8 %821 to i32
  %823 = load i32, ptr %18, align 4, !tbaa !20
  %824 = sub i32 %823, %822
  store i32 %824, ptr %18, align 4, !tbaa !20
  br label %825

825:                                              ; preds = %813
  br label %826

826:                                              ; preds = %825
  store i32 0, ptr %23, align 4, !tbaa !20
  %827 = load i64, ptr %17, align 8, !tbaa !21
  %828 = trunc i64 %827 to i32
  %829 = and i32 %828, 7
  %830 = add i32 3, %829
  store i32 %830, ptr %19, align 4, !tbaa !20
  br label %831

831:                                              ; preds = %826
  %832 = load i64, ptr %17, align 8, !tbaa !21
  %833 = lshr i64 %832, 3
  store i64 %833, ptr %17, align 8, !tbaa !21
  %834 = load i32, ptr %18, align 4, !tbaa !20
  %835 = sub i32 %834, 3
  store i32 %835, ptr %18, align 4, !tbaa !20
  br label %836

836:                                              ; preds = %831
  br label %837

837:                                              ; preds = %836
  br label %906

838:                                              ; preds = %765
  br label %839

839:                                              ; preds = %838
  br label %840

840:                                              ; preds = %877, %839
  %841 = load i32, ptr %18, align 4, !tbaa !20
  %842 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %843 = load i8, ptr %842, align 1, !tbaa !44
  %844 = zext i8 %843 to i32
  %845 = add nsw i32 %844, 7
  %846 = icmp ult i32 %841, %845
  br i1 %846, label %847, label %878

847:                                              ; preds = %840
  br label %848

848:                                              ; preds = %847
  br label %849

849:                                              ; preds = %848
  %850 = load i32, ptr %15, align 4, !tbaa !20
  %851 = icmp eq i32 %850, 0
  br i1 %851, label %852, label %860

852:                                              ; preds = %849
  %853 = load ptr, ptr %8, align 8, !tbaa !5
  %854 = load ptr, ptr %9, align 8, !tbaa !5
  %855 = call i32 %853(ptr noundef %854, ptr noundef %13)
  store i32 %855, ptr %15, align 4, !tbaa !20
  %856 = load i32, ptr %15, align 4, !tbaa !20
  %857 = icmp eq i32 %856, 0
  br i1 %857, label %858, label %859

858:                                              ; preds = %852
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

859:                                              ; preds = %852
  br label %860

860:                                              ; preds = %859, %849
  br label %861

861:                                              ; preds = %860
  br label %862

862:                                              ; preds = %861
  %863 = load i32, ptr %15, align 4, !tbaa !20
  %864 = add i32 %863, -1
  store i32 %864, ptr %15, align 4, !tbaa !20
  %865 = load ptr, ptr %13, align 8, !tbaa !5
  %866 = getelementptr inbounds i8, ptr %865, i32 1
  store ptr %866, ptr %13, align 8, !tbaa !5
  %867 = load i8, ptr %865, align 1, !tbaa !24
  %868 = zext i8 %867 to i64
  %869 = load i32, ptr %18, align 4, !tbaa !20
  %870 = zext i32 %869 to i64
  %871 = shl i64 %868, %870
  %872 = load i64, ptr %17, align 8, !tbaa !21
  %873 = add i64 %872, %871
  store i64 %873, ptr %17, align 8, !tbaa !21
  %874 = load i32, ptr %18, align 4, !tbaa !20
  %875 = add i32 %874, 8
  store i32 %875, ptr %18, align 4, !tbaa !20
  br label %876

876:                                              ; preds = %862
  br label %877

877:                                              ; preds = %876
  br label %840, !llvm.loop !50

878:                                              ; preds = %840
  br label %879

879:                                              ; preds = %878
  br label %880

880:                                              ; preds = %879
  br label %881

881:                                              ; preds = %880
  %882 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %883 = load i8, ptr %882, align 1, !tbaa !44
  %884 = zext i8 %883 to i32
  %885 = load i64, ptr %17, align 8, !tbaa !21
  %886 = zext i32 %884 to i64
  %887 = lshr i64 %885, %886
  store i64 %887, ptr %17, align 8, !tbaa !21
  %888 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %889 = load i8, ptr %888, align 1, !tbaa !44
  %890 = zext i8 %889 to i32
  %891 = load i32, ptr %18, align 4, !tbaa !20
  %892 = sub i32 %891, %890
  store i32 %892, ptr %18, align 4, !tbaa !20
  br label %893

893:                                              ; preds = %881
  br label %894

894:                                              ; preds = %893
  store i32 0, ptr %23, align 4, !tbaa !20
  %895 = load i64, ptr %17, align 8, !tbaa !21
  %896 = trunc i64 %895 to i32
  %897 = and i32 %896, 127
  %898 = add i32 11, %897
  store i32 %898, ptr %19, align 4, !tbaa !20
  br label %899

899:                                              ; preds = %894
  %900 = load i64, ptr %17, align 8, !tbaa !21
  %901 = lshr i64 %900, 7
  store i64 %901, ptr %17, align 8, !tbaa !21
  %902 = load i32, ptr %18, align 4, !tbaa !20
  %903 = sub i32 %902, 7
  store i32 %903, ptr %18, align 4, !tbaa !20
  br label %904

904:                                              ; preds = %899
  br label %905

905:                                              ; preds = %904
  br label %906

906:                                              ; preds = %905, %837
  br label %907

907:                                              ; preds = %906, %764
  %908 = load ptr, ptr %12, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.inflate_state, ptr %908, i32 0, i32 26
  %910 = load i32, ptr %909, align 4, !tbaa !34
  %911 = load i32, ptr %19, align 4, !tbaa !20
  %912 = add i32 %910, %911
  %913 = load ptr, ptr %12, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.inflate_state, ptr %913, i32 0, i32 24
  %915 = load i32, ptr %914, align 4, !tbaa !31
  %916 = load ptr, ptr %12, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.inflate_state, ptr %916, i32 0, i32 25
  %918 = load i32, ptr %917, align 8, !tbaa !32
  %919 = add i32 %915, %918
  %920 = icmp ugt i32 %912, %919
  br i1 %920, label %921, label %926

921:                                              ; preds = %907
  %922 = load ptr, ptr %7, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.z_stream_s, ptr %922, i32 0, i32 6
  store ptr @.str.5, ptr %923, align 8, !tbaa !13
  %924 = load ptr, ptr %12, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.inflate_state, ptr %924, i32 0, i32 0
  store i32 29, ptr %925, align 8, !tbaa !14
  br label %944

926:                                              ; preds = %907
  br label %927

927:                                              ; preds = %931, %926
  %928 = load i32, ptr %19, align 4, !tbaa !20
  %929 = add i32 %928, -1
  store i32 %929, ptr %19, align 4, !tbaa !20
  %930 = icmp ne i32 %928, 0
  br i1 %930, label %931, label %942

931:                                              ; preds = %927
  %932 = load i32, ptr %23, align 4, !tbaa !20
  %933 = trunc i32 %932 to i16
  %934 = load ptr, ptr %12, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.inflate_state, ptr %934, i32 0, i32 28
  %936 = load ptr, ptr %12, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.inflate_state, ptr %936, i32 0, i32 26
  %938 = load i32, ptr %937, align 4, !tbaa !34
  %939 = add i32 %938, 1
  store i32 %939, ptr %937, align 4, !tbaa !34
  %940 = zext i32 %938 to i64
  %941 = getelementptr inbounds [320 x i16], ptr %935, i64 0, i64 %940
  store i16 %933, ptr %941, align 2, !tbaa !36
  br label %927, !llvm.loop !51

942:                                              ; preds = %927
  br label %943

943:                                              ; preds = %942, %661
  br label %537, !llvm.loop !52

944:                                              ; preds = %921, %738, %537
  %945 = load ptr, ptr %12, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.inflate_state, ptr %945, i32 0, i32 0
  %947 = load i32, ptr %946, align 8, !tbaa !14
  %948 = icmp eq i32 %947, 29
  br i1 %948, label %949, label %950

949:                                              ; preds = %944
  br label %1795

950:                                              ; preds = %944
  %951 = load ptr, ptr %12, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct.inflate_state, ptr %951, i32 0, i32 28
  %953 = getelementptr inbounds [320 x i16], ptr %952, i64 0, i64 256
  %954 = load i16, ptr %953, align 8, !tbaa !36
  %955 = zext i16 %954 to i32
  %956 = icmp eq i32 %955, 0
  br i1 %956, label %957, label %962

957:                                              ; preds = %950
  %958 = load ptr, ptr %7, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.z_stream_s, ptr %958, i32 0, i32 6
  store ptr @.str.6, ptr %959, align 8, !tbaa !13
  %960 = load ptr, ptr %12, align 8, !tbaa !5
  %961 = getelementptr inbounds %struct.inflate_state, ptr %960, i32 0, i32 0
  store i32 29, ptr %961, align 8, !tbaa !14
  br label %1795

962:                                              ; preds = %950
  %963 = load ptr, ptr %12, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.inflate_state, ptr %963, i32 0, i32 30
  %965 = getelementptr inbounds [1444 x %struct.code], ptr %964, i64 0, i64 0
  %966 = load ptr, ptr %12, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.inflate_state, ptr %966, i32 0, i32 27
  store ptr %965, ptr %967, align 8, !tbaa !40
  %968 = load ptr, ptr %12, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.inflate_state, ptr %968, i32 0, i32 27
  %970 = load ptr, ptr %969, align 8, !tbaa !40
  %971 = load ptr, ptr %12, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.inflate_state, ptr %971, i32 0, i32 19
  store ptr %970, ptr %972, align 8, !tbaa !41
  %973 = load ptr, ptr %12, align 8, !tbaa !5
  %974 = getelementptr inbounds %struct.inflate_state, ptr %973, i32 0, i32 21
  store i32 9, ptr %974, align 8, !tbaa !42
  %975 = load ptr, ptr %12, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.inflate_state, ptr %975, i32 0, i32 28
  %977 = getelementptr inbounds [320 x i16], ptr %976, i64 0, i64 0
  %978 = load ptr, ptr %12, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.inflate_state, ptr %978, i32 0, i32 24
  %980 = load i32, ptr %979, align 4, !tbaa !31
  %981 = load ptr, ptr %12, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.inflate_state, ptr %981, i32 0, i32 27
  %983 = load ptr, ptr %12, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.inflate_state, ptr %983, i32 0, i32 21
  %985 = load ptr, ptr %12, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.inflate_state, ptr %985, i32 0, i32 29
  %987 = getelementptr inbounds [288 x i16], ptr %986, i64 0, i64 0
  %988 = call i32 @inflate_table(i32 noundef 1, ptr noundef %977, i32 noundef %980, ptr noundef %982, ptr noundef %984, ptr noundef %987)
  store i32 %988, ptr %24, align 4, !tbaa !20
  %989 = load i32, ptr %24, align 4, !tbaa !20
  %990 = icmp ne i32 %989, 0
  br i1 %990, label %991, label %996

991:                                              ; preds = %962
  %992 = load ptr, ptr %7, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.z_stream_s, ptr %992, i32 0, i32 6
  store ptr @.str.7, ptr %993, align 8, !tbaa !13
  %994 = load ptr, ptr %12, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.inflate_state, ptr %994, i32 0, i32 0
  store i32 29, ptr %995, align 8, !tbaa !14
  br label %1795

996:                                              ; preds = %962
  %997 = load ptr, ptr %12, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.inflate_state, ptr %997, i32 0, i32 27
  %999 = load ptr, ptr %998, align 8, !tbaa !40
  %1000 = load ptr, ptr %12, align 8, !tbaa !5
  %1001 = getelementptr inbounds %struct.inflate_state, ptr %1000, i32 0, i32 20
  store ptr %999, ptr %1001, align 8, !tbaa !53
  %1002 = load ptr, ptr %12, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.inflate_state, ptr %1002, i32 0, i32 22
  store i32 6, ptr %1003, align 4, !tbaa !54
  %1004 = load ptr, ptr %12, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.inflate_state, ptr %1004, i32 0, i32 28
  %1006 = getelementptr inbounds [320 x i16], ptr %1005, i64 0, i64 0
  %1007 = load ptr, ptr %12, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct.inflate_state, ptr %1007, i32 0, i32 24
  %1009 = load i32, ptr %1008, align 4, !tbaa !31
  %1010 = zext i32 %1009 to i64
  %1011 = getelementptr inbounds i16, ptr %1006, i64 %1010
  %1012 = load ptr, ptr %12, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.inflate_state, ptr %1012, i32 0, i32 25
  %1014 = load i32, ptr %1013, align 8, !tbaa !32
  %1015 = load ptr, ptr %12, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.inflate_state, ptr %1015, i32 0, i32 27
  %1017 = load ptr, ptr %12, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.inflate_state, ptr %1017, i32 0, i32 22
  %1019 = load ptr, ptr %12, align 8, !tbaa !5
  %1020 = getelementptr inbounds %struct.inflate_state, ptr %1019, i32 0, i32 29
  %1021 = getelementptr inbounds [288 x i16], ptr %1020, i64 0, i64 0
  %1022 = call i32 @inflate_table(i32 noundef 2, ptr noundef %1011, i32 noundef %1014, ptr noundef %1016, ptr noundef %1018, ptr noundef %1021)
  store i32 %1022, ptr %24, align 4, !tbaa !20
  %1023 = load i32, ptr %24, align 4, !tbaa !20
  %1024 = icmp ne i32 %1023, 0
  br i1 %1024, label %1025, label %1030

1025:                                             ; preds = %996
  %1026 = load ptr, ptr %7, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.z_stream_s, ptr %1026, i32 0, i32 6
  store ptr @.str.8, ptr %1027, align 8, !tbaa !13
  %1028 = load ptr, ptr %12, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.inflate_state, ptr %1028, i32 0, i32 0
  store i32 29, ptr %1029, align 8, !tbaa !14
  br label %1795

1030:                                             ; preds = %996
  %1031 = load ptr, ptr %12, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.inflate_state, ptr %1031, i32 0, i32 0
  store i32 20, ptr %1032, align 8, !tbaa !14
  br label %1033

1033:                                             ; preds = %1030, %64
  %1034 = load i32, ptr %15, align 4, !tbaa !20
  %1035 = icmp uge i32 %1034, 6
  br i1 %1035, label %1036, label %1102

1036:                                             ; preds = %1033
  %1037 = load i32, ptr %16, align 4, !tbaa !20
  %1038 = icmp uge i32 %1037, 258
  br i1 %1038, label %1039, label %1102

1039:                                             ; preds = %1036
  br label %1040

1040:                                             ; preds = %1039
  %1041 = load ptr, ptr %14, align 8, !tbaa !5
  %1042 = load ptr, ptr %7, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.z_stream_s, ptr %1042, i32 0, i32 3
  store ptr %1041, ptr %1043, align 8, !tbaa !55
  %1044 = load i32, ptr %16, align 4, !tbaa !20
  %1045 = load ptr, ptr %7, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct.z_stream_s, ptr %1045, i32 0, i32 4
  store i32 %1044, ptr %1046, align 8, !tbaa !56
  %1047 = load ptr, ptr %13, align 8, !tbaa !5
  %1048 = load ptr, ptr %7, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.z_stream_s, ptr %1048, i32 0, i32 0
  store ptr %1047, ptr %1049, align 8, !tbaa !18
  %1050 = load i32, ptr %15, align 4, !tbaa !20
  %1051 = load ptr, ptr %7, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.z_stream_s, ptr %1051, i32 0, i32 1
  store i32 %1050, ptr %1052, align 8, !tbaa !19
  %1053 = load i64, ptr %17, align 8, !tbaa !21
  %1054 = load ptr, ptr %12, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.inflate_state, ptr %1054, i32 0, i32 14
  store i64 %1053, ptr %1055, align 8, !tbaa !57
  %1056 = load i32, ptr %18, align 4, !tbaa !20
  %1057 = load ptr, ptr %12, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.inflate_state, ptr %1057, i32 0, i32 15
  store i32 %1056, ptr %1058, align 8, !tbaa !58
  br label %1059

1059:                                             ; preds = %1040
  br label %1060

1060:                                             ; preds = %1059
  %1061 = load ptr, ptr %12, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.inflate_state, ptr %1061, i32 0, i32 11
  %1063 = load i32, ptr %1062, align 8, !tbaa !17
  %1064 = load ptr, ptr %12, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.inflate_state, ptr %1064, i32 0, i32 10
  %1066 = load i32, ptr %1065, align 4, !tbaa !23
  %1067 = icmp ult i32 %1063, %1066
  br i1 %1067, label %1068, label %1076

1068:                                             ; preds = %1060
  %1069 = load ptr, ptr %12, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.inflate_state, ptr %1069, i32 0, i32 10
  %1071 = load i32, ptr %1070, align 4, !tbaa !23
  %1072 = load i32, ptr %16, align 4, !tbaa !20
  %1073 = sub i32 %1071, %1072
  %1074 = load ptr, ptr %12, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.inflate_state, ptr %1074, i32 0, i32 11
  store i32 %1073, ptr %1075, align 8, !tbaa !17
  br label %1076

1076:                                             ; preds = %1068, %1060
  %1077 = load ptr, ptr %7, align 8, !tbaa !5
  %1078 = load ptr, ptr %12, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.inflate_state, ptr %1078, i32 0, i32 10
  %1080 = load i32, ptr %1079, align 4, !tbaa !23
  call void @inflate_fast(ptr noundef %1077, i32 noundef %1080)
  br label %1081

1081:                                             ; preds = %1076
  %1082 = load ptr, ptr %7, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.z_stream_s, ptr %1082, i32 0, i32 3
  %1084 = load ptr, ptr %1083, align 8, !tbaa !55
  store ptr %1084, ptr %14, align 8, !tbaa !5
  %1085 = load ptr, ptr %7, align 8, !tbaa !5
  %1086 = getelementptr inbounds %struct.z_stream_s, ptr %1085, i32 0, i32 4
  %1087 = load i32, ptr %1086, align 8, !tbaa !56
  store i32 %1087, ptr %16, align 4, !tbaa !20
  %1088 = load ptr, ptr %7, align 8, !tbaa !5
  %1089 = getelementptr inbounds %struct.z_stream_s, ptr %1088, i32 0, i32 0
  %1090 = load ptr, ptr %1089, align 8, !tbaa !18
  store ptr %1090, ptr %13, align 8, !tbaa !5
  %1091 = load ptr, ptr %7, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.z_stream_s, ptr %1091, i32 0, i32 1
  %1093 = load i32, ptr %1092, align 8, !tbaa !19
  store i32 %1093, ptr %15, align 4, !tbaa !20
  %1094 = load ptr, ptr %12, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.inflate_state, ptr %1094, i32 0, i32 14
  %1096 = load i64, ptr %1095, align 8, !tbaa !57
  store i64 %1096, ptr %17, align 8, !tbaa !21
  %1097 = load ptr, ptr %12, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.inflate_state, ptr %1097, i32 0, i32 15
  %1099 = load i32, ptr %1098, align 8, !tbaa !58
  store i32 %1099, ptr %18, align 4, !tbaa !20
  br label %1100

1100:                                             ; preds = %1081
  br label %1101

1101:                                             ; preds = %1100
  br label %1795

1102:                                             ; preds = %1036, %1033
  br label %1103

1103:                                             ; preds = %1153, %1102
  %1104 = load ptr, ptr %12, align 8, !tbaa !5
  %1105 = getelementptr inbounds %struct.inflate_state, ptr %1104, i32 0, i32 19
  %1106 = load ptr, ptr %1105, align 8, !tbaa !41
  %1107 = load i64, ptr %17, align 8, !tbaa !21
  %1108 = trunc i64 %1107 to i32
  %1109 = load ptr, ptr %12, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct.inflate_state, ptr %1109, i32 0, i32 21
  %1111 = load i32, ptr %1110, align 8, !tbaa !42
  %1112 = shl i32 1, %1111
  %1113 = sub i32 %1112, 1
  %1114 = and i32 %1108, %1113
  %1115 = zext i32 %1114 to i64
  %1116 = getelementptr inbounds %struct.code, ptr %1106, i64 %1115
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %1116, i64 4, i1 false), !tbaa.struct !43
  %1117 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1118 = load i8, ptr %1117, align 1, !tbaa !44
  %1119 = zext i8 %1118 to i32
  %1120 = load i32, ptr %18, align 4, !tbaa !20
  %1121 = icmp ule i32 %1119, %1120
  br i1 %1121, label %1122, label %1123

1122:                                             ; preds = %1103
  br label %1154

1123:                                             ; preds = %1103
  br label %1124

1124:                                             ; preds = %1123
  br label %1125

1125:                                             ; preds = %1124
  %1126 = load i32, ptr %15, align 4, !tbaa !20
  %1127 = icmp eq i32 %1126, 0
  br i1 %1127, label %1128, label %1136

1128:                                             ; preds = %1125
  %1129 = load ptr, ptr %8, align 8, !tbaa !5
  %1130 = load ptr, ptr %9, align 8, !tbaa !5
  %1131 = call i32 %1129(ptr noundef %1130, ptr noundef %13)
  store i32 %1131, ptr %15, align 4, !tbaa !20
  %1132 = load i32, ptr %15, align 4, !tbaa !20
  %1133 = icmp eq i32 %1132, 0
  br i1 %1133, label %1134, label %1135

1134:                                             ; preds = %1128
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1135:                                             ; preds = %1128
  br label %1136

1136:                                             ; preds = %1135, %1125
  br label %1137

1137:                                             ; preds = %1136
  br label %1138

1138:                                             ; preds = %1137
  %1139 = load i32, ptr %15, align 4, !tbaa !20
  %1140 = add i32 %1139, -1
  store i32 %1140, ptr %15, align 4, !tbaa !20
  %1141 = load ptr, ptr %13, align 8, !tbaa !5
  %1142 = getelementptr inbounds i8, ptr %1141, i32 1
  store ptr %1142, ptr %13, align 8, !tbaa !5
  %1143 = load i8, ptr %1141, align 1, !tbaa !24
  %1144 = zext i8 %1143 to i64
  %1145 = load i32, ptr %18, align 4, !tbaa !20
  %1146 = zext i32 %1145 to i64
  %1147 = shl i64 %1144, %1146
  %1148 = load i64, ptr %17, align 8, !tbaa !21
  %1149 = add i64 %1148, %1147
  store i64 %1149, ptr %17, align 8, !tbaa !21
  %1150 = load i32, ptr %18, align 4, !tbaa !20
  %1151 = add i32 %1150, 8
  store i32 %1151, ptr %18, align 4, !tbaa !20
  br label %1152

1152:                                             ; preds = %1138
  br label %1153

1153:                                             ; preds = %1152
  br label %1103

1154:                                             ; preds = %1122
  %1155 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1156 = load i8, ptr %1155, align 2, !tbaa !59
  %1157 = zext i8 %1156 to i32
  %1158 = icmp ne i32 %1157, 0
  br i1 %1158, label %1159, label %1248

1159:                                             ; preds = %1154
  %1160 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1161 = load i8, ptr %1160, align 2, !tbaa !59
  %1162 = zext i8 %1161 to i32
  %1163 = and i32 %1162, 240
  %1164 = icmp eq i32 %1163, 0
  br i1 %1164, label %1165, label %1248

1165:                                             ; preds = %1159
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %22, ptr align 2 %21, i64 4, i1 false), !tbaa.struct !43
  br label %1166

1166:                                             ; preds = %1232, %1165
  %1167 = load ptr, ptr %12, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.inflate_state, ptr %1167, i32 0, i32 19
  %1169 = load ptr, ptr %1168, align 8, !tbaa !41
  %1170 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 2
  %1171 = load i16, ptr %1170, align 2, !tbaa !46
  %1172 = zext i16 %1171 to i32
  %1173 = load i64, ptr %17, align 8, !tbaa !21
  %1174 = trunc i64 %1173 to i32
  %1175 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1176 = load i8, ptr %1175, align 1, !tbaa !44
  %1177 = zext i8 %1176 to i32
  %1178 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 0
  %1179 = load i8, ptr %1178, align 2, !tbaa !59
  %1180 = zext i8 %1179 to i32
  %1181 = add nsw i32 %1177, %1180
  %1182 = shl i32 1, %1181
  %1183 = sub i32 %1182, 1
  %1184 = and i32 %1174, %1183
  %1185 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1186 = load i8, ptr %1185, align 1, !tbaa !44
  %1187 = zext i8 %1186 to i32
  %1188 = lshr i32 %1184, %1187
  %1189 = add i32 %1172, %1188
  %1190 = zext i32 %1189 to i64
  %1191 = getelementptr inbounds %struct.code, ptr %1169, i64 %1190
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %1191, i64 4, i1 false), !tbaa.struct !43
  %1192 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1193 = load i8, ptr %1192, align 1, !tbaa !44
  %1194 = zext i8 %1193 to i32
  %1195 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1196 = load i8, ptr %1195, align 1, !tbaa !44
  %1197 = zext i8 %1196 to i32
  %1198 = add nsw i32 %1194, %1197
  %1199 = load i32, ptr %18, align 4, !tbaa !20
  %1200 = icmp ule i32 %1198, %1199
  br i1 %1200, label %1201, label %1202

1201:                                             ; preds = %1166
  br label %1233

1202:                                             ; preds = %1166
  br label %1203

1203:                                             ; preds = %1202
  br label %1204

1204:                                             ; preds = %1203
  %1205 = load i32, ptr %15, align 4, !tbaa !20
  %1206 = icmp eq i32 %1205, 0
  br i1 %1206, label %1207, label %1215

1207:                                             ; preds = %1204
  %1208 = load ptr, ptr %8, align 8, !tbaa !5
  %1209 = load ptr, ptr %9, align 8, !tbaa !5
  %1210 = call i32 %1208(ptr noundef %1209, ptr noundef %13)
  store i32 %1210, ptr %15, align 4, !tbaa !20
  %1211 = load i32, ptr %15, align 4, !tbaa !20
  %1212 = icmp eq i32 %1211, 0
  br i1 %1212, label %1213, label %1214

1213:                                             ; preds = %1207
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1214:                                             ; preds = %1207
  br label %1215

1215:                                             ; preds = %1214, %1204
  br label %1216

1216:                                             ; preds = %1215
  br label %1217

1217:                                             ; preds = %1216
  %1218 = load i32, ptr %15, align 4, !tbaa !20
  %1219 = add i32 %1218, -1
  store i32 %1219, ptr %15, align 4, !tbaa !20
  %1220 = load ptr, ptr %13, align 8, !tbaa !5
  %1221 = getelementptr inbounds i8, ptr %1220, i32 1
  store ptr %1221, ptr %13, align 8, !tbaa !5
  %1222 = load i8, ptr %1220, align 1, !tbaa !24
  %1223 = zext i8 %1222 to i64
  %1224 = load i32, ptr %18, align 4, !tbaa !20
  %1225 = zext i32 %1224 to i64
  %1226 = shl i64 %1223, %1225
  %1227 = load i64, ptr %17, align 8, !tbaa !21
  %1228 = add i64 %1227, %1226
  store i64 %1228, ptr %17, align 8, !tbaa !21
  %1229 = load i32, ptr %18, align 4, !tbaa !20
  %1230 = add i32 %1229, 8
  store i32 %1230, ptr %18, align 4, !tbaa !20
  br label %1231

1231:                                             ; preds = %1217
  br label %1232

1232:                                             ; preds = %1231
  br label %1166

1233:                                             ; preds = %1201
  br label %1234

1234:                                             ; preds = %1233
  %1235 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1236 = load i8, ptr %1235, align 1, !tbaa !44
  %1237 = zext i8 %1236 to i32
  %1238 = load i64, ptr %17, align 8, !tbaa !21
  %1239 = zext i32 %1237 to i64
  %1240 = lshr i64 %1238, %1239
  store i64 %1240, ptr %17, align 8, !tbaa !21
  %1241 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1242 = load i8, ptr %1241, align 1, !tbaa !44
  %1243 = zext i8 %1242 to i32
  %1244 = load i32, ptr %18, align 4, !tbaa !20
  %1245 = sub i32 %1244, %1243
  store i32 %1245, ptr %18, align 4, !tbaa !20
  br label %1246

1246:                                             ; preds = %1234
  br label %1247

1247:                                             ; preds = %1246
  br label %1248

1248:                                             ; preds = %1247, %1159, %1154
  br label %1249

1249:                                             ; preds = %1248
  %1250 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1251 = load i8, ptr %1250, align 1, !tbaa !44
  %1252 = zext i8 %1251 to i32
  %1253 = load i64, ptr %17, align 8, !tbaa !21
  %1254 = zext i32 %1252 to i64
  %1255 = lshr i64 %1253, %1254
  store i64 %1255, ptr %17, align 8, !tbaa !21
  %1256 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1257 = load i8, ptr %1256, align 1, !tbaa !44
  %1258 = zext i8 %1257 to i32
  %1259 = load i32, ptr %18, align 4, !tbaa !20
  %1260 = sub i32 %1259, %1258
  store i32 %1260, ptr %18, align 4, !tbaa !20
  br label %1261

1261:                                             ; preds = %1249
  br label %1262

1262:                                             ; preds = %1261
  %1263 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %1264 = load i16, ptr %1263, align 2, !tbaa !46
  %1265 = zext i16 %1264 to i32
  %1266 = load ptr, ptr %12, align 8, !tbaa !5
  %1267 = getelementptr inbounds %struct.inflate_state, ptr %1266, i32 0, i32 16
  store i32 %1265, ptr %1267, align 4, !tbaa !28
  %1268 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1269 = load i8, ptr %1268, align 2, !tbaa !59
  %1270 = zext i8 %1269 to i32
  %1271 = icmp eq i32 %1270, 0
  br i1 %1271, label %1272, label %1307

1272:                                             ; preds = %1262
  br label %1273

1273:                                             ; preds = %1272
  %1274 = load i32, ptr %16, align 4, !tbaa !20
  %1275 = icmp eq i32 %1274, 0
  br i1 %1275, label %1276, label %1294

1276:                                             ; preds = %1273
  %1277 = load ptr, ptr %12, align 8, !tbaa !5
  %1278 = getelementptr inbounds %struct.inflate_state, ptr %1277, i32 0, i32 13
  %1279 = load ptr, ptr %1278, align 8, !tbaa !22
  store ptr %1279, ptr %14, align 8, !tbaa !5
  %1280 = load ptr, ptr %12, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct.inflate_state, ptr %1280, i32 0, i32 10
  %1282 = load i32, ptr %1281, align 4, !tbaa !23
  store i32 %1282, ptr %16, align 4, !tbaa !20
  %1283 = load i32, ptr %16, align 4, !tbaa !20
  %1284 = load ptr, ptr %12, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.inflate_state, ptr %1284, i32 0, i32 11
  store i32 %1283, ptr %1285, align 8, !tbaa !17
  %1286 = load ptr, ptr %10, align 8, !tbaa !5
  %1287 = load ptr, ptr %11, align 8, !tbaa !5
  %1288 = load ptr, ptr %14, align 8, !tbaa !5
  %1289 = load i32, ptr %16, align 4, !tbaa !20
  %1290 = call i32 %1286(ptr noundef %1287, ptr noundef %1288, i32 noundef %1289)
  %1291 = icmp ne i32 %1290, 0
  br i1 %1291, label %1292, label %1293

1292:                                             ; preds = %1276
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1293:                                             ; preds = %1276
  br label %1294

1294:                                             ; preds = %1293, %1273
  br label %1295

1295:                                             ; preds = %1294
  br label %1296

1296:                                             ; preds = %1295
  %1297 = load ptr, ptr %12, align 8, !tbaa !5
  %1298 = getelementptr inbounds %struct.inflate_state, ptr %1297, i32 0, i32 16
  %1299 = load i32, ptr %1298, align 4, !tbaa !28
  %1300 = trunc i32 %1299 to i8
  %1301 = load ptr, ptr %14, align 8, !tbaa !5
  %1302 = getelementptr inbounds i8, ptr %1301, i32 1
  store ptr %1302, ptr %14, align 8, !tbaa !5
  store i8 %1300, ptr %1301, align 1, !tbaa !24
  %1303 = load i32, ptr %16, align 4, !tbaa !20
  %1304 = add i32 %1303, -1
  store i32 %1304, ptr %16, align 4, !tbaa !20
  %1305 = load ptr, ptr %12, align 8, !tbaa !5
  %1306 = getelementptr inbounds %struct.inflate_state, ptr %1305, i32 0, i32 0
  store i32 20, ptr %1306, align 8, !tbaa !14
  br label %1795

1307:                                             ; preds = %1262
  %1308 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1309 = load i8, ptr %1308, align 2, !tbaa !59
  %1310 = zext i8 %1309 to i32
  %1311 = and i32 %1310, 32
  %1312 = icmp ne i32 %1311, 0
  br i1 %1312, label %1313, label %1316

1313:                                             ; preds = %1307
  %1314 = load ptr, ptr %12, align 8, !tbaa !5
  %1315 = getelementptr inbounds %struct.inflate_state, ptr %1314, i32 0, i32 0
  store i32 11, ptr %1315, align 8, !tbaa !14
  br label %1795

1316:                                             ; preds = %1307
  %1317 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1318 = load i8, ptr %1317, align 2, !tbaa !59
  %1319 = zext i8 %1318 to i32
  %1320 = and i32 %1319, 64
  %1321 = icmp ne i32 %1320, 0
  br i1 %1321, label %1322, label %1327

1322:                                             ; preds = %1316
  %1323 = load ptr, ptr %7, align 8, !tbaa !5
  %1324 = getelementptr inbounds %struct.z_stream_s, ptr %1323, i32 0, i32 6
  store ptr @.str.9, ptr %1324, align 8, !tbaa !13
  %1325 = load ptr, ptr %12, align 8, !tbaa !5
  %1326 = getelementptr inbounds %struct.inflate_state, ptr %1325, i32 0, i32 0
  store i32 29, ptr %1326, align 8, !tbaa !14
  br label %1795

1327:                                             ; preds = %1316
  %1328 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1329 = load i8, ptr %1328, align 2, !tbaa !59
  %1330 = zext i8 %1329 to i32
  %1331 = and i32 %1330, 15
  %1332 = load ptr, ptr %12, align 8, !tbaa !5
  %1333 = getelementptr inbounds %struct.inflate_state, ptr %1332, i32 0, i32 18
  store i32 %1331, ptr %1333, align 4, !tbaa !60
  %1334 = load ptr, ptr %12, align 8, !tbaa !5
  %1335 = getelementptr inbounds %struct.inflate_state, ptr %1334, i32 0, i32 18
  %1336 = load i32, ptr %1335, align 4, !tbaa !60
  %1337 = icmp ne i32 %1336, 0
  br i1 %1337, label %1338, label %1406

1338:                                             ; preds = %1327
  br label %1339

1339:                                             ; preds = %1338
  br label %1340

1340:                                             ; preds = %1376, %1339
  %1341 = load i32, ptr %18, align 4, !tbaa !20
  %1342 = load ptr, ptr %12, align 8, !tbaa !5
  %1343 = getelementptr inbounds %struct.inflate_state, ptr %1342, i32 0, i32 18
  %1344 = load i32, ptr %1343, align 4, !tbaa !60
  %1345 = icmp ult i32 %1341, %1344
  br i1 %1345, label %1346, label %1377

1346:                                             ; preds = %1340
  br label %1347

1347:                                             ; preds = %1346
  br label %1348

1348:                                             ; preds = %1347
  %1349 = load i32, ptr %15, align 4, !tbaa !20
  %1350 = icmp eq i32 %1349, 0
  br i1 %1350, label %1351, label %1359

1351:                                             ; preds = %1348
  %1352 = load ptr, ptr %8, align 8, !tbaa !5
  %1353 = load ptr, ptr %9, align 8, !tbaa !5
  %1354 = call i32 %1352(ptr noundef %1353, ptr noundef %13)
  store i32 %1354, ptr %15, align 4, !tbaa !20
  %1355 = load i32, ptr %15, align 4, !tbaa !20
  %1356 = icmp eq i32 %1355, 0
  br i1 %1356, label %1357, label %1358

1357:                                             ; preds = %1351
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1358:                                             ; preds = %1351
  br label %1359

1359:                                             ; preds = %1358, %1348
  br label %1360

1360:                                             ; preds = %1359
  br label %1361

1361:                                             ; preds = %1360
  %1362 = load i32, ptr %15, align 4, !tbaa !20
  %1363 = add i32 %1362, -1
  store i32 %1363, ptr %15, align 4, !tbaa !20
  %1364 = load ptr, ptr %13, align 8, !tbaa !5
  %1365 = getelementptr inbounds i8, ptr %1364, i32 1
  store ptr %1365, ptr %13, align 8, !tbaa !5
  %1366 = load i8, ptr %1364, align 1, !tbaa !24
  %1367 = zext i8 %1366 to i64
  %1368 = load i32, ptr %18, align 4, !tbaa !20
  %1369 = zext i32 %1368 to i64
  %1370 = shl i64 %1367, %1369
  %1371 = load i64, ptr %17, align 8, !tbaa !21
  %1372 = add i64 %1371, %1370
  store i64 %1372, ptr %17, align 8, !tbaa !21
  %1373 = load i32, ptr %18, align 4, !tbaa !20
  %1374 = add i32 %1373, 8
  store i32 %1374, ptr %18, align 4, !tbaa !20
  br label %1375

1375:                                             ; preds = %1361
  br label %1376

1376:                                             ; preds = %1375
  br label %1340, !llvm.loop !61

1377:                                             ; preds = %1340
  br label %1378

1378:                                             ; preds = %1377
  br label %1379

1379:                                             ; preds = %1378
  %1380 = load i64, ptr %17, align 8, !tbaa !21
  %1381 = trunc i64 %1380 to i32
  %1382 = load ptr, ptr %12, align 8, !tbaa !5
  %1383 = getelementptr inbounds %struct.inflate_state, ptr %1382, i32 0, i32 18
  %1384 = load i32, ptr %1383, align 4, !tbaa !60
  %1385 = shl i32 1, %1384
  %1386 = sub i32 %1385, 1
  %1387 = and i32 %1381, %1386
  %1388 = load ptr, ptr %12, align 8, !tbaa !5
  %1389 = getelementptr inbounds %struct.inflate_state, ptr %1388, i32 0, i32 16
  %1390 = load i32, ptr %1389, align 4, !tbaa !28
  %1391 = add i32 %1390, %1387
  store i32 %1391, ptr %1389, align 4, !tbaa !28
  br label %1392

1392:                                             ; preds = %1379
  %1393 = load ptr, ptr %12, align 8, !tbaa !5
  %1394 = getelementptr inbounds %struct.inflate_state, ptr %1393, i32 0, i32 18
  %1395 = load i32, ptr %1394, align 4, !tbaa !60
  %1396 = load i64, ptr %17, align 8, !tbaa !21
  %1397 = zext i32 %1395 to i64
  %1398 = lshr i64 %1396, %1397
  store i64 %1398, ptr %17, align 8, !tbaa !21
  %1399 = load ptr, ptr %12, align 8, !tbaa !5
  %1400 = getelementptr inbounds %struct.inflate_state, ptr %1399, i32 0, i32 18
  %1401 = load i32, ptr %1400, align 4, !tbaa !60
  %1402 = load i32, ptr %18, align 4, !tbaa !20
  %1403 = sub i32 %1402, %1401
  store i32 %1403, ptr %18, align 4, !tbaa !20
  br label %1404

1404:                                             ; preds = %1392
  br label %1405

1405:                                             ; preds = %1404
  br label %1406

1406:                                             ; preds = %1405, %1327
  br label %1407

1407:                                             ; preds = %1457, %1406
  %1408 = load ptr, ptr %12, align 8, !tbaa !5
  %1409 = getelementptr inbounds %struct.inflate_state, ptr %1408, i32 0, i32 20
  %1410 = load ptr, ptr %1409, align 8, !tbaa !53
  %1411 = load i64, ptr %17, align 8, !tbaa !21
  %1412 = trunc i64 %1411 to i32
  %1413 = load ptr, ptr %12, align 8, !tbaa !5
  %1414 = getelementptr inbounds %struct.inflate_state, ptr %1413, i32 0, i32 22
  %1415 = load i32, ptr %1414, align 4, !tbaa !54
  %1416 = shl i32 1, %1415
  %1417 = sub i32 %1416, 1
  %1418 = and i32 %1412, %1417
  %1419 = zext i32 %1418 to i64
  %1420 = getelementptr inbounds %struct.code, ptr %1410, i64 %1419
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %1420, i64 4, i1 false), !tbaa.struct !43
  %1421 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1422 = load i8, ptr %1421, align 1, !tbaa !44
  %1423 = zext i8 %1422 to i32
  %1424 = load i32, ptr %18, align 4, !tbaa !20
  %1425 = icmp ule i32 %1423, %1424
  br i1 %1425, label %1426, label %1427

1426:                                             ; preds = %1407
  br label %1458

1427:                                             ; preds = %1407
  br label %1428

1428:                                             ; preds = %1427
  br label %1429

1429:                                             ; preds = %1428
  %1430 = load i32, ptr %15, align 4, !tbaa !20
  %1431 = icmp eq i32 %1430, 0
  br i1 %1431, label %1432, label %1440

1432:                                             ; preds = %1429
  %1433 = load ptr, ptr %8, align 8, !tbaa !5
  %1434 = load ptr, ptr %9, align 8, !tbaa !5
  %1435 = call i32 %1433(ptr noundef %1434, ptr noundef %13)
  store i32 %1435, ptr %15, align 4, !tbaa !20
  %1436 = load i32, ptr %15, align 4, !tbaa !20
  %1437 = icmp eq i32 %1436, 0
  br i1 %1437, label %1438, label %1439

1438:                                             ; preds = %1432
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1439:                                             ; preds = %1432
  br label %1440

1440:                                             ; preds = %1439, %1429
  br label %1441

1441:                                             ; preds = %1440
  br label %1442

1442:                                             ; preds = %1441
  %1443 = load i32, ptr %15, align 4, !tbaa !20
  %1444 = add i32 %1443, -1
  store i32 %1444, ptr %15, align 4, !tbaa !20
  %1445 = load ptr, ptr %13, align 8, !tbaa !5
  %1446 = getelementptr inbounds i8, ptr %1445, i32 1
  store ptr %1446, ptr %13, align 8, !tbaa !5
  %1447 = load i8, ptr %1445, align 1, !tbaa !24
  %1448 = zext i8 %1447 to i64
  %1449 = load i32, ptr %18, align 4, !tbaa !20
  %1450 = zext i32 %1449 to i64
  %1451 = shl i64 %1448, %1450
  %1452 = load i64, ptr %17, align 8, !tbaa !21
  %1453 = add i64 %1452, %1451
  store i64 %1453, ptr %17, align 8, !tbaa !21
  %1454 = load i32, ptr %18, align 4, !tbaa !20
  %1455 = add i32 %1454, 8
  store i32 %1455, ptr %18, align 4, !tbaa !20
  br label %1456

1456:                                             ; preds = %1442
  br label %1457

1457:                                             ; preds = %1456
  br label %1407

1458:                                             ; preds = %1426
  %1459 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1460 = load i8, ptr %1459, align 2, !tbaa !59
  %1461 = zext i8 %1460 to i32
  %1462 = and i32 %1461, 240
  %1463 = icmp eq i32 %1462, 0
  br i1 %1463, label %1464, label %1547

1464:                                             ; preds = %1458
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %22, ptr align 2 %21, i64 4, i1 false), !tbaa.struct !43
  br label %1465

1465:                                             ; preds = %1531, %1464
  %1466 = load ptr, ptr %12, align 8, !tbaa !5
  %1467 = getelementptr inbounds %struct.inflate_state, ptr %1466, i32 0, i32 20
  %1468 = load ptr, ptr %1467, align 8, !tbaa !53
  %1469 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 2
  %1470 = load i16, ptr %1469, align 2, !tbaa !46
  %1471 = zext i16 %1470 to i32
  %1472 = load i64, ptr %17, align 8, !tbaa !21
  %1473 = trunc i64 %1472 to i32
  %1474 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1475 = load i8, ptr %1474, align 1, !tbaa !44
  %1476 = zext i8 %1475 to i32
  %1477 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 0
  %1478 = load i8, ptr %1477, align 2, !tbaa !59
  %1479 = zext i8 %1478 to i32
  %1480 = add nsw i32 %1476, %1479
  %1481 = shl i32 1, %1480
  %1482 = sub i32 %1481, 1
  %1483 = and i32 %1473, %1482
  %1484 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1485 = load i8, ptr %1484, align 1, !tbaa !44
  %1486 = zext i8 %1485 to i32
  %1487 = lshr i32 %1483, %1486
  %1488 = add i32 %1471, %1487
  %1489 = zext i32 %1488 to i64
  %1490 = getelementptr inbounds %struct.code, ptr %1468, i64 %1489
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %1490, i64 4, i1 false), !tbaa.struct !43
  %1491 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1492 = load i8, ptr %1491, align 1, !tbaa !44
  %1493 = zext i8 %1492 to i32
  %1494 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1495 = load i8, ptr %1494, align 1, !tbaa !44
  %1496 = zext i8 %1495 to i32
  %1497 = add nsw i32 %1493, %1496
  %1498 = load i32, ptr %18, align 4, !tbaa !20
  %1499 = icmp ule i32 %1497, %1498
  br i1 %1499, label %1500, label %1501

1500:                                             ; preds = %1465
  br label %1532

1501:                                             ; preds = %1465
  br label %1502

1502:                                             ; preds = %1501
  br label %1503

1503:                                             ; preds = %1502
  %1504 = load i32, ptr %15, align 4, !tbaa !20
  %1505 = icmp eq i32 %1504, 0
  br i1 %1505, label %1506, label %1514

1506:                                             ; preds = %1503
  %1507 = load ptr, ptr %8, align 8, !tbaa !5
  %1508 = load ptr, ptr %9, align 8, !tbaa !5
  %1509 = call i32 %1507(ptr noundef %1508, ptr noundef %13)
  store i32 %1509, ptr %15, align 4, !tbaa !20
  %1510 = load i32, ptr %15, align 4, !tbaa !20
  %1511 = icmp eq i32 %1510, 0
  br i1 %1511, label %1512, label %1513

1512:                                             ; preds = %1506
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1513:                                             ; preds = %1506
  br label %1514

1514:                                             ; preds = %1513, %1503
  br label %1515

1515:                                             ; preds = %1514
  br label %1516

1516:                                             ; preds = %1515
  %1517 = load i32, ptr %15, align 4, !tbaa !20
  %1518 = add i32 %1517, -1
  store i32 %1518, ptr %15, align 4, !tbaa !20
  %1519 = load ptr, ptr %13, align 8, !tbaa !5
  %1520 = getelementptr inbounds i8, ptr %1519, i32 1
  store ptr %1520, ptr %13, align 8, !tbaa !5
  %1521 = load i8, ptr %1519, align 1, !tbaa !24
  %1522 = zext i8 %1521 to i64
  %1523 = load i32, ptr %18, align 4, !tbaa !20
  %1524 = zext i32 %1523 to i64
  %1525 = shl i64 %1522, %1524
  %1526 = load i64, ptr %17, align 8, !tbaa !21
  %1527 = add i64 %1526, %1525
  store i64 %1527, ptr %17, align 8, !tbaa !21
  %1528 = load i32, ptr %18, align 4, !tbaa !20
  %1529 = add i32 %1528, 8
  store i32 %1529, ptr %18, align 4, !tbaa !20
  br label %1530

1530:                                             ; preds = %1516
  br label %1531

1531:                                             ; preds = %1530
  br label %1465

1532:                                             ; preds = %1500
  br label %1533

1533:                                             ; preds = %1532
  %1534 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1535 = load i8, ptr %1534, align 1, !tbaa !44
  %1536 = zext i8 %1535 to i32
  %1537 = load i64, ptr %17, align 8, !tbaa !21
  %1538 = zext i32 %1536 to i64
  %1539 = lshr i64 %1537, %1538
  store i64 %1539, ptr %17, align 8, !tbaa !21
  %1540 = getelementptr inbounds %struct.code, ptr %22, i32 0, i32 1
  %1541 = load i8, ptr %1540, align 1, !tbaa !44
  %1542 = zext i8 %1541 to i32
  %1543 = load i32, ptr %18, align 4, !tbaa !20
  %1544 = sub i32 %1543, %1542
  store i32 %1544, ptr %18, align 4, !tbaa !20
  br label %1545

1545:                                             ; preds = %1533
  br label %1546

1546:                                             ; preds = %1545
  br label %1547

1547:                                             ; preds = %1546, %1458
  br label %1548

1548:                                             ; preds = %1547
  %1549 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1550 = load i8, ptr %1549, align 1, !tbaa !44
  %1551 = zext i8 %1550 to i32
  %1552 = load i64, ptr %17, align 8, !tbaa !21
  %1553 = zext i32 %1551 to i64
  %1554 = lshr i64 %1552, %1553
  store i64 %1554, ptr %17, align 8, !tbaa !21
  %1555 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %1556 = load i8, ptr %1555, align 1, !tbaa !44
  %1557 = zext i8 %1556 to i32
  %1558 = load i32, ptr %18, align 4, !tbaa !20
  %1559 = sub i32 %1558, %1557
  store i32 %1559, ptr %18, align 4, !tbaa !20
  br label %1560

1560:                                             ; preds = %1548
  br label %1561

1561:                                             ; preds = %1560
  %1562 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1563 = load i8, ptr %1562, align 2, !tbaa !59
  %1564 = zext i8 %1563 to i32
  %1565 = and i32 %1564, 64
  %1566 = icmp ne i32 %1565, 0
  br i1 %1566, label %1567, label %1572

1567:                                             ; preds = %1561
  %1568 = load ptr, ptr %7, align 8, !tbaa !5
  %1569 = getelementptr inbounds %struct.z_stream_s, ptr %1568, i32 0, i32 6
  store ptr @.str.10, ptr %1569, align 8, !tbaa !13
  %1570 = load ptr, ptr %12, align 8, !tbaa !5
  %1571 = getelementptr inbounds %struct.inflate_state, ptr %1570, i32 0, i32 0
  store i32 29, ptr %1571, align 8, !tbaa !14
  br label %1795

1572:                                             ; preds = %1561
  %1573 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %1574 = load i16, ptr %1573, align 2, !tbaa !46
  %1575 = zext i16 %1574 to i32
  %1576 = load ptr, ptr %12, align 8, !tbaa !5
  %1577 = getelementptr inbounds %struct.inflate_state, ptr %1576, i32 0, i32 17
  store i32 %1575, ptr %1577, align 8, !tbaa !62
  %1578 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %1579 = load i8, ptr %1578, align 2, !tbaa !59
  %1580 = zext i8 %1579 to i32
  %1581 = and i32 %1580, 15
  %1582 = load ptr, ptr %12, align 8, !tbaa !5
  %1583 = getelementptr inbounds %struct.inflate_state, ptr %1582, i32 0, i32 18
  store i32 %1581, ptr %1583, align 4, !tbaa !60
  %1584 = load ptr, ptr %12, align 8, !tbaa !5
  %1585 = getelementptr inbounds %struct.inflate_state, ptr %1584, i32 0, i32 18
  %1586 = load i32, ptr %1585, align 4, !tbaa !60
  %1587 = icmp ne i32 %1586, 0
  br i1 %1587, label %1588, label %1656

1588:                                             ; preds = %1572
  br label %1589

1589:                                             ; preds = %1588
  br label %1590

1590:                                             ; preds = %1626, %1589
  %1591 = load i32, ptr %18, align 4, !tbaa !20
  %1592 = load ptr, ptr %12, align 8, !tbaa !5
  %1593 = getelementptr inbounds %struct.inflate_state, ptr %1592, i32 0, i32 18
  %1594 = load i32, ptr %1593, align 4, !tbaa !60
  %1595 = icmp ult i32 %1591, %1594
  br i1 %1595, label %1596, label %1627

1596:                                             ; preds = %1590
  br label %1597

1597:                                             ; preds = %1596
  br label %1598

1598:                                             ; preds = %1597
  %1599 = load i32, ptr %15, align 4, !tbaa !20
  %1600 = icmp eq i32 %1599, 0
  br i1 %1600, label %1601, label %1609

1601:                                             ; preds = %1598
  %1602 = load ptr, ptr %8, align 8, !tbaa !5
  %1603 = load ptr, ptr %9, align 8, !tbaa !5
  %1604 = call i32 %1602(ptr noundef %1603, ptr noundef %13)
  store i32 %1604, ptr %15, align 4, !tbaa !20
  %1605 = load i32, ptr %15, align 4, !tbaa !20
  %1606 = icmp eq i32 %1605, 0
  br i1 %1606, label %1607, label %1608

1607:                                             ; preds = %1601
  store ptr null, ptr %13, align 8, !tbaa !5
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1608:                                             ; preds = %1601
  br label %1609

1609:                                             ; preds = %1608, %1598
  br label %1610

1610:                                             ; preds = %1609
  br label %1611

1611:                                             ; preds = %1610
  %1612 = load i32, ptr %15, align 4, !tbaa !20
  %1613 = add i32 %1612, -1
  store i32 %1613, ptr %15, align 4, !tbaa !20
  %1614 = load ptr, ptr %13, align 8, !tbaa !5
  %1615 = getelementptr inbounds i8, ptr %1614, i32 1
  store ptr %1615, ptr %13, align 8, !tbaa !5
  %1616 = load i8, ptr %1614, align 1, !tbaa !24
  %1617 = zext i8 %1616 to i64
  %1618 = load i32, ptr %18, align 4, !tbaa !20
  %1619 = zext i32 %1618 to i64
  %1620 = shl i64 %1617, %1619
  %1621 = load i64, ptr %17, align 8, !tbaa !21
  %1622 = add i64 %1621, %1620
  store i64 %1622, ptr %17, align 8, !tbaa !21
  %1623 = load i32, ptr %18, align 4, !tbaa !20
  %1624 = add i32 %1623, 8
  store i32 %1624, ptr %18, align 4, !tbaa !20
  br label %1625

1625:                                             ; preds = %1611
  br label %1626

1626:                                             ; preds = %1625
  br label %1590, !llvm.loop !63

1627:                                             ; preds = %1590
  br label %1628

1628:                                             ; preds = %1627
  br label %1629

1629:                                             ; preds = %1628
  %1630 = load i64, ptr %17, align 8, !tbaa !21
  %1631 = trunc i64 %1630 to i32
  %1632 = load ptr, ptr %12, align 8, !tbaa !5
  %1633 = getelementptr inbounds %struct.inflate_state, ptr %1632, i32 0, i32 18
  %1634 = load i32, ptr %1633, align 4, !tbaa !60
  %1635 = shl i32 1, %1634
  %1636 = sub i32 %1635, 1
  %1637 = and i32 %1631, %1636
  %1638 = load ptr, ptr %12, align 8, !tbaa !5
  %1639 = getelementptr inbounds %struct.inflate_state, ptr %1638, i32 0, i32 17
  %1640 = load i32, ptr %1639, align 8, !tbaa !62
  %1641 = add i32 %1640, %1637
  store i32 %1641, ptr %1639, align 8, !tbaa !62
  br label %1642

1642:                                             ; preds = %1629
  %1643 = load ptr, ptr %12, align 8, !tbaa !5
  %1644 = getelementptr inbounds %struct.inflate_state, ptr %1643, i32 0, i32 18
  %1645 = load i32, ptr %1644, align 4, !tbaa !60
  %1646 = load i64, ptr %17, align 8, !tbaa !21
  %1647 = zext i32 %1645 to i64
  %1648 = lshr i64 %1646, %1647
  store i64 %1648, ptr %17, align 8, !tbaa !21
  %1649 = load ptr, ptr %12, align 8, !tbaa !5
  %1650 = getelementptr inbounds %struct.inflate_state, ptr %1649, i32 0, i32 18
  %1651 = load i32, ptr %1650, align 4, !tbaa !60
  %1652 = load i32, ptr %18, align 4, !tbaa !20
  %1653 = sub i32 %1652, %1651
  store i32 %1653, ptr %18, align 4, !tbaa !20
  br label %1654

1654:                                             ; preds = %1642
  br label %1655

1655:                                             ; preds = %1654
  br label %1656

1656:                                             ; preds = %1655, %1572
  %1657 = load ptr, ptr %12, align 8, !tbaa !5
  %1658 = getelementptr inbounds %struct.inflate_state, ptr %1657, i32 0, i32 17
  %1659 = load i32, ptr %1658, align 8, !tbaa !62
  %1660 = load ptr, ptr %12, align 8, !tbaa !5
  %1661 = getelementptr inbounds %struct.inflate_state, ptr %1660, i32 0, i32 10
  %1662 = load i32, ptr %1661, align 4, !tbaa !23
  %1663 = load ptr, ptr %12, align 8, !tbaa !5
  %1664 = getelementptr inbounds %struct.inflate_state, ptr %1663, i32 0, i32 11
  %1665 = load i32, ptr %1664, align 8, !tbaa !17
  %1666 = load ptr, ptr %12, align 8, !tbaa !5
  %1667 = getelementptr inbounds %struct.inflate_state, ptr %1666, i32 0, i32 10
  %1668 = load i32, ptr %1667, align 4, !tbaa !23
  %1669 = icmp ult i32 %1665, %1668
  br i1 %1669, label %1670, label %1672

1670:                                             ; preds = %1656
  %1671 = load i32, ptr %16, align 4, !tbaa !20
  br label %1673

1672:                                             ; preds = %1656
  br label %1673

1673:                                             ; preds = %1672, %1670
  %1674 = phi i32 [ %1671, %1670 ], [ 0, %1672 ]
  %1675 = sub i32 %1662, %1674
  %1676 = icmp ugt i32 %1659, %1675
  br i1 %1676, label %1677, label %1682

1677:                                             ; preds = %1673
  %1678 = load ptr, ptr %7, align 8, !tbaa !5
  %1679 = getelementptr inbounds %struct.z_stream_s, ptr %1678, i32 0, i32 6
  store ptr @.str.11, ptr %1679, align 8, !tbaa !13
  %1680 = load ptr, ptr %12, align 8, !tbaa !5
  %1681 = getelementptr inbounds %struct.inflate_state, ptr %1680, i32 0, i32 0
  store i32 29, ptr %1681, align 8, !tbaa !14
  br label %1795

1682:                                             ; preds = %1673
  br label %1683

1683:                                             ; preds = %1765, %1682
  br label %1684

1684:                                             ; preds = %1683
  %1685 = load i32, ptr %16, align 4, !tbaa !20
  %1686 = icmp eq i32 %1685, 0
  br i1 %1686, label %1687, label %1705

1687:                                             ; preds = %1684
  %1688 = load ptr, ptr %12, align 8, !tbaa !5
  %1689 = getelementptr inbounds %struct.inflate_state, ptr %1688, i32 0, i32 13
  %1690 = load ptr, ptr %1689, align 8, !tbaa !22
  store ptr %1690, ptr %14, align 8, !tbaa !5
  %1691 = load ptr, ptr %12, align 8, !tbaa !5
  %1692 = getelementptr inbounds %struct.inflate_state, ptr %1691, i32 0, i32 10
  %1693 = load i32, ptr %1692, align 4, !tbaa !23
  store i32 %1693, ptr %16, align 4, !tbaa !20
  %1694 = load i32, ptr %16, align 4, !tbaa !20
  %1695 = load ptr, ptr %12, align 8, !tbaa !5
  %1696 = getelementptr inbounds %struct.inflate_state, ptr %1695, i32 0, i32 11
  store i32 %1694, ptr %1696, align 8, !tbaa !17
  %1697 = load ptr, ptr %10, align 8, !tbaa !5
  %1698 = load ptr, ptr %11, align 8, !tbaa !5
  %1699 = load ptr, ptr %14, align 8, !tbaa !5
  %1700 = load i32, ptr %16, align 4, !tbaa !20
  %1701 = call i32 %1697(ptr noundef %1698, ptr noundef %1699, i32 noundef %1700)
  %1702 = icmp ne i32 %1701, 0
  br i1 %1702, label %1703, label %1704

1703:                                             ; preds = %1687
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1796

1704:                                             ; preds = %1687
  br label %1705

1705:                                             ; preds = %1704, %1684
  br label %1706

1706:                                             ; preds = %1705
  br label %1707

1707:                                             ; preds = %1706
  %1708 = load ptr, ptr %12, align 8, !tbaa !5
  %1709 = getelementptr inbounds %struct.inflate_state, ptr %1708, i32 0, i32 10
  %1710 = load i32, ptr %1709, align 4, !tbaa !23
  %1711 = load ptr, ptr %12, align 8, !tbaa !5
  %1712 = getelementptr inbounds %struct.inflate_state, ptr %1711, i32 0, i32 17
  %1713 = load i32, ptr %1712, align 8, !tbaa !62
  %1714 = sub i32 %1710, %1713
  store i32 %1714, ptr %19, align 4, !tbaa !20
  %1715 = load i32, ptr %19, align 4, !tbaa !20
  %1716 = load i32, ptr %16, align 4, !tbaa !20
  %1717 = icmp ult i32 %1715, %1716
  br i1 %1717, label %1718, label %1726

1718:                                             ; preds = %1707
  %1719 = load ptr, ptr %14, align 8, !tbaa !5
  %1720 = load i32, ptr %19, align 4, !tbaa !20
  %1721 = zext i32 %1720 to i64
  %1722 = getelementptr inbounds i8, ptr %1719, i64 %1721
  store ptr %1722, ptr %20, align 8, !tbaa !5
  %1723 = load i32, ptr %16, align 4, !tbaa !20
  %1724 = load i32, ptr %19, align 4, !tbaa !20
  %1725 = sub i32 %1723, %1724
  store i32 %1725, ptr %19, align 4, !tbaa !20
  br label %1735

1726:                                             ; preds = %1707
  %1727 = load ptr, ptr %14, align 8, !tbaa !5
  %1728 = load ptr, ptr %12, align 8, !tbaa !5
  %1729 = getelementptr inbounds %struct.inflate_state, ptr %1728, i32 0, i32 17
  %1730 = load i32, ptr %1729, align 8, !tbaa !62
  %1731 = zext i32 %1730 to i64
  %1732 = sub i64 0, %1731
  %1733 = getelementptr inbounds i8, ptr %1727, i64 %1732
  store ptr %1733, ptr %20, align 8, !tbaa !5
  %1734 = load i32, ptr %16, align 4, !tbaa !20
  store i32 %1734, ptr %19, align 4, !tbaa !20
  br label %1735

1735:                                             ; preds = %1726, %1718
  %1736 = load i32, ptr %19, align 4, !tbaa !20
  %1737 = load ptr, ptr %12, align 8, !tbaa !5
  %1738 = getelementptr inbounds %struct.inflate_state, ptr %1737, i32 0, i32 16
  %1739 = load i32, ptr %1738, align 4, !tbaa !28
  %1740 = icmp ugt i32 %1736, %1739
  br i1 %1740, label %1741, label %1745

1741:                                             ; preds = %1735
  %1742 = load ptr, ptr %12, align 8, !tbaa !5
  %1743 = getelementptr inbounds %struct.inflate_state, ptr %1742, i32 0, i32 16
  %1744 = load i32, ptr %1743, align 4, !tbaa !28
  store i32 %1744, ptr %19, align 4, !tbaa !20
  br label %1745

1745:                                             ; preds = %1741, %1735
  %1746 = load i32, ptr %19, align 4, !tbaa !20
  %1747 = load ptr, ptr %12, align 8, !tbaa !5
  %1748 = getelementptr inbounds %struct.inflate_state, ptr %1747, i32 0, i32 16
  %1749 = load i32, ptr %1748, align 4, !tbaa !28
  %1750 = sub i32 %1749, %1746
  store i32 %1750, ptr %1748, align 4, !tbaa !28
  %1751 = load i32, ptr %19, align 4, !tbaa !20
  %1752 = load i32, ptr %16, align 4, !tbaa !20
  %1753 = sub i32 %1752, %1751
  store i32 %1753, ptr %16, align 4, !tbaa !20
  br label %1754

1754:                                             ; preds = %1760, %1745
  %1755 = load ptr, ptr %20, align 8, !tbaa !5
  %1756 = getelementptr inbounds i8, ptr %1755, i32 1
  store ptr %1756, ptr %20, align 8, !tbaa !5
  %1757 = load i8, ptr %1755, align 1, !tbaa !24
  %1758 = load ptr, ptr %14, align 8, !tbaa !5
  %1759 = getelementptr inbounds i8, ptr %1758, i32 1
  store ptr %1759, ptr %14, align 8, !tbaa !5
  store i8 %1757, ptr %1758, align 1, !tbaa !24
  br label %1760

1760:                                             ; preds = %1754
  %1761 = load i32, ptr %19, align 4, !tbaa !20
  %1762 = add i32 %1761, -1
  store i32 %1762, ptr %19, align 4, !tbaa !20
  %1763 = icmp ne i32 %1762, 0
  br i1 %1763, label %1754, label %1764, !llvm.loop !64

1764:                                             ; preds = %1760
  br label %1765

1765:                                             ; preds = %1764
  %1766 = load ptr, ptr %12, align 8, !tbaa !5
  %1767 = getelementptr inbounds %struct.inflate_state, ptr %1766, i32 0, i32 16
  %1768 = load i32, ptr %1767, align 4, !tbaa !28
  %1769 = icmp ne i32 %1768, 0
  br i1 %1769, label %1683, label %1770, !llvm.loop !65

1770:                                             ; preds = %1765
  br label %1795

1771:                                             ; preds = %64
  store i32 1, ptr %24, align 4, !tbaa !20
  %1772 = load i32, ptr %16, align 4, !tbaa !20
  %1773 = load ptr, ptr %12, align 8, !tbaa !5
  %1774 = getelementptr inbounds %struct.inflate_state, ptr %1773, i32 0, i32 10
  %1775 = load i32, ptr %1774, align 4, !tbaa !23
  %1776 = icmp ult i32 %1772, %1775
  br i1 %1776, label %1777, label %1792

1777:                                             ; preds = %1771
  %1778 = load ptr, ptr %10, align 8, !tbaa !5
  %1779 = load ptr, ptr %11, align 8, !tbaa !5
  %1780 = load ptr, ptr %12, align 8, !tbaa !5
  %1781 = getelementptr inbounds %struct.inflate_state, ptr %1780, i32 0, i32 13
  %1782 = load ptr, ptr %1781, align 8, !tbaa !22
  %1783 = load ptr, ptr %12, align 8, !tbaa !5
  %1784 = getelementptr inbounds %struct.inflate_state, ptr %1783, i32 0, i32 10
  %1785 = load i32, ptr %1784, align 4, !tbaa !23
  %1786 = load i32, ptr %16, align 4, !tbaa !20
  %1787 = sub i32 %1785, %1786
  %1788 = call i32 %1778(ptr noundef %1779, ptr noundef %1782, i32 noundef %1787)
  %1789 = icmp ne i32 %1788, 0
  br i1 %1789, label %1790, label %1791

1790:                                             ; preds = %1777
  store i32 -5, ptr %24, align 4, !tbaa !20
  br label %1791

1791:                                             ; preds = %1790, %1777
  br label %1792

1792:                                             ; preds = %1791, %1771
  br label %1796

1793:                                             ; preds = %64
  store i32 -3, ptr %24, align 4, !tbaa !20
  br label %1796

1794:                                             ; preds = %64
  store i32 -2, ptr %24, align 4, !tbaa !20
  br label %1796

1795:                                             ; preds = %1770, %1677, %1567, %1322, %1313, %1296, %1101, %1025, %991, %957, %949, %529, %408, %318, %222, %164, %85
  br label %64

1796:                                             ; preds = %1794, %1793, %1792, %1703, %1607, %1512, %1438, %1357, %1292, %1213, %1134, %858, %790, %697, %625, %581, %440, %337, %278, %254, %193, %104
  %1797 = load ptr, ptr %13, align 8, !tbaa !5
  %1798 = load ptr, ptr %7, align 8, !tbaa !5
  %1799 = getelementptr inbounds %struct.z_stream_s, ptr %1798, i32 0, i32 0
  store ptr %1797, ptr %1799, align 8, !tbaa !18
  %1800 = load i32, ptr %15, align 4, !tbaa !20
  %1801 = load ptr, ptr %7, align 8, !tbaa !5
  %1802 = getelementptr inbounds %struct.z_stream_s, ptr %1801, i32 0, i32 1
  store i32 %1800, ptr %1802, align 8, !tbaa !19
  %1803 = load i32, ptr %24, align 4, !tbaa !20
  store i32 %1803, ptr %6, align 4
  store i32 1, ptr %25, align 4
  br label %1804

1804:                                             ; preds = %1796, %33
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  %1805 = load i32, ptr %6, align 4
  ret i32 %1805
}

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

; 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) #2

declare i32 @inflate_table(i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare void @inflate_fast(ptr noundef, i32 noundef) #3

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

!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, !6, i64 56}
!10 = !{!"z_stream_s", !6, i64 0, !11, i64 8, !12, i64 16, !6, i64 24, !11, i64 32, !12, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !11, i64 88, !12, i64 96, !12, i64 104}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!10, !6, i64 48}
!14 = !{!15, !11, i64 0}
!15 = !{!"inflate_state", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !12, i64 24, !12, i64 32, !6, i64 40, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !6, i64 64, !12, i64 72, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !6, i64 96, !6, i64 104, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !6, i64 136, !7, i64 144, !7, i64 784, !7, i64 1360, !11, i64 7136, !11, i64 7140, !11, i64 7144}
!16 = !{!15, !11, i64 4}
!17 = !{!15, !11, i64 56}
!18 = !{!10, !6, i64 0}
!19 = !{!10, !11, i64 8}
!20 = !{!11, !11, i64 0}
!21 = !{!12, !12, i64 0}
!22 = !{!15, !6, i64 64}
!23 = !{!15, !11, i64 52}
!24 = !{!7, !7, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!15, !11, i64 84}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !26}
!31 = !{!15, !11, i64 124}
!32 = !{!15, !11, i64 128}
!33 = !{!15, !11, i64 120}
!34 = !{!15, !11, i64 132}
!35 = distinct !{!35, !26}
!36 = !{!37, !37, i64 0}
!37 = !{!"short", !7, i64 0}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !26}
!40 = !{!15, !6, i64 136}
!41 = !{!15, !6, i64 96}
!42 = !{!15, !11, i64 112}
!43 = !{i64 0, i64 1, !24, i64 1, i64 1, !24, i64 2, i64 2, !36}
!44 = !{!45, !7, i64 1}
!45 = !{!"", !7, i64 0, !7, i64 1, !37, i64 2}
!46 = !{!45, !37, i64 2}
!47 = distinct !{!47, !26}
!48 = distinct !{!48, !26}
!49 = distinct !{!49, !26}
!50 = distinct !{!50, !26}
!51 = distinct !{!51, !26}
!52 = distinct !{!52, !26}
!53 = !{!15, !6, i64 104}
!54 = !{!15, !11, i64 116}
!55 = !{!10, !6, i64 24}
!56 = !{!10, !11, i64 32}
!57 = !{!15, !12, i64 72}
!58 = !{!15, !11, i64 80}
!59 = !{!45, !7, i64 0}
!60 = !{!15, !11, i64 92}
!61 = distinct !{!61, !26}
!62 = !{!15, !11, i64 88}
!63 = distinct !{!63, !26}
!64 = distinct !{!64, !26}
!65 = distinct !{!65, !26}


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

@inflateBack.order = external hidden local_unnamed_addr constant [19 x i16], align 16
@.str.1 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -5, 2) i32 @inflateBack(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr nocapture noundef readonly %3, ptr noundef %4) local_unnamed_addr #1 {
  %6 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  %7 = icmp eq ptr %0, null
  br i1 %7, label %774, label %8

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

12:                                               ; preds = %8
  %13 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr null, ptr %13, align 8, !tbaa !12
  store i32 11, ptr %10, align 8, !tbaa !13
  %14 = getelementptr inbounds i8, ptr %10, i64 4
  store i32 0, ptr %14, align 4, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %10, i64 56
  store i32 0, ptr %15, align 8, !tbaa !16
  %16 = load ptr, ptr %0, align 8, !tbaa !17
  store ptr %16, ptr %6, align 8, !tbaa !18
  %.not = icmp eq ptr %16, null
  br i1 %.not, label %.split1141, label %17

17:                                               ; preds = %12
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = load i32, ptr %18, align 8, !tbaa !19
  br label %.split1141

.split1141:                                       ; preds = %12, %17
  %20 = phi i32 [ %19, %17 ], [ 0, %12 ]
  %21 = getelementptr inbounds i8, ptr %10, i64 64
  %22 = load ptr, ptr %21, align 8, !tbaa !20
  %23 = getelementptr inbounds i8, ptr %10, i64 52
  %24 = load i32, ptr %23, align 4, !tbaa !21
  %25 = getelementptr inbounds i8, ptr %10, i64 124
  %26 = getelementptr inbounds i8, ptr %10, i64 128
  %27 = getelementptr inbounds i8, ptr %10, i64 120
  %28 = getelementptr inbounds i8, ptr %10, i64 132
  %29 = getelementptr inbounds i8, ptr %10, i64 144
  %30 = getelementptr inbounds i8, ptr %10, i64 1360
  %31 = getelementptr inbounds i8, ptr %10, i64 136
  %32 = getelementptr inbounds i8, ptr %10, i64 96
  %33 = getelementptr inbounds i8, ptr %10, i64 112
  %34 = getelementptr inbounds i8, ptr %10, i64 784
  %35 = getelementptr inbounds i8, ptr %10, i64 656
  %36 = getelementptr inbounds i8, ptr %10, i64 104
  %37 = getelementptr inbounds i8, ptr %10, i64 116
  %38 = getelementptr inbounds i8, ptr %10, i64 84
  %39 = getelementptr inbounds i8, ptr %10, i64 92
  %40 = getelementptr inbounds i8, ptr %10, i64 88
  %41 = getelementptr inbounds i8, ptr %0, i64 24
  %42 = getelementptr inbounds i8, ptr %0, i64 32
  %43 = getelementptr inbounds i8, ptr %0, i64 8
  %44 = getelementptr inbounds i8, ptr %10, i64 72
  %45 = getelementptr inbounds i8, ptr %10, i64 80
  br label %46

46:                                               ; preds = %.thread, %.split1141
  %47 = phi i32 [ 11, %.split1141 ], [ %.pre, %.thread ]
  %.0597 = phi ptr [ %22, %.split1141 ], [ %.7604, %.thread ]
  %.0570 = phi i32 [ %20, %.split1141 ], [ %.43, %.thread ]
  %.0563 = phi i32 [ %24, %.split1141 ], [ %.6569, %.thread ]
  %.0536 = phi i64 [ 0, %.split1141 ], [ %.26562, %.thread ]
  %.0529 = phi i32 [ 0, %.split1141 ], [ %.26, %.thread ]
  switch i32 %47, label %.loopexit699 [
    i32 11, label %50
    i32 13, label %82
    i32 16, label %.preheader708
    i32 20, label %438
    i32 28, label %766
    i32 29, label %.loopexit699.loopexit1550
  ]

.preheader708:                                    ; preds = %46
  %48 = icmp ult i32 %.0529, 14
  br i1 %48, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader708
  %49 = zext nneg i32 %.0529 to i64
  br label %.lr.ph

50:                                               ; preds = %46
  %51 = load i32, ptr %14, align 4, !tbaa !15
  %.not684 = icmp eq i32 %51, 0
  br i1 %.not684, label %.preheader698, label %55

.preheader698:                                    ; preds = %50
  %52 = icmp ult i32 %.0529, 3
  br i1 %52, label %.lr.ph1062, label %71

.lr.ph1062:                                       ; preds = %.preheader698
  %53 = or disjoint i32 %.0529, 8
  %54 = icmp eq i32 %.0570, 0
  br i1 %54, label %60, label %._crit_edge1063

55:                                               ; preds = %50
  %56 = and i32 %.0529, 7
  %57 = zext nneg i32 %56 to i64
  %58 = lshr i64 %.0536, %57
  %59 = and i32 %.0529, -8
  store i32 28, ptr %10, align 8, !tbaa !13
  br label %.thread

60:                                               ; preds = %.lr.ph1062
  %61 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %.split1068, label %._crit_edge1063

.split1068:                                       ; preds = %60
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

._crit_edge1063:                                  ; preds = %60, %.lr.ph1062
  %.2572 = phi i32 [ %61, %60 ], [ %.0570, %.lr.ph1062 ]
  %63 = add i32 %.2572, -1
  %64 = load ptr, ptr %6, align 8, !tbaa !18
  %65 = getelementptr inbounds i8, ptr %64, i64 1
  store ptr %65, ptr %6, align 8, !tbaa !18
  %66 = load i8, ptr %64, align 1, !tbaa !22
  %67 = zext i8 %66 to i64
  %68 = zext nneg i32 %.0529 to i64
  %69 = shl nuw nsw i64 %67, %68
  %70 = add i64 %69, %.0536
  br label %71

71:                                               ; preds = %._crit_edge1063, %.preheader698
  %.1571.lcssa = phi i32 [ %63, %._crit_edge1063 ], [ %.0570, %.preheader698 ]
  %.1537.lcssa = phi i64 [ %70, %._crit_edge1063 ], [ %.0536, %.preheader698 ]
  %.1530.lcssa = phi i32 [ %53, %._crit_edge1063 ], [ %.0529, %.preheader698 ]
  %72 = trunc i64 %.1537.lcssa to i32
  %73 = and i32 %72, 1
  store i32 %73, ptr %14, align 4, !tbaa !15
  %74 = lshr i32 %72, 1
  %75 = and i32 %74, 3
  switch i32 %75, label %default.unreachable1325 [
    i32 0, label %79
    i32 1, label %76
    i32 2, label %77
    i32 3, label %78
  ]

76:                                               ; preds = %71
  call void @fixedtables(ptr noundef nonnull %10)
  br label %79

77:                                               ; preds = %71
  br label %79

78:                                               ; preds = %71
  store ptr @.str.1, ptr %13, align 8, !tbaa !12
  br label %79

default.unreachable1325:                          ; preds = %71
  unreachable

79:                                               ; preds = %71, %76, %77, %78
  %.sink = phi i32 [ 20, %76 ], [ 16, %77 ], [ 29, %78 ], [ 13, %71 ]
  store i32 %.sink, ptr %10, align 8, !tbaa !13
  %80 = lshr i64 %.1537.lcssa, 3
  %81 = add i32 %.1530.lcssa, -3
  br label %.thread

82:                                               ; preds = %46
  %83 = and i32 %.0529, 7
  %84 = zext nneg i32 %83 to i64
  %85 = lshr i64 %.0536, %84
  %86 = and i32 %.0529, -8
  %87 = icmp ult i32 %.0529, 32
  br i1 %87, label %.lr.ph1043.preheader, label %._crit_edge1044

.lr.ph1043.preheader:                             ; preds = %82
  %88 = and i32 %.0529, 24
  %89 = zext nneg i32 %88 to i64
  br label %.lr.ph1043

.lr.ph1043:                                       ; preds = %.lr.ph1043.preheader, %95
  %indvars.iv1290 = phi i64 [ %89, %.lr.ph1043.preheader ], [ %indvars.iv.next1291, %95 ]
  %.25381040 = phi i64 [ %85, %.lr.ph1043.preheader ], [ %102, %95 ]
  %.35731039 = phi i32 [ %.0570, %.lr.ph1043.preheader ], [ %96, %95 ]
  %90 = icmp eq i32 %.35731039, 0
  br i1 %90, label %91, label %95

91:                                               ; preds = %.lr.ph1043
  %92 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %93 = icmp eq i32 %92, 0
  br i1 %93, label %94, label %95

94:                                               ; preds = %91
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

95:                                               ; preds = %91, %.lr.ph1043
  %.4574 = phi i32 [ %92, %91 ], [ %.35731039, %.lr.ph1043 ]
  %96 = add i32 %.4574, -1
  %97 = load ptr, ptr %6, align 8, !tbaa !18
  %98 = getelementptr inbounds i8, ptr %97, i64 1
  store ptr %98, ptr %6, align 8, !tbaa !18
  %99 = load i8, ptr %97, align 1, !tbaa !22
  %100 = zext i8 %99 to i64
  %101 = shl nuw nsw i64 %100, %indvars.iv1290
  %102 = add i64 %101, %.25381040
  %indvars.iv.next1291 = add nuw nsw i64 %indvars.iv1290, 8
  %103 = icmp ult i64 %indvars.iv1290, 24
  br i1 %103, label %.lr.ph1043, label %._crit_edge1044.loopexit, !llvm.loop !23

._crit_edge1044.loopexit:                         ; preds = %95
  %104 = trunc nuw i64 %indvars.iv.next1291 to i32
  br label %._crit_edge1044

._crit_edge1044:                                  ; preds = %._crit_edge1044.loopexit, %82
  %.3573.lcssa = phi i32 [ %.0570, %82 ], [ %96, %._crit_edge1044.loopexit ]
  %.2538.lcssa = phi i64 [ %85, %82 ], [ %102, %._crit_edge1044.loopexit ]
  %.2531.lcssa = phi i32 [ %86, %82 ], [ %104, %._crit_edge1044.loopexit ]
  %105 = and i64 %.2538.lcssa, 65535
  %106 = lshr i64 %.2538.lcssa, 16
  %107 = xor i64 %106, %105
  %.not681 = icmp eq i64 %107, 65535
  br i1 %.not681, label %109, label %108

108:                                              ; preds = %._crit_edge1044
  store ptr @.str.2, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

109:                                              ; preds = %._crit_edge1044
  %110 = trunc i64 %.2538.lcssa to i32
  %111 = and i32 %110, 65535
  store i32 %111, ptr %38, align 4, !tbaa !25
  %.not6821048 = icmp eq i32 %111, 0
  br i1 %.not6821048, label %._crit_edge1055, label %.lr.ph1054

.lr.ph1054:                                       ; preds = %109, %123
  %.15641052 = phi i32 [ %129, %123 ], [ %.0563, %109 ]
  %.55751051 = phi i32 [ %126, %123 ], [ %.3573.lcssa, %109 ]
  %.15981050 = phi ptr [ %130, %123 ], [ %.0597, %109 ]
  %storemerge1049 = phi i32 [ %132, %123 ], [ %111, %109 ]
  %112 = icmp eq i32 %.55751051, 0
  br i1 %112, label %113, label %117

113:                                              ; preds = %.lr.ph1054
  %114 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %116, label %117

116:                                              ; preds = %113
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

117:                                              ; preds = %.lr.ph1054, %113
  %.6576 = phi i32 [ %114, %113 ], [ %.55751051, %.lr.ph1054 ]
  %118 = icmp eq i32 %.15641052, 0
  br i1 %118, label %119, label %123

119:                                              ; preds = %117
  %120 = load ptr, ptr %21, align 8, !tbaa !20
  %121 = load i32, ptr %23, align 4, !tbaa !21
  store i32 %121, ptr %15, align 8, !tbaa !16
  %122 = call i32 %3(ptr noundef %4, ptr noundef %120, i32 noundef %121) #5
  %.not683 = icmp eq i32 %122, 0
  br i1 %.not683, label %123, label %.loopexit699

123:                                              ; preds = %119, %117
  %.2599 = phi ptr [ %120, %119 ], [ %.15981050, %117 ]
  %.2565 = phi i32 [ %121, %119 ], [ %.15641052, %117 ]
  %spec.select = call i32 @llvm.umin.i32(i32 %storemerge1049, i32 %.6576)
  %.1528 = call i32 @llvm.umin.i32(i32 %spec.select, i32 %.2565)
  %124 = load ptr, ptr %6, align 8, !tbaa !18
  %125 = zext i32 %.1528 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.2599, ptr align 1 %124, i64 %125, i1 false)
  %126 = sub i32 %.6576, %.1528
  %127 = load ptr, ptr %6, align 8, !tbaa !18
  %128 = getelementptr inbounds i8, ptr %127, i64 %125
  store ptr %128, ptr %6, align 8, !tbaa !18
  %129 = sub i32 %.2565, %.1528
  %130 = getelementptr inbounds i8, ptr %.2599, i64 %125
  %131 = load i32, ptr %38, align 4, !tbaa !25
  %132 = sub i32 %131, %.1528
  store i32 %132, ptr %38, align 4, !tbaa !25
  %.not682 = icmp eq i32 %132, 0
  br i1 %.not682, label %._crit_edge1055, label %.lr.ph1054, !llvm.loop !26

._crit_edge1055:                                  ; preds = %123, %109
  %.1598.lcssa = phi ptr [ %.0597, %109 ], [ %130, %123 ]
  %.5575.lcssa = phi i32 [ %.3573.lcssa, %109 ], [ %126, %123 ]
  %.1564.lcssa = phi i32 [ %.0563, %109 ], [ %129, %123 ]
  store i32 11, ptr %10, align 8, !tbaa !13
  br label %.thread

.lr.ph:                                           ; preds = %.lr.ph.preheader, %138
  %indvars.iv = phi i64 [ %49, %.lr.ph.preheader ], [ %indvars.iv.next, %138 ]
  %.3539864 = phi i64 [ %.0536, %.lr.ph.preheader ], [ %145, %138 ]
  %.7577863 = phi i32 [ %.0570, %.lr.ph.preheader ], [ %139, %138 ]
  %133 = icmp eq i32 %.7577863, 0
  br i1 %133, label %134, label %138

134:                                              ; preds = %.lr.ph
  %135 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %138

137:                                              ; preds = %134
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

138:                                              ; preds = %134, %.lr.ph
  %.8578 = phi i32 [ %135, %134 ], [ %.7577863, %.lr.ph ]
  %139 = add i32 %.8578, -1
  %140 = load ptr, ptr %6, align 8, !tbaa !18
  %141 = getelementptr inbounds i8, ptr %140, i64 1
  store ptr %141, ptr %6, align 8, !tbaa !18
  %142 = load i8, ptr %140, align 1, !tbaa !22
  %143 = zext i8 %142 to i64
  %144 = shl nuw nsw i64 %143, %indvars.iv
  %145 = add i64 %144, %.3539864
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 8
  %146 = icmp ult i64 %indvars.iv, 6
  br i1 %146, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !27

._crit_edge.loopexit:                             ; preds = %138
  %147 = trunc nuw nsw i64 %indvars.iv.next to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader708
  %.7577.lcssa = phi i32 [ %.0570, %.preheader708 ], [ %139, %._crit_edge.loopexit ]
  %.3539.lcssa = phi i64 [ %.0536, %.preheader708 ], [ %145, %._crit_edge.loopexit ]
  %.3532.lcssa = phi i32 [ %.0529, %.preheader708 ], [ %147, %._crit_edge.loopexit ]
  %148 = trunc i64 %.3539.lcssa to i32
  %149 = and i32 %148, 31
  %150 = add nuw nsw i32 %149, 257
  store i32 %150, ptr %25, align 4, !tbaa !28
  %151 = lshr i32 %148, 5
  %152 = and i32 %151, 31
  %153 = add nuw nsw i32 %152, 1
  store i32 %153, ptr %26, align 8, !tbaa !29
  %154 = lshr i32 %148, 10
  %155 = and i32 %154, 15
  %156 = add nuw nsw i32 %155, 4
  store i32 %156, ptr %27, align 8, !tbaa !30
  %157 = lshr i64 %.3539.lcssa, 14
  %158 = add i32 %.3532.lcssa, -14
  %159 = icmp ugt i32 %149, 29
  %160 = icmp ugt i32 %152, 29
  %or.cond691 = or i1 %159, %160
  br i1 %or.cond691, label %161, label %.preheader697.preheader

161:                                              ; preds = %._crit_edge
  store ptr @.str.3, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

.preheader697.preheader:                          ; preds = %._crit_edge
  store i32 0, ptr %28, align 4, !tbaa !31
  br label %.preheader697

.preheader707:                                    ; preds = %180
  %162 = icmp ult i32 %185, 19
  br i1 %162, label %.lr.ph895.preheader, label %199

.lr.ph895.preheader:                              ; preds = %.preheader707
  %163 = zext nneg i32 %185 to i64
  br label %.lr.ph895

.preheader697:                                    ; preds = %.preheader697.preheader, %180
  %.pre12931321 = phi i32 [ %.pre12931322, %180 ], [ %156, %.preheader697.preheader ]
  %164 = phi i32 [ %181, %180 ], [ %156, %.preheader697.preheader ]
  %165 = phi i32 [ %185, %180 ], [ 0, %.preheader697.preheader ]
  %.4533890 = phi i32 [ %192, %180 ], [ %158, %.preheader697.preheader ]
  %.4540889 = phi i64 [ %191, %180 ], [ %157, %.preheader697.preheader ]
  %.9579888 = phi i32 [ %.10580.lcssa, %180 ], [ %.7577.lcssa, %.preheader697.preheader ]
  %166 = icmp ult i32 %.4533890, 3
  br i1 %166, label %.lr.ph871, label %180

.lr.ph871:                                        ; preds = %.preheader697
  %167 = or disjoint i32 %.4533890, 8
  %168 = icmp eq i32 %.9579888, 0
  br i1 %168, label %169, label %._crit_edge872

169:                                              ; preds = %.lr.ph871
  %170 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %171 = icmp eq i32 %170, 0
  br i1 %171, label %.split, label %.._crit_edge872_crit_edge

.._crit_edge872_crit_edge:                        ; preds = %169
  %.pre1292.pre = load i32, ptr %28, align 4, !tbaa !31
  %.pre1293.pre = load i32, ptr %27, align 8, !tbaa !30
  br label %._crit_edge872

.split:                                           ; preds = %169
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

._crit_edge872:                                   ; preds = %.._crit_edge872_crit_edge, %.lr.ph871
  %.pre1293 = phi i32 [ %.pre1293.pre, %.._crit_edge872_crit_edge ], [ %.pre12931321, %.lr.ph871 ]
  %.pre1292 = phi i32 [ %.pre1292.pre, %.._crit_edge872_crit_edge ], [ %165, %.lr.ph871 ]
  %.11581 = phi i32 [ %170, %.._crit_edge872_crit_edge ], [ %.9579888, %.lr.ph871 ]
  %172 = add i32 %.11581, -1
  %173 = load ptr, ptr %6, align 8, !tbaa !18
  %174 = getelementptr inbounds i8, ptr %173, i64 1
  store ptr %174, ptr %6, align 8, !tbaa !18
  %175 = load i8, ptr %173, align 1, !tbaa !22
  %176 = zext i8 %175 to i64
  %177 = zext nneg i32 %.4533890 to i64
  %178 = shl nuw nsw i64 %176, %177
  %179 = add nuw nsw i64 %178, %.4540889
  br label %180

180:                                              ; preds = %._crit_edge872, %.preheader697
  %.pre12931322 = phi i32 [ %.pre1293, %._crit_edge872 ], [ %.pre12931321, %.preheader697 ]
  %181 = phi i32 [ %.pre1293, %._crit_edge872 ], [ %164, %.preheader697 ]
  %182 = phi i32 [ %.pre1292, %._crit_edge872 ], [ %165, %.preheader697 ]
  %.10580.lcssa = phi i32 [ %172, %._crit_edge872 ], [ %.9579888, %.preheader697 ]
  %.5541.lcssa = phi i64 [ %179, %._crit_edge872 ], [ %.4540889, %.preheader697 ]
  %.5534.lcssa = phi i32 [ %167, %._crit_edge872 ], [ %.4533890, %.preheader697 ]
  %183 = trunc i64 %.5541.lcssa to i16
  %184 = and i16 %183, 7
  %185 = add i32 %182, 1
  store i32 %185, ptr %28, align 4, !tbaa !31
  %186 = zext i32 %182 to i64
  %187 = getelementptr inbounds [19 x i16], ptr @inflateBack.order, i64 0, i64 %186
  %188 = load i16, ptr %187, align 2, !tbaa !32
  %189 = zext i16 %188 to i64
  %190 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %189
  store i16 %184, ptr %190, align 2, !tbaa !32
  %191 = lshr i64 %.5541.lcssa, 3
  %192 = add i32 %.5534.lcssa, -3
  %193 = icmp ult i32 %185, %181
  br i1 %193, label %.preheader697, label %.preheader707, !llvm.loop !34

.lr.ph895:                                        ; preds = %.lr.ph895.preheader, %.lr.ph895
  %indvars.iv1260 = phi i64 [ %163, %.lr.ph895.preheader ], [ %indvars.iv.next1261, %.lr.ph895 ]
  %indvars.iv.next1261 = add nuw nsw i64 %indvars.iv1260, 1
  %194 = getelementptr inbounds [19 x i16], ptr @inflateBack.order, i64 0, i64 %indvars.iv1260
  %195 = load i16, ptr %194, align 2, !tbaa !32
  %196 = zext i16 %195 to i64
  %197 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %196
  store i16 0, ptr %197, align 2, !tbaa !32
  %198 = and i64 %indvars.iv.next1261, 4294967295
  %exitcond.not = icmp eq i64 %198, 19
  br i1 %exitcond.not, label %._crit_edge896, label %.lr.ph895, !llvm.loop !35

._crit_edge896:                                   ; preds = %.lr.ph895
  store i32 19, ptr %28, align 4, !tbaa !31
  br label %199

199:                                              ; preds = %._crit_edge896, %.preheader707
  store ptr %30, ptr %31, align 8, !tbaa !36
  store ptr %30, ptr %32, align 8, !tbaa !37
  store i32 7, ptr %33, align 8, !tbaa !38
  %200 = call i32 @inflate_table(i32 noundef 0, ptr noundef nonnull %29, i32 noundef 19, ptr noundef nonnull %31, ptr noundef nonnull %33, ptr noundef nonnull %34) #5
  %.not656 = icmp eq i32 %200, 0
  br i1 %.not656, label %202, label %201

201:                                              ; preds = %199
  store ptr @.str.4, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

202:                                              ; preds = %199
  store i32 0, ptr %28, align 4, !tbaa !31
  %203 = load i32, ptr %25, align 4, !tbaa !28
  %204 = load i32, ptr %26, align 8, !tbaa !29
  %205 = sub i32 0, %203
  %.not1143 = icmp eq i32 %204, %205
  br i1 %.not1143, label %._crit_edge954, label %.preheader696

.preheader696:                                    ; preds = %202, %416
  %.6535953 = phi i32 [ %.13, %416 ], [ %192, %202 ]
  %.6542952 = phi i64 [ %.13549, %416 ], [ %191, %202 ]
  %.12582951 = phi i32 [ %.24594, %416 ], [ %.10580.lcssa, %202 ]
  %206 = load ptr, ptr %32, align 8, !tbaa !37
  %207 = trunc i64 %.6542952 to i32
  %208 = load i32, ptr %33, align 8, !tbaa !38
  %notmask899 = shl nsw i32 -1, %208
  %209 = xor i32 %notmask899, -1
  %210 = and i32 %209, %207
  %211 = zext nneg i32 %210 to i64
  %212 = getelementptr inbounds %struct.code, ptr %206, i64 %211
  %.sroa.18.0..sroa_idx900 = getelementptr inbounds i8, ptr %212, i64 1
  %.sroa.18.0.copyload901 = load i8, ptr %.sroa.18.0..sroa_idx900, align 1, !tbaa !22
  %213 = zext i8 %.sroa.18.0.copyload901 to i32
  %.not657904 = icmp ult i32 %.6535953, %213
  br i1 %.not657904, label %.lr.ph908.preheader, label %._crit_edge909

.lr.ph908.preheader:                              ; preds = %.preheader696
  %214 = zext nneg i32 %.6535953 to i64
  br label %.lr.ph908

.lr.ph908:                                        ; preds = %.lr.ph908.preheader, %222
  %215 = phi i32 [ %208, %.lr.ph908.preheader ], [ %223, %222 ]
  %216 = phi ptr [ %206, %.lr.ph908.preheader ], [ %224, %222 ]
  %indvars.iv1263 = phi i64 [ %214, %.lr.ph908.preheader ], [ %indvars.iv.next1264, %222 ]
  %.7543906 = phi i64 [ %.6542952, %.lr.ph908.preheader ], [ %231, %222 ]
  %.13583905 = phi i32 [ %.12582951, %.lr.ph908.preheader ], [ %225, %222 ]
  %217 = icmp eq i32 %.13583905, 0
  br i1 %217, label %218, label %222

218:                                              ; preds = %.lr.ph908
  %219 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %220 = icmp eq i32 %219, 0
  br i1 %220, label %221, label %._crit_edge1294

._crit_edge1294:                                  ; preds = %218
  %.pre1295 = load ptr, ptr %32, align 8, !tbaa !37
  %.pre1296 = load i32, ptr %33, align 8, !tbaa !38
  br label %222

221:                                              ; preds = %218
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

222:                                              ; preds = %._crit_edge1294, %.lr.ph908
  %223 = phi i32 [ %.pre1296, %._crit_edge1294 ], [ %215, %.lr.ph908 ]
  %224 = phi ptr [ %.pre1295, %._crit_edge1294 ], [ %216, %.lr.ph908 ]
  %.14584 = phi i32 [ %219, %._crit_edge1294 ], [ %.13583905, %.lr.ph908 ]
  %225 = add i32 %.14584, -1
  %226 = load ptr, ptr %6, align 8, !tbaa !18
  %227 = getelementptr inbounds i8, ptr %226, i64 1
  store ptr %227, ptr %6, align 8, !tbaa !18
  %228 = load i8, ptr %226, align 1, !tbaa !22
  %229 = zext i8 %228 to i64
  %230 = shl i64 %229, %indvars.iv1263
  %231 = add i64 %230, %.7543906
  %indvars.iv.next1264 = add nuw nsw i64 %indvars.iv1263, 8
  %232 = trunc i64 %231 to i32
  %notmask = shl nsw i32 -1, %223
  %233 = xor i32 %notmask, -1
  %234 = and i32 %233, %232
  %235 = zext nneg i32 %234 to i64
  %236 = getelementptr inbounds %struct.code, ptr %224, i64 %235
  %.sroa.18.0..sroa_idx = getelementptr inbounds i8, ptr %236, i64 1
  %.sroa.18.0.copyload = load i8, ptr %.sroa.18.0..sroa_idx, align 1, !tbaa !22
  %237 = zext i8 %.sroa.18.0.copyload to i64
  %.not657 = icmp ult i64 %indvars.iv.next1264, %237
  br i1 %.not657, label %.lr.ph908, label %._crit_edge909.loopexit

._crit_edge909.loopexit:                          ; preds = %222
  %238 = zext i8 %.sroa.18.0.copyload to i32
  %239 = trunc nuw i64 %indvars.iv.next1264 to i32
  br label %._crit_edge909

._crit_edge909:                                   ; preds = %._crit_edge909.loopexit, %.preheader696
  %.lcssa898 = phi i32 [ %213, %.preheader696 ], [ %238, %._crit_edge909.loopexit ]
  %.13583.lcssa = phi i32 [ %.12582951, %.preheader696 ], [ %225, %._crit_edge909.loopexit ]
  %.7543.lcssa = phi i64 [ %.6542952, %.preheader696 ], [ %231, %._crit_edge909.loopexit ]
  %.7.lcssa = phi i32 [ %.6535953, %.preheader696 ], [ %239, %._crit_edge909.loopexit ]
  %.sroa.18.0.copyload.lcssa = phi i8 [ %.sroa.18.0.copyload901, %.preheader696 ], [ %.sroa.18.0.copyload, %._crit_edge909.loopexit ]
  %.pn1144 = phi ptr [ %212, %.preheader696 ], [ %236, %._crit_edge909.loopexit ]
  %.sroa.41.0.copyload.lcssa.in = getelementptr inbounds i8, ptr %.pn1144, i64 2
  %.sroa.41.0.copyload.lcssa = load i16, ptr %.sroa.41.0.copyload.lcssa.in, align 2, !tbaa !32
  %240 = icmp ult i16 %.sroa.41.0.copyload.lcssa, 16
  br i1 %240, label %.preheader, label %266

.preheader:                                       ; preds = %._crit_edge909
  %241 = icmp ult i32 %.7.lcssa, %.lcssa898
  br i1 %241, label %.lr.ph946.preheader, label %._crit_edge947

.lr.ph946.preheader:                              ; preds = %.preheader
  %242 = zext nneg i32 %.7.lcssa to i64
  %243 = zext nneg i32 %.lcssa898 to i64
  br label %.lr.ph946

.lr.ph946:                                        ; preds = %.lr.ph946.preheader, %249
  %indvars.iv1275 = phi i64 [ %242, %.lr.ph946.preheader ], [ %indvars.iv.next1276, %249 ]
  %.8544944 = phi i64 [ %.7543.lcssa, %.lr.ph946.preheader ], [ %256, %249 ]
  %.15585943 = phi i32 [ %.13583.lcssa, %.lr.ph946.preheader ], [ %250, %249 ]
  %244 = icmp eq i32 %.15585943, 0
  br i1 %244, label %245, label %249

245:                                              ; preds = %.lr.ph946
  %246 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %247 = icmp eq i32 %246, 0
  br i1 %247, label %248, label %249

248:                                              ; preds = %245
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

249:                                              ; preds = %245, %.lr.ph946
  %.16586 = phi i32 [ %246, %245 ], [ %.15585943, %.lr.ph946 ]
  %250 = add i32 %.16586, -1
  %251 = load ptr, ptr %6, align 8, !tbaa !18
  %252 = getelementptr inbounds i8, ptr %251, i64 1
  store ptr %252, ptr %6, align 8, !tbaa !18
  %253 = load i8, ptr %251, align 1, !tbaa !22
  %254 = zext i8 %253 to i64
  %255 = shl i64 %254, %indvars.iv1275
  %256 = add i64 %255, %.8544944
  %indvars.iv.next1276 = add nuw nsw i64 %indvars.iv1275, 8
  %257 = icmp ult i64 %indvars.iv.next1276, %243
  br i1 %257, label %.lr.ph946, label %._crit_edge947.loopexit, !llvm.loop !39

._crit_edge947.loopexit:                          ; preds = %249
  %258 = trunc nuw i64 %indvars.iv.next1276 to i32
  br label %._crit_edge947

._crit_edge947:                                   ; preds = %._crit_edge947.loopexit, %.preheader
  %.15585.lcssa = phi i32 [ %.13583.lcssa, %.preheader ], [ %250, %._crit_edge947.loopexit ]
  %.8544.lcssa = phi i64 [ %.7543.lcssa, %.preheader ], [ %256, %._crit_edge947.loopexit ]
  %.8.lcssa = phi i32 [ %.7.lcssa, %.preheader ], [ %258, %._crit_edge947.loopexit ]
  %259 = zext nneg i8 %.sroa.18.0.copyload.lcssa to i64
  %260 = lshr i64 %.8544.lcssa, %259
  %261 = sub i32 %.8.lcssa, %.lcssa898
  %262 = load i32, ptr %28, align 4, !tbaa !31
  %263 = add i32 %262, 1
  store i32 %263, ptr %28, align 4, !tbaa !31
  %264 = zext i32 %262 to i64
  %265 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %264
  store i16 %.sroa.41.0.copyload.lcssa, ptr %265, align 2, !tbaa !32
  %.pre1297 = load i32, ptr %25, align 4, !tbaa !28
  %.pre1298 = load i32, ptr %26, align 8, !tbaa !29
  %.pre1324 = add i32 %.pre1298, %.pre1297
  br label %416

266:                                              ; preds = %._crit_edge909
  switch i16 %.sroa.41.0.copyload.lcssa, label %.preheader693 [
    i16 16, label %.preheader694
    i16 17, label %.preheader695
  ]

.preheader695:                                    ; preds = %266
  %267 = add nuw nsw i32 %.lcssa898, 3
  %268 = icmp ult i32 %.7.lcssa, %267
  br i1 %268, label %.lr.ph920.preheader, label %._crit_edge921

.lr.ph920.preheader:                              ; preds = %.preheader695
  %269 = zext nneg i32 %.7.lcssa to i64
  %270 = zext nneg i32 %267 to i64
  br label %.lr.ph920

.preheader694:                                    ; preds = %266
  %271 = add nuw nsw i32 %.lcssa898, 2
  %272 = icmp ult i32 %.7.lcssa, %271
  br i1 %272, label %.lr.ph928.preheader, label %._crit_edge929

.lr.ph928.preheader:                              ; preds = %.preheader694
  %273 = zext nneg i32 %.7.lcssa to i64
  %274 = zext nneg i32 %271 to i64
  br label %.lr.ph928

.preheader693:                                    ; preds = %266
  %275 = add nuw nsw i32 %.lcssa898, 7
  %276 = icmp ult i32 %.7.lcssa, %275
  br i1 %276, label %.lr.ph936.preheader, label %._crit_edge937

.lr.ph936.preheader:                              ; preds = %.preheader693
  %277 = zext nneg i32 %.7.lcssa to i64
  %278 = zext nneg i32 %275 to i64
  br label %.lr.ph936

.lr.ph928:                                        ; preds = %.lr.ph928.preheader, %284
  %indvars.iv1269 = phi i64 [ %273, %.lr.ph928.preheader ], [ %indvars.iv.next1270, %284 ]
  %.9545926 = phi i64 [ %.7543.lcssa, %.lr.ph928.preheader ], [ %291, %284 ]
  %.17587925 = phi i32 [ %.13583.lcssa, %.lr.ph928.preheader ], [ %285, %284 ]
  %279 = icmp eq i32 %.17587925, 0
  br i1 %279, label %280, label %284

280:                                              ; preds = %.lr.ph928
  %281 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %282 = icmp eq i32 %281, 0
  br i1 %282, label %283, label %284

283:                                              ; preds = %280
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

284:                                              ; preds = %280, %.lr.ph928
  %.18588 = phi i32 [ %281, %280 ], [ %.17587925, %.lr.ph928 ]
  %285 = add i32 %.18588, -1
  %286 = load ptr, ptr %6, align 8, !tbaa !18
  %287 = getelementptr inbounds i8, ptr %286, i64 1
  store ptr %287, ptr %6, align 8, !tbaa !18
  %288 = load i8, ptr %286, align 1, !tbaa !22
  %289 = zext i8 %288 to i64
  %290 = shl i64 %289, %indvars.iv1269
  %291 = add i64 %290, %.9545926
  %indvars.iv.next1270 = add nuw nsw i64 %indvars.iv1269, 8
  %292 = icmp ult i64 %indvars.iv.next1270, %274
  br i1 %292, label %.lr.ph928, label %._crit_edge929.loopexit, !llvm.loop !40

._crit_edge929.loopexit:                          ; preds = %284
  %293 = trunc nuw i64 %indvars.iv.next1270 to i32
  br label %._crit_edge929

._crit_edge929:                                   ; preds = %._crit_edge929.loopexit, %.preheader694
  %.17587.lcssa = phi i32 [ %.13583.lcssa, %.preheader694 ], [ %285, %._crit_edge929.loopexit ]
  %.9545.lcssa = phi i64 [ %.7543.lcssa, %.preheader694 ], [ %291, %._crit_edge929.loopexit ]
  %.9.lcssa = phi i32 [ %.7.lcssa, %.preheader694 ], [ %293, %._crit_edge929.loopexit ]
  %294 = zext nneg i8 %.sroa.18.0.copyload.lcssa to i64
  %295 = lshr i64 %.9545.lcssa, %294
  %296 = sub i32 %.9.lcssa, %.lcssa898
  %297 = load i32, ptr %28, align 4, !tbaa !31
  %298 = icmp eq i32 %297, 0
  br i1 %298, label %299, label %300

299:                                              ; preds = %._crit_edge929
  store ptr @.str.5, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

300:                                              ; preds = %._crit_edge929
  %301 = add i32 %297, -1
  %302 = zext i32 %301 to i64
  %303 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %302
  %304 = load i16, ptr %303, align 2, !tbaa !32
  %305 = trunc i64 %295 to i32
  %306 = and i32 %305, 3
  %307 = add nuw nsw i32 %306, 3
  %308 = lshr i64 %295, 2
  %309 = add i32 %296, -2
  br label %354

.lr.ph920:                                        ; preds = %.lr.ph920.preheader, %315
  %indvars.iv1266 = phi i64 [ %269, %.lr.ph920.preheader ], [ %indvars.iv.next1267, %315 ]
  %.10546918 = phi i64 [ %.7543.lcssa, %.lr.ph920.preheader ], [ %322, %315 ]
  %.19589917 = phi i32 [ %.13583.lcssa, %.lr.ph920.preheader ], [ %316, %315 ]
  %310 = icmp eq i32 %.19589917, 0
  br i1 %310, label %311, label %315

311:                                              ; preds = %.lr.ph920
  %312 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %313 = icmp eq i32 %312, 0
  br i1 %313, label %314, label %315

314:                                              ; preds = %311
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

315:                                              ; preds = %311, %.lr.ph920
  %.20590 = phi i32 [ %312, %311 ], [ %.19589917, %.lr.ph920 ]
  %316 = add i32 %.20590, -1
  %317 = load ptr, ptr %6, align 8, !tbaa !18
  %318 = getelementptr inbounds i8, ptr %317, i64 1
  store ptr %318, ptr %6, align 8, !tbaa !18
  %319 = load i8, ptr %317, align 1, !tbaa !22
  %320 = zext i8 %319 to i64
  %321 = shl i64 %320, %indvars.iv1266
  %322 = add i64 %321, %.10546918
  %indvars.iv.next1267 = add nuw nsw i64 %indvars.iv1266, 8
  %323 = icmp ult i64 %indvars.iv.next1267, %270
  br i1 %323, label %.lr.ph920, label %._crit_edge921.loopexit, !llvm.loop !41

._crit_edge921.loopexit:                          ; preds = %315
  %324 = trunc nuw i64 %indvars.iv.next1267 to i32
  br label %._crit_edge921

._crit_edge921:                                   ; preds = %._crit_edge921.loopexit, %.preheader695
  %.19589.lcssa = phi i32 [ %.13583.lcssa, %.preheader695 ], [ %316, %._crit_edge921.loopexit ]
  %.10546.lcssa = phi i64 [ %.7543.lcssa, %.preheader695 ], [ %322, %._crit_edge921.loopexit ]
  %.10.lcssa = phi i32 [ %.7.lcssa, %.preheader695 ], [ %324, %._crit_edge921.loopexit ]
  %325 = zext nneg i8 %.sroa.18.0.copyload.lcssa to i64
  %326 = lshr i64 %.10546.lcssa, %325
  %327 = trunc i64 %326 to i32
  %328 = and i32 %327, 7
  %329 = add nuw nsw i32 %328, 3
  %330 = lshr i64 %326, 3
  %reass.sub = sub i32 %.10.lcssa, %.lcssa898
  %331 = add i32 %reass.sub, -3
  br label %354

.lr.ph936:                                        ; preds = %.lr.ph936.preheader, %337
  %indvars.iv1272 = phi i64 [ %277, %.lr.ph936.preheader ], [ %indvars.iv.next1273, %337 ]
  %.11547934 = phi i64 [ %.7543.lcssa, %.lr.ph936.preheader ], [ %344, %337 ]
  %.21591933 = phi i32 [ %.13583.lcssa, %.lr.ph936.preheader ], [ %338, %337 ]
  %332 = icmp eq i32 %.21591933, 0
  br i1 %332, label %333, label %337

333:                                              ; preds = %.lr.ph936
  %334 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %335 = icmp eq i32 %334, 0
  br i1 %335, label %336, label %337

336:                                              ; preds = %333
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

337:                                              ; preds = %333, %.lr.ph936
  %.22592 = phi i32 [ %334, %333 ], [ %.21591933, %.lr.ph936 ]
  %338 = add i32 %.22592, -1
  %339 = load ptr, ptr %6, align 8, !tbaa !18
  %340 = getelementptr inbounds i8, ptr %339, i64 1
  store ptr %340, ptr %6, align 8, !tbaa !18
  %341 = load i8, ptr %339, align 1, !tbaa !22
  %342 = zext i8 %341 to i64
  %343 = shl i64 %342, %indvars.iv1272
  %344 = add i64 %343, %.11547934
  %indvars.iv.next1273 = add nuw nsw i64 %indvars.iv1272, 8
  %345 = icmp ult i64 %indvars.iv.next1273, %278
  br i1 %345, label %.lr.ph936, label %._crit_edge937.loopexit, !llvm.loop !42

._crit_edge937.loopexit:                          ; preds = %337
  %346 = trunc nuw i64 %indvars.iv.next1273 to i32
  br label %._crit_edge937

._crit_edge937:                                   ; preds = %._crit_edge937.loopexit, %.preheader693
  %.21591.lcssa = phi i32 [ %.13583.lcssa, %.preheader693 ], [ %338, %._crit_edge937.loopexit ]
  %.11547.lcssa = phi i64 [ %.7543.lcssa, %.preheader693 ], [ %344, %._crit_edge937.loopexit ]
  %.11.lcssa = phi i32 [ %.7.lcssa, %.preheader693 ], [ %346, %._crit_edge937.loopexit ]
  %347 = zext nneg i8 %.sroa.18.0.copyload.lcssa to i64
  %348 = lshr i64 %.11547.lcssa, %347
  %349 = trunc i64 %348 to i32
  %350 = and i32 %349, 127
  %351 = add nuw nsw i32 %350, 11
  %352 = lshr i64 %348, 7
  %reass.sub1145 = sub i32 %.11.lcssa, %.lcssa898
  %353 = add i32 %reass.sub1145, -7
  br label %354

354:                                              ; preds = %._crit_edge921, %._crit_edge937, %300
  %.23593 = phi i32 [ %.17587.lcssa, %300 ], [ %.19589.lcssa, %._crit_edge921 ], [ %.21591.lcssa, %._crit_edge937 ]
  %.12548 = phi i64 [ %308, %300 ], [ %330, %._crit_edge921 ], [ %352, %._crit_edge937 ]
  %.12 = phi i32 [ %309, %300 ], [ %331, %._crit_edge921 ], [ %353, %._crit_edge937 ]
  %.2 = phi i32 [ %307, %300 ], [ %329, %._crit_edge921 ], [ %351, %._crit_edge937 ]
  %.0525 = phi i16 [ %304, %300 ], [ 0, %._crit_edge921 ], [ 0, %._crit_edge937 ]
  %355 = load i32, ptr %28, align 4, !tbaa !31
  %356 = add i32 %355, %.2
  %357 = load i32, ptr %25, align 4, !tbaa !28
  %358 = load i32, ptr %26, align 8, !tbaa !29
  %359 = add i32 %358, %357
  %360 = icmp ugt i32 %356, %359
  br i1 %360, label %401, label %.preheader692.preheader

.preheader692.preheader:                          ; preds = %354
  %min.iters.check1532 = icmp ult i32 %.2, 16
  %361 = sub nsw i32 0, %.2
  %362 = icmp ugt i32 %355, %361
  %or.cond1546 = select i1 %min.iters.check1532, i1 true, i1 %362
  br i1 %or.cond1546, label %.preheader692.preheader1548, label %vector.ph1533

.preheader692.preheader1548:                      ; preds = %middle.block1530, %.preheader692.preheader
  %.3942.ph = phi i32 [ %.2, %.preheader692.preheader ], [ %ind.end1536, %middle.block1530 ]
  %.ph = phi i32 [ %355, %.preheader692.preheader ], [ %ind.end1538, %middle.block1530 ]
  %363 = add nsw i32 %.3942.ph, -1
  %xtraiter = and i32 %.3942.ph, 3
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader692.prol.loopexit, label %.preheader692.prol

.preheader692.prol:                               ; preds = %.preheader692.preheader1548, %.preheader692.prol
  %.3942.prol = phi i32 [ %365, %.preheader692.prol ], [ %.3942.ph, %.preheader692.preheader1548 ]
  %364 = phi i32 [ %366, %.preheader692.prol ], [ %.ph, %.preheader692.preheader1548 ]
  %prol.iter = phi i32 [ %prol.iter.next, %.preheader692.prol ], [ 0, %.preheader692.preheader1548 ]
  %365 = add nsw i32 %.3942.prol, -1
  %366 = add i32 %364, 1
  %367 = zext i32 %364 to i64
  %368 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %367
  store i16 %.0525, ptr %368, align 2, !tbaa !32
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.preheader692.prol.loopexit, label %.preheader692.prol, !llvm.loop !43

.preheader692.prol.loopexit:                      ; preds = %.preheader692.prol, %.preheader692.preheader1548
  %.lcssa1565.unr = phi i32 [ poison, %.preheader692.preheader1548 ], [ %366, %.preheader692.prol ]
  %.3942.unr = phi i32 [ %.3942.ph, %.preheader692.preheader1548 ], [ %365, %.preheader692.prol ]
  %.unr = phi i32 [ %.ph, %.preheader692.preheader1548 ], [ %366, %.preheader692.prol ]
  %369 = icmp ult i32 %363, 3
  br i1 %369, label %.loopexit, label %.preheader692

vector.ph1533:                                    ; preds = %.preheader692.preheader
  %n.vec1535 = and i32 %.2, -16
  %ind.end1536 = and i32 %.2, 15
  %ind.end1538 = add i32 %355, %n.vec1535
  %broadcast.splatinsert = insertelement <8 x i16> poison, i16 %.0525, i64 0
  %broadcast.splat = shufflevector <8 x i16> %broadcast.splatinsert, <8 x i16> poison, <8 x i32> zeroinitializer
  %370 = zext i32 %355 to i64
  %371 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %370
  %372 = getelementptr inbounds i8, ptr %371, i64 16
  store <8 x i16> %broadcast.splat, ptr %371, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %372, align 2, !tbaa !32
  %373 = icmp eq i32 %n.vec1535, 16
  br i1 %373, label %middle.block1530, label %vector.body1540.1, !llvm.loop !45

vector.body1540.1:                                ; preds = %vector.ph1533
  %offset.idx.1 = add i32 %355, 16
  %374 = zext i32 %offset.idx.1 to i64
  %375 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %374
  %376 = getelementptr inbounds i8, ptr %375, i64 16
  store <8 x i16> %broadcast.splat, ptr %375, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %376, align 2, !tbaa !32
  %377 = icmp eq i32 %n.vec1535, 32
  br i1 %377, label %middle.block1530, label %vector.body1540.2, !llvm.loop !45

vector.body1540.2:                                ; preds = %vector.body1540.1
  %offset.idx.2 = add i32 %355, 32
  %378 = zext i32 %offset.idx.2 to i64
  %379 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %378
  %380 = getelementptr inbounds i8, ptr %379, i64 16
  store <8 x i16> %broadcast.splat, ptr %379, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %380, align 2, !tbaa !32
  %381 = icmp eq i32 %n.vec1535, 48
  br i1 %381, label %middle.block1530, label %vector.body1540.3, !llvm.loop !45

vector.body1540.3:                                ; preds = %vector.body1540.2
  %offset.idx.3 = add i32 %355, 48
  %382 = zext i32 %offset.idx.3 to i64
  %383 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %382
  %384 = getelementptr inbounds i8, ptr %383, i64 16
  store <8 x i16> %broadcast.splat, ptr %383, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %384, align 2, !tbaa !32
  %385 = icmp eq i32 %n.vec1535, 64
  br i1 %385, label %middle.block1530, label %vector.body1540.4, !llvm.loop !45

vector.body1540.4:                                ; preds = %vector.body1540.3
  %offset.idx.4 = add i32 %355, 64
  %386 = zext i32 %offset.idx.4 to i64
  %387 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %386
  %388 = getelementptr inbounds i8, ptr %387, i64 16
  store <8 x i16> %broadcast.splat, ptr %387, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %388, align 2, !tbaa !32
  %389 = icmp eq i32 %n.vec1535, 80
  br i1 %389, label %middle.block1530, label %vector.body1540.5, !llvm.loop !45

vector.body1540.5:                                ; preds = %vector.body1540.4
  %offset.idx.5 = add i32 %355, 80
  %390 = zext i32 %offset.idx.5 to i64
  %391 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %390
  %392 = getelementptr inbounds i8, ptr %391, i64 16
  store <8 x i16> %broadcast.splat, ptr %391, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %392, align 2, !tbaa !32
  %393 = icmp eq i32 %n.vec1535, 96
  br i1 %393, label %middle.block1530, label %vector.body1540.6, !llvm.loop !45

vector.body1540.6:                                ; preds = %vector.body1540.5
  %offset.idx.6 = add i32 %355, 96
  %394 = zext i32 %offset.idx.6 to i64
  %395 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %394
  %396 = getelementptr inbounds i8, ptr %395, i64 16
  store <8 x i16> %broadcast.splat, ptr %395, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %396, align 2, !tbaa !32
  %397 = icmp eq i32 %n.vec1535, 112
  br i1 %397, label %middle.block1530, label %vector.body1540.7, !llvm.loop !45

vector.body1540.7:                                ; preds = %vector.body1540.6
  %offset.idx.7 = add i32 %355, 112
  %398 = zext i32 %offset.idx.7 to i64
  %399 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %398
  %400 = getelementptr inbounds i8, ptr %399, i64 16
  store <8 x i16> %broadcast.splat, ptr %399, align 2, !tbaa !32
  store <8 x i16> %broadcast.splat, ptr %400, align 2, !tbaa !32
  br label %middle.block1530

middle.block1530:                                 ; preds = %vector.body1540.7, %vector.body1540.6, %vector.body1540.5, %vector.body1540.4, %vector.body1540.3, %vector.body1540.2, %vector.body1540.1, %vector.ph1533
  %cmp.n1543 = icmp eq i32 %.2, %n.vec1535
  br i1 %cmp.n1543, label %.loopexit, label %.preheader692.preheader1548

401:                                              ; preds = %354
  store ptr @.str.5, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

.preheader692:                                    ; preds = %.preheader692.prol.loopexit, %.preheader692
  %.3942 = phi i32 [ %412, %.preheader692 ], [ %.3942.unr, %.preheader692.prol.loopexit ]
  %402 = phi i32 [ %413, %.preheader692 ], [ %.unr, %.preheader692.prol.loopexit ]
  %403 = add i32 %402, 1
  %404 = zext i32 %402 to i64
  %405 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %404
  store i16 %.0525, ptr %405, align 2, !tbaa !32
  %406 = add i32 %402, 2
  %407 = zext i32 %403 to i64
  %408 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %407
  store i16 %.0525, ptr %408, align 2, !tbaa !32
  %409 = add i32 %402, 3
  %410 = zext i32 %406 to i64
  %411 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %410
  store i16 %.0525, ptr %411, align 2, !tbaa !32
  %412 = add nsw i32 %.3942, -4
  %413 = add i32 %402, 4
  %414 = zext i32 %409 to i64
  %415 = getelementptr inbounds [320 x i16], ptr %29, i64 0, i64 %414
  store i16 %.0525, ptr %415, align 2, !tbaa !32
  %.not658.3 = icmp eq i32 %412, 0
  br i1 %.not658.3, label %.loopexit, label %.preheader692, !llvm.loop !48

.loopexit:                                        ; preds = %.preheader692.prol.loopexit, %.preheader692, %middle.block1530
  %.lcssa1440 = phi i32 [ %ind.end1538, %middle.block1530 ], [ %.lcssa1565.unr, %.preheader692.prol.loopexit ], [ %413, %.preheader692 ]
  store i32 %.lcssa1440, ptr %28, align 4, !tbaa !31
  br label %416

416:                                              ; preds = %.loopexit, %._crit_edge947
  %.pre-phi = phi i32 [ %359, %.loopexit ], [ %.pre1324, %._crit_edge947 ]
  %417 = phi i32 [ %357, %.loopexit ], [ %.pre1297, %._crit_edge947 ]
  %418 = phi i32 [ %.lcssa1440, %.loopexit ], [ %263, %._crit_edge947 ]
  %.24594 = phi i32 [ %.23593, %.loopexit ], [ %.15585.lcssa, %._crit_edge947 ]
  %.13549 = phi i64 [ %.12548, %.loopexit ], [ %260, %._crit_edge947 ]
  %.13 = phi i32 [ %.12, %.loopexit ], [ %261, %._crit_edge947 ]
  %419 = icmp ult i32 %418, %.pre-phi
  br i1 %419, label %.preheader696, label %._crit_edge954, !llvm.loop !49

._crit_edge954:                                   ; preds = %416, %202
  %420 = phi i32 [ %203, %202 ], [ %417, %416 ]
  %.12582.lcssa = phi i32 [ %.10580.lcssa, %202 ], [ %.24594, %416 ]
  %.6542.lcssa = phi i64 [ %191, %202 ], [ %.13549, %416 ]
  %.6535.lcssa = phi i32 [ %192, %202 ], [ %.13, %416 ]
  %.pr687 = load i32, ptr %10, align 8, !tbaa !13
  %421 = icmp eq i32 %.pr687, 29
  br i1 %421, label %.thread, label %422

422:                                              ; preds = %._crit_edge954
  %423 = load i16, ptr %35, align 8, !tbaa !32
  %424 = icmp eq i16 %423, 0
  br i1 %424, label %425, label %426

425:                                              ; preds = %422
  store ptr @.str.6, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

426:                                              ; preds = %422
  store ptr %30, ptr %31, align 8, !tbaa !36
  store ptr %30, ptr %32, align 8, !tbaa !37
  store i32 9, ptr %33, align 8, !tbaa !38
  %427 = call i32 @inflate_table(i32 noundef 1, ptr noundef nonnull %29, i32 noundef %420, ptr noundef nonnull %31, ptr noundef nonnull %33, ptr noundef nonnull %34) #5
  %.not659 = icmp eq i32 %427, 0
  br i1 %.not659, label %429, label %428

428:                                              ; preds = %426
  store ptr @.str.7, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

429:                                              ; preds = %426
  %430 = load ptr, ptr %31, align 8, !tbaa !36
  store ptr %430, ptr %36, align 8, !tbaa !50
  store i32 6, ptr %37, align 4, !tbaa !51
  %431 = load i32, ptr %25, align 4, !tbaa !28
  %432 = zext i32 %431 to i64
  %433 = getelementptr inbounds i16, ptr %29, i64 %432
  %434 = load i32, ptr %26, align 8, !tbaa !29
  %435 = call i32 @inflate_table(i32 noundef 2, ptr noundef nonnull %433, i32 noundef %434, ptr noundef nonnull %31, ptr noundef nonnull %37, ptr noundef nonnull %34) #5
  %.not660 = icmp eq i32 %435, 0
  br i1 %.not660, label %437, label %436

436:                                              ; preds = %429
  store ptr @.str.8, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

437:                                              ; preds = %429
  store i32 20, ptr %10, align 8, !tbaa !13
  br label %438

438:                                              ; preds = %437, %46
  %.26596 = phi i32 [ %.0570, %46 ], [ %.12582.lcssa, %437 ]
  %.15551 = phi i64 [ %.0536, %46 ], [ %.6542.lcssa, %437 ]
  %.15 = phi i32 [ %.0529, %46 ], [ %.6535.lcssa, %437 ]
  %439 = icmp ugt i32 %.26596, 5
  %440 = icmp ugt i32 %.0563, 257
  %or.cond = select i1 %439, i1 %440, i1 false
  br i1 %or.cond, label %450, label %.preheader706

.preheader706:                                    ; preds = %438
  %441 = load ptr, ptr %32, align 8, !tbaa !37
  %442 = trunc i64 %.15551 to i32
  %443 = load i32, ptr %33, align 8, !tbaa !38
  %notmask661958 = shl nsw i32 -1, %443
  %444 = xor i32 %notmask661958, -1
  %445 = and i32 %444, %442
  %446 = zext nneg i32 %445 to i64
  %447 = getelementptr inbounds %struct.code, ptr %441, i64 %446
  %.sroa.18.0..sroa_idx35959 = getelementptr inbounds i8, ptr %447, i64 1
  %.sroa.18.0.copyload36960 = load i8, ptr %.sroa.18.0..sroa_idx35959, align 1, !tbaa !22
  %448 = zext i8 %.sroa.18.0.copyload36960 to i32
  %.not662963 = icmp ult i32 %.15, %448
  br i1 %.not662963, label %.lr.ph967.preheader, label %._crit_edge968

.lr.ph967.preheader:                              ; preds = %.preheader706
  %449 = zext nneg i32 %.15 to i64
  br label %.lr.ph967

450:                                              ; preds = %438
  store ptr %.0597, ptr %41, align 8, !tbaa !52
  store i32 %.0563, ptr %42, align 8, !tbaa !53
  %451 = load ptr, ptr %6, align 8, !tbaa !18
  store ptr %451, ptr %0, align 8, !tbaa !17
  store i32 %.26596, ptr %43, align 8, !tbaa !19
  store i64 %.15551, ptr %44, align 8, !tbaa !54
  store i32 %.15, ptr %45, align 8, !tbaa !55
  %452 = load i32, ptr %15, align 8, !tbaa !16
  %453 = load i32, ptr %23, align 4, !tbaa !21
  %454 = icmp ult i32 %452, %453
  br i1 %454, label %455, label %457

455:                                              ; preds = %450
  %456 = sub i32 %453, %.0563
  store i32 %456, ptr %15, align 8, !tbaa !16
  br label %457

457:                                              ; preds = %455, %450
  call void @inflate_fast(ptr noundef nonnull %0, i32 noundef %453) #5
  %458 = load ptr, ptr %41, align 8, !tbaa !52
  %459 = load i32, ptr %42, align 8, !tbaa !53
  %460 = load ptr, ptr %0, align 8, !tbaa !17
  store ptr %460, ptr %6, align 8, !tbaa !18
  %461 = load i32, ptr %43, align 8, !tbaa !19
  %462 = load i64, ptr %44, align 8, !tbaa !54
  %463 = load i32, ptr %45, align 8, !tbaa !55
  br label %.thread

.lr.ph967:                                        ; preds = %.lr.ph967.preheader, %471
  %464 = phi i32 [ %443, %.lr.ph967.preheader ], [ %472, %471 ]
  %465 = phi ptr [ %441, %.lr.ph967.preheader ], [ %473, %471 ]
  %indvars.iv1278 = phi i64 [ %449, %.lr.ph967.preheader ], [ %indvars.iv.next1279, %471 ]
  %.16552965 = phi i64 [ %.15551, %.lr.ph967.preheader ], [ %480, %471 ]
  %.27964 = phi i32 [ %.26596, %.lr.ph967.preheader ], [ %474, %471 ]
  %466 = icmp eq i32 %.27964, 0
  br i1 %466, label %467, label %471

467:                                              ; preds = %.lr.ph967
  %468 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %469 = icmp eq i32 %468, 0
  br i1 %469, label %470, label %._crit_edge1299

._crit_edge1299:                                  ; preds = %467
  %.pre1300 = load ptr, ptr %32, align 8, !tbaa !37
  %.pre1301 = load i32, ptr %33, align 8, !tbaa !38
  br label %471

470:                                              ; preds = %467
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

471:                                              ; preds = %._crit_edge1299, %.lr.ph967
  %472 = phi i32 [ %.pre1301, %._crit_edge1299 ], [ %464, %.lr.ph967 ]
  %473 = phi ptr [ %.pre1300, %._crit_edge1299 ], [ %465, %.lr.ph967 ]
  %.28 = phi i32 [ %468, %._crit_edge1299 ], [ %.27964, %.lr.ph967 ]
  %474 = add i32 %.28, -1
  %475 = load ptr, ptr %6, align 8, !tbaa !18
  %476 = getelementptr inbounds i8, ptr %475, i64 1
  store ptr %476, ptr %6, align 8, !tbaa !18
  %477 = load i8, ptr %475, align 1, !tbaa !22
  %478 = zext i8 %477 to i64
  %479 = shl i64 %478, %indvars.iv1278
  %480 = add i64 %479, %.16552965
  %indvars.iv.next1279 = add nuw nsw i64 %indvars.iv1278, 8
  %481 = trunc i64 %480 to i32
  %notmask661 = shl nsw i32 -1, %472
  %482 = xor i32 %notmask661, -1
  %483 = and i32 %482, %481
  %484 = zext nneg i32 %483 to i64
  %485 = getelementptr inbounds %struct.code, ptr %473, i64 %484
  %.sroa.18.0..sroa_idx35 = getelementptr inbounds i8, ptr %485, i64 1
  %.sroa.18.0.copyload36 = load i8, ptr %.sroa.18.0..sroa_idx35, align 1, !tbaa !22
  %486 = zext i8 %.sroa.18.0.copyload36 to i64
  %.not662 = icmp ult i64 %indvars.iv.next1279, %486
  br i1 %.not662, label %.lr.ph967, label %._crit_edge968.loopexit

._crit_edge968.loopexit:                          ; preds = %471
  %487 = zext i8 %.sroa.18.0.copyload36 to i32
  %488 = trunc nuw i64 %indvars.iv.next1279 to i32
  br label %._crit_edge968

._crit_edge968:                                   ; preds = %._crit_edge968.loopexit, %.preheader706
  %489 = phi ptr [ %441, %.preheader706 ], [ %473, %._crit_edge968.loopexit ]
  %.27.lcssa = phi i32 [ %.26596, %.preheader706 ], [ %474, %._crit_edge968.loopexit ]
  %.16552.lcssa = phi i64 [ %.15551, %.preheader706 ], [ %480, %._crit_edge968.loopexit ]
  %.16.lcssa = phi i32 [ %.15, %.preheader706 ], [ %488, %._crit_edge968.loopexit ]
  %.lcssa767 = phi ptr [ %447, %.preheader706 ], [ %485, %._crit_edge968.loopexit ]
  %.sroa.18.0.copyload36.lcssa = phi i8 [ %.sroa.18.0.copyload36960, %.preheader706 ], [ %.sroa.18.0.copyload36, %._crit_edge968.loopexit ]
  %.lcssa763 = phi i32 [ %448, %.preheader706 ], [ %487, %._crit_edge968.loopexit ]
  %.sroa.41.0.copyload64.lcssa.in = getelementptr inbounds i8, ptr %.lcssa767, i64 2
  %.sroa.41.0.copyload64.lcssa = load i16, ptr %.sroa.41.0.copyload64.lcssa.in, align 2, !tbaa !32
  %.sroa.022.0.copyload31 = load i8, ptr %.lcssa767, align 2, !tbaa !22
  %490 = add i8 %.sroa.022.0.copyload31, -1
  %or.cond685 = icmp ult i8 %490, 15
  br i1 %or.cond685, label %.preheader705, label %532

.preheader705:                                    ; preds = %._crit_edge968
  %491 = zext nneg i8 %.sroa.022.0.copyload31 to i32
  %492 = zext i16 %.sroa.41.0.copyload64.lcssa to i32
  %493 = add nuw nsw i32 %.lcssa763, %491
  %notmask664 = shl nsw i32 -1, %493
  %494 = xor i32 %notmask664, -1
  %495 = trunc i64 %.16552.lcssa to i32
  %496 = and i32 %495, %494
  %497 = lshr i32 %496, %.lcssa763
  %498 = add nuw i32 %497, %492
  %499 = zext i32 %498 to i64
  %500 = getelementptr inbounds %struct.code, ptr %489, i64 %499
  %.sroa.18.0..sroa_idx37976 = getelementptr inbounds i8, ptr %500, i64 1
  %.sroa.18.0.copyload38977 = load i8, ptr %.sroa.18.0..sroa_idx37976, align 1, !tbaa !22
  %501 = zext i8 %.sroa.18.0.copyload38977 to i32
  %502 = add nuw nsw i32 %.lcssa763, %501
  %.not665978 = icmp ugt i32 %502, %.16.lcssa
  br i1 %.not665978, label %.lr.ph982.preheader, label %._crit_edge983

.lr.ph982.preheader:                              ; preds = %.preheader705
  %503 = zext nneg i32 %.16.lcssa to i64
  br label %.lr.ph982

.lr.ph982:                                        ; preds = %.lr.ph982.preheader, %510
  %504 = phi ptr [ %489, %.lr.ph982.preheader ], [ %511, %510 ]
  %indvars.iv1281 = phi i64 [ %503, %.lr.ph982.preheader ], [ %indvars.iv.next1282, %510 ]
  %.17553980 = phi i64 [ %.16552.lcssa, %.lr.ph982.preheader ], [ %518, %510 ]
  %.29979 = phi i32 [ %.27.lcssa, %.lr.ph982.preheader ], [ %512, %510 ]
  %505 = icmp eq i32 %.29979, 0
  br i1 %505, label %506, label %510

506:                                              ; preds = %.lr.ph982
  %507 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %508 = icmp eq i32 %507, 0
  br i1 %508, label %509, label %._crit_edge1302

._crit_edge1302:                                  ; preds = %506
  %.pre1303 = load ptr, ptr %32, align 8, !tbaa !37
  br label %510

509:                                              ; preds = %506
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

510:                                              ; preds = %._crit_edge1302, %.lr.ph982
  %511 = phi ptr [ %.pre1303, %._crit_edge1302 ], [ %504, %.lr.ph982 ]
  %.30 = phi i32 [ %507, %._crit_edge1302 ], [ %.29979, %.lr.ph982 ]
  %512 = add i32 %.30, -1
  %513 = load ptr, ptr %6, align 8, !tbaa !18
  %514 = getelementptr inbounds i8, ptr %513, i64 1
  store ptr %514, ptr %6, align 8, !tbaa !18
  %515 = load i8, ptr %513, align 1, !tbaa !22
  %516 = zext i8 %515 to i64
  %517 = shl i64 %516, %indvars.iv1281
  %518 = add i64 %517, %.17553980
  %indvars.iv.next1282 = add nuw nsw i64 %indvars.iv1281, 8
  %519 = trunc i64 %518 to i32
  %520 = and i32 %519, %494
  %521 = lshr i32 %520, %.lcssa763
  %522 = add nuw i32 %521, %492
  %523 = zext i32 %522 to i64
  %524 = getelementptr inbounds %struct.code, ptr %511, i64 %523
  %.sroa.18.0..sroa_idx37 = getelementptr inbounds i8, ptr %524, i64 1
  %.sroa.18.0.copyload38 = load i8, ptr %.sroa.18.0..sroa_idx37, align 1, !tbaa !22
  %525 = zext i8 %.sroa.18.0.copyload38 to i32
  %526 = add nuw nsw i32 %.lcssa763, %525
  %527 = zext nneg i32 %526 to i64
  %.not665 = icmp ult i64 %indvars.iv.next1282, %527
  br i1 %.not665, label %.lr.ph982, label %._crit_edge983.loopexit

._crit_edge983.loopexit:                          ; preds = %510
  %528 = trunc nuw i64 %indvars.iv.next1282 to i32
  br label %._crit_edge983

._crit_edge983:                                   ; preds = %._crit_edge983.loopexit, %.preheader705
  %.29.lcssa = phi i32 [ %.27.lcssa, %.preheader705 ], [ %512, %._crit_edge983.loopexit ]
  %.17553.lcssa = phi i64 [ %.16552.lcssa, %.preheader705 ], [ %518, %._crit_edge983.loopexit ]
  %.17.lcssa = phi i32 [ %.16.lcssa, %.preheader705 ], [ %528, %._crit_edge983.loopexit ]
  %.lcssa775 = phi ptr [ %500, %.preheader705 ], [ %524, %._crit_edge983.loopexit ]
  %.sroa.18.0.copyload38.lcssa = phi i8 [ %.sroa.18.0.copyload38977, %.preheader705 ], [ %.sroa.18.0.copyload38, %._crit_edge983.loopexit ]
  %.sroa.41.0..sroa_idx65 = getelementptr inbounds i8, ptr %.lcssa775, i64 2
  %.sroa.41.0.copyload66 = load i16, ptr %.sroa.41.0..sroa_idx65, align 2, !tbaa !32
  %.sroa.022.0.copyload32 = load i8, ptr %.lcssa775, align 2, !tbaa !22
  %529 = zext nneg i8 %.sroa.18.0.copyload36.lcssa to i64
  %530 = lshr i64 %.17553.lcssa, %529
  %531 = sub i32 %.17.lcssa, %.lcssa763
  br label %532

532:                                              ; preds = %._crit_edge968, %._crit_edge983
  %.31 = phi i32 [ %.29.lcssa, %._crit_edge983 ], [ %.27.lcssa, %._crit_edge968 ]
  %.18554 = phi i64 [ %530, %._crit_edge983 ], [ %.16552.lcssa, %._crit_edge968 ]
  %.18 = phi i32 [ %531, %._crit_edge983 ], [ %.16.lcssa, %._crit_edge968 ]
  %.sroa.41.0 = phi i16 [ %.sroa.41.0.copyload66, %._crit_edge983 ], [ %.sroa.41.0.copyload64.lcssa, %._crit_edge968 ]
  %.sroa.18.0 = phi i8 [ %.sroa.18.0.copyload38.lcssa, %._crit_edge983 ], [ %.sroa.18.0.copyload36.lcssa, %._crit_edge968 ]
  %.sroa.022.0 = phi i8 [ %.sroa.022.0.copyload32, %._crit_edge983 ], [ %.sroa.022.0.copyload31, %._crit_edge968 ]
  %533 = zext i8 %.sroa.18.0 to i32
  %534 = zext nneg i8 %.sroa.18.0 to i64
  %535 = lshr i64 %.18554, %534
  %536 = sub i32 %.18, %533
  %537 = zext i16 %.sroa.41.0 to i32
  store i32 %537, ptr %38, align 4, !tbaa !25
  %538 = zext i8 %.sroa.022.0 to i32
  %539 = icmp eq i8 %.sroa.022.0, 0
  br i1 %539, label %540, label %551

540:                                              ; preds = %532
  %541 = icmp eq i32 %.0563, 0
  br i1 %541, label %542, label %546

542:                                              ; preds = %540
  %543 = load ptr, ptr %21, align 8, !tbaa !20
  %544 = load i32, ptr %23, align 4, !tbaa !21
  store i32 %544, ptr %15, align 8, !tbaa !16
  %545 = call i32 %3(ptr noundef %4, ptr noundef %543, i32 noundef %544) #5
  %.not680 = icmp eq i32 %545, 0
  br i1 %.not680, label %._crit_edge1318, label %.loopexit699

._crit_edge1318:                                  ; preds = %542
  %.pre1319 = load i32, ptr %38, align 4, !tbaa !25
  br label %546

546:                                              ; preds = %._crit_edge1318, %540
  %547 = phi i32 [ %.pre1319, %._crit_edge1318 ], [ %537, %540 ]
  %.3600 = phi ptr [ %543, %._crit_edge1318 ], [ %.0597, %540 ]
  %.3566 = phi i32 [ %544, %._crit_edge1318 ], [ %.0563, %540 ]
  %548 = trunc i32 %547 to i8
  %549 = getelementptr inbounds i8, ptr %.3600, i64 1
  store i8 %548, ptr %.3600, align 1, !tbaa !22
  %550 = add i32 %.3566, -1
  store i32 20, ptr %10, align 8, !tbaa !13
  br label %.thread

551:                                              ; preds = %532
  %552 = and i32 %538, 32
  %.not666 = icmp eq i32 %552, 0
  br i1 %.not666, label %554, label %553

553:                                              ; preds = %551
  store i32 11, ptr %10, align 8, !tbaa !13
  br label %.thread

554:                                              ; preds = %551
  %555 = and i32 %538, 64
  %.not667 = icmp eq i32 %555, 0
  br i1 %.not667, label %557, label %556

556:                                              ; preds = %554
  store ptr @.str.9, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

557:                                              ; preds = %554
  %558 = and i32 %538, 15
  store i32 %558, ptr %39, align 4, !tbaa !56
  %.not668 = icmp eq i32 %558, 0
  br i1 %.not668, label %586, label %.preheader704

.preheader704:                                    ; preds = %557
  %559 = icmp ult i32 %536, %558
  br i1 %559, label %.lr.ph992, label %._crit_edge993

.lr.ph992:                                        ; preds = %.preheader704, %566
  %560 = phi i32 [ %567, %566 ], [ %558, %.preheader704 ]
  %.19991 = phi i32 [ %576, %566 ], [ %536, %.preheader704 ]
  %.19555990 = phi i64 [ %575, %566 ], [ %535, %.preheader704 ]
  %.32989 = phi i32 [ %568, %566 ], [ %.31, %.preheader704 ]
  %561 = icmp eq i32 %.32989, 0
  br i1 %561, label %562, label %566

562:                                              ; preds = %.lr.ph992
  %563 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %564 = icmp eq i32 %563, 0
  br i1 %564, label %565, label %._crit_edge1304

._crit_edge1304:                                  ; preds = %562
  %.pre1305 = load i32, ptr %39, align 4, !tbaa !56
  br label %566

565:                                              ; preds = %562
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

566:                                              ; preds = %._crit_edge1304, %.lr.ph992
  %567 = phi i32 [ %.pre1305, %._crit_edge1304 ], [ %560, %.lr.ph992 ]
  %.33 = phi i32 [ %563, %._crit_edge1304 ], [ %.32989, %.lr.ph992 ]
  %568 = add i32 %.33, -1
  %569 = load ptr, ptr %6, align 8, !tbaa !18
  %570 = getelementptr inbounds i8, ptr %569, i64 1
  store ptr %570, ptr %6, align 8, !tbaa !18
  %571 = load i8, ptr %569, align 1, !tbaa !22
  %572 = zext i8 %571 to i64
  %573 = zext nneg i32 %.19991 to i64
  %574 = shl i64 %572, %573
  %575 = add i64 %574, %.19555990
  %576 = add i32 %.19991, 8
  %577 = icmp ult i32 %576, %567
  br i1 %577, label %.lr.ph992, label %._crit_edge993.loopexit, !llvm.loop !57

._crit_edge993.loopexit:                          ; preds = %566
  %.pre1306 = load i32, ptr %38, align 4, !tbaa !25
  br label %._crit_edge993

._crit_edge993:                                   ; preds = %._crit_edge993.loopexit, %.preheader704
  %578 = phi i32 [ %537, %.preheader704 ], [ %.pre1306, %._crit_edge993.loopexit ]
  %.32.lcssa = phi i32 [ %.31, %.preheader704 ], [ %568, %._crit_edge993.loopexit ]
  %.19555.lcssa = phi i64 [ %535, %.preheader704 ], [ %575, %._crit_edge993.loopexit ]
  %.19.lcssa = phi i32 [ %536, %.preheader704 ], [ %576, %._crit_edge993.loopexit ]
  %.lcssa780 = phi i32 [ %558, %.preheader704 ], [ %567, %._crit_edge993.loopexit ]
  %579 = trunc i64 %.19555.lcssa to i32
  %notmask669 = shl nsw i32 -1, %.lcssa780
  %580 = xor i32 %notmask669, -1
  %581 = and i32 %580, %579
  %582 = add i32 %578, %581
  store i32 %582, ptr %38, align 4, !tbaa !25
  %583 = zext nneg i32 %.lcssa780 to i64
  %584 = lshr i64 %.19555.lcssa, %583
  %585 = sub i32 %.19.lcssa, %.lcssa780
  br label %586

586:                                              ; preds = %._crit_edge993, %557
  %.34 = phi i32 [ %.32.lcssa, %._crit_edge993 ], [ %.31, %557 ]
  %.20556 = phi i64 [ %584, %._crit_edge993 ], [ %535, %557 ]
  %.20 = phi i32 [ %585, %._crit_edge993 ], [ %536, %557 ]
  %587 = load ptr, ptr %36, align 8, !tbaa !50
  %588 = trunc i64 %.20556 to i32
  %589 = load i32, ptr %37, align 4, !tbaa !51
  %notmask670998 = shl nsw i32 -1, %589
  %590 = xor i32 %notmask670998, -1
  %591 = and i32 %590, %588
  %592 = zext nneg i32 %591 to i64
  %593 = getelementptr inbounds %struct.code, ptr %587, i64 %592
  %.sroa.18.0..sroa_idx39999 = getelementptr inbounds i8, ptr %593, i64 1
  %.sroa.18.0.copyload401000 = load i8, ptr %.sroa.18.0..sroa_idx39999, align 1, !tbaa !22
  %594 = zext i8 %.sroa.18.0.copyload401000 to i32
  %.not6711003 = icmp ult i32 %.20, %594
  br i1 %.not6711003, label %.lr.ph1008.preheader, label %._crit_edge1009

.lr.ph1008.preheader:                             ; preds = %586
  %595 = zext nneg i32 %.20 to i64
  br label %.lr.ph1008

.lr.ph1008:                                       ; preds = %.lr.ph1008.preheader, %603
  %596 = phi i32 [ %589, %.lr.ph1008.preheader ], [ %604, %603 ]
  %597 = phi ptr [ %587, %.lr.ph1008.preheader ], [ %605, %603 ]
  %indvars.iv1284 = phi i64 [ %595, %.lr.ph1008.preheader ], [ %indvars.iv.next1285, %603 ]
  %.215571005 = phi i64 [ %.20556, %.lr.ph1008.preheader ], [ %612, %603 ]
  %.351004 = phi i32 [ %.34, %.lr.ph1008.preheader ], [ %606, %603 ]
  %598 = icmp eq i32 %.351004, 0
  br i1 %598, label %599, label %603

599:                                              ; preds = %.lr.ph1008
  %600 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %601 = icmp eq i32 %600, 0
  br i1 %601, label %602, label %._crit_edge1307

._crit_edge1307:                                  ; preds = %599
  %.pre1308 = load ptr, ptr %36, align 8, !tbaa !50
  %.pre1309 = load i32, ptr %37, align 4, !tbaa !51
  br label %603

602:                                              ; preds = %599
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

603:                                              ; preds = %._crit_edge1307, %.lr.ph1008
  %604 = phi i32 [ %.pre1309, %._crit_edge1307 ], [ %596, %.lr.ph1008 ]
  %605 = phi ptr [ %.pre1308, %._crit_edge1307 ], [ %597, %.lr.ph1008 ]
  %.36 = phi i32 [ %600, %._crit_edge1307 ], [ %.351004, %.lr.ph1008 ]
  %606 = add i32 %.36, -1
  %607 = load ptr, ptr %6, align 8, !tbaa !18
  %608 = getelementptr inbounds i8, ptr %607, i64 1
  store ptr %608, ptr %6, align 8, !tbaa !18
  %609 = load i8, ptr %607, align 1, !tbaa !22
  %610 = zext i8 %609 to i64
  %611 = shl i64 %610, %indvars.iv1284
  %612 = add i64 %611, %.215571005
  %indvars.iv.next1285 = add nuw nsw i64 %indvars.iv1284, 8
  %613 = trunc i64 %612 to i32
  %notmask670 = shl nsw i32 -1, %604
  %614 = xor i32 %notmask670, -1
  %615 = and i32 %614, %613
  %616 = zext nneg i32 %615 to i64
  %617 = getelementptr inbounds %struct.code, ptr %605, i64 %616
  %.sroa.18.0..sroa_idx39 = getelementptr inbounds i8, ptr %617, i64 1
  %.sroa.18.0.copyload40 = load i8, ptr %.sroa.18.0..sroa_idx39, align 1, !tbaa !22
  %618 = zext i8 %.sroa.18.0.copyload40 to i64
  %.not671 = icmp ult i64 %indvars.iv.next1285, %618
  br i1 %.not671, label %.lr.ph1008, label %._crit_edge1009.loopexit

._crit_edge1009.loopexit:                         ; preds = %603
  %619 = zext i8 %.sroa.18.0.copyload40 to i32
  %620 = trunc nuw i64 %indvars.iv.next1285 to i32
  br label %._crit_edge1009

._crit_edge1009:                                  ; preds = %._crit_edge1009.loopexit, %586
  %621 = phi ptr [ %587, %586 ], [ %605, %._crit_edge1009.loopexit ]
  %.35.lcssa = phi i32 [ %.34, %586 ], [ %606, %._crit_edge1009.loopexit ]
  %.21557.lcssa = phi i64 [ %.20556, %586 ], [ %612, %._crit_edge1009.loopexit ]
  %.21.lcssa = phi i32 [ %.20, %586 ], [ %620, %._crit_edge1009.loopexit ]
  %.lcssa789 = phi ptr [ %593, %586 ], [ %617, %._crit_edge1009.loopexit ]
  %.sroa.18.0.copyload40.lcssa = phi i8 [ %.sroa.18.0.copyload401000, %586 ], [ %.sroa.18.0.copyload40, %._crit_edge1009.loopexit ]
  %.lcssa785 = phi i32 [ %594, %586 ], [ %619, %._crit_edge1009.loopexit ]
  %.sroa.41.0.copyload68.lcssa.in = getelementptr inbounds i8, ptr %.lcssa789, i64 2
  %.sroa.41.0.copyload68.lcssa = load i16, ptr %.sroa.41.0.copyload68.lcssa.in, align 2, !tbaa !32
  %.sroa.022.0.copyload33 = load i8, ptr %.lcssa789, align 2, !tbaa !22
  %622 = icmp ult i8 %.sroa.022.0.copyload33, 16
  br i1 %622, label %.preheader703, label %664

.preheader703:                                    ; preds = %._crit_edge1009
  %623 = zext nneg i8 %.sroa.022.0.copyload33 to i32
  %624 = zext i16 %.sroa.41.0.copyload68.lcssa to i32
  %625 = add nuw nsw i32 %.lcssa785, %623
  %notmask672 = shl nsw i32 -1, %625
  %626 = xor i32 %notmask672, -1
  %627 = trunc i64 %.21557.lcssa to i32
  %628 = and i32 %627, %626
  %629 = lshr i32 %628, %.lcssa785
  %630 = add nuw i32 %629, %624
  %631 = zext i32 %630 to i64
  %632 = getelementptr inbounds %struct.code, ptr %621, i64 %631
  %.sroa.18.0..sroa_idx411017 = getelementptr inbounds i8, ptr %632, i64 1
  %.sroa.18.0.copyload421018 = load i8, ptr %.sroa.18.0..sroa_idx411017, align 1, !tbaa !22
  %633 = zext i8 %.sroa.18.0.copyload421018 to i32
  %634 = add nuw nsw i32 %.lcssa785, %633
  %.not6731019 = icmp ugt i32 %634, %.21.lcssa
  br i1 %.not6731019, label %.lr.ph1023.preheader, label %._crit_edge1024

.lr.ph1023.preheader:                             ; preds = %.preheader703
  %635 = zext nneg i32 %.21.lcssa to i64
  br label %.lr.ph1023

.lr.ph1023:                                       ; preds = %.lr.ph1023.preheader, %642
  %636 = phi ptr [ %621, %.lr.ph1023.preheader ], [ %643, %642 ]
  %indvars.iv1287 = phi i64 [ %635, %.lr.ph1023.preheader ], [ %indvars.iv.next1288, %642 ]
  %.225581021 = phi i64 [ %.21557.lcssa, %.lr.ph1023.preheader ], [ %650, %642 ]
  %.371020 = phi i32 [ %.35.lcssa, %.lr.ph1023.preheader ], [ %644, %642 ]
  %637 = icmp eq i32 %.371020, 0
  br i1 %637, label %638, label %642

638:                                              ; preds = %.lr.ph1023
  %639 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %640 = icmp eq i32 %639, 0
  br i1 %640, label %641, label %._crit_edge1310

._crit_edge1310:                                  ; preds = %638
  %.pre1311 = load ptr, ptr %36, align 8, !tbaa !50
  br label %642

641:                                              ; preds = %638
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

642:                                              ; preds = %._crit_edge1310, %.lr.ph1023
  %643 = phi ptr [ %.pre1311, %._crit_edge1310 ], [ %636, %.lr.ph1023 ]
  %.38 = phi i32 [ %639, %._crit_edge1310 ], [ %.371020, %.lr.ph1023 ]
  %644 = add i32 %.38, -1
  %645 = load ptr, ptr %6, align 8, !tbaa !18
  %646 = getelementptr inbounds i8, ptr %645, i64 1
  store ptr %646, ptr %6, align 8, !tbaa !18
  %647 = load i8, ptr %645, align 1, !tbaa !22
  %648 = zext i8 %647 to i64
  %649 = shl i64 %648, %indvars.iv1287
  %650 = add i64 %649, %.225581021
  %indvars.iv.next1288 = add nuw nsw i64 %indvars.iv1287, 8
  %651 = trunc i64 %650 to i32
  %652 = and i32 %651, %626
  %653 = lshr i32 %652, %.lcssa785
  %654 = add nuw i32 %653, %624
  %655 = zext i32 %654 to i64
  %656 = getelementptr inbounds %struct.code, ptr %643, i64 %655
  %.sroa.18.0..sroa_idx41 = getelementptr inbounds i8, ptr %656, i64 1
  %.sroa.18.0.copyload42 = load i8, ptr %.sroa.18.0..sroa_idx41, align 1, !tbaa !22
  %657 = zext i8 %.sroa.18.0.copyload42 to i32
  %658 = add nuw nsw i32 %.lcssa785, %657
  %659 = zext nneg i32 %658 to i64
  %.not673 = icmp ult i64 %indvars.iv.next1288, %659
  br i1 %.not673, label %.lr.ph1023, label %._crit_edge1024.loopexit

._crit_edge1024.loopexit:                         ; preds = %642
  %660 = trunc nuw i64 %indvars.iv.next1288 to i32
  br label %._crit_edge1024

._crit_edge1024:                                  ; preds = %._crit_edge1024.loopexit, %.preheader703
  %.37.lcssa = phi i32 [ %.35.lcssa, %.preheader703 ], [ %644, %._crit_edge1024.loopexit ]
  %.22558.lcssa = phi i64 [ %.21557.lcssa, %.preheader703 ], [ %650, %._crit_edge1024.loopexit ]
  %.22.lcssa = phi i32 [ %.21.lcssa, %.preheader703 ], [ %660, %._crit_edge1024.loopexit ]
  %.lcssa797 = phi ptr [ %632, %.preheader703 ], [ %656, %._crit_edge1024.loopexit ]
  %.sroa.18.0.copyload42.lcssa = phi i8 [ %.sroa.18.0.copyload421018, %.preheader703 ], [ %.sroa.18.0.copyload42, %._crit_edge1024.loopexit ]
  %.sroa.41.0..sroa_idx69 = getelementptr inbounds i8, ptr %.lcssa797, i64 2
  %.sroa.41.0.copyload70 = load i16, ptr %.sroa.41.0..sroa_idx69, align 2, !tbaa !32
  %.sroa.022.0.copyload34 = load i8, ptr %.lcssa797, align 2, !tbaa !22
  %661 = zext nneg i8 %.sroa.18.0.copyload40.lcssa to i64
  %662 = lshr i64 %.22558.lcssa, %661
  %663 = sub i32 %.22.lcssa, %.lcssa785
  br label %664

664:                                              ; preds = %._crit_edge1009, %._crit_edge1024
  %.39 = phi i32 [ %.37.lcssa, %._crit_edge1024 ], [ %.35.lcssa, %._crit_edge1009 ]
  %.23559 = phi i64 [ %662, %._crit_edge1024 ], [ %.21557.lcssa, %._crit_edge1009 ]
  %.23 = phi i32 [ %663, %._crit_edge1024 ], [ %.21.lcssa, %._crit_edge1009 ]
  %.sroa.41.1 = phi i16 [ %.sroa.41.0.copyload70, %._crit_edge1024 ], [ %.sroa.41.0.copyload68.lcssa, %._crit_edge1009 ]
  %.sroa.18.1 = phi i8 [ %.sroa.18.0.copyload42.lcssa, %._crit_edge1024 ], [ %.sroa.18.0.copyload40.lcssa, %._crit_edge1009 ]
  %.sroa.022.1 = phi i8 [ %.sroa.022.0.copyload34, %._crit_edge1024 ], [ %.sroa.022.0.copyload33, %._crit_edge1009 ]
  %665 = zext i8 %.sroa.18.1 to i32
  %666 = zext nneg i8 %.sroa.18.1 to i64
  %667 = lshr i64 %.23559, %666
  %668 = sub i32 %.23, %665
  %669 = zext i8 %.sroa.022.1 to i32
  %670 = and i32 %669, 64
  %.not674 = icmp eq i32 %670, 0
  br i1 %.not674, label %672, label %671

671:                                              ; preds = %664
  store ptr @.str.10, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

672:                                              ; preds = %664
  %673 = zext i16 %.sroa.41.1 to i32
  store i32 %673, ptr %40, align 8, !tbaa !58
  %674 = and i32 %669, 15
  store i32 %674, ptr %39, align 4, !tbaa !56
  %.not675 = icmp eq i32 %674, 0
  br i1 %.not675, label %702, label %.preheader702

.preheader702:                                    ; preds = %672
  %675 = icmp ult i32 %668, %674
  br i1 %675, label %.lr.ph1033, label %._crit_edge1034

.lr.ph1033:                                       ; preds = %.preheader702, %682
  %676 = phi i32 [ %683, %682 ], [ %674, %.preheader702 ]
  %.241032 = phi i32 [ %692, %682 ], [ %668, %.preheader702 ]
  %.245601031 = phi i64 [ %691, %682 ], [ %667, %.preheader702 ]
  %.401030 = phi i32 [ %684, %682 ], [ %.39, %.preheader702 ]
  %677 = icmp eq i32 %.401030, 0
  br i1 %677, label %678, label %682

678:                                              ; preds = %.lr.ph1033
  %679 = call i32 %1(ptr noundef %2, ptr noundef nonnull %6) #5
  %680 = icmp eq i32 %679, 0
  br i1 %680, label %681, label %._crit_edge1312

._crit_edge1312:                                  ; preds = %678
  %.pre1313 = load i32, ptr %39, align 4, !tbaa !56
  br label %682

681:                                              ; preds = %678
  store ptr null, ptr %6, align 8, !tbaa !18
  br label %.loopexit699

682:                                              ; preds = %._crit_edge1312, %.lr.ph1033
  %683 = phi i32 [ %.pre1313, %._crit_edge1312 ], [ %676, %.lr.ph1033 ]
  %.41 = phi i32 [ %679, %._crit_edge1312 ], [ %.401030, %.lr.ph1033 ]
  %684 = add i32 %.41, -1
  %685 = load ptr, ptr %6, align 8, !tbaa !18
  %686 = getelementptr inbounds i8, ptr %685, i64 1
  store ptr %686, ptr %6, align 8, !tbaa !18
  %687 = load i8, ptr %685, align 1, !tbaa !22
  %688 = zext i8 %687 to i64
  %689 = zext nneg i32 %.241032 to i64
  %690 = shl i64 %688, %689
  %691 = add i64 %690, %.245601031
  %692 = add i32 %.241032, 8
  %693 = icmp ult i32 %692, %683
  br i1 %693, label %.lr.ph1033, label %._crit_edge1034.loopexit, !llvm.loop !59

._crit_edge1034.loopexit:                         ; preds = %682
  %.pre1314 = load i32, ptr %40, align 8, !tbaa !58
  br label %._crit_edge1034

._crit_edge1034:                                  ; preds = %._crit_edge1034.loopexit, %.preheader702
  %694 = phi i32 [ %673, %.preheader702 ], [ %.pre1314, %._crit_edge1034.loopexit ]
  %.40.lcssa = phi i32 [ %.39, %.preheader702 ], [ %684, %._crit_edge1034.loopexit ]
  %.24560.lcssa = phi i64 [ %667, %.preheader702 ], [ %691, %._crit_edge1034.loopexit ]
  %.24.lcssa = phi i32 [ %668, %.preheader702 ], [ %692, %._crit_edge1034.loopexit ]
  %.lcssa802 = phi i32 [ %674, %.preheader702 ], [ %683, %._crit_edge1034.loopexit ]
  %695 = trunc i64 %.24560.lcssa to i32
  %notmask676 = shl nsw i32 -1, %.lcssa802
  %696 = xor i32 %notmask676, -1
  %697 = and i32 %696, %695
  %698 = add i32 %694, %697
  store i32 %698, ptr %40, align 8, !tbaa !58
  %699 = zext nneg i32 %.lcssa802 to i64
  %700 = lshr i64 %.24560.lcssa, %699
  %701 = sub i32 %.24.lcssa, %.lcssa802
  br label %702

702:                                              ; preds = %._crit_edge1034, %672
  %703 = phi i32 [ %698, %._crit_edge1034 ], [ %673, %672 ]
  %.42 = phi i32 [ %.40.lcssa, %._crit_edge1034 ], [ %.39, %672 ]
  %.25561 = phi i64 [ %700, %._crit_edge1034 ], [ %667, %672 ]
  %.25 = phi i32 [ %701, %._crit_edge1034 ], [ %668, %672 ]
  %704 = load i32, ptr %23, align 4, !tbaa !21
  %705 = load i32, ptr %15, align 8, !tbaa !16
  %706 = icmp ult i32 %705, %704
  %707 = select i1 %706, i32 %.0563, i32 0
  %708 = sub i32 %704, %707
  %709 = icmp ugt i32 %703, %708
  br i1 %709, label %710, label %.preheader700

710:                                              ; preds = %702
  store ptr @.str.11, ptr %13, align 8, !tbaa !12
  store i32 29, ptr %10, align 8, !tbaa !13
  br label %.thread

.preheader700:                                    ; preds = %702, %.loopexit1544
  %.4601 = phi ptr [ %.lcssa1472, %.loopexit1544 ], [ %.0597, %702 ]
  %.4567 = phi i32 [ %764, %.loopexit1544 ], [ %.0563, %702 ]
  %711 = icmp eq i32 %.4567, 0
  %.pre1317 = load i32, ptr %23, align 4, !tbaa !21
  br i1 %711, label %712, label %715

712:                                              ; preds = %.preheader700
  %713 = load ptr, ptr %21, align 8, !tbaa !20
  store i32 %.pre1317, ptr %15, align 8, !tbaa !16
  %714 = call i32 %3(ptr noundef %4, ptr noundef %713, i32 noundef %.pre1317) #5
  %.not677 = icmp eq i32 %714, 0
  br i1 %.not677, label %._crit_edge1315, label %.loopexit699

._crit_edge1315:                                  ; preds = %712
  %.pre1316 = load i32, ptr %23, align 4, !tbaa !21
  br label %715

715:                                              ; preds = %._crit_edge1315, %.preheader700
  %716 = phi i32 [ %.pre1316, %._crit_edge1315 ], [ %.pre1317, %.preheader700 ]
  %.5602 = phi ptr [ %713, %._crit_edge1315 ], [ %.4601, %.preheader700 ]
  %.5568 = phi i32 [ %.pre1317, %._crit_edge1315 ], [ %.4567, %.preheader700 ]
  %717 = load i32, ptr %40, align 8, !tbaa !58
  %718 = sub i32 %716, %717
  %719 = icmp ult i32 %718, %.5568
  %720 = zext i32 %718 to i64
  %721 = zext i32 %717 to i64
  %722 = sub nsw i64 0, %721
  %723 = select i1 %719, i32 %718, i32 0
  %.4 = sub i32 %.5568, %723
  %.pn = select i1 %719, i64 %720, i64 %722
  %.0526 = getelementptr i8, ptr %.5602, i64 %.pn
  %724 = load i32, ptr %38, align 4, !tbaa !25
  %.5 = call i32 @llvm.umin.i32(i32 %.4, i32 %724)
  %725 = sub i32 %724, %.5
  store i32 %725, ptr %38, align 4, !tbaa !25
  %726 = add i32 %.5, -1
  %727 = zext i32 %726 to i64
  %728 = add nuw nsw i64 %727, 1
  %min.iters.check = icmp ult i32 %726, 31
  %729 = add nsw i64 %.pn, 31
  %diff.check = icmp ult i64 %729, 32
  %or.cond1547 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond1547, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %715
  %n.vec = and i64 %728, 8589934560
  %ind.end = getelementptr i8, ptr %.5602, i64 %n.vec
  %.cast = trunc i64 %n.vec to i32
  %ind.end1522 = sub i32 %.5, %.cast
  %ind.end1524 = getelementptr i8, ptr %.0526, i64 %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %.5602, i64 %index
  %next.gep1527 = getelementptr i8, ptr %.0526, i64 %index
  %730 = getelementptr i8, ptr %next.gep1527, i64 16
  %wide.load = load <16 x i8>, ptr %next.gep1527, align 1, !tbaa !22
  %wide.load1529 = load <16 x i8>, ptr %730, align 1, !tbaa !22
  %731 = getelementptr i8, ptr %next.gep, i64 16
  store <16 x i8> %wide.load, ptr %next.gep, align 1, !tbaa !22
  store <16 x i8> %wide.load1529, ptr %731, align 1, !tbaa !22
  %index.next = add nuw i64 %index, 32
  %732 = icmp eq i64 %index.next, %n.vec
  br i1 %732, label %middle.block, label %vector.body, !llvm.loop !60

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %728, %n.vec
  br i1 %cmp.n, label %.loopexit1544, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %715
  %.6603.ph = phi ptr [ %.5602, %715 ], [ %ind.end, %middle.block ]
  %.6.ph = phi i32 [ %.5, %715 ], [ %ind.end1522, %middle.block ]
  %.1.ph = phi ptr [ %.0526, %715 ], [ %ind.end1524, %middle.block ]
  %733 = add i32 %.6.ph, -1
  %xtraiter1647 = and i32 %.6.ph, 7
  %lcmp.mod1648.not = icmp eq i32 %xtraiter1647, 0
  br i1 %lcmp.mod1648.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.6603.prol = phi ptr [ %736, %scalar.ph.prol ], [ %.6603.ph, %scalar.ph.preheader ]
  %.6.prol = phi i32 [ %737, %scalar.ph.prol ], [ %.6.ph, %scalar.ph.preheader ]
  %.1.prol = phi ptr [ %734, %scalar.ph.prol ], [ %.1.ph, %scalar.ph.preheader ]
  %prol.iter1649 = phi i32 [ %prol.iter1649.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %734 = getelementptr inbounds i8, ptr %.1.prol, i64 1
  %735 = load i8, ptr %.1.prol, align 1, !tbaa !22
  %736 = getelementptr inbounds i8, ptr %.6603.prol, i64 1
  store i8 %735, ptr %.6603.prol, align 1, !tbaa !22
  %737 = add i32 %.6.prol, -1
  %prol.iter1649.next = add i32 %prol.iter1649, 1
  %prol.iter1649.cmp.not = icmp eq i32 %prol.iter1649.next, %xtraiter1647
  br i1 %prol.iter1649.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !61

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.lcssa1597.unr = phi ptr [ poison, %scalar.ph.preheader ], [ %736, %scalar.ph.prol ]
  %.6603.unr = phi ptr [ %.6603.ph, %scalar.ph.preheader ], [ %736, %scalar.ph.prol ]
  %.6.unr = phi i32 [ %.6.ph, %scalar.ph.preheader ], [ %737, %scalar.ph.prol ]
  %.1.unr = phi ptr [ %.1.ph, %scalar.ph.preheader ], [ %734, %scalar.ph.prol ]
  %738 = icmp ult i32 %733, 7
  br i1 %738, label %.loopexit1544, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.6603 = phi ptr [ %762, %scalar.ph ], [ %.6603.unr, %scalar.ph.prol.loopexit ]
  %.6 = phi i32 [ %763, %scalar.ph ], [ %.6.unr, %scalar.ph.prol.loopexit ]
  %.1 = phi ptr [ %760, %scalar.ph ], [ %.1.unr, %scalar.ph.prol.loopexit ]
  %739 = getelementptr inbounds i8, ptr %.1, i64 1
  %740 = load i8, ptr %.1, align 1, !tbaa !22
  %741 = getelementptr inbounds i8, ptr %.6603, i64 1
  store i8 %740, ptr %.6603, align 1, !tbaa !22
  %742 = getelementptr inbounds i8, ptr %.1, i64 2
  %743 = load i8, ptr %739, align 1, !tbaa !22
  %744 = getelementptr inbounds i8, ptr %.6603, i64 2
  store i8 %743, ptr %741, align 1, !tbaa !22
  %745 = getelementptr inbounds i8, ptr %.1, i64 3
  %746 = load i8, ptr %742, align 1, !tbaa !22
  %747 = getelementptr inbounds i8, ptr %.6603, i64 3
  store i8 %746, ptr %744, align 1, !tbaa !22
  %748 = getelementptr inbounds i8, ptr %.1, i64 4
  %749 = load i8, ptr %745, align 1, !tbaa !22
  %750 = getelementptr inbounds i8, ptr %.6603, i64 4
  store i8 %749, ptr %747, align 1, !tbaa !22
  %751 = getelementptr inbounds i8, ptr %.1, i64 5
  %752 = load i8, ptr %748, align 1, !tbaa !22
  %753 = getelementptr inbounds i8, ptr %.6603, i64 5
  store i8 %752, ptr %750, align 1, !tbaa !22
  %754 = getelementptr inbounds i8, ptr %.1, i64 6
  %755 = load i8, ptr %751, align 1, !tbaa !22
  %756 = getelementptr inbounds i8, ptr %.6603, i64 6
  store i8 %755, ptr %753, align 1, !tbaa !22
  %757 = getelementptr inbounds i8, ptr %.1, i64 7
  %758 = load i8, ptr %754, align 1, !tbaa !22
  %759 = getelementptr inbounds i8, ptr %.6603, i64 7
  store i8 %758, ptr %756, align 1, !tbaa !22
  %760 = getelementptr inbounds i8, ptr %.1, i64 8
  %761 = load i8, ptr %757, align 1, !tbaa !22
  %762 = getelementptr inbounds i8, ptr %.6603, i64 8
  store i8 %761, ptr %759, align 1, !tbaa !22
  %763 = add i32 %.6, -8
  %.not678.7 = icmp eq i32 %763, 0
  br i1 %.not678.7, label %.loopexit1544, label %scalar.ph, !llvm.loop !62

.loopexit1544:                                    ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %.lcssa1472 = phi ptr [ %ind.end, %middle.block ], [ %.lcssa1597.unr, %scalar.ph.prol.loopexit ], [ %762, %scalar.ph ]
  %764 = sub i32 %.5568, %.5
  %765 = load i32, ptr %38, align 4, !tbaa !25
  %.not679 = icmp eq i32 %765, 0
  br i1 %.not679, label %.thread, label %.preheader700, !llvm.loop !63

766:                                              ; preds = %46
  %767 = load i32, ptr %23, align 4, !tbaa !21
  %768 = icmp ult i32 %.0563, %767
  br i1 %768, label %769, label %.loopexit699

769:                                              ; preds = %766
  %770 = load ptr, ptr %21, align 8, !tbaa !20
  %771 = sub i32 %767, %.0563
  %772 = call i32 %3(ptr noundef %4, ptr noundef %770, i32 noundef %771) #5
  %.not655 = icmp eq i32 %772, 0
  %spec.select686 = select i1 %.not655, i32 1, i32 -5
  br label %.loopexit699

.thread:                                          ; preds = %.loopexit1544, %299, %401, %._crit_edge954, %710, %671, %556, %553, %546, %457, %436, %428, %425, %201, %161, %._crit_edge1055, %108, %79, %55
  %.7604 = phi ptr [ %458, %457 ], [ %549, %546 ], [ %.0597, %553 ], [ %.0597, %556 ], [ %.0597, %671 ], [ %.0597, %710 ], [ %.0597, %161 ], [ %.0597, %201 ], [ %.0597, %._crit_edge954 ], [ %.0597, %425 ], [ %.0597, %428 ], [ %.0597, %436 ], [ %.0597, %108 ], [ %.1598.lcssa, %._crit_edge1055 ], [ %.0597, %55 ], [ %.0597, %79 ], [ %.0597, %401 ], [ %.0597, %299 ], [ %.lcssa1472, %.loopexit1544 ]
  %.43 = phi i32 [ %461, %457 ], [ %.31, %546 ], [ %.31, %553 ], [ %.31, %556 ], [ %.39, %671 ], [ %.42, %710 ], [ %.7577.lcssa, %161 ], [ %.10580.lcssa, %201 ], [ %.12582.lcssa, %._crit_edge954 ], [ %.12582.lcssa, %425 ], [ %.12582.lcssa, %428 ], [ %.12582.lcssa, %436 ], [ %.3573.lcssa, %108 ], [ %.5575.lcssa, %._crit_edge1055 ], [ %.0570, %55 ], [ %.1571.lcssa, %79 ], [ %.23593, %401 ], [ %.17587.lcssa, %299 ], [ %.42, %.loopexit1544 ]
  %.6569 = phi i32 [ %459, %457 ], [ %550, %546 ], [ %.0563, %553 ], [ %.0563, %556 ], [ %.0563, %671 ], [ %.0563, %710 ], [ %.0563, %161 ], [ %.0563, %201 ], [ %.0563, %._crit_edge954 ], [ %.0563, %425 ], [ %.0563, %428 ], [ %.0563, %436 ], [ %.0563, %108 ], [ %.1564.lcssa, %._crit_edge1055 ], [ %.0563, %55 ], [ %.0563, %79 ], [ %.0563, %401 ], [ %.0563, %299 ], [ %764, %.loopexit1544 ]
  %.26562 = phi i64 [ %462, %457 ], [ %535, %546 ], [ %535, %553 ], [ %535, %556 ], [ %667, %671 ], [ %.25561, %710 ], [ %157, %161 ], [ %191, %201 ], [ %.6542.lcssa, %._crit_edge954 ], [ %.6542.lcssa, %425 ], [ %.6542.lcssa, %428 ], [ %.6542.lcssa, %436 ], [ %.2538.lcssa, %108 ], [ 0, %._crit_edge1055 ], [ %58, %55 ], [ %80, %79 ], [ %.12548, %401 ], [ %295, %299 ], [ %.25561, %.loopexit1544 ]
  %.26 = phi i32 [ %463, %457 ], [ %536, %546 ], [ %536, %553 ], [ %536, %556 ], [ %668, %671 ], [ %.25, %710 ], [ %158, %161 ], [ %192, %201 ], [ %.6535.lcssa, %._crit_edge954 ], [ %.6535.lcssa, %425 ], [ %.6535.lcssa, %428 ], [ %.6535.lcssa, %436 ], [ %.2531.lcssa, %108 ], [ 0, %._crit_edge1055 ], [ %59, %55 ], [ %81, %79 ], [ %.12, %401 ], [ %296, %299 ], [ %.25, %.loopexit1544 ]
  %.pre = load i32, ptr %10, align 8, !tbaa !13
  br label %46

.loopexit699.loopexit1550:                        ; preds = %46
  br label %.loopexit699

.loopexit699:                                     ; preds = %542, %712, %119, %46, %.loopexit699.loopexit1550, %769, %766, %681, %641, %602, %565, %509, %470, %336, %314, %283, %248, %221, %.split, %137, %116, %94, %.split1068
  %.44 = phi i32 [ %.0570, %766 ], [ 0, %565 ], [ 0, %681 ], [ 0, %641 ], [ 0, %602 ], [ 0, %509 ], [ 0, %470 ], [ 0, %137 ], [ 0, %.split ], [ 0, %248 ], [ 0, %283 ], [ 0, %314 ], [ 0, %336 ], [ 0, %221 ], [ 0, %94 ], [ 0, %116 ], [ 0, %.split1068 ], [ %.0570, %769 ], [ %.0570, %46 ], [ %.6576, %119 ], [ %.42, %712 ], [ %.31, %542 ], [ %.0570, %.loopexit699.loopexit1550 ]
  %.0 = phi i32 [ 1, %766 ], [ -5, %565 ], [ -5, %681 ], [ -5, %641 ], [ -5, %602 ], [ -5, %509 ], [ -5, %470 ], [ -5, %137 ], [ -5, %.split ], [ -5, %248 ], [ -5, %283 ], [ -5, %314 ], [ -5, %336 ], [ -5, %221 ], [ -5, %94 ], [ -5, %116 ], [ -5, %.split1068 ], [ %spec.select686, %769 ], [ -2, %46 ], [ -5, %119 ], [ -5, %712 ], [ -5, %542 ], [ -3, %.loopexit699.loopexit1550 ]
  %773 = load ptr, ptr %6, align 8, !tbaa !18
  store ptr %773, ptr %0, align 8, !tbaa !17
  store i32 %.44, ptr %43, align 8, !tbaa !19
  br label %774

774:                                              ; preds = %5, %8, %.loopexit699
  %.0605 = phi i32 [ %.0, %.loopexit699 ], [ -2, %8 ], [ -2, %5 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  ret i32 %.0605
}

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

; 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) #2

declare i32 @inflate_table(i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @inflate_fast(ptr noundef, i32 noundef) local_unnamed_addr #3

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 48}
!13 = !{!14, !10, i64 0}
!14 = !{!"inflate_state", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !11, i64 24, !11, i64 32, !7, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !7, i64 64, !11, i64 72, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !7, i64 96, !7, i64 104, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !7, i64 136, !8, i64 144, !8, i64 784, !8, i64 1360, !10, i64 7136, !10, i64 7140, !10, i64 7144}
!15 = !{!14, !10, i64 4}
!16 = !{!14, !10, i64 56}
!17 = !{!6, !7, i64 0}
!18 = !{!7, !7, i64 0}
!19 = !{!6, !10, i64 8}
!20 = !{!14, !7, i64 64}
!21 = !{!14, !10, i64 52}
!22 = !{!8, !8, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!14, !10, i64 84}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = !{!14, !10, i64 124}
!29 = !{!14, !10, i64 128}
!30 = !{!14, !10, i64 120}
!31 = !{!14, !10, i64 132}
!32 = !{!33, !33, i64 0}
!33 = !{!"short", !8, i64 0}
!34 = distinct !{!34, !24}
!35 = distinct !{!35, !24}
!36 = !{!14, !7, i64 136}
!37 = !{!14, !7, i64 96}
!38 = !{!14, !10, i64 112}
!39 = distinct !{!39, !24}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}
!42 = distinct !{!42, !24}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.unroll.disable"}
!45 = distinct !{!45, !24, !46, !47}
!46 = !{!"llvm.loop.isvectorized", i32 1}
!47 = !{!"llvm.loop.unroll.runtime.disable"}
!48 = distinct !{!48, !24, !46}
!49 = distinct !{!49, !24}
!50 = !{!14, !7, i64 104}
!51 = !{!14, !10, i64 116}
!52 = !{!6, !7, i64 24}
!53 = !{!6, !10, i64 32}
!54 = !{!14, !11, i64 72}
!55 = !{!14, !10, i64 80}
!56 = !{!14, !10, i64 92}
!57 = distinct !{!57, !24}
!58 = !{!14, !10, i64 88}
!59 = distinct !{!59, !24}
!60 = distinct !{!60, !24, !46, !47}
!61 = distinct !{!61, !44}
!62 = distinct !{!62, !24, !46}
!63 = distinct !{!63, !24}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass