; LLVM IR from bitbank2/PNGdec :: src (inffast)

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

@.str = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @inflate_fast(ptr noundef %0, i32 noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #2
  %30 = load ptr, ptr %3, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.z_stream_s, ptr %30, i32 0, i32 7
  %32 = load ptr, ptr %31, align 8, !tbaa !11
  store ptr %32, ptr %5, align 8, !tbaa !5
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.z_stream_s, ptr %33, i32 0, i32 0
  %35 = load ptr, ptr %34, align 8, !tbaa !14
  store ptr %35, ptr %6, align 8, !tbaa !5
  %36 = load ptr, ptr %6, align 8, !tbaa !5
  %37 = load ptr, ptr %3, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.z_stream_s, ptr %37, i32 0, i32 1
  %39 = load i32, ptr %38, align 8, !tbaa !15
  %40 = sub i32 %39, 5
  %41 = zext i32 %40 to i64
  %42 = getelementptr inbounds i8, ptr %36, i64 %41
  store ptr %42, ptr %7, align 8, !tbaa !5
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.z_stream_s, ptr %43, i32 0, i32 3
  %45 = load ptr, ptr %44, align 8, !tbaa !16
  store ptr %45, ptr %8, align 8, !tbaa !5
  %46 = load ptr, ptr %8, align 8, !tbaa !5
  %47 = load i32, ptr %4, align 4, !tbaa !9
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.z_stream_s, ptr %48, i32 0, i32 4
  %50 = load i32, ptr %49, align 8, !tbaa !17
  %51 = sub i32 %47, %50
  %52 = zext i32 %51 to i64
  %53 = sub i64 0, %52
  %54 = getelementptr inbounds i8, ptr %46, i64 %53
  store ptr %54, ptr %9, align 8, !tbaa !5
  %55 = load ptr, ptr %8, align 8, !tbaa !5
  %56 = load ptr, ptr %3, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.z_stream_s, ptr %56, i32 0, i32 4
  %58 = load i32, ptr %57, align 8, !tbaa !17
  %59 = sub i32 %58, 257
  %60 = zext i32 %59 to i64
  %61 = getelementptr inbounds i8, ptr %55, i64 %60
  store ptr %61, ptr %10, align 8, !tbaa !5
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.inflate_state, ptr %62, i32 0, i32 11
  %64 = load i32, ptr %63, align 4, !tbaa !18
  store i32 %64, ptr %11, align 4, !tbaa !9
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.inflate_state, ptr %65, i32 0, i32 12
  %67 = load i32, ptr %66, align 8, !tbaa !20
  store i32 %67, ptr %12, align 4, !tbaa !9
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.inflate_state, ptr %68, i32 0, i32 13
  %70 = load i32, ptr %69, align 4, !tbaa !21
  store i32 %70, ptr %13, align 4, !tbaa !9
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.inflate_state, ptr %71, i32 0, i32 14
  %73 = load ptr, ptr %72, align 8, !tbaa !22
  store ptr %73, ptr %14, align 8, !tbaa !5
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.inflate_state, ptr %74, i32 0, i32 15
  %76 = load i64, ptr %75, align 8, !tbaa !23
  store i64 %76, ptr %15, align 8, !tbaa !24
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.inflate_state, ptr %77, i32 0, i32 16
  %79 = load i32, ptr %78, align 8, !tbaa !25
  store i32 %79, ptr %16, align 4, !tbaa !9
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.inflate_state, ptr %80, i32 0, i32 20
  %82 = load ptr, ptr %81, align 8, !tbaa !26
  store ptr %82, ptr %17, align 8, !tbaa !5
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.inflate_state, ptr %83, i32 0, i32 21
  %85 = load ptr, ptr %84, align 8, !tbaa !27
  store ptr %85, ptr %18, align 8, !tbaa !5
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.inflate_state, ptr %86, i32 0, i32 22
  %88 = load i32, ptr %87, align 8, !tbaa !28
  %89 = shl i32 1, %88
  %90 = sub i32 %89, 1
  store i32 %90, ptr %19, align 4, !tbaa !9
  %91 = load ptr, ptr %5, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.inflate_state, ptr %91, i32 0, i32 23
  %93 = load i32, ptr %92, align 4, !tbaa !29
  %94 = shl i32 1, %93
  %95 = sub i32 %94, 1
  store i32 %95, ptr %20, align 4, !tbaa !9
  br label %96

96:                                               ; preds = %629, %2
  %97 = load i32, ptr %16, align 4, !tbaa !9
  %98 = icmp ult i32 %97, 15
  br i1 %98, label %99, label %122

99:                                               ; preds = %96
  %100 = load ptr, ptr %6, align 8, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %100, i32 1
  store ptr %101, ptr %6, align 8, !tbaa !5
  %102 = load i8, ptr %100, align 1, !tbaa !30
  %103 = zext i8 %102 to i64
  %104 = load i32, ptr %16, align 4, !tbaa !9
  %105 = zext i32 %104 to i64
  %106 = shl i64 %103, %105
  %107 = load i64, ptr %15, align 8, !tbaa !24
  %108 = add i64 %107, %106
  store i64 %108, ptr %15, align 8, !tbaa !24
  %109 = load i32, ptr %16, align 4, !tbaa !9
  %110 = add i32 %109, 8
  store i32 %110, ptr %16, align 4, !tbaa !9
  %111 = load ptr, ptr %6, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i32 1
  store ptr %112, ptr %6, align 8, !tbaa !5
  %113 = load i8, ptr %111, align 1, !tbaa !30
  %114 = zext i8 %113 to i64
  %115 = load i32, ptr %16, align 4, !tbaa !9
  %116 = zext i32 %115 to i64
  %117 = shl i64 %114, %116
  %118 = load i64, ptr %15, align 8, !tbaa !24
  %119 = add i64 %118, %117
  store i64 %119, ptr %15, align 8, !tbaa !24
  %120 = load i32, ptr %16, align 4, !tbaa !9
  %121 = add i32 %120, 8
  store i32 %121, ptr %16, align 4, !tbaa !9
  br label %122

122:                                              ; preds = %99, %96
  %123 = load ptr, ptr %17, align 8, !tbaa !5
  %124 = load i64, ptr %15, align 8, !tbaa !24
  %125 = load i32, ptr %19, align 4, !tbaa !9
  %126 = zext i32 %125 to i64
  %127 = and i64 %124, %126
  %128 = getelementptr inbounds %struct.code, ptr %123, i64 %127
  store ptr %128, ptr %21, align 8, !tbaa !5
  br label %129

129:                                              ; preds = %592, %122
  %130 = load ptr, ptr %21, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.code, ptr %130, i32 0, i32 1
  %132 = load i8, ptr %131, align 1, !tbaa !31
  %133 = zext i8 %132 to i32
  store i32 %133, ptr %22, align 4, !tbaa !9
  %134 = load i32, ptr %22, align 4, !tbaa !9
  %135 = load i64, ptr %15, align 8, !tbaa !24
  %136 = zext i32 %134 to i64
  %137 = lshr i64 %135, %136
  store i64 %137, ptr %15, align 8, !tbaa !24
  %138 = load i32, ptr %22, align 4, !tbaa !9
  %139 = load i32, ptr %16, align 4, !tbaa !9
  %140 = sub i32 %139, %138
  store i32 %140, ptr %16, align 4, !tbaa !9
  %141 = load ptr, ptr %21, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.code, ptr %141, i32 0, i32 0
  %143 = load i8, ptr %142, align 2, !tbaa !34
  %144 = zext i8 %143 to i32
  store i32 %144, ptr %22, align 4, !tbaa !9
  %145 = load i32, ptr %22, align 4, !tbaa !9
  %146 = icmp eq i32 %145, 0
  br i1 %146, label %147, label %154

147:                                              ; preds = %129
  %148 = load ptr, ptr %21, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.code, ptr %148, i32 0, i32 2
  %150 = load i16, ptr %149, align 2, !tbaa !35
  %151 = trunc i16 %150 to i8
  %152 = load ptr, ptr %8, align 8, !tbaa !5
  %153 = getelementptr inbounds i8, ptr %152, i32 1
  store ptr %153, ptr %8, align 8, !tbaa !5
  store i8 %151, ptr %152, align 1, !tbaa !30
  br label %620

154:                                              ; preds = %129
  %155 = load i32, ptr %22, align 4, !tbaa !9
  %156 = and i32 %155, 16
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %158, label %588

158:                                              ; preds = %154
  %159 = load ptr, ptr %21, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.code, ptr %159, i32 0, i32 2
  %161 = load i16, ptr %160, align 2, !tbaa !35
  %162 = zext i16 %161 to i32
  store i32 %162, ptr %23, align 4, !tbaa !9
  %163 = load i32, ptr %22, align 4, !tbaa !9
  %164 = and i32 %163, 15
  store i32 %164, ptr %22, align 4, !tbaa !9
  %165 = load i32, ptr %22, align 4, !tbaa !9
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %199

167:                                              ; preds = %158
  %168 = load i32, ptr %16, align 4, !tbaa !9
  %169 = load i32, ptr %22, align 4, !tbaa !9
  %170 = icmp ult i32 %168, %169
  br i1 %170, label %171, label %183

171:                                              ; preds = %167
  %172 = load ptr, ptr %6, align 8, !tbaa !5
  %173 = getelementptr inbounds i8, ptr %172, i32 1
  store ptr %173, ptr %6, align 8, !tbaa !5
  %174 = load i8, ptr %172, align 1, !tbaa !30
  %175 = zext i8 %174 to i64
  %176 = load i32, ptr %16, align 4, !tbaa !9
  %177 = zext i32 %176 to i64
  %178 = shl i64 %175, %177
  %179 = load i64, ptr %15, align 8, !tbaa !24
  %180 = add i64 %179, %178
  store i64 %180, ptr %15, align 8, !tbaa !24
  %181 = load i32, ptr %16, align 4, !tbaa !9
  %182 = add i32 %181, 8
  store i32 %182, ptr %16, align 4, !tbaa !9
  br label %183

183:                                              ; preds = %171, %167
  %184 = load i64, ptr %15, align 8, !tbaa !24
  %185 = trunc i64 %184 to i32
  %186 = load i32, ptr %22, align 4, !tbaa !9
  %187 = shl i32 1, %186
  %188 = sub i32 %187, 1
  %189 = and i32 %185, %188
  %190 = load i32, ptr %23, align 4, !tbaa !9
  %191 = add i32 %190, %189
  store i32 %191, ptr %23, align 4, !tbaa !9
  %192 = load i32, ptr %22, align 4, !tbaa !9
  %193 = load i64, ptr %15, align 8, !tbaa !24
  %194 = zext i32 %192 to i64
  %195 = lshr i64 %193, %194
  store i64 %195, ptr %15, align 8, !tbaa !24
  %196 = load i32, ptr %22, align 4, !tbaa !9
  %197 = load i32, ptr %16, align 4, !tbaa !9
  %198 = sub i32 %197, %196
  store i32 %198, ptr %16, align 4, !tbaa !9
  br label %199

199:                                              ; preds = %183, %158
  %200 = load i32, ptr %16, align 4, !tbaa !9
  %201 = icmp ult i32 %200, 15
  br i1 %201, label %202, label %225

202:                                              ; preds = %199
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %203, i32 1
  store ptr %204, ptr %6, align 8, !tbaa !5
  %205 = load i8, ptr %203, align 1, !tbaa !30
  %206 = zext i8 %205 to i64
  %207 = load i32, ptr %16, align 4, !tbaa !9
  %208 = zext i32 %207 to i64
  %209 = shl i64 %206, %208
  %210 = load i64, ptr %15, align 8, !tbaa !24
  %211 = add i64 %210, %209
  store i64 %211, ptr %15, align 8, !tbaa !24
  %212 = load i32, ptr %16, align 4, !tbaa !9
  %213 = add i32 %212, 8
  store i32 %213, ptr %16, align 4, !tbaa !9
  %214 = load ptr, ptr %6, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %214, i32 1
  store ptr %215, ptr %6, align 8, !tbaa !5
  %216 = load i8, ptr %214, align 1, !tbaa !30
  %217 = zext i8 %216 to i64
  %218 = load i32, ptr %16, align 4, !tbaa !9
  %219 = zext i32 %218 to i64
  %220 = shl i64 %217, %219
  %221 = load i64, ptr %15, align 8, !tbaa !24
  %222 = add i64 %221, %220
  store i64 %222, ptr %15, align 8, !tbaa !24
  %223 = load i32, ptr %16, align 4, !tbaa !9
  %224 = add i32 %223, 8
  store i32 %224, ptr %16, align 4, !tbaa !9
  br label %225

225:                                              ; preds = %202, %199
  %226 = load ptr, ptr %18, align 8, !tbaa !5
  %227 = load i64, ptr %15, align 8, !tbaa !24
  %228 = load i32, ptr %20, align 4, !tbaa !9
  %229 = zext i32 %228 to i64
  %230 = and i64 %227, %229
  %231 = getelementptr inbounds %struct.code, ptr %226, i64 %230
  store ptr %231, ptr %21, align 8, !tbaa !5
  br label %232

232:                                              ; preds = %567, %225
  %233 = load ptr, ptr %21, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.code, ptr %233, i32 0, i32 1
  %235 = load i8, ptr %234, align 1, !tbaa !31
  %236 = zext i8 %235 to i32
  store i32 %236, ptr %22, align 4, !tbaa !9
  %237 = load i32, ptr %22, align 4, !tbaa !9
  %238 = load i64, ptr %15, align 8, !tbaa !24
  %239 = zext i32 %237 to i64
  %240 = lshr i64 %238, %239
  store i64 %240, ptr %15, align 8, !tbaa !24
  %241 = load i32, ptr %22, align 4, !tbaa !9
  %242 = load i32, ptr %16, align 4, !tbaa !9
  %243 = sub i32 %242, %241
  store i32 %243, ptr %16, align 4, !tbaa !9
  %244 = load ptr, ptr %21, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.code, ptr %244, i32 0, i32 0
  %246 = load i8, ptr %245, align 2, !tbaa !34
  %247 = zext i8 %246 to i32
  store i32 %247, ptr %22, align 4, !tbaa !9
  %248 = load i32, ptr %22, align 4, !tbaa !9
  %249 = and i32 %248, 16
  %250 = icmp ne i32 %249, 0
  br i1 %250, label %251, label %563

251:                                              ; preds = %232
  %252 = load ptr, ptr %21, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.code, ptr %252, i32 0, i32 2
  %254 = load i16, ptr %253, align 2, !tbaa !35
  %255 = zext i16 %254 to i32
  store i32 %255, ptr %24, align 4, !tbaa !9
  %256 = load i32, ptr %22, align 4, !tbaa !9
  %257 = and i32 %256, 15
  store i32 %257, ptr %22, align 4, !tbaa !9
  %258 = load i32, ptr %16, align 4, !tbaa !9
  %259 = load i32, ptr %22, align 4, !tbaa !9
  %260 = icmp ult i32 %258, %259
  br i1 %260, label %261, label %289

261:                                              ; preds = %251
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = getelementptr inbounds i8, ptr %262, i32 1
  store ptr %263, ptr %6, align 8, !tbaa !5
  %264 = load i8, ptr %262, align 1, !tbaa !30
  %265 = zext i8 %264 to i64
  %266 = load i32, ptr %16, align 4, !tbaa !9
  %267 = zext i32 %266 to i64
  %268 = shl i64 %265, %267
  %269 = load i64, ptr %15, align 8, !tbaa !24
  %270 = add i64 %269, %268
  store i64 %270, ptr %15, align 8, !tbaa !24
  %271 = load i32, ptr %16, align 4, !tbaa !9
  %272 = add i32 %271, 8
  store i32 %272, ptr %16, align 4, !tbaa !9
  %273 = load i32, ptr %16, align 4, !tbaa !9
  %274 = load i32, ptr %22, align 4, !tbaa !9
  %275 = icmp ult i32 %273, %274
  br i1 %275, label %276, label %288

276:                                              ; preds = %261
  %277 = load ptr, ptr %6, align 8, !tbaa !5
  %278 = getelementptr inbounds i8, ptr %277, i32 1
  store ptr %278, ptr %6, align 8, !tbaa !5
  %279 = load i8, ptr %277, align 1, !tbaa !30
  %280 = zext i8 %279 to i64
  %281 = load i32, ptr %16, align 4, !tbaa !9
  %282 = zext i32 %281 to i64
  %283 = shl i64 %280, %282
  %284 = load i64, ptr %15, align 8, !tbaa !24
  %285 = add i64 %284, %283
  store i64 %285, ptr %15, align 8, !tbaa !24
  %286 = load i32, ptr %16, align 4, !tbaa !9
  %287 = add i32 %286, 8
  store i32 %287, ptr %16, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %276, %261
  br label %289

289:                                              ; preds = %288, %251
  %290 = load i64, ptr %15, align 8, !tbaa !24
  %291 = trunc i64 %290 to i32
  %292 = load i32, ptr %22, align 4, !tbaa !9
  %293 = shl i32 1, %292
  %294 = sub i32 %293, 1
  %295 = and i32 %291, %294
  %296 = load i32, ptr %24, align 4, !tbaa !9
  %297 = add i32 %296, %295
  store i32 %297, ptr %24, align 4, !tbaa !9
  %298 = load i32, ptr %22, align 4, !tbaa !9
  %299 = load i64, ptr %15, align 8, !tbaa !24
  %300 = zext i32 %298 to i64
  %301 = lshr i64 %299, %300
  store i64 %301, ptr %15, align 8, !tbaa !24
  %302 = load i32, ptr %22, align 4, !tbaa !9
  %303 = load i32, ptr %16, align 4, !tbaa !9
  %304 = sub i32 %303, %302
  store i32 %304, ptr %16, align 4, !tbaa !9
  %305 = load ptr, ptr %8, align 8, !tbaa !5
  %306 = load ptr, ptr %9, align 8, !tbaa !5
  %307 = ptrtoint ptr %305 to i64
  %308 = ptrtoint ptr %306 to i64
  %309 = sub i64 %307, %308
  %310 = trunc i64 %309 to i32
  store i32 %310, ptr %22, align 4, !tbaa !9
  %311 = load i32, ptr %24, align 4, !tbaa !9
  %312 = load i32, ptr %22, align 4, !tbaa !9
  %313 = icmp ugt i32 %311, %312
  br i1 %313, label %314, label %479

314:                                              ; preds = %289
  %315 = load i32, ptr %24, align 4, !tbaa !9
  %316 = load i32, ptr %22, align 4, !tbaa !9
  %317 = sub i32 %315, %316
  store i32 %317, ptr %22, align 4, !tbaa !9
  %318 = load i32, ptr %22, align 4, !tbaa !9
  %319 = load i32, ptr %12, align 4, !tbaa !9
  %320 = icmp ugt i32 %318, %319
  br i1 %320, label %321, label %332

321:                                              ; preds = %314
  %322 = load ptr, ptr %5, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.inflate_state, ptr %322, i32 0, i32 32
  %324 = load i32, ptr %323, align 8, !tbaa !36
  %325 = icmp ne i32 %324, 0
  br i1 %325, label %326, label %331

326:                                              ; preds = %321
  %327 = load ptr, ptr %3, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.z_stream_s, ptr %327, i32 0, i32 6
  store ptr @.str, ptr %328, align 8, !tbaa !37
  %329 = load ptr, ptr %5, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.inflate_state, ptr %329, i32 0, i32 1
  store i32 16209, ptr %330, align 8, !tbaa !38
  br label %631

331:                                              ; preds = %321
  br label %332

332:                                              ; preds = %331, %314
  %333 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %333, ptr %25, align 8, !tbaa !5
  %334 = load i32, ptr %13, align 4, !tbaa !9
  %335 = icmp eq i32 %334, 0
  br i1 %335, label %336, label %367

336:                                              ; preds = %332
  %337 = load i32, ptr %11, align 4, !tbaa !9
  %338 = load i32, ptr %22, align 4, !tbaa !9
  %339 = sub i32 %337, %338
  %340 = load ptr, ptr %25, align 8, !tbaa !5
  %341 = zext i32 %339 to i64
  %342 = getelementptr inbounds i8, ptr %340, i64 %341
  store ptr %342, ptr %25, align 8, !tbaa !5
  %343 = load i32, ptr %22, align 4, !tbaa !9
  %344 = load i32, ptr %23, align 4, !tbaa !9
  %345 = icmp ult i32 %343, %344
  br i1 %345, label %346, label %366

346:                                              ; preds = %336
  %347 = load i32, ptr %22, align 4, !tbaa !9
  %348 = load i32, ptr %23, align 4, !tbaa !9
  %349 = sub i32 %348, %347
  store i32 %349, ptr %23, align 4, !tbaa !9
  br label %350

350:                                              ; preds = %356, %346
  %351 = load ptr, ptr %25, align 8, !tbaa !5
  %352 = getelementptr inbounds i8, ptr %351, i32 1
  store ptr %352, ptr %25, align 8, !tbaa !5
  %353 = load i8, ptr %351, align 1, !tbaa !30
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = getelementptr inbounds i8, ptr %354, i32 1
  store ptr %355, ptr %8, align 8, !tbaa !5
  store i8 %353, ptr %354, align 1, !tbaa !30
  br label %356

356:                                              ; preds = %350
  %357 = load i32, ptr %22, align 4, !tbaa !9
  %358 = add i32 %357, -1
  store i32 %358, ptr %22, align 4, !tbaa !9
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %350, label %360, !llvm.loop !39

360:                                              ; preds = %356
  %361 = load ptr, ptr %8, align 8, !tbaa !5
  %362 = load i32, ptr %24, align 4, !tbaa !9
  %363 = zext i32 %362 to i64
  %364 = sub i64 0, %363
  %365 = getelementptr inbounds i8, ptr %361, i64 %364
  store ptr %365, ptr %25, align 8, !tbaa !5
  br label %366

366:                                              ; preds = %360, %336
  br label %460

367:                                              ; preds = %332
  %368 = load i32, ptr %13, align 4, !tbaa !9
  %369 = load i32, ptr %22, align 4, !tbaa !9
  %370 = icmp ult i32 %368, %369
  br i1 %370, label %371, label %428

371:                                              ; preds = %367
  %372 = load i32, ptr %11, align 4, !tbaa !9
  %373 = load i32, ptr %13, align 4, !tbaa !9
  %374 = add i32 %372, %373
  %375 = load i32, ptr %22, align 4, !tbaa !9
  %376 = sub i32 %374, %375
  %377 = load ptr, ptr %25, align 8, !tbaa !5
  %378 = zext i32 %376 to i64
  %379 = getelementptr inbounds i8, ptr %377, i64 %378
  store ptr %379, ptr %25, align 8, !tbaa !5
  %380 = load i32, ptr %13, align 4, !tbaa !9
  %381 = load i32, ptr %22, align 4, !tbaa !9
  %382 = sub i32 %381, %380
  store i32 %382, ptr %22, align 4, !tbaa !9
  %383 = load i32, ptr %22, align 4, !tbaa !9
  %384 = load i32, ptr %23, align 4, !tbaa !9
  %385 = icmp ult i32 %383, %384
  br i1 %385, label %386, label %427

386:                                              ; preds = %371
  %387 = load i32, ptr %22, align 4, !tbaa !9
  %388 = load i32, ptr %23, align 4, !tbaa !9
  %389 = sub i32 %388, %387
  store i32 %389, ptr %23, align 4, !tbaa !9
  br label %390

390:                                              ; preds = %396, %386
  %391 = load ptr, ptr %25, align 8, !tbaa !5
  %392 = getelementptr inbounds i8, ptr %391, i32 1
  store ptr %392, ptr %25, align 8, !tbaa !5
  %393 = load i8, ptr %391, align 1, !tbaa !30
  %394 = load ptr, ptr %8, align 8, !tbaa !5
  %395 = getelementptr inbounds i8, ptr %394, i32 1
  store ptr %395, ptr %8, align 8, !tbaa !5
  store i8 %393, ptr %394, align 1, !tbaa !30
  br label %396

396:                                              ; preds = %390
  %397 = load i32, ptr %22, align 4, !tbaa !9
  %398 = add i32 %397, -1
  store i32 %398, ptr %22, align 4, !tbaa !9
  %399 = icmp ne i32 %398, 0
  br i1 %399, label %390, label %400, !llvm.loop !41

400:                                              ; preds = %396
  %401 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %401, ptr %25, align 8, !tbaa !5
  %402 = load i32, ptr %13, align 4, !tbaa !9
  %403 = load i32, ptr %23, align 4, !tbaa !9
  %404 = icmp ult i32 %402, %403
  br i1 %404, label %405, label %426

405:                                              ; preds = %400
  %406 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %406, ptr %22, align 4, !tbaa !9
  %407 = load i32, ptr %22, align 4, !tbaa !9
  %408 = load i32, ptr %23, align 4, !tbaa !9
  %409 = sub i32 %408, %407
  store i32 %409, ptr %23, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %416, %405
  %411 = load ptr, ptr %25, align 8, !tbaa !5
  %412 = getelementptr inbounds i8, ptr %411, i32 1
  store ptr %412, ptr %25, align 8, !tbaa !5
  %413 = load i8, ptr %411, align 1, !tbaa !30
  %414 = load ptr, ptr %8, align 8, !tbaa !5
  %415 = getelementptr inbounds i8, ptr %414, i32 1
  store ptr %415, ptr %8, align 8, !tbaa !5
  store i8 %413, ptr %414, align 1, !tbaa !30
  br label %416

416:                                              ; preds = %410
  %417 = load i32, ptr %22, align 4, !tbaa !9
  %418 = add i32 %417, -1
  store i32 %418, ptr %22, align 4, !tbaa !9
  %419 = icmp ne i32 %418, 0
  br i1 %419, label %410, label %420, !llvm.loop !42

420:                                              ; preds = %416
  %421 = load ptr, ptr %8, align 8, !tbaa !5
  %422 = load i32, ptr %24, align 4, !tbaa !9
  %423 = zext i32 %422 to i64
  %424 = sub i64 0, %423
  %425 = getelementptr inbounds i8, ptr %421, i64 %424
  store ptr %425, ptr %25, align 8, !tbaa !5
  br label %426

426:                                              ; preds = %420, %400
  br label %427

427:                                              ; preds = %426, %371
  br label %459

428:                                              ; preds = %367
  %429 = load i32, ptr %13, align 4, !tbaa !9
  %430 = load i32, ptr %22, align 4, !tbaa !9
  %431 = sub i32 %429, %430
  %432 = load ptr, ptr %25, align 8, !tbaa !5
  %433 = zext i32 %431 to i64
  %434 = getelementptr inbounds i8, ptr %432, i64 %433
  store ptr %434, ptr %25, align 8, !tbaa !5
  %435 = load i32, ptr %22, align 4, !tbaa !9
  %436 = load i32, ptr %23, align 4, !tbaa !9
  %437 = icmp ult i32 %435, %436
  br i1 %437, label %438, label %458

438:                                              ; preds = %428
  %439 = load i32, ptr %22, align 4, !tbaa !9
  %440 = load i32, ptr %23, align 4, !tbaa !9
  %441 = sub i32 %440, %439
  store i32 %441, ptr %23, align 4, !tbaa !9
  br label %442

442:                                              ; preds = %448, %438
  %443 = load ptr, ptr %25, align 8, !tbaa !5
  %444 = getelementptr inbounds i8, ptr %443, i32 1
  store ptr %444, ptr %25, align 8, !tbaa !5
  %445 = load i8, ptr %443, align 1, !tbaa !30
  %446 = load ptr, ptr %8, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %446, i32 1
  store ptr %447, ptr %8, align 8, !tbaa !5
  store i8 %445, ptr %446, align 1, !tbaa !30
  br label %448

448:                                              ; preds = %442
  %449 = load i32, ptr %22, align 4, !tbaa !9
  %450 = add i32 %449, -1
  store i32 %450, ptr %22, align 4, !tbaa !9
  %451 = icmp ne i32 %450, 0
  br i1 %451, label %442, label %452, !llvm.loop !43

452:                                              ; preds = %448
  %453 = load ptr, ptr %8, align 8, !tbaa !5
  %454 = load i32, ptr %24, align 4, !tbaa !9
  %455 = zext i32 %454 to i64
  %456 = sub i64 0, %455
  %457 = getelementptr inbounds i8, ptr %453, i64 %456
  store ptr %457, ptr %25, align 8, !tbaa !5
  br label %458

458:                                              ; preds = %452, %428
  br label %459

459:                                              ; preds = %458, %427
  br label %460

460:                                              ; preds = %459, %366
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #2
  %461 = load ptr, ptr %8, align 8, !tbaa !5
  %462 = load i32, ptr %23, align 4, !tbaa !9
  %463 = zext i32 %462 to i64
  %464 = getelementptr inbounds i8, ptr %461, i64 %463
  store ptr %464, ptr %26, align 8, !tbaa !5
  br label %465

465:                                              ; preds = %469, %460
  %466 = load ptr, ptr %8, align 8, !tbaa !5
  %467 = load ptr, ptr %26, align 8, !tbaa !5
  %468 = icmp ult ptr %466, %467
  br i1 %468, label %469, label %477

469:                                              ; preds = %465
  %470 = load ptr, ptr %25, align 8, !tbaa !5
  %471 = load i32, ptr %470, align 4, !tbaa !9
  %472 = load ptr, ptr %8, align 8, !tbaa !5
  store i32 %471, ptr %472, align 4, !tbaa !9
  %473 = load ptr, ptr %8, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i64 4
  store ptr %474, ptr %8, align 8, !tbaa !5
  %475 = load ptr, ptr %25, align 8, !tbaa !5
  %476 = getelementptr inbounds i8, ptr %475, i64 4
  store ptr %476, ptr %25, align 8, !tbaa !5
  br label %465, !llvm.loop !44

477:                                              ; preds = %465
  %478 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %478, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #2
  br label %562

479:                                              ; preds = %289
  %480 = load ptr, ptr %8, align 8, !tbaa !5
  %481 = load i32, ptr %24, align 4, !tbaa !9
  %482 = zext i32 %481 to i64
  %483 = sub i64 0, %482
  %484 = getelementptr inbounds i8, ptr %480, i64 %483
  store ptr %484, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #2
  %485 = load ptr, ptr %8, align 8, !tbaa !5
  %486 = load i32, ptr %23, align 4, !tbaa !9
  %487 = zext i32 %486 to i64
  %488 = getelementptr inbounds i8, ptr %485, i64 %487
  store ptr %488, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #2
  %489 = load ptr, ptr %8, align 8, !tbaa !5
  %490 = load ptr, ptr %25, align 8, !tbaa !5
  %491 = ptrtoint ptr %489 to i64
  %492 = ptrtoint ptr %490 to i64
  %493 = sub i64 %491, %492
  %494 = trunc i64 %493 to i32
  store i32 %494, ptr %28, align 4, !tbaa !9
  %495 = load i32, ptr %28, align 4, !tbaa !9
  %496 = icmp sgt i32 %495, 4
  br i1 %496, label %497, label %512

497:                                              ; preds = %479
  br label %498

498:                                              ; preds = %502, %497
  %499 = load ptr, ptr %8, align 8, !tbaa !5
  %500 = load ptr, ptr %27, align 8, !tbaa !5
  %501 = icmp ult ptr %499, %500
  br i1 %501, label %502, label %510

502:                                              ; preds = %498
  %503 = load ptr, ptr %25, align 8, !tbaa !5
  %504 = load i32, ptr %503, align 4, !tbaa !9
  %505 = load ptr, ptr %8, align 8, !tbaa !5
  store i32 %504, ptr %505, align 4, !tbaa !9
  %506 = load ptr, ptr %8, align 8, !tbaa !5
  %507 = getelementptr inbounds i8, ptr %506, i64 4
  store ptr %507, ptr %8, align 8, !tbaa !5
  %508 = load ptr, ptr %25, align 8, !tbaa !5
  %509 = getelementptr inbounds i8, ptr %508, i64 4
  store ptr %509, ptr %25, align 8, !tbaa !5
  br label %498, !llvm.loop !45

510:                                              ; preds = %498
  %511 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %511, ptr %8, align 8, !tbaa !5
  br label %561

512:                                              ; preds = %479
  %513 = load i32, ptr %28, align 4, !tbaa !9
  %514 = icmp eq i32 %513, 1
  br i1 %514, label %518, label %515

515:                                              ; preds = %512
  %516 = load i32, ptr %28, align 4, !tbaa !9
  %517 = icmp eq i32 %516, 4
  br i1 %517, label %518, label %548

518:                                              ; preds = %515, %512
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  %519 = load i32, ptr %28, align 4, !tbaa !9
  %520 = icmp eq i32 %519, 1
  br i1 %520, label %521, label %533

521:                                              ; preds = %518
  %522 = load ptr, ptr %25, align 8, !tbaa !5
  %523 = load i8, ptr %522, align 1, !tbaa !30
  %524 = zext i8 %523 to i32
  store i32 %524, ptr %29, align 4, !tbaa !9
  %525 = load i32, ptr %29, align 4, !tbaa !9
  %526 = load i32, ptr %29, align 4, !tbaa !9
  %527 = shl i32 %526, 8
  %528 = or i32 %525, %527
  store i32 %528, ptr %29, align 4, !tbaa !9
  %529 = load i32, ptr %29, align 4, !tbaa !9
  %530 = load i32, ptr %29, align 4, !tbaa !9
  %531 = shl i32 %530, 16
  %532 = or i32 %529, %531
  store i32 %532, ptr %29, align 4, !tbaa !9
  br label %536

533:                                              ; preds = %518
  %534 = load ptr, ptr %25, align 8, !tbaa !5
  %535 = load i32, ptr %534, align 4, !tbaa !9
  store i32 %535, ptr %29, align 4, !tbaa !9
  br label %536

536:                                              ; preds = %533, %521
  br label %537

537:                                              ; preds = %541, %536
  %538 = load ptr, ptr %8, align 8, !tbaa !5
  %539 = load ptr, ptr %27, align 8, !tbaa !5
  %540 = icmp ult ptr %538, %539
  br i1 %540, label %541, label %546

541:                                              ; preds = %537
  %542 = load i32, ptr %29, align 4, !tbaa !9
  %543 = load ptr, ptr %8, align 8, !tbaa !5
  store i32 %542, ptr %543, align 4, !tbaa !9
  %544 = load ptr, ptr %8, align 8, !tbaa !5
  %545 = getelementptr inbounds i8, ptr %544, i64 4
  store ptr %545, ptr %8, align 8, !tbaa !5
  br label %537, !llvm.loop !46

546:                                              ; preds = %537
  %547 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %547, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  br label %560

548:                                              ; preds = %515
  br label %549

549:                                              ; preds = %553, %548
  %550 = load ptr, ptr %8, align 8, !tbaa !5
  %551 = load ptr, ptr %27, align 8, !tbaa !5
  %552 = icmp ult ptr %550, %551
  br i1 %552, label %553, label %559

553:                                              ; preds = %549
  %554 = load ptr, ptr %25, align 8, !tbaa !5
  %555 = getelementptr inbounds i8, ptr %554, i32 1
  store ptr %555, ptr %25, align 8, !tbaa !5
  %556 = load i8, ptr %554, align 1, !tbaa !30
  %557 = load ptr, ptr %8, align 8, !tbaa !5
  %558 = getelementptr inbounds i8, ptr %557, i32 1
  store ptr %558, ptr %8, align 8, !tbaa !5
  store i8 %556, ptr %557, align 1, !tbaa !30
  br label %549, !llvm.loop !47

559:                                              ; preds = %549
  br label %560

560:                                              ; preds = %559, %546
  br label %561

561:                                              ; preds = %560, %510
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #2
  br label %562

562:                                              ; preds = %561, %477
  br label %587

563:                                              ; preds = %232
  %564 = load i32, ptr %22, align 4, !tbaa !9
  %565 = and i32 %564, 64
  %566 = icmp eq i32 %565, 0
  br i1 %566, label %567, label %582

567:                                              ; preds = %563
  %568 = load ptr, ptr %18, align 8, !tbaa !5
  %569 = load ptr, ptr %21, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.code, ptr %569, i32 0, i32 2
  %571 = load i16, ptr %570, align 2, !tbaa !35
  %572 = zext i16 %571 to i32
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds %struct.code, ptr %568, i64 %573
  %575 = load i64, ptr %15, align 8, !tbaa !24
  %576 = load i32, ptr %22, align 4, !tbaa !9
  %577 = shl i32 1, %576
  %578 = sub i32 %577, 1
  %579 = zext i32 %578 to i64
  %580 = and i64 %575, %579
  %581 = getelementptr inbounds %struct.code, ptr %574, i64 %580
  store ptr %581, ptr %21, align 8, !tbaa !5
  br label %232

582:                                              ; preds = %563
  %583 = load ptr, ptr %3, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.z_stream_s, ptr %583, i32 0, i32 6
  store ptr @.str.1, ptr %584, align 8, !tbaa !37
  %585 = load ptr, ptr %5, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.inflate_state, ptr %585, i32 0, i32 1
  store i32 16209, ptr %586, align 8, !tbaa !38
  br label %631

587:                                              ; preds = %562
  br label %619

588:                                              ; preds = %154
  %589 = load i32, ptr %22, align 4, !tbaa !9
  %590 = and i32 %589, 64
  %591 = icmp eq i32 %590, 0
  br i1 %591, label %592, label %607

592:                                              ; preds = %588
  %593 = load ptr, ptr %17, align 8, !tbaa !5
  %594 = load ptr, ptr %21, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.code, ptr %594, i32 0, i32 2
  %596 = load i16, ptr %595, align 2, !tbaa !35
  %597 = zext i16 %596 to i32
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds %struct.code, ptr %593, i64 %598
  %600 = load i64, ptr %15, align 8, !tbaa !24
  %601 = load i32, ptr %22, align 4, !tbaa !9
  %602 = shl i32 1, %601
  %603 = sub i32 %602, 1
  %604 = zext i32 %603 to i64
  %605 = and i64 %600, %604
  %606 = getelementptr inbounds %struct.code, ptr %599, i64 %605
  store ptr %606, ptr %21, align 8, !tbaa !5
  br label %129

607:                                              ; preds = %588
  %608 = load i32, ptr %22, align 4, !tbaa !9
  %609 = and i32 %608, 32
  %610 = icmp ne i32 %609, 0
  br i1 %610, label %611, label %614

611:                                              ; preds = %607
  %612 = load ptr, ptr %5, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.inflate_state, ptr %612, i32 0, i32 1
  store i32 16191, ptr %613, align 8, !tbaa !38
  br label %631

614:                                              ; preds = %607
  %615 = load ptr, ptr %3, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.z_stream_s, ptr %615, i32 0, i32 6
  store ptr @.str.2, ptr %616, align 8, !tbaa !37
  %617 = load ptr, ptr %5, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.inflate_state, ptr %617, i32 0, i32 1
  store i32 16209, ptr %618, align 8, !tbaa !38
  br label %631

619:                                              ; preds = %587
  br label %620

620:                                              ; preds = %619, %147
  br label %621

621:                                              ; preds = %620
  %622 = load ptr, ptr %6, align 8, !tbaa !5
  %623 = load ptr, ptr %7, align 8, !tbaa !5
  %624 = icmp ult ptr %622, %623
  br i1 %624, label %625, label %629

625:                                              ; preds = %621
  %626 = load ptr, ptr %8, align 8, !tbaa !5
  %627 = load ptr, ptr %10, align 8, !tbaa !5
  %628 = icmp ult ptr %626, %627
  br label %629

629:                                              ; preds = %625, %621
  %630 = phi i1 [ false, %621 ], [ %628, %625 ]
  br i1 %630, label %96, label %631, !llvm.loop !48

631:                                              ; preds = %629, %614, %611, %582, %326
  %632 = load i32, ptr %16, align 4, !tbaa !9
  %633 = lshr i32 %632, 3
  store i32 %633, ptr %23, align 4, !tbaa !9
  %634 = load i32, ptr %23, align 4, !tbaa !9
  %635 = load ptr, ptr %6, align 8, !tbaa !5
  %636 = zext i32 %634 to i64
  %637 = sub i64 0, %636
  %638 = getelementptr inbounds i8, ptr %635, i64 %637
  store ptr %638, ptr %6, align 8, !tbaa !5
  %639 = load i32, ptr %23, align 4, !tbaa !9
  %640 = shl i32 %639, 3
  %641 = load i32, ptr %16, align 4, !tbaa !9
  %642 = sub i32 %641, %640
  store i32 %642, ptr %16, align 4, !tbaa !9
  %643 = load i32, ptr %16, align 4, !tbaa !9
  %644 = shl i32 1, %643
  %645 = sub i32 %644, 1
  %646 = zext i32 %645 to i64
  %647 = load i64, ptr %15, align 8, !tbaa !24
  %648 = and i64 %647, %646
  store i64 %648, ptr %15, align 8, !tbaa !24
  %649 = load ptr, ptr %6, align 8, !tbaa !5
  %650 = load ptr, ptr %3, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.z_stream_s, ptr %650, i32 0, i32 0
  store ptr %649, ptr %651, align 8, !tbaa !14
  %652 = load ptr, ptr %8, align 8, !tbaa !5
  %653 = load ptr, ptr %3, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.z_stream_s, ptr %653, i32 0, i32 3
  store ptr %652, ptr %654, align 8, !tbaa !16
  %655 = load ptr, ptr %6, align 8, !tbaa !5
  %656 = load ptr, ptr %7, align 8, !tbaa !5
  %657 = icmp ult ptr %655, %656
  br i1 %657, label %658, label %665

658:                                              ; preds = %631
  %659 = load ptr, ptr %7, align 8, !tbaa !5
  %660 = load ptr, ptr %6, align 8, !tbaa !5
  %661 = ptrtoint ptr %659 to i64
  %662 = ptrtoint ptr %660 to i64
  %663 = sub i64 %661, %662
  %664 = add nsw i64 5, %663
  br label %672

665:                                              ; preds = %631
  %666 = load ptr, ptr %6, align 8, !tbaa !5
  %667 = load ptr, ptr %7, align 8, !tbaa !5
  %668 = ptrtoint ptr %666 to i64
  %669 = ptrtoint ptr %667 to i64
  %670 = sub i64 %668, %669
  %671 = sub nsw i64 5, %670
  br label %672

672:                                              ; preds = %665, %658
  %673 = phi i64 [ %664, %658 ], [ %671, %665 ]
  %674 = trunc i64 %673 to i32
  %675 = load ptr, ptr %3, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.z_stream_s, ptr %675, i32 0, i32 1
  store i32 %674, ptr %676, align 8, !tbaa !15
  %677 = load ptr, ptr %8, align 8, !tbaa !5
  %678 = load ptr, ptr %10, align 8, !tbaa !5
  %679 = icmp ult ptr %677, %678
  br i1 %679, label %680, label %687

680:                                              ; preds = %672
  %681 = load ptr, ptr %10, align 8, !tbaa !5
  %682 = load ptr, ptr %8, align 8, !tbaa !5
  %683 = ptrtoint ptr %681 to i64
  %684 = ptrtoint ptr %682 to i64
  %685 = sub i64 %683, %684
  %686 = add nsw i64 257, %685
  br label %694

687:                                              ; preds = %672
  %688 = load ptr, ptr %8, align 8, !tbaa !5
  %689 = load ptr, ptr %10, align 8, !tbaa !5
  %690 = ptrtoint ptr %688 to i64
  %691 = ptrtoint ptr %689 to i64
  %692 = sub i64 %690, %691
  %693 = sub nsw i64 257, %692
  br label %694

694:                                              ; preds = %687, %680
  %695 = phi i64 [ %686, %680 ], [ %693, %687 ]
  %696 = trunc i64 %695 to i32
  %697 = load ptr, ptr %3, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.z_stream_s, ptr %697, i32 0, i32 4
  store i32 %696, ptr %698, align 8, !tbaa !17
  %699 = load i64, ptr %15, align 8, !tbaa !24
  %700 = load ptr, ptr %5, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.inflate_state, ptr %700, i32 0, i32 15
  store i64 %699, ptr %701, align 8, !tbaa !23
  %702 = load i32, ptr %16, align 4, !tbaa !9
  %703 = load ptr, ptr %5, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.inflate_state, ptr %703, i32 0, i32 16
  store i32 %702, ptr %704, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #2
  ret void
}

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 56}
!12 = !{!"z_stream_s", !6, i64 0, !10, i64 8, !13, i64 16, !6, i64 24, !10, i64 32, !13, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !13, i64 96, !13, i64 104}
!13 = !{!"long", !7, i64 0}
!14 = !{!12, !6, i64 0}
!15 = !{!12, !10, i64 8}
!16 = !{!12, !6, i64 24}
!17 = !{!12, !10, i64 32}
!18 = !{!19, !10, i64 60}
!19 = !{!"inflate_state", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !13, i64 32, !13, i64 40, !6, i64 48, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !6, i64 72, !13, i64 80, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !6, i64 104, !6, i64 112, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !6, i64 144, !7, i64 152, !7, i64 792, !7, i64 1368, !10, i64 7144, !10, i64 7148, !10, i64 7152}
!20 = !{!19, !10, i64 64}
!21 = !{!19, !10, i64 68}
!22 = !{!19, !6, i64 72}
!23 = !{!19, !13, i64 80}
!24 = !{!13, !13, i64 0}
!25 = !{!19, !10, i64 88}
!26 = !{!19, !6, i64 104}
!27 = !{!19, !6, i64 112}
!28 = !{!19, !10, i64 120}
!29 = !{!19, !10, i64 124}
!30 = !{!7, !7, i64 0}
!31 = !{!32, !7, i64 1}
!32 = !{!"", !7, i64 0, !7, i64 1, !33, i64 2}
!33 = !{!"short", !7, i64 0}
!34 = !{!32, !7, i64 0}
!35 = !{!32, !33, i64 2}
!36 = !{!19, !10, i64 7144}
!37 = !{!12, !6, i64 48}
!38 = !{!19, !10, i64 8}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = distinct !{!41, !40}
!42 = distinct !{!42, !40}
!43 = distinct !{!43, !40}
!44 = distinct !{!44, !40}
!45 = distinct !{!45, !40}
!46 = distinct !{!46, !40}
!47 = distinct !{!47, !40}
!48 = distinct !{!48, !40}


; 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 }

@.str = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @inflate_fast(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 56
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = load ptr, ptr %0, align 8, !tbaa !12
  %6 = getelementptr inbounds i8, ptr %0, i64 8
  %7 = load i32, ptr %6, align 8, !tbaa !13
  %8 = add i32 %7, -5
  %9 = zext i32 %8 to i64
  %10 = getelementptr inbounds i8, ptr %5, i64 %9
  %11 = getelementptr inbounds i8, ptr %0, i64 24
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %13 = ptrtoint ptr %12 to i64
  %14 = getelementptr inbounds i8, ptr %0, i64 32
  %15 = load i32, ptr %14, align 8, !tbaa !15
  %16 = sub i32 %1, %15
  %17 = zext i32 %16 to i64
  %18 = sub nsw i64 0, %17
  %19 = getelementptr inbounds i8, ptr %12, i64 %18
  %20 = add i32 %15, -257
  %21 = zext i32 %20 to i64
  %22 = getelementptr inbounds i8, ptr %12, i64 %21
  %23 = getelementptr inbounds i8, ptr %4, i64 60
  %24 = load i32, ptr %23, align 4, !tbaa !16
  %25 = getelementptr inbounds i8, ptr %4, i64 64
  %26 = load i32, ptr %25, align 8, !tbaa !18
  %27 = getelementptr inbounds i8, ptr %4, i64 68
  %28 = load i32, ptr %27, align 4, !tbaa !19
  %29 = getelementptr inbounds i8, ptr %4, i64 72
  %30 = load ptr, ptr %29, align 8, !tbaa !20
  %31 = ptrtoint ptr %30 to i64
  %32 = getelementptr inbounds i8, ptr %4, i64 80
  %33 = load i64, ptr %32, align 8, !tbaa !21
  %34 = getelementptr inbounds i8, ptr %4, i64 88
  %35 = load i32, ptr %34, align 8, !tbaa !22
  %36 = getelementptr inbounds i8, ptr %4, i64 104
  %37 = load ptr, ptr %36, align 8, !tbaa !23
  %38 = getelementptr inbounds i8, ptr %4, i64 112
  %39 = load ptr, ptr %38, align 8, !tbaa !24
  %40 = getelementptr inbounds i8, ptr %4, i64 120
  %41 = load i32, ptr %40, align 8, !tbaa !25
  %notmask = shl nsw i32 -1, %41
  %42 = xor i32 %notmask, -1
  %43 = getelementptr inbounds i8, ptr %4, i64 124
  %44 = load i32, ptr %43, align 4, !tbaa !26
  %notmask326 = shl nsw i32 -1, %44
  %45 = xor i32 %notmask326, -1
  %46 = zext nneg i32 %42 to i64
  %47 = zext nneg i32 %45 to i64
  %48 = ptrtoint ptr %19 to i64
  %49 = getelementptr inbounds i8, ptr %4, i64 7144
  %50 = icmp eq i32 %28, 0
  %51 = add i32 %28, %24
  %52 = trunc i64 %13 to i32
  %53 = add i32 %15, %52
  %54 = xor i32 %1, -1
  %55 = add i32 %53, %54
  %56 = zext i32 %28 to i64
  %57 = trunc i64 %13 to i32
  %58 = add i32 %15, %57
  %59 = xor i32 %28, -1
  %60 = add i32 %58, %59
  %61 = sub i32 %60, %1
  %62 = trunc i64 %13 to i32
  %63 = add i32 %15, %62
  %64 = xor i32 %1, -1
  %65 = add i32 %63, %64
  %min.iters.check569 = icmp ult i32 %28, 32
  %n.vec572 = and i64 %56, 4294967264
  %.cast573 = trunc nuw i64 %n.vec572 to i32
  %ind.end574 = sub i32 %28, %.cast573
  %ind.end576 = getelementptr i8, ptr %30, i64 %n.vec572
  %cmp.n589 = icmp eq i64 %n.vec572, %56
  br label %66

66:                                               ; preds = %.loopexit, %2
  %.0287 = phi i32 [ %35, %2 ], [ %.8295, %.loopexit ]
  %.0261 = phi i64 [ %33, %2 ], [ %.8269, %.loopexit ]
  %.0253 = phi ptr [ %12, %2 ], [ %.11, %.loopexit ]
  %.0252 = phi ptr [ %5, %2 ], [ %.6, %.loopexit ]
  %.0253689 = ptrtoint ptr %.0253 to i64
  %67 = icmp ult i32 %.0287, 15
  br i1 %67, label %68, label %83

68:                                               ; preds = %66
  %69 = getelementptr inbounds i8, ptr %.0252, i64 1
  %70 = load i8, ptr %.0252, align 1, !tbaa !27
  %71 = zext i8 %70 to i64
  %72 = zext nneg i32 %.0287 to i64
  %73 = shl nuw nsw i64 %71, %72
  %74 = add i64 %73, %.0261
  %75 = add nuw nsw i32 %.0287, 8
  %76 = getelementptr inbounds i8, ptr %.0252, i64 2
  %77 = load i8, ptr %69, align 1, !tbaa !27
  %78 = zext i8 %77 to i64
  %79 = zext nneg i32 %75 to i64
  %80 = shl nuw nsw i64 %78, %79
  %81 = add i64 %74, %80
  %82 = or disjoint i32 %.0287, 16
  br label %83

83:                                               ; preds = %68, %66
  %.1288 = phi i32 [ %82, %68 ], [ %.0287, %66 ]
  %.1262 = phi i64 [ %81, %68 ], [ %.0261, %66 ]
  %.1 = phi ptr [ %76, %68 ], [ %.0252, %66 ]
  %84 = and i64 %.1262, %46
  %85 = getelementptr inbounds %struct.code, ptr %37, i64 %84
  %86 = getelementptr inbounds i8, ptr %85, i64 1
  %87 = load i8, ptr %86, align 1, !tbaa !28
  %88 = zext i8 %87 to i32
  %89 = zext nneg i8 %87 to i64
  %90 = lshr i64 %.1262, %89
  %91 = sub i32 %.1288, %88
  %92 = load i8, ptr %85, align 2, !tbaa !31
  %93 = icmp eq i8 %92, 0
  br i1 %93, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %469, %83
  %.0285.lcssa = phi ptr [ %85, %83 ], [ %477, %469 ]
  %.lcssa352 = phi i64 [ %90, %83 ], [ %482, %469 ]
  %.lcssa349 = phi i32 [ %91, %83 ], [ %483, %469 ]
  %94 = getelementptr inbounds i8, ptr %.0285.lcssa, i64 2
  %95 = load i16, ptr %94, align 2, !tbaa !32
  %96 = trunc i16 %95 to i8
  %97 = getelementptr inbounds i8, ptr %.0253, i64 1
  store i8 %96, ptr %.0253, align 1, !tbaa !27
  br label %.loopexit

.lr.ph:                                           ; preds = %83, %469
  %.in = phi i8 [ %484, %469 ], [ %92, %83 ]
  %98 = phi i32 [ %483, %469 ], [ %91, %83 ]
  %99 = phi i64 [ %482, %469 ], [ %90, %83 ]
  %.0285376 = phi ptr [ %477, %469 ], [ %85, %83 ]
  %100 = zext i8 %.in to i32
  %101 = and i32 %100, 16
  %.not = icmp eq i32 %101, 0
  br i1 %.not, label %466, label %102

102:                                              ; preds = %.lr.ph
  %103 = getelementptr inbounds i8, ptr %.0285376, i64 2
  %104 = load i16, ptr %103, align 2, !tbaa !32
  %105 = zext i16 %104 to i32
  %106 = and i32 %100, 15
  %.not329 = icmp eq i32 %106, 0
  br i1 %.not329, label %125, label %107

107:                                              ; preds = %102
  %108 = icmp ult i32 %98, %106
  br i1 %108, label %109, label %117

109:                                              ; preds = %107
  %110 = getelementptr inbounds i8, ptr %.1, i64 1
  %111 = load i8, ptr %.1, align 1, !tbaa !27
  %112 = zext i8 %111 to i64
  %113 = zext nneg i32 %98 to i64
  %114 = shl nuw nsw i64 %112, %113
  %115 = add i64 %114, %99
  %116 = add nuw nsw i32 %98, 8
  br label %117

117:                                              ; preds = %109, %107
  %.3290 = phi i32 [ %116, %109 ], [ %98, %107 ]
  %.3264 = phi i64 [ %115, %109 ], [ %99, %107 ]
  %.2 = phi ptr [ %110, %109 ], [ %.1, %107 ]
  %118 = trunc i64 %.3264 to i32
  %notmask330 = shl nsw i32 -1, %106
  %119 = xor i32 %notmask330, -1
  %120 = and i32 %118, %119
  %121 = add nuw nsw i32 %120, %105
  %122 = zext nneg i32 %106 to i64
  %123 = lshr i64 %.3264, %122
  %124 = sub i32 %.3290, %106
  br label %125

125:                                              ; preds = %117, %102
  %.4291 = phi i32 [ %124, %117 ], [ %98, %102 ]
  %.0279 = phi i32 [ %121, %117 ], [ %105, %102 ]
  %.4265 = phi i64 [ %123, %117 ], [ %99, %102 ]
  %.3 = phi ptr [ %.2, %117 ], [ %.1, %102 ]
  %126 = icmp ult i32 %.4291, 15
  br i1 %126, label %127, label %142

127:                                              ; preds = %125
  %128 = getelementptr inbounds i8, ptr %.3, i64 1
  %129 = load i8, ptr %.3, align 1, !tbaa !27
  %130 = zext i8 %129 to i64
  %131 = zext nneg i32 %.4291 to i64
  %132 = shl nuw nsw i64 %130, %131
  %133 = add i64 %132, %.4265
  %134 = add nuw nsw i32 %.4291, 8
  %135 = getelementptr inbounds i8, ptr %.3, i64 2
  %136 = load i8, ptr %128, align 1, !tbaa !27
  %137 = zext i8 %136 to i64
  %138 = zext nneg i32 %134 to i64
  %139 = shl nuw nsw i64 %137, %138
  %140 = add i64 %133, %139
  %141 = or disjoint i32 %.4291, 16
  br label %142

142:                                              ; preds = %127, %125
  %.5292 = phi i32 [ %141, %127 ], [ %.4291, %125 ]
  %.5266 = phi i64 [ %140, %127 ], [ %.4265, %125 ]
  %.4 = phi ptr [ %135, %127 ], [ %.3, %125 ]
  %143 = and i64 %.5266, %47
  %144 = getelementptr inbounds %struct.code, ptr %39, i64 %143
  %145 = getelementptr inbounds i8, ptr %144, i64 1
  %146 = load i8, ptr %145, align 1, !tbaa !28
  %147 = zext i8 %146 to i32
  %148 = zext nneg i8 %146 to i64
  %149 = lshr i64 %.5266, %148
  %150 = sub i32 %.5292, %147
  %151 = load i8, ptr %144, align 2, !tbaa !31
  %152 = zext i8 %151 to i32
  %153 = and i32 %152, 16
  %.not331379 = icmp eq i32 %153, 0
  br i1 %.not331379, label %.lr.ph382, label %._crit_edge383

._crit_edge383:                                   ; preds = %448, %142
  %.1286.lcssa = phi ptr [ %144, %142 ], [ %456, %448 ]
  %.lcssa360 = phi i64 [ %149, %142 ], [ %461, %448 ]
  %.lcssa358 = phi i32 [ %150, %142 ], [ %462, %448 ]
  %.lcssa = phi i32 [ %152, %142 ], [ %464, %448 ]
  %154 = getelementptr inbounds i8, ptr %.1286.lcssa, i64 2
  %155 = load i16, ptr %154, align 2, !tbaa !32
  %156 = zext i16 %155 to i32
  %157 = and i32 %.lcssa, 15
  %158 = icmp ult i32 %.lcssa358, %157
  br i1 %158, label %159, label %176

159:                                              ; preds = %._crit_edge383
  %160 = getelementptr inbounds i8, ptr %.4, i64 1
  %161 = load i8, ptr %.4, align 1, !tbaa !27
  %162 = zext i8 %161 to i64
  %163 = zext nneg i32 %.lcssa358 to i64
  %164 = shl nuw nsw i64 %162, %163
  %165 = add i64 %164, %.lcssa360
  %166 = add nuw nsw i32 %.lcssa358, 8
  %167 = icmp ult i32 %166, %157
  br i1 %167, label %168, label %176

168:                                              ; preds = %159
  %169 = getelementptr inbounds i8, ptr %.4, i64 2
  %170 = load i8, ptr %160, align 1, !tbaa !27
  %171 = zext i8 %170 to i64
  %172 = zext nneg i32 %166 to i64
  %173 = shl nuw nsw i64 %171, %172
  %174 = add i64 %173, %165
  %175 = add nuw nsw i32 %.lcssa358, 16
  br label %176

176:                                              ; preds = %159, %168, %._crit_edge383
  %.7294 = phi i32 [ %175, %168 ], [ %166, %159 ], [ %.lcssa358, %._crit_edge383 ]
  %.7268 = phi i64 [ %174, %168 ], [ %165, %159 ], [ %.lcssa360, %._crit_edge383 ]
  %.5 = phi ptr [ %169, %168 ], [ %160, %159 ], [ %.4, %._crit_edge383 ]
  %177 = trunc i64 %.7268 to i32
  %notmask333 = shl nsw i32 -1, %157
  %178 = xor i32 %notmask333, -1
  %179 = and i32 %177, %178
  %180 = add nuw nsw i32 %179, %156
  %181 = zext nneg i32 %157 to i64
  %182 = lshr i64 %.7268, %181
  %183 = sub i32 %.7294, %157
  %184 = ptrtoint ptr %.0253 to i64
  %185 = sub i64 %184, %48
  %186 = trunc i64 %185 to i32
  %187 = icmp ugt i32 %180, %186
  br i1 %187, label %188, label %395

188:                                              ; preds = %176
  %189 = sub nsw i32 %180, %186
  %190 = icmp ugt i32 %189, %26
  br i1 %190, label %191, label %193

191:                                              ; preds = %188
  %192 = load i32, ptr %49, align 8, !tbaa !33
  %.not334 = icmp eq i32 %192, 0
  br i1 %.not334, label %193, label %.loopexit346.sink.split.sink.split

193:                                              ; preds = %191, %188
  br i1 %50, label %194, label %245

194:                                              ; preds = %193
  %195 = sub i32 %24, %189
  %196 = zext i32 %195 to i64
  %197 = getelementptr i8, ptr %30, i64 %196
  %198 = icmp ult i32 %189, %.0279
  br i1 %198, label %.preheader486, label %376

.preheader486:                                    ; preds = %194
  %199 = add i32 %55, %179
  %200 = add i32 %199, %156
  %201 = trunc i64 %184 to i32
  %202 = sub i32 %200, %201
  %203 = zext i32 %202 to i64
  %204 = add nuw nsw i64 %203, 1
  %min.iters.check545 = icmp ult i32 %202, 31
  br i1 %min.iters.check545, label %scalar.ph544.preheader, label %vector.memcheck541

vector.memcheck541:                               ; preds = %.preheader486
  %205 = add i64 %31, %196
  %206 = sub i64 %184, %205
  %diff.check542 = icmp ult i64 %206, 32
  br i1 %diff.check542, label %scalar.ph544.preheader, label %vector.ph546

vector.ph546:                                     ; preds = %vector.memcheck541
  %n.vec548 = and i64 %204, 8589934560
  %.cast = trunc i64 %n.vec548 to i32
  %ind.end549 = sub i32 %189, %.cast
  %ind.end551 = getelementptr i8, ptr %197, i64 %n.vec548
  %ind.end553 = getelementptr i8, ptr %.0253, i64 %n.vec548
  br label %vector.body555

vector.body555:                                   ; preds = %vector.body555, %vector.ph546
  %index556 = phi i64 [ 0, %vector.ph546 ], [ %index.next563, %vector.body555 ]
  %next.gep557 = getelementptr i8, ptr %197, i64 %index556
  %next.gep559 = getelementptr i8, ptr %.0253, i64 %index556
  %207 = getelementptr i8, ptr %next.gep557, i64 16
  %wide.load561 = load <16 x i8>, ptr %next.gep557, align 1, !tbaa !27
  %wide.load562 = load <16 x i8>, ptr %207, align 1, !tbaa !27
  %208 = getelementptr i8, ptr %next.gep559, i64 16
  store <16 x i8> %wide.load561, ptr %next.gep559, align 1, !tbaa !27
  store <16 x i8> %wide.load562, ptr %208, align 1, !tbaa !27
  %index.next563 = add nuw i64 %index556, 32
  %209 = icmp eq i64 %index.next563, %n.vec548
  br i1 %209, label %middle.block543, label %vector.body555, !llvm.loop !34

middle.block543:                                  ; preds = %vector.body555
  %cmp.n564 = icmp eq i64 %204, %n.vec548
  br i1 %cmp.n564, label %.loopexit706, label %scalar.ph544.preheader

scalar.ph544.preheader:                           ; preds = %middle.block543, %vector.memcheck541, %.preheader486
  %.0281.ph = phi i32 [ %189, %vector.memcheck541 ], [ %189, %.preheader486 ], [ %ind.end549, %middle.block543 ]
  %.0271.ph = phi ptr [ %197, %vector.memcheck541 ], [ %197, %.preheader486 ], [ %ind.end551, %middle.block543 ]
  %.1254.ph = phi ptr [ %.0253, %vector.memcheck541 ], [ %.0253, %.preheader486 ], [ %ind.end553, %middle.block543 ]
  %210 = add i32 %.0281.ph, -1
  %xtraiter763 = and i32 %.0281.ph, 7
  %lcmp.mod764.not = icmp eq i32 %xtraiter763, 0
  br i1 %lcmp.mod764.not, label %scalar.ph544.prol.loopexit, label %scalar.ph544.prol

scalar.ph544.prol:                                ; preds = %scalar.ph544.preheader, %scalar.ph544.prol
  %.0281.prol = phi i32 [ %214, %scalar.ph544.prol ], [ %.0281.ph, %scalar.ph544.preheader ]
  %.0271.prol = phi ptr [ %211, %scalar.ph544.prol ], [ %.0271.ph, %scalar.ph544.preheader ]
  %.1254.prol = phi ptr [ %213, %scalar.ph544.prol ], [ %.1254.ph, %scalar.ph544.preheader ]
  %prol.iter765 = phi i32 [ %prol.iter765.next, %scalar.ph544.prol ], [ 0, %scalar.ph544.preheader ]
  %211 = getelementptr inbounds i8, ptr %.0271.prol, i64 1
  %212 = load i8, ptr %.0271.prol, align 1, !tbaa !27
  %213 = getelementptr inbounds i8, ptr %.1254.prol, i64 1
  store i8 %212, ptr %.1254.prol, align 1, !tbaa !27
  %214 = add i32 %.0281.prol, -1
  %prol.iter765.next = add i32 %prol.iter765, 1
  %prol.iter765.cmp.not = icmp eq i32 %prol.iter765.next, %xtraiter763
  br i1 %prol.iter765.cmp.not, label %scalar.ph544.prol.loopexit, label %scalar.ph544.prol, !llvm.loop !38

scalar.ph544.prol.loopexit:                       ; preds = %scalar.ph544.prol, %scalar.ph544.preheader
  %.lcssa745.unr = phi ptr [ poison, %scalar.ph544.preheader ], [ %213, %scalar.ph544.prol ]
  %.0281.unr = phi i32 [ %.0281.ph, %scalar.ph544.preheader ], [ %214, %scalar.ph544.prol ]
  %.0271.unr = phi ptr [ %.0271.ph, %scalar.ph544.preheader ], [ %211, %scalar.ph544.prol ]
  %.1254.unr = phi ptr [ %.1254.ph, %scalar.ph544.preheader ], [ %213, %scalar.ph544.prol ]
  %215 = icmp ult i32 %210, 7
  br i1 %215, label %.loopexit706, label %scalar.ph544

scalar.ph544:                                     ; preds = %scalar.ph544.prol.loopexit, %scalar.ph544
  %.0281 = phi i32 [ %240, %scalar.ph544 ], [ %.0281.unr, %scalar.ph544.prol.loopexit ]
  %.0271 = phi ptr [ %237, %scalar.ph544 ], [ %.0271.unr, %scalar.ph544.prol.loopexit ]
  %.1254 = phi ptr [ %239, %scalar.ph544 ], [ %.1254.unr, %scalar.ph544.prol.loopexit ]
  %216 = getelementptr inbounds i8, ptr %.0271, i64 1
  %217 = load i8, ptr %.0271, align 1, !tbaa !27
  %218 = getelementptr inbounds i8, ptr %.1254, i64 1
  store i8 %217, ptr %.1254, align 1, !tbaa !27
  %219 = getelementptr inbounds i8, ptr %.0271, i64 2
  %220 = load i8, ptr %216, align 1, !tbaa !27
  %221 = getelementptr inbounds i8, ptr %.1254, i64 2
  store i8 %220, ptr %218, align 1, !tbaa !27
  %222 = getelementptr inbounds i8, ptr %.0271, i64 3
  %223 = load i8, ptr %219, align 1, !tbaa !27
  %224 = getelementptr inbounds i8, ptr %.1254, i64 3
  store i8 %223, ptr %221, align 1, !tbaa !27
  %225 = getelementptr inbounds i8, ptr %.0271, i64 4
  %226 = load i8, ptr %222, align 1, !tbaa !27
  %227 = getelementptr inbounds i8, ptr %.1254, i64 4
  store i8 %226, ptr %224, align 1, !tbaa !27
  %228 = getelementptr inbounds i8, ptr %.0271, i64 5
  %229 = load i8, ptr %225, align 1, !tbaa !27
  %230 = getelementptr inbounds i8, ptr %.1254, i64 5
  store i8 %229, ptr %227, align 1, !tbaa !27
  %231 = getelementptr inbounds i8, ptr %.0271, i64 6
  %232 = load i8, ptr %228, align 1, !tbaa !27
  %233 = getelementptr inbounds i8, ptr %.1254, i64 6
  store i8 %232, ptr %230, align 1, !tbaa !27
  %234 = getelementptr inbounds i8, ptr %.0271, i64 7
  %235 = load i8, ptr %231, align 1, !tbaa !27
  %236 = getelementptr inbounds i8, ptr %.1254, i64 7
  store i8 %235, ptr %233, align 1, !tbaa !27
  %237 = getelementptr inbounds i8, ptr %.0271, i64 8
  %238 = load i8, ptr %234, align 1, !tbaa !27
  %239 = getelementptr inbounds i8, ptr %.1254, i64 8
  store i8 %238, ptr %236, align 1, !tbaa !27
  %240 = add i32 %.0281, -8
  %.not338.7 = icmp eq i32 %240, 0
  br i1 %.not338.7, label %.loopexit706, label %scalar.ph544, !llvm.loop !40

.loopexit706:                                     ; preds = %scalar.ph544.prol.loopexit, %scalar.ph544, %middle.block543
  %.lcssa520 = phi ptr [ %ind.end553, %middle.block543 ], [ %.lcssa745.unr, %scalar.ph544.prol.loopexit ], [ %239, %scalar.ph544 ]
  %241 = sub nsw i32 %.0279, %189
  %242 = zext nneg i32 %180 to i64
  %243 = sub nsw i64 0, %242
  %244 = getelementptr inbounds i8, ptr %.lcssa520, i64 %243
  br label %376

245:                                              ; preds = %193
  %246 = icmp ult i32 %28, %189
  br i1 %246, label %247, label %325

247:                                              ; preds = %245
  %248 = sub i32 %51, %189
  %249 = zext i32 %248 to i64
  %250 = getelementptr i8, ptr %30, i64 %249
  %251 = sub i32 %189, %28
  %252 = icmp ult i32 %251, %.0279
  br i1 %252, label %.preheader488, label %376

.preheader488:                                    ; preds = %247
  %253 = add i32 %61, %179
  %254 = add i32 %253, %156
  %255 = trunc i64 %184 to i32
  %256 = sub i32 %254, %255
  %257 = zext i32 %256 to i64
  %258 = add nuw nsw i64 %257, 1
  %min.iters.check594 = icmp ult i32 %256, 31
  br i1 %min.iters.check594, label %scalar.ph593.preheader, label %vector.memcheck590

vector.memcheck590:                               ; preds = %.preheader488
  %259 = add i64 %31, %249
  %260 = sub i64 %184, %259
  %diff.check591 = icmp ult i64 %260, 32
  br i1 %diff.check591, label %scalar.ph593.preheader, label %vector.ph595

vector.ph595:                                     ; preds = %vector.memcheck590
  %n.vec597 = and i64 %258, 8589934560
  %.cast599 = trunc i64 %n.vec597 to i32
  %ind.end600 = sub i32 %251, %.cast599
  %ind.end602 = getelementptr i8, ptr %250, i64 %n.vec597
  %ind.end604 = getelementptr i8, ptr %.0253, i64 %n.vec597
  br label %vector.body606

vector.body606:                                   ; preds = %vector.body606, %vector.ph595
  %index607 = phi i64 [ 0, %vector.ph595 ], [ %index.next614, %vector.body606 ]
  %next.gep608 = getelementptr i8, ptr %250, i64 %index607
  %next.gep610 = getelementptr i8, ptr %.0253, i64 %index607
  %261 = getelementptr i8, ptr %next.gep608, i64 16
  %wide.load612 = load <16 x i8>, ptr %next.gep608, align 1, !tbaa !27
  %wide.load613 = load <16 x i8>, ptr %261, align 1, !tbaa !27
  %262 = getelementptr i8, ptr %next.gep610, i64 16
  store <16 x i8> %wide.load612, ptr %next.gep610, align 1, !tbaa !27
  store <16 x i8> %wide.load613, ptr %262, align 1, !tbaa !27
  %index.next614 = add nuw i64 %index607, 32
  %263 = icmp eq i64 %index.next614, %n.vec597
  br i1 %263, label %middle.block592, label %vector.body606, !llvm.loop !41

middle.block592:                                  ; preds = %vector.body606
  %cmp.n615 = icmp eq i64 %258, %n.vec597
  %ind.escape = add nsw i64 %n.vec597, -1
  br i1 %cmp.n615, label %.loopexit708, label %scalar.ph593.preheader

scalar.ph593.preheader:                           ; preds = %middle.block592, %vector.memcheck590, %.preheader488
  %indvar.ph = phi i64 [ 0, %vector.memcheck590 ], [ 0, %.preheader488 ], [ %n.vec597, %middle.block592 ]
  %.1282.ph = phi i32 [ %251, %vector.memcheck590 ], [ %251, %.preheader488 ], [ %ind.end600, %middle.block592 ]
  %.1272.ph = phi ptr [ %250, %vector.memcheck590 ], [ %250, %.preheader488 ], [ %ind.end602, %middle.block592 ]
  %.2255.ph = phi ptr [ %.0253, %vector.memcheck590 ], [ %.0253, %.preheader488 ], [ %ind.end604, %middle.block592 ]
  %264 = add i32 %.1282.ph, -1
  %xtraiter757 = and i32 %.1282.ph, 3
  %lcmp.mod758.not = icmp eq i32 %xtraiter757, 0
  br i1 %lcmp.mod758.not, label %scalar.ph593.prol.loopexit, label %scalar.ph593.prol

scalar.ph593.prol:                                ; preds = %scalar.ph593.preheader, %scalar.ph593.prol
  %indvar.prol = phi i64 [ %indvar.next.prol, %scalar.ph593.prol ], [ %indvar.ph, %scalar.ph593.preheader ]
  %.1282.prol = phi i32 [ %268, %scalar.ph593.prol ], [ %.1282.ph, %scalar.ph593.preheader ]
  %.1272.prol = phi ptr [ %265, %scalar.ph593.prol ], [ %.1272.ph, %scalar.ph593.preheader ]
  %.2255.prol = phi ptr [ %267, %scalar.ph593.prol ], [ %.2255.ph, %scalar.ph593.preheader ]
  %prol.iter759 = phi i32 [ %prol.iter759.next, %scalar.ph593.prol ], [ 0, %scalar.ph593.preheader ]
  %265 = getelementptr inbounds i8, ptr %.1272.prol, i64 1
  %266 = load i8, ptr %.1272.prol, align 1, !tbaa !27
  %267 = getelementptr i8, ptr %.2255.prol, i64 1
  store i8 %266, ptr %.2255.prol, align 1, !tbaa !27
  %268 = add i32 %.1282.prol, -1
  %indvar.next.prol = add i64 %indvar.prol, 1
  %prol.iter759.next = add i32 %prol.iter759, 1
  %prol.iter759.cmp.not = icmp eq i32 %prol.iter759.next, %xtraiter757
  br i1 %prol.iter759.cmp.not, label %scalar.ph593.prol.loopexit, label %scalar.ph593.prol, !llvm.loop !42

scalar.ph593.prol.loopexit:                       ; preds = %scalar.ph593.prol, %scalar.ph593.preheader
  %indvar.lcssa743.unr = phi i64 [ poison, %scalar.ph593.preheader ], [ %indvar.prol, %scalar.ph593.prol ]
  %.lcssa742.unr = phi ptr [ poison, %scalar.ph593.preheader ], [ %267, %scalar.ph593.prol ]
  %indvar.unr = phi i64 [ %indvar.ph, %scalar.ph593.preheader ], [ %indvar.next.prol, %scalar.ph593.prol ]
  %.1282.unr = phi i32 [ %.1282.ph, %scalar.ph593.preheader ], [ %268, %scalar.ph593.prol ]
  %.1272.unr = phi ptr [ %.1272.ph, %scalar.ph593.preheader ], [ %265, %scalar.ph593.prol ]
  %.2255.unr = phi ptr [ %.2255.ph, %scalar.ph593.preheader ], [ %267, %scalar.ph593.prol ]
  %269 = icmp ult i32 %264, 3
  br i1 %269, label %.loopexit708, label %scalar.ph593

scalar.ph593:                                     ; preds = %scalar.ph593.prol.loopexit, %scalar.ph593
  %indvar = phi i64 [ %indvar.next.3, %scalar.ph593 ], [ %indvar.unr, %scalar.ph593.prol.loopexit ]
  %.1282 = phi i32 [ %282, %scalar.ph593 ], [ %.1282.unr, %scalar.ph593.prol.loopexit ]
  %.1272 = phi ptr [ %279, %scalar.ph593 ], [ %.1272.unr, %scalar.ph593.prol.loopexit ]
  %.2255 = phi ptr [ %281, %scalar.ph593 ], [ %.2255.unr, %scalar.ph593.prol.loopexit ]
  %270 = getelementptr inbounds i8, ptr %.1272, i64 1
  %271 = load i8, ptr %.1272, align 1, !tbaa !27
  %272 = getelementptr i8, ptr %.2255, i64 1
  store i8 %271, ptr %.2255, align 1, !tbaa !27
  %273 = getelementptr inbounds i8, ptr %.1272, i64 2
  %274 = load i8, ptr %270, align 1, !tbaa !27
  %275 = getelementptr i8, ptr %.2255, i64 2
  store i8 %274, ptr %272, align 1, !tbaa !27
  %276 = getelementptr inbounds i8, ptr %.1272, i64 3
  %277 = load i8, ptr %273, align 1, !tbaa !27
  %278 = getelementptr i8, ptr %.2255, i64 3
  store i8 %277, ptr %275, align 1, !tbaa !27
  %279 = getelementptr inbounds i8, ptr %.1272, i64 4
  %280 = load i8, ptr %276, align 1, !tbaa !27
  %281 = getelementptr i8, ptr %.2255, i64 4
  store i8 %280, ptr %278, align 1, !tbaa !27
  %282 = add i32 %.1282, -4
  %.not336.3 = icmp eq i32 %282, 0
  %indvar.next.3 = add i64 %indvar, 4
  br i1 %.not336.3, label %.loopexit708.loopexit.unr-lcssa, label %scalar.ph593, !llvm.loop !43

.loopexit708.loopexit.unr-lcssa:                  ; preds = %scalar.ph593
  %indvar.next.2 = add i64 %indvar, 3
  br label %.loopexit708

.loopexit708:                                     ; preds = %.loopexit708.loopexit.unr-lcssa, %scalar.ph593.prol.loopexit, %middle.block592
  %indvar.lcssa = phi i64 [ %ind.escape, %middle.block592 ], [ %indvar.lcssa743.unr, %scalar.ph593.prol.loopexit ], [ %indvar.next.2, %.loopexit708.loopexit.unr-lcssa ]
  %.lcssa518 = phi ptr [ %ind.end604, %middle.block592 ], [ %.lcssa742.unr, %scalar.ph593.prol.loopexit ], [ %281, %.loopexit708.loopexit.unr-lcssa ]
  %283 = sub nsw i32 %.0279, %251
  %284 = icmp ult i32 %28, %283
  br i1 %284, label %.preheader487, label %376

.preheader487:                                    ; preds = %.loopexit708
  br i1 %min.iters.check569, label %scalar.ph568.preheader, label %vector.memcheck565

vector.memcheck565:                               ; preds = %.preheader487
  %reass.sub = sub i64 %184, %31
  %285 = add i64 %reass.sub, 1
  %286 = add i64 %indvar.lcssa, %285
  %diff.check566 = icmp ult i64 %286, 32
  br i1 %diff.check566, label %scalar.ph568.preheader, label %vector.ph570

vector.ph570:                                     ; preds = %vector.memcheck565
  %ind.end578 = getelementptr i8, ptr %.lcssa518, i64 %n.vec572
  br label %vector.body580

vector.body580:                                   ; preds = %vector.body580, %vector.ph570
  %index581 = phi i64 [ 0, %vector.ph570 ], [ %index.next588, %vector.body580 ]
  %next.gep582 = getelementptr i8, ptr %30, i64 %index581
  %next.gep584 = getelementptr i8, ptr %.lcssa518, i64 %index581
  %287 = getelementptr i8, ptr %next.gep582, i64 16
  %wide.load586 = load <16 x i8>, ptr %next.gep582, align 1, !tbaa !27
  %wide.load587 = load <16 x i8>, ptr %287, align 1, !tbaa !27
  %288 = getelementptr i8, ptr %next.gep584, i64 16
  store <16 x i8> %wide.load586, ptr %next.gep584, align 1, !tbaa !27
  store <16 x i8> %wide.load587, ptr %288, align 1, !tbaa !27
  %index.next588 = add nuw i64 %index581, 32
  %289 = icmp eq i64 %index.next588, %n.vec572
  br i1 %289, label %middle.block567, label %vector.body580, !llvm.loop !44

middle.block567:                                  ; preds = %vector.body580
  br i1 %cmp.n589, label %.loopexit707, label %scalar.ph568.preheader

scalar.ph568.preheader:                           ; preds = %middle.block567, %vector.memcheck565, %.preheader487
  %.2283.ph = phi i32 [ %28, %vector.memcheck565 ], [ %28, %.preheader487 ], [ %ind.end574, %middle.block567 ]
  %.2273.ph = phi ptr [ %30, %vector.memcheck565 ], [ %30, %.preheader487 ], [ %ind.end576, %middle.block567 ]
  %.3256.ph = phi ptr [ %.lcssa518, %vector.memcheck565 ], [ %.lcssa518, %.preheader487 ], [ %ind.end578, %middle.block567 ]
  %290 = add i32 %.2283.ph, -1
  %xtraiter760 = and i32 %.2283.ph, 7
  %lcmp.mod761.not = icmp eq i32 %xtraiter760, 0
  br i1 %lcmp.mod761.not, label %scalar.ph568.prol.loopexit, label %scalar.ph568.prol

scalar.ph568.prol:                                ; preds = %scalar.ph568.preheader, %scalar.ph568.prol
  %.2283.prol = phi i32 [ %294, %scalar.ph568.prol ], [ %.2283.ph, %scalar.ph568.preheader ]
  %.2273.prol = phi ptr [ %291, %scalar.ph568.prol ], [ %.2273.ph, %scalar.ph568.preheader ]
  %.3256.prol = phi ptr [ %293, %scalar.ph568.prol ], [ %.3256.ph, %scalar.ph568.preheader ]
  %prol.iter762 = phi i32 [ %prol.iter762.next, %scalar.ph568.prol ], [ 0, %scalar.ph568.preheader ]
  %291 = getelementptr inbounds i8, ptr %.2273.prol, i64 1
  %292 = load i8, ptr %.2273.prol, align 1, !tbaa !27
  %293 = getelementptr inbounds i8, ptr %.3256.prol, i64 1
  store i8 %292, ptr %.3256.prol, align 1, !tbaa !27
  %294 = add i32 %.2283.prol, -1
  %prol.iter762.next = add i32 %prol.iter762, 1
  %prol.iter762.cmp.not = icmp eq i32 %prol.iter762.next, %xtraiter760
  br i1 %prol.iter762.cmp.not, label %scalar.ph568.prol.loopexit, label %scalar.ph568.prol, !llvm.loop !45

scalar.ph568.prol.loopexit:                       ; preds = %scalar.ph568.prol, %scalar.ph568.preheader
  %.lcssa744.unr = phi ptr [ poison, %scalar.ph568.preheader ], [ %293, %scalar.ph568.prol ]
  %.2283.unr = phi i32 [ %.2283.ph, %scalar.ph568.preheader ], [ %294, %scalar.ph568.prol ]
  %.2273.unr = phi ptr [ %.2273.ph, %scalar.ph568.preheader ], [ %291, %scalar.ph568.prol ]
  %.3256.unr = phi ptr [ %.3256.ph, %scalar.ph568.preheader ], [ %293, %scalar.ph568.prol ]
  %295 = icmp ult i32 %290, 7
  br i1 %295, label %.loopexit707, label %scalar.ph568

scalar.ph568:                                     ; preds = %scalar.ph568.prol.loopexit, %scalar.ph568
  %.2283 = phi i32 [ %320, %scalar.ph568 ], [ %.2283.unr, %scalar.ph568.prol.loopexit ]
  %.2273 = phi ptr [ %317, %scalar.ph568 ], [ %.2273.unr, %scalar.ph568.prol.loopexit ]
  %.3256 = phi ptr [ %319, %scalar.ph568 ], [ %.3256.unr, %scalar.ph568.prol.loopexit ]
  %296 = getelementptr inbounds i8, ptr %.2273, i64 1
  %297 = load i8, ptr %.2273, align 1, !tbaa !27
  %298 = getelementptr inbounds i8, ptr %.3256, i64 1
  store i8 %297, ptr %.3256, align 1, !tbaa !27
  %299 = getelementptr inbounds i8, ptr %.2273, i64 2
  %300 = load i8, ptr %296, align 1, !tbaa !27
  %301 = getelementptr inbounds i8, ptr %.3256, i64 2
  store i8 %300, ptr %298, align 1, !tbaa !27
  %302 = getelementptr inbounds i8, ptr %.2273, i64 3
  %303 = load i8, ptr %299, align 1, !tbaa !27
  %304 = getelementptr inbounds i8, ptr %.3256, i64 3
  store i8 %303, ptr %301, align 1, !tbaa !27
  %305 = getelementptr inbounds i8, ptr %.2273, i64 4
  %306 = load i8, ptr %302, align 1, !tbaa !27
  %307 = getelementptr inbounds i8, ptr %.3256, i64 4
  store i8 %306, ptr %304, align 1, !tbaa !27
  %308 = getelementptr inbounds i8, ptr %.2273, i64 5
  %309 = load i8, ptr %305, align 1, !tbaa !27
  %310 = getelementptr inbounds i8, ptr %.3256, i64 5
  store i8 %309, ptr %307, align 1, !tbaa !27
  %311 = getelementptr inbounds i8, ptr %.2273, i64 6
  %312 = load i8, ptr %308, align 1, !tbaa !27
  %313 = getelementptr inbounds i8, ptr %.3256, i64 6
  store i8 %312, ptr %310, align 1, !tbaa !27
  %314 = getelementptr inbounds i8, ptr %.2273, i64 7
  %315 = load i8, ptr %311, align 1, !tbaa !27
  %316 = getelementptr inbounds i8, ptr %.3256, i64 7
  store i8 %315, ptr %313, align 1, !tbaa !27
  %317 = getelementptr inbounds i8, ptr %.2273, i64 8
  %318 = load i8, ptr %314, align 1, !tbaa !27
  %319 = getelementptr inbounds i8, ptr %.3256, i64 8
  store i8 %318, ptr %316, align 1, !tbaa !27
  %320 = add i32 %.2283, -8
  %.not337.7 = icmp eq i32 %320, 0
  br i1 %.not337.7, label %.loopexit707, label %scalar.ph568, !llvm.loop !46

.loopexit707:                                     ; preds = %scalar.ph568.prol.loopexit, %scalar.ph568, %middle.block567
  %.lcssa519 = phi ptr [ %ind.end578, %middle.block567 ], [ %.lcssa744.unr, %scalar.ph568.prol.loopexit ], [ %319, %scalar.ph568 ]
  %321 = sub i32 %283, %28
  %322 = zext nneg i32 %180 to i64
  %323 = sub nsw i64 0, %322
  %324 = getelementptr inbounds i8, ptr %.lcssa519, i64 %323
  br label %376

325:                                              ; preds = %245
  %326 = sub i32 %28, %189
  %327 = zext i32 %326 to i64
  %328 = getelementptr i8, ptr %30, i64 %327
  %329 = icmp ult i32 %189, %.0279
  br i1 %329, label %.preheader489, label %376

.preheader489:                                    ; preds = %325
  %330 = add i32 %65, %179
  %331 = add i32 %330, %156
  %332 = trunc i64 %184 to i32
  %333 = sub i32 %331, %332
  %334 = zext i32 %333 to i64
  %335 = add nuw nsw i64 %334, 1
  %min.iters.check620 = icmp ult i32 %333, 31
  br i1 %min.iters.check620, label %scalar.ph619.preheader, label %vector.memcheck616

vector.memcheck616:                               ; preds = %.preheader489
  %336 = add i64 %31, %327
  %337 = sub i64 %184, %336
  %diff.check617 = icmp ult i64 %337, 32
  br i1 %diff.check617, label %scalar.ph619.preheader, label %vector.ph621

vector.ph621:                                     ; preds = %vector.memcheck616
  %n.vec623 = and i64 %335, 8589934560
  %.cast624 = trunc i64 %n.vec623 to i32
  %ind.end625 = sub i32 %189, %.cast624
  %ind.end627 = getelementptr i8, ptr %328, i64 %n.vec623
  %ind.end629 = getelementptr i8, ptr %.0253, i64 %n.vec623
  br label %vector.body631

vector.body631:                                   ; preds = %vector.body631, %vector.ph621
  %index632 = phi i64 [ 0, %vector.ph621 ], [ %index.next639, %vector.body631 ]
  %next.gep633 = getelementptr i8, ptr %328, i64 %index632
  %next.gep635 = getelementptr i8, ptr %.0253, i64 %index632
  %338 = getelementptr i8, ptr %next.gep633, i64 16
  %wide.load637 = load <16 x i8>, ptr %next.gep633, align 1, !tbaa !27
  %wide.load638 = load <16 x i8>, ptr %338, align 1, !tbaa !27
  %339 = getelementptr i8, ptr %next.gep635, i64 16
  store <16 x i8> %wide.load637, ptr %next.gep635, align 1, !tbaa !27
  store <16 x i8> %wide.load638, ptr %339, align 1, !tbaa !27
  %index.next639 = add nuw i64 %index632, 32
  %340 = icmp eq i64 %index.next639, %n.vec623
  br i1 %340, label %middle.block618, label %vector.body631, !llvm.loop !47

middle.block618:                                  ; preds = %vector.body631
  %cmp.n640 = icmp eq i64 %335, %n.vec623
  br i1 %cmp.n640, label %.loopexit709, label %scalar.ph619.preheader

scalar.ph619.preheader:                           ; preds = %middle.block618, %vector.memcheck616, %.preheader489
  %.3284.ph = phi i32 [ %189, %vector.memcheck616 ], [ %189, %.preheader489 ], [ %ind.end625, %middle.block618 ]
  %.3274.ph = phi ptr [ %328, %vector.memcheck616 ], [ %328, %.preheader489 ], [ %ind.end627, %middle.block618 ]
  %.4257.ph = phi ptr [ %.0253, %vector.memcheck616 ], [ %.0253, %.preheader489 ], [ %ind.end629, %middle.block618 ]
  %341 = add i32 %.3284.ph, -1
  %xtraiter = and i32 %.3284.ph, 7
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph619.prol.loopexit, label %scalar.ph619.prol

scalar.ph619.prol:                                ; preds = %scalar.ph619.preheader, %scalar.ph619.prol
  %.3284.prol = phi i32 [ %345, %scalar.ph619.prol ], [ %.3284.ph, %scalar.ph619.preheader ]
  %.3274.prol = phi ptr [ %342, %scalar.ph619.prol ], [ %.3274.ph, %scalar.ph619.preheader ]
  %.4257.prol = phi ptr [ %344, %scalar.ph619.prol ], [ %.4257.ph, %scalar.ph619.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %scalar.ph619.prol ], [ 0, %scalar.ph619.preheader ]
  %342 = getelementptr inbounds i8, ptr %.3274.prol, i64 1
  %343 = load i8, ptr %.3274.prol, align 1, !tbaa !27
  %344 = getelementptr inbounds i8, ptr %.4257.prol, i64 1
  store i8 %343, ptr %.4257.prol, align 1, !tbaa !27
  %345 = add i32 %.3284.prol, -1
  %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 %scalar.ph619.prol.loopexit, label %scalar.ph619.prol, !llvm.loop !48

scalar.ph619.prol.loopexit:                       ; preds = %scalar.ph619.prol, %scalar.ph619.preheader
  %.lcssa741.unr = phi ptr [ poison, %scalar.ph619.preheader ], [ %344, %scalar.ph619.prol ]
  %.3284.unr = phi i32 [ %.3284.ph, %scalar.ph619.preheader ], [ %345, %scalar.ph619.prol ]
  %.3274.unr = phi ptr [ %.3274.ph, %scalar.ph619.preheader ], [ %342, %scalar.ph619.prol ]
  %.4257.unr = phi ptr [ %.4257.ph, %scalar.ph619.preheader ], [ %344, %scalar.ph619.prol ]
  %346 = icmp ult i32 %341, 7
  br i1 %346, label %.loopexit709, label %scalar.ph619

scalar.ph619:                                     ; preds = %scalar.ph619.prol.loopexit, %scalar.ph619
  %.3284 = phi i32 [ %371, %scalar.ph619 ], [ %.3284.unr, %scalar.ph619.prol.loopexit ]
  %.3274 = phi ptr [ %368, %scalar.ph619 ], [ %.3274.unr, %scalar.ph619.prol.loopexit ]
  %.4257 = phi ptr [ %370, %scalar.ph619 ], [ %.4257.unr, %scalar.ph619.prol.loopexit ]
  %347 = getelementptr inbounds i8, ptr %.3274, i64 1
  %348 = load i8, ptr %.3274, align 1, !tbaa !27
  %349 = getelementptr inbounds i8, ptr %.4257, i64 1
  store i8 %348, ptr %.4257, align 1, !tbaa !27
  %350 = getelementptr inbounds i8, ptr %.3274, i64 2
  %351 = load i8, ptr %347, align 1, !tbaa !27
  %352 = getelementptr inbounds i8, ptr %.4257, i64 2
  store i8 %351, ptr %349, align 1, !tbaa !27
  %353 = getelementptr inbounds i8, ptr %.3274, i64 3
  %354 = load i8, ptr %350, align 1, !tbaa !27
  %355 = getelementptr inbounds i8, ptr %.4257, i64 3
  store i8 %354, ptr %352, align 1, !tbaa !27
  %356 = getelementptr inbounds i8, ptr %.3274, i64 4
  %357 = load i8, ptr %353, align 1, !tbaa !27
  %358 = getelementptr inbounds i8, ptr %.4257, i64 4
  store i8 %357, ptr %355, align 1, !tbaa !27
  %359 = getelementptr inbounds i8, ptr %.3274, i64 5
  %360 = load i8, ptr %356, align 1, !tbaa !27
  %361 = getelementptr inbounds i8, ptr %.4257, i64 5
  store i8 %360, ptr %358, align 1, !tbaa !27
  %362 = getelementptr inbounds i8, ptr %.3274, i64 6
  %363 = load i8, ptr %359, align 1, !tbaa !27
  %364 = getelementptr inbounds i8, ptr %.4257, i64 6
  store i8 %363, ptr %361, align 1, !tbaa !27
  %365 = getelementptr inbounds i8, ptr %.3274, i64 7
  %366 = load i8, ptr %362, align 1, !tbaa !27
  %367 = getelementptr inbounds i8, ptr %.4257, i64 7
  store i8 %366, ptr %364, align 1, !tbaa !27
  %368 = getelementptr inbounds i8, ptr %.3274, i64 8
  %369 = load i8, ptr %365, align 1, !tbaa !27
  %370 = getelementptr inbounds i8, ptr %.4257, i64 8
  store i8 %369, ptr %367, align 1, !tbaa !27
  %371 = add i32 %.3284, -8
  %.not335.7 = icmp eq i32 %371, 0
  br i1 %.not335.7, label %.loopexit709, label %scalar.ph619, !llvm.loop !49

.loopexit709:                                     ; preds = %scalar.ph619.prol.loopexit, %scalar.ph619, %middle.block618
  %.lcssa517 = phi ptr [ %ind.end629, %middle.block618 ], [ %.lcssa741.unr, %scalar.ph619.prol.loopexit ], [ %370, %scalar.ph619 ]
  %372 = sub nsw i32 %.0279, %189
  %373 = zext nneg i32 %180 to i64
  %374 = sub nsw i64 0, %373
  %375 = getelementptr inbounds i8, ptr %.lcssa517, i64 %374
  br label %376

376:                                              ; preds = %.loopexit708, %.loopexit707, %247, %.loopexit709, %325, %194, %.loopexit706
  %.1280 = phi i32 [ %241, %.loopexit706 ], [ %.0279, %194 ], [ %321, %.loopexit707 ], [ %283, %.loopexit708 ], [ %.0279, %247 ], [ %372, %.loopexit709 ], [ %.0279, %325 ]
  %.4275 = phi ptr [ %244, %.loopexit706 ], [ %197, %194 ], [ %324, %.loopexit707 ], [ %30, %.loopexit708 ], [ %250, %247 ], [ %375, %.loopexit709 ], [ %328, %325 ]
  %.5258 = phi ptr [ %.lcssa520, %.loopexit706 ], [ %.0253, %194 ], [ %.lcssa519, %.loopexit707 ], [ %.lcssa518, %.loopexit708 ], [ %.0253, %247 ], [ %.lcssa517, %.loopexit709 ], [ %.0253, %325 ]
  %377 = zext i32 %.1280 to i64
  %378 = getelementptr inbounds i8, ptr %.5258, i64 %377
  %.not405 = icmp eq i32 %.1280, 0
  br i1 %.not405, label %.loopexit, label %.lr.ph401.preheader

.lr.ph401.preheader:                              ; preds = %376
  %.4275533 = ptrtoint ptr %.4275 to i64
  %.5258532 = ptrtoint ptr %.5258 to i64
  %379 = add i64 %.5258532, %377
  %380 = add i64 %.5258532, 4
  %umax = tail call i64 @llvm.umax.i64(i64 %379, i64 %380)
  %381 = xor i64 %.5258532, -1
  %382 = add i64 %umax, %381
  %383 = lshr i64 %382, 2
  %384 = add nuw nsw i64 %383, 1
  %min.iters.check = icmp ult i64 %382, 28
  %385 = sub i64 %.5258532, %.4275533
  %diff.check = icmp ult i64 %385, 32
  %or.cond = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond, label %.lr.ph401.preheader711, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph401.preheader
  %n.vec = and i64 %384, 9223372036854775800
  %386 = shl i64 %n.vec, 2
  %ind.end = getelementptr i8, ptr %.5258, i64 %386
  %387 = shl i64 %n.vec, 2
  %ind.end534 = getelementptr i8, ptr %.4275, i64 %387
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = shl i64 %index, 2
  %next.gep = getelementptr i8, ptr %.5258, i64 %offset.idx
  %offset.idx537 = shl i64 %index, 2
  %next.gep538 = getelementptr i8, ptr %.4275, i64 %offset.idx537
  %388 = getelementptr i8, ptr %next.gep538, i64 16
  %wide.load = load <4 x i32>, ptr %next.gep538, align 4, !tbaa !50
  %wide.load540 = load <4 x i32>, ptr %388, align 4, !tbaa !50
  %389 = getelementptr i8, ptr %next.gep, i64 16
  store <4 x i32> %wide.load, ptr %next.gep, align 4, !tbaa !50
  store <4 x i32> %wide.load540, ptr %389, align 4, !tbaa !50
  %index.next = add nuw i64 %index, 8
  %390 = icmp eq i64 %index.next, %n.vec
  br i1 %390, label %middle.block, label %vector.body, !llvm.loop !51

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %384, %n.vec
  br i1 %cmp.n, label %.loopexit, label %.lr.ph401.preheader711

.lr.ph401.preheader711:                           ; preds = %middle.block, %.lr.ph401.preheader
  %.6259399.ph = phi ptr [ %.5258, %.lr.ph401.preheader ], [ %ind.end, %middle.block ]
  %.5276398.ph = phi ptr [ %.4275, %.lr.ph401.preheader ], [ %ind.end534, %middle.block ]
  br label %.lr.ph401

.lr.ph401:                                        ; preds = %.lr.ph401.preheader711, %.lr.ph401
  %.6259399 = phi ptr [ %392, %.lr.ph401 ], [ %.6259399.ph, %.lr.ph401.preheader711 ]
  %.5276398 = phi ptr [ %393, %.lr.ph401 ], [ %.5276398.ph, %.lr.ph401.preheader711 ]
  %391 = load i32, ptr %.5276398, align 4, !tbaa !50
  store i32 %391, ptr %.6259399, align 4, !tbaa !50
  %392 = getelementptr inbounds i8, ptr %.6259399, i64 4
  %393 = getelementptr inbounds i8, ptr %.5276398, i64 4
  %394 = icmp ult ptr %392, %378
  br i1 %394, label %.lr.ph401, label %.loopexit, !llvm.loop !52

395:                                              ; preds = %176
  %396 = zext nneg i32 %180 to i64
  %397 = sub nsw i64 0, %396
  %398 = getelementptr i8, ptr %.0253, i64 %397
  %399 = zext i32 %.0279 to i64
  %400 = getelementptr inbounds i8, ptr %.0253, i64 %399
  %401 = icmp ugt i32 %180, 4
  br i1 %401, label %.preheader, label %417

.preheader:                                       ; preds = %395
  %.not404 = icmp eq i32 %.0279, 0
  br i1 %.not404, label %.loopexit, label %.lr.ph397.preheader

.lr.ph397.preheader:                              ; preds = %.preheader
  %402 = add i64 %184, %399
  %403 = add i64 %184, 4
  %umax643 = tail call i64 @llvm.umax.i64(i64 %402, i64 %403)
  %404 = xor i64 %184, -1
  %405 = add i64 %umax643, %404
  %406 = lshr i64 %405, 2
  %407 = add nuw nsw i64 %406, 1
  %min.iters.check646 = icmp ult i64 %405, 28
  %diff.check642 = icmp ult i32 %180, 32
  %or.cond710 = or i1 %min.iters.check646, %diff.check642
  br i1 %or.cond710, label %.lr.ph397.preheader712, label %vector.ph647

vector.ph647:                                     ; preds = %.lr.ph397.preheader
  %n.vec649 = and i64 %407, 9223372036854775800
  %408 = shl i64 %n.vec649, 2
  %ind.end650 = getelementptr i8, ptr %.0253, i64 %408
  %409 = shl i64 %n.vec649, 2
  %ind.end652 = getelementptr i8, ptr %398, i64 %409
  br label %vector.body654

vector.body654:                                   ; preds = %vector.body654, %vector.ph647
  %index655 = phi i64 [ 0, %vector.ph647 ], [ %index.next664, %vector.body654 ]
  %offset.idx656 = shl i64 %index655, 2
  %next.gep657 = getelementptr i8, ptr %.0253, i64 %offset.idx656
  %offset.idx659 = shl i64 %index655, 2
  %next.gep660 = getelementptr i8, ptr %398, i64 %offset.idx659
  %410 = getelementptr i8, ptr %next.gep660, i64 16
  %wide.load662 = load <4 x i32>, ptr %next.gep660, align 4, !tbaa !50
  %wide.load663 = load <4 x i32>, ptr %410, align 4, !tbaa !50
  %411 = getelementptr i8, ptr %next.gep657, i64 16
  store <4 x i32> %wide.load662, ptr %next.gep657, align 4, !tbaa !50
  store <4 x i32> %wide.load663, ptr %411, align 4, !tbaa !50
  %index.next664 = add nuw i64 %index655, 8
  %412 = icmp eq i64 %index.next664, %n.vec649
  br i1 %412, label %middle.block644, label %vector.body654, !llvm.loop !53

middle.block644:                                  ; preds = %vector.body654
  %cmp.n665 = icmp eq i64 %407, %n.vec649
  br i1 %cmp.n665, label %.loopexit, label %.lr.ph397.preheader712

.lr.ph397.preheader712:                           ; preds = %middle.block644, %.lr.ph397.preheader
  %.7260396.ph = phi ptr [ %.0253, %.lr.ph397.preheader ], [ %ind.end650, %middle.block644 ]
  %.6277395.ph = phi ptr [ %398, %.lr.ph397.preheader ], [ %ind.end652, %middle.block644 ]
  br label %.lr.ph397

.lr.ph397:                                        ; preds = %.lr.ph397.preheader712, %.lr.ph397
  %.7260396 = phi ptr [ %414, %.lr.ph397 ], [ %.7260396.ph, %.lr.ph397.preheader712 ]
  %.6277395 = phi ptr [ %415, %.lr.ph397 ], [ %.6277395.ph, %.lr.ph397.preheader712 ]
  %413 = load i32, ptr %.6277395, align 4, !tbaa !50
  store i32 %413, ptr %.7260396, align 4, !tbaa !50
  %414 = getelementptr inbounds i8, ptr %.7260396, i64 4
  %415 = getelementptr inbounds i8, ptr %.6277395, i64 4
  %416 = icmp ult ptr %414, %400
  br i1 %416, label %.lr.ph397, label %.loopexit, !llvm.loop !54

417:                                              ; preds = %395
  switch i32 %180, label %.preheader343 [
    i32 1, label %418
    i32 4, label %425
  ]

.preheader343:                                    ; preds = %417
  %.not403 = icmp eq i32 %.0279, 0
  br i1 %.not403, label %.loopexit, label %.lr.ph393

418:                                              ; preds = %417
  %419 = load i8, ptr %398, align 1, !tbaa !27
  %420 = zext i8 %419 to i32
  %421 = shl nuw nsw i32 %420, 8
  %422 = or disjoint i32 %421, %420
  %423 = shl nuw i32 %422, 16
  %424 = or disjoint i32 %423, %422
  br label %427

425:                                              ; preds = %417
  %426 = load i32, ptr %398, align 4, !tbaa !50
  br label %427

427:                                              ; preds = %425, %418
  %.0 = phi i32 [ %424, %418 ], [ %426, %425 ]
  %.not402 = icmp eq i32 %.0279, 0
  br i1 %.not402, label %.loopexit, label %.lr.ph390.preheader

.lr.ph390.preheader:                              ; preds = %427
  %428 = add i64 %.0253689, %399
  %429 = add i64 %.0253689, 4
  %umax690 = tail call i64 @llvm.umax.i64(i64 %428, i64 %429)
  %430 = xor i64 %.0253689, -1
  %431 = add i64 %umax690, %430
  %432 = lshr i64 %431, 2
  %433 = add nuw nsw i64 %432, 1
  %min.iters.check693 = icmp ult i64 %431, 28
  br i1 %min.iters.check693, label %.lr.ph390.preheader715, label %vector.ph694

vector.ph694:                                     ; preds = %.lr.ph390.preheader
  %n.vec696 = and i64 %433, 9223372036854775800
  %434 = shl i64 %n.vec696, 2
  %ind.end697 = getelementptr i8, ptr %.0253, i64 %434
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %.0, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body699

vector.body699:                                   ; preds = %vector.body699, %vector.ph694
  %index700 = phi i64 [ 0, %vector.ph694 ], [ %index.next704, %vector.body699 ]
  %offset.idx701 = shl i64 %index700, 2
  %next.gep702 = getelementptr i8, ptr %.0253, i64 %offset.idx701
  %435 = getelementptr i8, ptr %next.gep702, i64 16
  store <4 x i32> %broadcast.splat, ptr %next.gep702, align 4, !tbaa !50
  store <4 x i32> %broadcast.splat, ptr %435, align 4, !tbaa !50
  %index.next704 = add nuw i64 %index700, 8
  %436 = icmp eq i64 %index.next704, %n.vec696
  br i1 %436, label %middle.block691, label %vector.body699, !llvm.loop !55

middle.block691:                                  ; preds = %vector.body699
  %cmp.n705 = icmp eq i64 %433, %n.vec696
  br i1 %cmp.n705, label %.loopexit, label %.lr.ph390.preheader715

.lr.ph390.preheader715:                           ; preds = %middle.block691, %.lr.ph390.preheader
  %.8388.ph = phi ptr [ %.0253, %.lr.ph390.preheader ], [ %ind.end697, %middle.block691 ]
  br label %.lr.ph390

.lr.ph390:                                        ; preds = %.lr.ph390.preheader715, %.lr.ph390
  %.8388 = phi ptr [ %437, %.lr.ph390 ], [ %.8388.ph, %.lr.ph390.preheader715 ]
  store i32 %.0, ptr %.8388, align 4, !tbaa !50
  %437 = getelementptr inbounds i8, ptr %.8388, i64 4
  %438 = icmp ult ptr %437, %400
  br i1 %438, label %.lr.ph390, label %.loopexit, !llvm.loop !56

.lr.ph393:                                        ; preds = %.preheader343, %.lr.ph393
  %.9392 = phi ptr [ %441, %.lr.ph393 ], [ %.0253, %.preheader343 ]
  %.7278391 = phi ptr [ %439, %.lr.ph393 ], [ %398, %.preheader343 ]
  %439 = getelementptr inbounds i8, ptr %.7278391, i64 1
  %440 = load i8, ptr %.7278391, align 1, !tbaa !27
  %441 = getelementptr inbounds i8, ptr %.9392, i64 1
  store i8 %440, ptr %.9392, align 1, !tbaa !27
  %442 = icmp ult ptr %441, %400
  br i1 %442, label %.lr.ph393, label %.loopexit, !llvm.loop !57

.lr.ph382:                                        ; preds = %142, %448
  %443 = phi i32 [ %464, %448 ], [ %152, %142 ]
  %444 = phi i32 [ %462, %448 ], [ %150, %142 ]
  %445 = phi i64 [ %461, %448 ], [ %149, %142 ]
  %.1286380 = phi ptr [ %456, %448 ], [ %144, %142 ]
  %446 = and i32 %443, 64
  %447 = icmp eq i32 %446, 0
  br i1 %447, label %448, label %.loopexit346.sink.split.sink.split

448:                                              ; preds = %.lr.ph382
  %449 = getelementptr inbounds i8, ptr %.1286380, i64 2
  %450 = load i16, ptr %449, align 2, !tbaa !32
  %451 = zext i16 %450 to i64
  %452 = getelementptr inbounds %struct.code, ptr %39, i64 %451
  %notmask332 = shl nsw i32 -1, %443
  %453 = xor i32 %notmask332, -1
  %454 = zext nneg i32 %453 to i64
  %455 = and i64 %445, %454
  %456 = getelementptr inbounds %struct.code, ptr %452, i64 %455
  %457 = getelementptr inbounds i8, ptr %456, i64 1
  %458 = load i8, ptr %457, align 1, !tbaa !28
  %459 = zext i8 %458 to i32
  %460 = zext nneg i8 %458 to i64
  %461 = lshr i64 %445, %460
  %462 = sub i32 %444, %459
  %463 = load i8, ptr %456, align 2, !tbaa !31
  %464 = zext i8 %463 to i32
  %465 = and i32 %464, 16
  %.not331 = icmp eq i32 %465, 0
  br i1 %.not331, label %.lr.ph382, label %._crit_edge383

466:                                              ; preds = %.lr.ph
  %467 = and i32 %100, 64
  %468 = icmp eq i32 %467, 0
  br i1 %468, label %469, label %486

469:                                              ; preds = %466
  %470 = getelementptr inbounds i8, ptr %.0285376, i64 2
  %471 = load i16, ptr %470, align 2, !tbaa !32
  %472 = zext i16 %471 to i64
  %473 = getelementptr inbounds %struct.code, ptr %37, i64 %472
  %notmask328 = shl nsw i32 -1, %100
  %474 = xor i32 %notmask328, -1
  %475 = zext nneg i32 %474 to i64
  %476 = and i64 %99, %475
  %477 = getelementptr inbounds %struct.code, ptr %473, i64 %476
  %478 = getelementptr inbounds i8, ptr %477, i64 1
  %479 = load i8, ptr %478, align 1, !tbaa !28
  %480 = zext i8 %479 to i32
  %481 = zext nneg i8 %479 to i64
  %482 = lshr i64 %99, %481
  %483 = sub i32 %98, %480
  %484 = load i8, ptr %477, align 2, !tbaa !31
  %485 = icmp eq i8 %484, 0
  br i1 %485, label %._crit_edge, label %.lr.ph

486:                                              ; preds = %466
  %487 = and i32 %100, 32
  %.not327 = icmp eq i32 %487, 0
  br i1 %.not327, label %.loopexit346.sink.split.sink.split, label %.loopexit346.sink.split

.loopexit:                                        ; preds = %.lr.ph390, %.lr.ph393, %.lr.ph397, %.lr.ph401, %middle.block691, %middle.block644, %middle.block, %427, %.preheader343, %.preheader, %376, %._crit_edge
  %.8295 = phi i32 [ %.lcssa349, %._crit_edge ], [ %183, %376 ], [ %183, %.preheader ], [ %183, %.preheader343 ], [ %183, %427 ], [ %183, %middle.block ], [ %183, %middle.block644 ], [ %183, %middle.block691 ], [ %183, %.lr.ph401 ], [ %183, %.lr.ph397 ], [ %183, %.lr.ph393 ], [ %183, %.lr.ph390 ]
  %.8269 = phi i64 [ %.lcssa352, %._crit_edge ], [ %182, %376 ], [ %182, %.preheader ], [ %182, %.preheader343 ], [ %182, %427 ], [ %182, %middle.block ], [ %182, %middle.block644 ], [ %182, %middle.block691 ], [ %182, %.lr.ph401 ], [ %182, %.lr.ph397 ], [ %182, %.lr.ph393 ], [ %182, %.lr.ph390 ]
  %.11 = phi ptr [ %97, %._crit_edge ], [ %378, %376 ], [ %400, %.preheader ], [ %.0253, %.preheader343 ], [ %400, %427 ], [ %378, %middle.block ], [ %400, %middle.block644 ], [ %400, %middle.block691 ], [ %378, %.lr.ph401 ], [ %400, %.lr.ph397 ], [ %441, %.lr.ph393 ], [ %400, %.lr.ph390 ]
  %.6 = phi ptr [ %.1, %._crit_edge ], [ %.5, %376 ], [ %.5, %.preheader ], [ %.5, %.preheader343 ], [ %.5, %427 ], [ %.5, %middle.block ], [ %.5, %middle.block644 ], [ %.5, %middle.block691 ], [ %.5, %.lr.ph401 ], [ %.5, %.lr.ph397 ], [ %.5, %.lr.ph393 ], [ %.5, %.lr.ph390 ]
  %488 = icmp ult ptr %.6, %10
  %489 = icmp ult ptr %.11, %22
  %490 = select i1 %488, i1 %489, i1 false
  br i1 %490, label %66, label %.loopexit346, !llvm.loop !58

.loopexit346.sink.split.sink.split:               ; preds = %191, %.lr.ph382, %486
  %.str.sink = phi ptr [ @.str.2, %486 ], [ @.str.1, %.lr.ph382 ], [ @.str, %191 ]
  %.9296.ph.ph = phi i32 [ %98, %486 ], [ %444, %.lr.ph382 ], [ %183, %191 ]
  %.9270.ph.ph = phi i64 [ %99, %486 ], [ %445, %.lr.ph382 ], [ %182, %191 ]
  %.7.ph.ph = phi ptr [ %.1, %486 ], [ %.4, %.lr.ph382 ], [ %.5, %191 ]
  %491 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %.str.sink, ptr %491, align 8, !tbaa !59
  br label %.loopexit346.sink.split

.loopexit346.sink.split:                          ; preds = %.loopexit346.sink.split.sink.split, %486
  %.sink = phi i32 [ 16191, %486 ], [ 16209, %.loopexit346.sink.split.sink.split ]
  %.9296.ph = phi i32 [ %98, %486 ], [ %.9296.ph.ph, %.loopexit346.sink.split.sink.split ]
  %.9270.ph = phi i64 [ %99, %486 ], [ %.9270.ph.ph, %.loopexit346.sink.split.sink.split ]
  %.7.ph = phi ptr [ %.1, %486 ], [ %.7.ph.ph, %.loopexit346.sink.split.sink.split ]
  %492 = getelementptr inbounds i8, ptr %4, i64 8
  store i32 %.sink, ptr %492, align 8, !tbaa !60
  br label %.loopexit346

.loopexit346:                                     ; preds = %.loopexit, %.loopexit346.sink.split
  %.9296 = phi i32 [ %.9296.ph, %.loopexit346.sink.split ], [ %.8295, %.loopexit ]
  %.9270 = phi i64 [ %.9270.ph, %.loopexit346.sink.split ], [ %.8269, %.loopexit ]
  %.12 = phi ptr [ %.0253, %.loopexit346.sink.split ], [ %.11, %.loopexit ]
  %.7 = phi ptr [ %.7.ph, %.loopexit346.sink.split ], [ %.6, %.loopexit ]
  %493 = lshr i32 %.9296, 3
  %494 = zext nneg i32 %493 to i64
  %495 = sub nsw i64 0, %494
  %496 = getelementptr inbounds i8, ptr %.7, i64 %495
  store ptr %496, ptr %0, align 8, !tbaa !12
  store ptr %.12, ptr %11, align 8, !tbaa !14
  %497 = ptrtoint ptr %10 to i64
  %498 = ptrtoint ptr %496 to i64
  %499 = sub i64 %497, %498
  %500 = trunc i64 %499 to i32
  %501 = add i32 %500, 5
  store i32 %501, ptr %6, align 8, !tbaa !13
  %502 = ptrtoint ptr %22 to i64
  %503 = ptrtoint ptr %.12 to i64
  %504 = sub i64 %502, %503
  %505 = and i32 %.9296, 7
  %notmask339 = shl nsw i32 -1, %505
  %506 = xor i32 %notmask339, -1
  %507 = zext nneg i32 %506 to i64
  %508 = and i64 %.9270, %507
  %509 = trunc i64 %504 to i32
  %510 = add i32 %509, 257
  store i32 %510, ptr %14, align 8, !tbaa !15
  store i64 %508, ptr %32, align 8, !tbaa !21
  store i32 %505, ptr %34, align 8, !tbaa !22
  ret void
}

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

attributes #0 = { nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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 0}
!13 = !{!6, !10, i64 8}
!14 = !{!6, !7, i64 24}
!15 = !{!6, !10, i64 32}
!16 = !{!17, !10, i64 60}
!17 = !{!"inflate_state", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !11, i64 32, !11, i64 40, !7, i64 48, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !7, i64 72, !11, i64 80, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !7, i64 104, !7, i64 112, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !7, i64 144, !8, i64 152, !8, i64 792, !8, i64 1368, !10, i64 7144, !10, i64 7148, !10, i64 7152}
!18 = !{!17, !10, i64 64}
!19 = !{!17, !10, i64 68}
!20 = !{!17, !7, i64 72}
!21 = !{!17, !11, i64 80}
!22 = !{!17, !10, i64 88}
!23 = !{!17, !7, i64 104}
!24 = !{!17, !7, i64 112}
!25 = !{!17, !10, i64 120}
!26 = !{!17, !10, i64 124}
!27 = !{!8, !8, i64 0}
!28 = !{!29, !8, i64 1}
!29 = !{!"", !8, i64 0, !8, i64 1, !30, i64 2}
!30 = !{!"short", !8, i64 0}
!31 = !{!29, !8, i64 0}
!32 = !{!29, !30, i64 2}
!33 = !{!17, !10, i64 7144}
!34 = distinct !{!34, !35, !36, !37}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!"llvm.loop.isvectorized", i32 1}
!37 = !{!"llvm.loop.unroll.runtime.disable"}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.unroll.disable"}
!40 = distinct !{!40, !35, !36}
!41 = distinct !{!41, !35, !36, !37}
!42 = distinct !{!42, !39}
!43 = distinct !{!43, !35, !36}
!44 = distinct !{!44, !35, !36, !37}
!45 = distinct !{!45, !39}
!46 = distinct !{!46, !35, !36}
!47 = distinct !{!47, !35, !36, !37}
!48 = distinct !{!48, !39}
!49 = distinct !{!49, !35, !36}
!50 = !{!10, !10, i64 0}
!51 = distinct !{!51, !35, !36, !37}
!52 = distinct !{!52, !35, !36}
!53 = distinct !{!53, !35, !36, !37}
!54 = distinct !{!54, !35, !36}
!55 = distinct !{!55, !35, !36, !37}
!56 = distinct !{!56, !35, !37, !36}
!57 = distinct !{!57, !35, !36}
!58 = distinct !{!58, !35}
!59 = !{!6, !7, i64 48}
!60 = !{!17, !10, i64 8}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass