; LLVM IR from fhanau/Efficient-Compression-Tool :: src/zlib (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], [1924 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
  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
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.z_stream_s, ptr %26, i32 0, i32 7
  %28 = load ptr, ptr %27, align 8, !tbaa !11
  store ptr %28, ptr %5, align 8, !tbaa !5
  %29 = load ptr, ptr %3, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.z_stream_s, ptr %29, i32 0, i32 0
  %31 = load ptr, ptr %30, align 8, !tbaa !14
  store ptr %31, ptr %6, align 8, !tbaa !5
  %32 = load ptr, ptr %6, 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 1
  %35 = load i32, ptr %34, align 8, !tbaa !15
  %36 = sub i32 %35, 5
  %37 = zext i32 %36 to i64
  %38 = getelementptr inbounds i8, ptr %32, i64 %37
  store ptr %38, ptr %7, align 8, !tbaa !5
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.z_stream_s, ptr %39, i32 0, i32 3
  %41 = load ptr, ptr %40, align 8, !tbaa !16
  store ptr %41, ptr %8, align 8, !tbaa !5
  %42 = load ptr, ptr %8, align 8, !tbaa !5
  %43 = load i32, ptr %4, align 4, !tbaa !9
  %44 = load ptr, ptr %3, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.z_stream_s, ptr %44, i32 0, i32 4
  %46 = load i32, ptr %45, align 8, !tbaa !17
  %47 = sub i32 %43, %46
  %48 = zext i32 %47 to i64
  %49 = sub i64 0, %48
  %50 = getelementptr inbounds i8, ptr %42, i64 %49
  store ptr %50, ptr %9, align 8, !tbaa !5
  %51 = load ptr, ptr %8, align 8, !tbaa !5
  %52 = load ptr, ptr %3, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.z_stream_s, ptr %52, i32 0, i32 4
  %54 = load i32, ptr %53, align 8, !tbaa !17
  %55 = sub i32 %54, 257
  %56 = zext i32 %55 to i64
  %57 = getelementptr inbounds i8, ptr %51, i64 %56
  store ptr %57, ptr %10, align 8, !tbaa !5
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.inflate_state, ptr %58, i32 0, i32 11
  %60 = load i32, ptr %59, align 4, !tbaa !18
  store i32 %60, ptr %11, align 4, !tbaa !9
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.inflate_state, ptr %61, i32 0, i32 12
  %63 = load i32, ptr %62, align 8, !tbaa !20
  store i32 %63, ptr %12, align 4, !tbaa !9
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.inflate_state, ptr %64, i32 0, i32 13
  %66 = load i32, ptr %65, align 4, !tbaa !21
  store i32 %66, ptr %13, align 4, !tbaa !9
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.inflate_state, ptr %67, i32 0, i32 14
  %69 = load ptr, ptr %68, align 8, !tbaa !22
  store ptr %69, ptr %14, align 8, !tbaa !5
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.inflate_state, ptr %70, i32 0, i32 15
  %72 = load i64, ptr %71, align 8, !tbaa !23
  store i64 %72, ptr %15, align 8, !tbaa !24
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.inflate_state, ptr %73, i32 0, i32 16
  %75 = load i32, ptr %74, align 8, !tbaa !25
  store i32 %75, ptr %16, align 4, !tbaa !9
  %76 = load ptr, ptr %5, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.inflate_state, ptr %76, i32 0, i32 20
  %78 = load ptr, ptr %77, align 8, !tbaa !26
  store ptr %78, ptr %17, align 8, !tbaa !5
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.inflate_state, ptr %79, i32 0, i32 21
  %81 = load ptr, ptr %80, align 8, !tbaa !27
  store ptr %81, ptr %18, align 8, !tbaa !5
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.inflate_state, ptr %82, i32 0, i32 22
  %84 = load i32, ptr %83, align 8, !tbaa !28
  %85 = shl i32 1, %84
  %86 = sub i32 %85, 1
  store i32 %86, ptr %19, align 4, !tbaa !9
  %87 = load ptr, ptr %5, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.inflate_state, ptr %87, i32 0, i32 23
  %89 = load i32, ptr %88, align 4, !tbaa !29
  %90 = shl i32 1, %89
  %91 = sub i32 %90, 1
  store i32 %91, ptr %20, align 4, !tbaa !9
  br label %92

92:                                               ; preds = %610, %2
  %93 = load i32, ptr %16, align 4, !tbaa !9
  %94 = icmp ult i32 %93, 15
  br i1 %94, label %95, label %118

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

118:                                              ; preds = %95, %92
  %119 = load ptr, ptr %17, align 8, !tbaa !5
  %120 = load i64, ptr %15, align 8, !tbaa !24
  %121 = load i32, ptr %19, align 4, !tbaa !9
  %122 = zext i32 %121 to i64
  %123 = and i64 %120, %122
  %124 = getelementptr inbounds %struct.code, ptr %119, i64 %123
  store ptr %124, ptr %21, align 8, !tbaa !5
  br label %125

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

143:                                              ; preds = %125
  %144 = load ptr, ptr %21, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.code, ptr %144, i32 0, i32 2
  %146 = load i16, ptr %145, align 2, !tbaa !35
  %147 = trunc i16 %146 to i8
  %148 = load ptr, ptr %8, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i32 1
  store ptr %149, ptr %8, align 8, !tbaa !5
  store i8 %147, ptr %148, align 1, !tbaa !30
  br label %601

150:                                              ; preds = %125
  %151 = load i32, ptr %22, align 4, !tbaa !9
  %152 = and i32 %151, 16
  %153 = icmp ne i32 %152, 0
  br i1 %153, label %154, label %569

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

163:                                              ; preds = %154
  %164 = load i32, ptr %16, align 4, !tbaa !9
  %165 = load i32, ptr %22, align 4, !tbaa !9
  %166 = icmp ult i32 %164, %165
  br i1 %166, label %167, label %179

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

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

195:                                              ; preds = %179, %154
  %196 = load i32, ptr %16, align 4, !tbaa !9
  %197 = icmp ult i32 %196, 15
  br i1 %197, label %198, label %221

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

221:                                              ; preds = %198, %195
  %222 = load ptr, ptr %18, align 8, !tbaa !5
  %223 = load i64, ptr %15, align 8, !tbaa !24
  %224 = load i32, ptr %20, align 4, !tbaa !9
  %225 = zext i32 %224 to i64
  %226 = and i64 %223, %225
  %227 = getelementptr inbounds %struct.code, ptr %222, i64 %226
  store ptr %227, ptr %21, align 8, !tbaa !5
  br label %228

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

247:                                              ; preds = %228
  %248 = load ptr, ptr %21, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.code, ptr %248, i32 0, i32 2
  %250 = load i16, ptr %249, align 2, !tbaa !35
  %251 = zext i16 %250 to i32
  store i32 %251, ptr %24, align 4, !tbaa !9
  %252 = load i32, ptr %22, align 4, !tbaa !9
  %253 = and i32 %252, 15
  store i32 %253, ptr %22, align 4, !tbaa !9
  %254 = load i32, ptr %16, align 4, !tbaa !9
  %255 = load i32, ptr %22, align 4, !tbaa !9
  %256 = icmp ult i32 %254, %255
  br i1 %256, label %257, label %285

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

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

284:                                              ; preds = %272, %257
  br label %285

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

310:                                              ; preds = %285
  %311 = load i32, ptr %24, align 4, !tbaa !9
  %312 = load i32, ptr %22, align 4, !tbaa !9
  %313 = sub i32 %311, %312
  store i32 %313, ptr %22, align 4, !tbaa !9
  %314 = load i32, ptr %22, align 4, !tbaa !9
  %315 = load i32, ptr %12, align 4, !tbaa !9
  %316 = icmp ugt i32 %314, %315
  br i1 %316, label %317, label %328

317:                                              ; preds = %310
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.inflate_state, ptr %318, i32 0, i32 32
  %320 = load i32, ptr %319, align 8, !tbaa !36
  %321 = icmp ne i32 %320, 0
  br i1 %321, label %322, label %327

322:                                              ; preds = %317
  %323 = load ptr, ptr %3, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.z_stream_s, ptr %323, i32 0, i32 6
  store ptr @.str, ptr %324, align 8, !tbaa !37
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.inflate_state, ptr %325, i32 0, i32 1
  store i32 16209, ptr %326, align 8, !tbaa !38
  br label %612

327:                                              ; preds = %317
  br label %328

328:                                              ; preds = %327, %310
  %329 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %329, ptr %25, align 8, !tbaa !5
  %330 = load i32, ptr %13, align 4, !tbaa !9
  %331 = icmp eq i32 %330, 0
  br i1 %331, label %332, label %363

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

342:                                              ; preds = %332
  %343 = load i32, ptr %22, align 4, !tbaa !9
  %344 = load i32, ptr %23, align 4, !tbaa !9
  %345 = sub i32 %344, %343
  store i32 %345, ptr %23, align 4, !tbaa !9
  br label %346

346:                                              ; preds = %352, %342
  %347 = load ptr, ptr %25, align 8, !tbaa !5
  %348 = getelementptr inbounds i8, ptr %347, i32 1
  store ptr %348, ptr %25, align 8, !tbaa !5
  %349 = load i8, ptr %347, align 1, !tbaa !30
  %350 = load ptr, ptr %8, align 8, !tbaa !5
  %351 = getelementptr inbounds i8, ptr %350, i32 1
  store ptr %351, ptr %8, align 8, !tbaa !5
  store i8 %349, ptr %350, align 1, !tbaa !30
  br label %352

352:                                              ; preds = %346
  %353 = load i32, ptr %22, align 4, !tbaa !9
  %354 = add i32 %353, -1
  store i32 %354, ptr %22, align 4, !tbaa !9
  %355 = icmp ne i32 %354, 0
  br i1 %355, label %346, label %356, !llvm.loop !39

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

362:                                              ; preds = %356, %332
  br label %456

363:                                              ; preds = %328
  %364 = load i32, ptr %13, align 4, !tbaa !9
  %365 = load i32, ptr %22, align 4, !tbaa !9
  %366 = icmp ult i32 %364, %365
  br i1 %366, label %367, label %424

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

382:                                              ; preds = %367
  %383 = load i32, ptr %22, align 4, !tbaa !9
  %384 = load i32, ptr %23, align 4, !tbaa !9
  %385 = sub i32 %384, %383
  store i32 %385, ptr %23, align 4, !tbaa !9
  br label %386

386:                                              ; preds = %392, %382
  %387 = load ptr, ptr %25, align 8, !tbaa !5
  %388 = getelementptr inbounds i8, ptr %387, i32 1
  store ptr %388, ptr %25, align 8, !tbaa !5
  %389 = load i8, ptr %387, align 1, !tbaa !30
  %390 = load ptr, ptr %8, align 8, !tbaa !5
  %391 = getelementptr inbounds i8, ptr %390, i32 1
  store ptr %391, ptr %8, align 8, !tbaa !5
  store i8 %389, ptr %390, align 1, !tbaa !30
  br label %392

392:                                              ; preds = %386
  %393 = load i32, ptr %22, align 4, !tbaa !9
  %394 = add i32 %393, -1
  store i32 %394, ptr %22, align 4, !tbaa !9
  %395 = icmp ne i32 %394, 0
  br i1 %395, label %386, label %396, !llvm.loop !41

396:                                              ; preds = %392
  %397 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %397, ptr %25, align 8, !tbaa !5
  %398 = load i32, ptr %13, align 4, !tbaa !9
  %399 = load i32, ptr %23, align 4, !tbaa !9
  %400 = icmp ult i32 %398, %399
  br i1 %400, label %401, label %422

401:                                              ; preds = %396
  %402 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %402, ptr %22, align 4, !tbaa !9
  %403 = load i32, ptr %22, align 4, !tbaa !9
  %404 = load i32, ptr %23, align 4, !tbaa !9
  %405 = sub i32 %404, %403
  store i32 %405, ptr %23, align 4, !tbaa !9
  br label %406

406:                                              ; preds = %412, %401
  %407 = load ptr, ptr %25, align 8, !tbaa !5
  %408 = getelementptr inbounds i8, ptr %407, i32 1
  store ptr %408, ptr %25, align 8, !tbaa !5
  %409 = load i8, ptr %407, align 1, !tbaa !30
  %410 = load ptr, ptr %8, align 8, !tbaa !5
  %411 = getelementptr inbounds i8, ptr %410, i32 1
  store ptr %411, ptr %8, align 8, !tbaa !5
  store i8 %409, ptr %410, align 1, !tbaa !30
  br label %412

412:                                              ; preds = %406
  %413 = load i32, ptr %22, align 4, !tbaa !9
  %414 = add i32 %413, -1
  store i32 %414, ptr %22, align 4, !tbaa !9
  %415 = icmp ne i32 %414, 0
  br i1 %415, label %406, label %416, !llvm.loop !42

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

422:                                              ; preds = %416, %396
  br label %423

423:                                              ; preds = %422, %367
  br label %455

424:                                              ; preds = %363
  %425 = load i32, ptr %13, align 4, !tbaa !9
  %426 = load i32, ptr %22, align 4, !tbaa !9
  %427 = sub i32 %425, %426
  %428 = load ptr, ptr %25, align 8, !tbaa !5
  %429 = zext i32 %427 to i64
  %430 = getelementptr inbounds i8, ptr %428, i64 %429
  store ptr %430, ptr %25, align 8, !tbaa !5
  %431 = load i32, ptr %22, align 4, !tbaa !9
  %432 = load i32, ptr %23, align 4, !tbaa !9
  %433 = icmp ult i32 %431, %432
  br i1 %433, label %434, label %454

434:                                              ; preds = %424
  %435 = load i32, ptr %22, align 4, !tbaa !9
  %436 = load i32, ptr %23, align 4, !tbaa !9
  %437 = sub i32 %436, %435
  store i32 %437, ptr %23, align 4, !tbaa !9
  br label %438

438:                                              ; preds = %444, %434
  %439 = load ptr, ptr %25, align 8, !tbaa !5
  %440 = getelementptr inbounds i8, ptr %439, i32 1
  store ptr %440, ptr %25, align 8, !tbaa !5
  %441 = load i8, ptr %439, align 1, !tbaa !30
  %442 = load ptr, ptr %8, align 8, !tbaa !5
  %443 = getelementptr inbounds i8, ptr %442, i32 1
  store ptr %443, ptr %8, align 8, !tbaa !5
  store i8 %441, ptr %442, align 1, !tbaa !30
  br label %444

444:                                              ; preds = %438
  %445 = load i32, ptr %22, align 4, !tbaa !9
  %446 = add i32 %445, -1
  store i32 %446, ptr %22, align 4, !tbaa !9
  %447 = icmp ne i32 %446, 0
  br i1 %447, label %438, label %448, !llvm.loop !43

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

454:                                              ; preds = %448, %424
  br label %455

455:                                              ; preds = %454, %423
  br label %456

456:                                              ; preds = %455, %362
  br label %457

457:                                              ; preds = %460, %456
  %458 = load i32, ptr %23, align 4, !tbaa !9
  %459 = icmp ugt i32 %458, 2
  br i1 %459, label %460, label %478

460:                                              ; preds = %457
  %461 = load ptr, ptr %25, align 8, !tbaa !5
  %462 = getelementptr inbounds i8, ptr %461, i32 1
  store ptr %462, ptr %25, align 8, !tbaa !5
  %463 = load i8, ptr %461, align 1, !tbaa !30
  %464 = load ptr, ptr %8, align 8, !tbaa !5
  %465 = getelementptr inbounds i8, ptr %464, i32 1
  store ptr %465, ptr %8, align 8, !tbaa !5
  store i8 %463, ptr %464, align 1, !tbaa !30
  %466 = load ptr, ptr %25, align 8, !tbaa !5
  %467 = getelementptr inbounds i8, ptr %466, i32 1
  store ptr %467, ptr %25, align 8, !tbaa !5
  %468 = load i8, ptr %466, align 1, !tbaa !30
  %469 = load ptr, ptr %8, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i32 1
  store ptr %470, ptr %8, align 8, !tbaa !5
  store i8 %468, ptr %469, align 1, !tbaa !30
  %471 = load ptr, ptr %25, align 8, !tbaa !5
  %472 = getelementptr inbounds i8, ptr %471, i32 1
  store ptr %472, ptr %25, align 8, !tbaa !5
  %473 = load i8, ptr %471, align 1, !tbaa !30
  %474 = load ptr, ptr %8, align 8, !tbaa !5
  %475 = getelementptr inbounds i8, ptr %474, i32 1
  store ptr %475, ptr %8, align 8, !tbaa !5
  store i8 %473, ptr %474, align 1, !tbaa !30
  %476 = load i32, ptr %23, align 4, !tbaa !9
  %477 = sub i32 %476, 3
  store i32 %477, ptr %23, align 4, !tbaa !9
  br label %457, !llvm.loop !44

478:                                              ; preds = %457
  %479 = load i32, ptr %23, align 4, !tbaa !9
  %480 = icmp ne i32 %479, 0
  br i1 %480, label %481, label %496

481:                                              ; preds = %478
  %482 = load ptr, ptr %25, align 8, !tbaa !5
  %483 = getelementptr inbounds i8, ptr %482, i32 1
  store ptr %483, ptr %25, align 8, !tbaa !5
  %484 = load i8, ptr %482, align 1, !tbaa !30
  %485 = load ptr, ptr %8, align 8, !tbaa !5
  %486 = getelementptr inbounds i8, ptr %485, i32 1
  store ptr %486, ptr %8, align 8, !tbaa !5
  store i8 %484, ptr %485, align 1, !tbaa !30
  %487 = load i32, ptr %23, align 4, !tbaa !9
  %488 = icmp ugt i32 %487, 1
  br i1 %488, label %489, label %495

489:                                              ; preds = %481
  %490 = load ptr, ptr %25, align 8, !tbaa !5
  %491 = getelementptr inbounds i8, ptr %490, i32 1
  store ptr %491, ptr %25, align 8, !tbaa !5
  %492 = load i8, ptr %490, align 1, !tbaa !30
  %493 = load ptr, ptr %8, align 8, !tbaa !5
  %494 = getelementptr inbounds i8, ptr %493, i32 1
  store ptr %494, ptr %8, align 8, !tbaa !5
  store i8 %492, ptr %493, align 1, !tbaa !30
  br label %495

495:                                              ; preds = %489, %481
  br label %496

496:                                              ; preds = %495, %478
  br label %543

497:                                              ; preds = %285
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = load i32, ptr %24, align 4, !tbaa !9
  %500 = zext i32 %499 to i64
  %501 = sub i64 0, %500
  %502 = getelementptr inbounds i8, ptr %498, i64 %501
  store ptr %502, ptr %25, align 8, !tbaa !5
  br label %503

503:                                              ; preds = %521, %497
  %504 = load ptr, ptr %25, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i32 1
  store ptr %505, ptr %25, align 8, !tbaa !5
  %506 = load i8, ptr %504, align 1, !tbaa !30
  %507 = load ptr, ptr %8, align 8, !tbaa !5
  %508 = getelementptr inbounds i8, ptr %507, i32 1
  store ptr %508, ptr %8, align 8, !tbaa !5
  store i8 %506, ptr %507, align 1, !tbaa !30
  %509 = load ptr, ptr %25, align 8, !tbaa !5
  %510 = getelementptr inbounds i8, ptr %509, i32 1
  store ptr %510, ptr %25, align 8, !tbaa !5
  %511 = load i8, ptr %509, align 1, !tbaa !30
  %512 = load ptr, ptr %8, align 8, !tbaa !5
  %513 = getelementptr inbounds i8, ptr %512, i32 1
  store ptr %513, ptr %8, align 8, !tbaa !5
  store i8 %511, ptr %512, align 1, !tbaa !30
  %514 = load ptr, ptr %25, align 8, !tbaa !5
  %515 = getelementptr inbounds i8, ptr %514, i32 1
  store ptr %515, ptr %25, align 8, !tbaa !5
  %516 = load i8, ptr %514, align 1, !tbaa !30
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = getelementptr inbounds i8, ptr %517, i32 1
  store ptr %518, ptr %8, align 8, !tbaa !5
  store i8 %516, ptr %517, align 1, !tbaa !30
  %519 = load i32, ptr %23, align 4, !tbaa !9
  %520 = sub i32 %519, 3
  store i32 %520, ptr %23, align 4, !tbaa !9
  br label %521

521:                                              ; preds = %503
  %522 = load i32, ptr %23, align 4, !tbaa !9
  %523 = icmp ugt i32 %522, 2
  br i1 %523, label %503, label %524, !llvm.loop !45

524:                                              ; preds = %521
  %525 = load i32, ptr %23, align 4, !tbaa !9
  %526 = icmp ne i32 %525, 0
  br i1 %526, label %527, label %542

527:                                              ; preds = %524
  %528 = load ptr, ptr %25, align 8, !tbaa !5
  %529 = getelementptr inbounds i8, ptr %528, i32 1
  store ptr %529, ptr %25, align 8, !tbaa !5
  %530 = load i8, ptr %528, align 1, !tbaa !30
  %531 = load ptr, ptr %8, align 8, !tbaa !5
  %532 = getelementptr inbounds i8, ptr %531, i32 1
  store ptr %532, ptr %8, align 8, !tbaa !5
  store i8 %530, ptr %531, align 1, !tbaa !30
  %533 = load i32, ptr %23, align 4, !tbaa !9
  %534 = icmp ugt i32 %533, 1
  br i1 %534, label %535, label %541

535:                                              ; preds = %527
  %536 = load ptr, ptr %25, align 8, !tbaa !5
  %537 = getelementptr inbounds i8, ptr %536, i32 1
  store ptr %537, ptr %25, align 8, !tbaa !5
  %538 = load i8, ptr %536, align 1, !tbaa !30
  %539 = load ptr, ptr %8, align 8, !tbaa !5
  %540 = getelementptr inbounds i8, ptr %539, i32 1
  store ptr %540, ptr %8, align 8, !tbaa !5
  store i8 %538, ptr %539, align 1, !tbaa !30
  br label %541

541:                                              ; preds = %535, %527
  br label %542

542:                                              ; preds = %541, %524
  br label %543

543:                                              ; preds = %542, %496
  br label %568

544:                                              ; preds = %228
  %545 = load i32, ptr %22, align 4, !tbaa !9
  %546 = and i32 %545, 64
  %547 = icmp eq i32 %546, 0
  br i1 %547, label %548, label %563

548:                                              ; preds = %544
  %549 = load ptr, ptr %18, align 8, !tbaa !5
  %550 = load ptr, ptr %21, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.code, ptr %550, i32 0, i32 2
  %552 = load i16, ptr %551, align 2, !tbaa !35
  %553 = zext i16 %552 to i32
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds %struct.code, ptr %549, i64 %554
  %556 = load i64, ptr %15, align 8, !tbaa !24
  %557 = load i32, ptr %22, align 4, !tbaa !9
  %558 = shl i32 1, %557
  %559 = sub i32 %558, 1
  %560 = zext i32 %559 to i64
  %561 = and i64 %556, %560
  %562 = getelementptr inbounds %struct.code, ptr %555, i64 %561
  store ptr %562, ptr %21, align 8, !tbaa !5
  br label %228

563:                                              ; preds = %544
  %564 = load ptr, ptr %3, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.z_stream_s, ptr %564, i32 0, i32 6
  store ptr @.str.1, ptr %565, align 8, !tbaa !37
  %566 = load ptr, ptr %5, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.inflate_state, ptr %566, i32 0, i32 1
  store i32 16209, ptr %567, align 8, !tbaa !38
  br label %612

568:                                              ; preds = %543
  br label %600

569:                                              ; preds = %150
  %570 = load i32, ptr %22, align 4, !tbaa !9
  %571 = and i32 %570, 64
  %572 = icmp eq i32 %571, 0
  br i1 %572, label %573, label %588

573:                                              ; preds = %569
  %574 = load ptr, ptr %17, align 8, !tbaa !5
  %575 = load ptr, ptr %21, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.code, ptr %575, i32 0, i32 2
  %577 = load i16, ptr %576, align 2, !tbaa !35
  %578 = zext i16 %577 to i32
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds %struct.code, ptr %574, i64 %579
  %581 = load i64, ptr %15, align 8, !tbaa !24
  %582 = load i32, ptr %22, align 4, !tbaa !9
  %583 = shl i32 1, %582
  %584 = sub i32 %583, 1
  %585 = zext i32 %584 to i64
  %586 = and i64 %581, %585
  %587 = getelementptr inbounds %struct.code, ptr %580, i64 %586
  store ptr %587, ptr %21, align 8, !tbaa !5
  br label %125

588:                                              ; preds = %569
  %589 = load i32, ptr %22, align 4, !tbaa !9
  %590 = and i32 %589, 32
  %591 = icmp ne i32 %590, 0
  br i1 %591, label %592, label %595

592:                                              ; preds = %588
  %593 = load ptr, ptr %5, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.inflate_state, ptr %593, i32 0, i32 1
  store i32 16191, ptr %594, align 8, !tbaa !38
  br label %612

595:                                              ; preds = %588
  %596 = load ptr, ptr %3, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.z_stream_s, ptr %596, i32 0, i32 6
  store ptr @.str.2, ptr %597, align 8, !tbaa !37
  %598 = load ptr, ptr %5, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.inflate_state, ptr %598, i32 0, i32 1
  store i32 16209, ptr %599, align 8, !tbaa !38
  br label %612

600:                                              ; preds = %568
  br label %601

601:                                              ; preds = %600, %143
  br label %602

602:                                              ; preds = %601
  %603 = load ptr, ptr %6, align 8, !tbaa !5
  %604 = load ptr, ptr %7, align 8, !tbaa !5
  %605 = icmp ult ptr %603, %604
  br i1 %605, label %606, label %610

606:                                              ; preds = %602
  %607 = load ptr, ptr %8, align 8, !tbaa !5
  %608 = load ptr, ptr %10, align 8, !tbaa !5
  %609 = icmp ult ptr %607, %608
  br label %610

610:                                              ; preds = %606, %602
  %611 = phi i1 [ false, %602 ], [ %609, %606 ]
  br i1 %611, label %92, label %612, !llvm.loop !46

612:                                              ; preds = %610, %595, %592, %563, %322
  %613 = load i32, ptr %16, align 4, !tbaa !9
  %614 = lshr i32 %613, 3
  store i32 %614, ptr %23, align 4, !tbaa !9
  %615 = load i32, ptr %23, align 4, !tbaa !9
  %616 = load ptr, ptr %6, align 8, !tbaa !5
  %617 = zext i32 %615 to i64
  %618 = sub i64 0, %617
  %619 = getelementptr inbounds i8, ptr %616, i64 %618
  store ptr %619, ptr %6, align 8, !tbaa !5
  %620 = load i32, ptr %23, align 4, !tbaa !9
  %621 = shl i32 %620, 3
  %622 = load i32, ptr %16, align 4, !tbaa !9
  %623 = sub i32 %622, %621
  store i32 %623, ptr %16, align 4, !tbaa !9
  %624 = load i32, ptr %16, align 4, !tbaa !9
  %625 = shl i32 1, %624
  %626 = sub i32 %625, 1
  %627 = zext i32 %626 to i64
  %628 = load i64, ptr %15, align 8, !tbaa !24
  %629 = and i64 %628, %627
  store i64 %629, ptr %15, align 8, !tbaa !24
  %630 = load ptr, ptr %6, align 8, !tbaa !5
  %631 = load ptr, ptr %3, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.z_stream_s, ptr %631, i32 0, i32 0
  store ptr %630, ptr %632, align 8, !tbaa !14
  %633 = load ptr, ptr %8, align 8, !tbaa !5
  %634 = load ptr, ptr %3, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.z_stream_s, ptr %634, i32 0, i32 3
  store ptr %633, ptr %635, align 8, !tbaa !16
  %636 = load ptr, ptr %6, align 8, !tbaa !5
  %637 = load ptr, ptr %7, align 8, !tbaa !5
  %638 = icmp ult ptr %636, %637
  br i1 %638, label %639, label %646

639:                                              ; preds = %612
  %640 = load ptr, ptr %7, align 8, !tbaa !5
  %641 = load ptr, ptr %6, align 8, !tbaa !5
  %642 = ptrtoint ptr %640 to i64
  %643 = ptrtoint ptr %641 to i64
  %644 = sub i64 %642, %643
  %645 = add nsw i64 5, %644
  br label %653

646:                                              ; preds = %612
  %647 = load ptr, ptr %6, align 8, !tbaa !5
  %648 = load ptr, ptr %7, align 8, !tbaa !5
  %649 = ptrtoint ptr %647 to i64
  %650 = ptrtoint ptr %648 to i64
  %651 = sub i64 %649, %650
  %652 = sub nsw i64 5, %651
  br label %653

653:                                              ; preds = %646, %639
  %654 = phi i64 [ %645, %639 ], [ %652, %646 ]
  %655 = trunc i64 %654 to i32
  %656 = load ptr, ptr %3, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.z_stream_s, ptr %656, i32 0, i32 1
  store i32 %655, ptr %657, align 8, !tbaa !15
  %658 = load ptr, ptr %8, align 8, !tbaa !5
  %659 = load ptr, ptr %10, align 8, !tbaa !5
  %660 = icmp ult ptr %658, %659
  br i1 %660, label %661, label %668

661:                                              ; preds = %653
  %662 = load ptr, ptr %10, align 8, !tbaa !5
  %663 = load ptr, ptr %8, align 8, !tbaa !5
  %664 = ptrtoint ptr %662 to i64
  %665 = ptrtoint ptr %663 to i64
  %666 = sub i64 %664, %665
  %667 = add nsw i64 257, %666
  br label %675

668:                                              ; preds = %653
  %669 = load ptr, ptr %8, align 8, !tbaa !5
  %670 = load ptr, ptr %10, align 8, !tbaa !5
  %671 = ptrtoint ptr %669 to i64
  %672 = ptrtoint ptr %670 to i64
  %673 = sub i64 %671, %672
  %674 = sub nsw i64 257, %673
  br label %675

675:                                              ; preds = %668, %661
  %676 = phi i64 [ %667, %661 ], [ %674, %668 ]
  %677 = trunc i64 %676 to i32
  %678 = load ptr, ptr %3, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.z_stream_s, ptr %678, i32 0, i32 4
  store i32 %677, ptr %679, align 8, !tbaa !17
  %680 = load i64, ptr %15, align 8, !tbaa !24
  %681 = load ptr, ptr %5, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.inflate_state, ptr %681, i32 0, i32 15
  store i64 %680, ptr %682, align 8, !tbaa !23
  %683 = load i32, ptr %16, align 4, !tbaa !9
  %684 = load ptr, ptr %5, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.inflate_state, ptr %684, i32 0, i32 16
  store i32 %683, ptr %685, 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 9064, !10, i64 9068, !10, i64 9072}
!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 9064}
!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}


; 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
  %notmask310 = shl nsw i32 -1, %44
  %45 = xor i32 %notmask310, -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 9064
  %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.check524 = icmp ult i32 %28, 32
  %n.vec527 = and i64 %56, 4294967264
  %.cast530 = trunc nuw i64 %n.vec527 to i32
  %ind.end531 = sub i32 %28, %.cast530
  %ind.end533 = getelementptr i8, ptr %30, i64 %n.vec527
  %cmp.n544 = icmp eq i64 %n.vec527, %56
  br label %66

66:                                               ; preds = %490, %2
  %.0274 = phi i32 [ %35, %2 ], [ %.8282, %490 ]
  %.0264 = phi i64 [ %33, %2 ], [ %.8272, %490 ]
  %.0256 = phi ptr [ %12, %2 ], [ %.8, %490 ]
  %.0249 = phi ptr [ %5, %2 ], [ %.6255, %490 ]
  %67 = icmp ult i32 %.0274, 15
  br i1 %67, label %68, label %83

68:                                               ; preds = %66
  %69 = getelementptr inbounds i8, ptr %.0249, i64 1
  %70 = load i8, ptr %.0249, align 1, !tbaa !27
  %71 = zext i8 %70 to i64
  %72 = zext nneg i32 %.0274 to i64
  %73 = shl nuw nsw i64 %71, %72
  %74 = add i64 %73, %.0264
  %75 = add nuw nsw i32 %.0274, 8
  %76 = getelementptr inbounds i8, ptr %.0249, 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 %.0274, 16
  br label %83

83:                                               ; preds = %68, %66
  %.1275 = phi i32 [ %82, %68 ], [ %.0274, %66 ]
  %.1265 = phi i64 [ %81, %68 ], [ %.0264, %66 ]
  %.1250 = phi ptr [ %76, %68 ], [ %.0249, %66 ]
  %84 = and i64 %.1265, %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 %.1265, %89
  %91 = sub i32 %.1275, %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 = %471, %83
  %.0247.lcssa = phi ptr [ %85, %83 ], [ %479, %471 ]
  %.lcssa333 = phi i64 [ %90, %83 ], [ %484, %471 ]
  %.lcssa330 = phi i32 [ %91, %83 ], [ %485, %471 ]
  %94 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 2
  %95 = load i16, ptr %94, align 2, !tbaa !32
  %96 = trunc i16 %95 to i8
  %97 = getelementptr inbounds i8, ptr %.0256, i64 1
  store i8 %96, ptr %.0256, align 1, !tbaa !27
  br label %490

.lr.ph:                                           ; preds = %83, %471
  %.in = phi i8 [ %486, %471 ], [ %92, %83 ]
  %98 = phi i32 [ %485, %471 ], [ %91, %83 ]
  %99 = phi i64 [ %484, %471 ], [ %90, %83 ]
  %.0247360 = phi ptr [ %479, %471 ], [ %85, %83 ]
  %100 = zext i8 %.in to i32
  %101 = and i32 %100, 16
  %.not = icmp eq i32 %101, 0
  br i1 %.not, label %468, label %102

102:                                              ; preds = %.lr.ph
  %103 = getelementptr inbounds i8, ptr %.0247360, i64 2
  %104 = load i16, ptr %103, align 2, !tbaa !32
  %105 = zext i16 %104 to i32
  %106 = and i32 %100, 15
  %.not313 = icmp eq i32 %106, 0
  br i1 %.not313, 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 %.1250, i64 1
  %111 = load i8, ptr %.1250, 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
  %.3277 = phi i32 [ %116, %109 ], [ %98, %107 ]
  %.3267 = phi i64 [ %115, %109 ], [ %99, %107 ]
  %.2251 = phi ptr [ %110, %109 ], [ %.1250, %107 ]
  %118 = trunc i64 %.3267 to i32
  %notmask314 = shl nsw i32 -1, %106
  %119 = xor i32 %notmask314, -1
  %120 = and i32 %118, %119
  %121 = add nuw nsw i32 %120, %105
  %122 = zext nneg i32 %106 to i64
  %123 = lshr i64 %.3267, %122
  %124 = sub i32 %.3277, %106
  br label %125

125:                                              ; preds = %117, %102
  %.4278 = phi i32 [ %124, %117 ], [ %98, %102 ]
  %.4268 = phi i64 [ %123, %117 ], [ %99, %102 ]
  %.3252 = phi ptr [ %.2251, %117 ], [ %.1250, %102 ]
  %.0239 = phi i32 [ %121, %117 ], [ %105, %102 ]
  %126 = icmp ult i32 %.4278, 15
  br i1 %126, label %127, label %142

127:                                              ; preds = %125
  %128 = getelementptr inbounds i8, ptr %.3252, i64 1
  %129 = load i8, ptr %.3252, align 1, !tbaa !27
  %130 = zext i8 %129 to i64
  %131 = zext nneg i32 %.4278 to i64
  %132 = shl nuw nsw i64 %130, %131
  %133 = add i64 %132, %.4268
  %134 = add nuw nsw i32 %.4278, 8
  %135 = getelementptr inbounds i8, ptr %.3252, 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 %.4278, 16
  br label %142

142:                                              ; preds = %127, %125
  %.5279 = phi i32 [ %141, %127 ], [ %.4278, %125 ]
  %.5269 = phi i64 [ %140, %127 ], [ %.4268, %125 ]
  %.4253 = phi ptr [ %135, %127 ], [ %.3252, %125 ]
  %143 = and i64 %.5269, %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 %.5269, %148
  %150 = sub i32 %.5279, %147
  %151 = load i8, ptr %144, align 2, !tbaa !31
  %152 = zext i8 %151 to i32
  %153 = and i32 %152, 16
  %.not315363 = icmp eq i32 %153, 0
  br i1 %.not315363, label %.lr.ph366, label %._crit_edge367

._crit_edge367:                                   ; preds = %450, %142
  %.1248.lcssa = phi ptr [ %144, %142 ], [ %458, %450 ]
  %.lcssa341 = phi i64 [ %149, %142 ], [ %463, %450 ]
  %.lcssa339 = phi i32 [ %150, %142 ], [ %464, %450 ]
  %.lcssa = phi i32 [ %152, %142 ], [ %466, %450 ]
  %154 = getelementptr inbounds i8, ptr %.1248.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 %.lcssa339, %157
  br i1 %158, label %159, label %176

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

168:                                              ; preds = %159
  %169 = getelementptr inbounds i8, ptr %.4253, 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 %.lcssa339, 16
  br label %176

176:                                              ; preds = %159, %168, %._crit_edge367
  %.7281 = phi i32 [ %175, %168 ], [ %166, %159 ], [ %.lcssa339, %._crit_edge367 ]
  %.7271 = phi i64 [ %174, %168 ], [ %165, %159 ], [ %.lcssa341, %._crit_edge367 ]
  %.5254 = phi ptr [ %169, %168 ], [ %160, %159 ], [ %.4253, %._crit_edge367 ]
  %177 = trunc i64 %.7271 to i32
  %notmask317 = shl nsw i32 -1, %157
  %178 = xor i32 %notmask317, -1
  %179 = and i32 %177, %178
  %180 = add nuw nsw i32 %179, %156
  %181 = zext nneg i32 %157 to i64
  %182 = lshr i64 %.7271, %181
  %183 = sub i32 %.7281, %157
  %184 = ptrtoint ptr %.0256 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 %420

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
  %.not319 = icmp eq i32 %192, 0
  br i1 %.not319, label %193, label %.loopexit.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, %.0239
  br i1 %198, label %.preheader, label %376

.preheader:                                       ; 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.check = icmp ult i32 %202, 31
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader
  %205 = add i64 %31, %196
  %206 = sub i64 %184, %205
  %diff.check = icmp ult i64 %206, 32
  br i1 %diff.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %204, 8589934560
  %ind.end = getelementptr i8, ptr %.0256, i64 %n.vec
  %.cast = trunc i64 %n.vec to i32
  %ind.end512 = sub i32 %189, %.cast
  %ind.end514 = getelementptr i8, ptr %197, i64 %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %.0256, i64 %index
  %next.gep517 = getelementptr i8, ptr %197, i64 %index
  %207 = getelementptr i8, ptr %next.gep517, i64 16
  %wide.load = load <16 x i8>, ptr %next.gep517, align 1, !tbaa !27
  %wide.load519 = load <16 x i8>, ptr %207, align 1, !tbaa !27
  %208 = getelementptr i8, ptr %next.gep, i64 16
  store <16 x i8> %wide.load, ptr %next.gep, align 1, !tbaa !27
  store <16 x i8> %wide.load519, ptr %208, align 1, !tbaa !27
  %index.next = add nuw i64 %index, 32
  %209 = icmp eq i64 %index.next, %n.vec
  br i1 %209, label %middle.block, label %vector.body, !llvm.loop !34

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.preheader
  %.1257.ph = phi ptr [ %.0256, %vector.memcheck ], [ %.0256, %.preheader ], [ %ind.end, %middle.block ]
  %.0243.ph = phi i32 [ %189, %vector.memcheck ], [ %189, %.preheader ], [ %ind.end512, %middle.block ]
  %.0.ph = phi ptr [ %197, %vector.memcheck ], [ %197, %.preheader ], [ %ind.end514, %middle.block ]
  %210 = add i32 %.0243.ph, -1
  %xtraiter651 = and i32 %.0243.ph, 7
  %lcmp.mod652.not = icmp eq i32 %xtraiter651, 0
  br i1 %lcmp.mod652.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

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

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.lcssa630.unr = phi ptr [ poison, %scalar.ph.preheader ], [ %213, %scalar.ph.prol ]
  %.1257.unr = phi ptr [ %.1257.ph, %scalar.ph.preheader ], [ %213, %scalar.ph.prol ]
  %.0243.unr = phi i32 [ %.0243.ph, %scalar.ph.preheader ], [ %214, %scalar.ph.prol ]
  %.0.unr = phi ptr [ %.0.ph, %scalar.ph.preheader ], [ %211, %scalar.ph.prol ]
  %215 = icmp ult i32 %210, 7
  br i1 %215, label %.loopexit596, label %scalar.ph

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

.loopexit596:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %.lcssa497 = phi ptr [ %ind.end, %middle.block ], [ %.lcssa630.unr, %scalar.ph.prol.loopexit ], [ %239, %scalar.ph ]
  %241 = sub nsw i32 %.0239, %189
  %242 = zext nneg i32 %180 to i64
  %243 = sub nsw i64 0, %242
  %244 = getelementptr inbounds i8, ptr %.lcssa497, 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, %.0239
  br i1 %252, label %.preheader466, label %376

.preheader466:                                    ; 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.check549 = icmp ult i32 %256, 31
  br i1 %min.iters.check549, label %scalar.ph548.preheader, label %vector.memcheck545

vector.memcheck545:                               ; preds = %.preheader466
  %259 = add i64 %31, %249
  %260 = sub i64 %184, %259
  %diff.check546 = icmp ult i64 %260, 32
  br i1 %diff.check546, label %scalar.ph548.preheader, label %vector.ph550

vector.ph550:                                     ; preds = %vector.memcheck545
  %n.vec552 = and i64 %258, 8589934560
  %ind.end554 = getelementptr i8, ptr %.0256, i64 %n.vec552
  %.cast556 = trunc i64 %n.vec552 to i32
  %ind.end557 = sub i32 %251, %.cast556
  %ind.end559 = getelementptr i8, ptr %250, i64 %n.vec552
  br label %vector.body561

vector.body561:                                   ; preds = %vector.body561, %vector.ph550
  %index562 = phi i64 [ 0, %vector.ph550 ], [ %index.next569, %vector.body561 ]
  %next.gep563 = getelementptr i8, ptr %.0256, i64 %index562
  %next.gep565 = getelementptr i8, ptr %250, i64 %index562
  %261 = getelementptr i8, ptr %next.gep565, i64 16
  %wide.load567 = load <16 x i8>, ptr %next.gep565, align 1, !tbaa !27
  %wide.load568 = load <16 x i8>, ptr %261, align 1, !tbaa !27
  %262 = getelementptr i8, ptr %next.gep563, i64 16
  store <16 x i8> %wide.load567, ptr %next.gep563, align 1, !tbaa !27
  store <16 x i8> %wide.load568, ptr %262, align 1, !tbaa !27
  %index.next569 = add nuw i64 %index562, 32
  %263 = icmp eq i64 %index.next569, %n.vec552
  br i1 %263, label %middle.block547, label %vector.body561, !llvm.loop !41

middle.block547:                                  ; preds = %vector.body561
  %cmp.n570 = icmp eq i64 %258, %n.vec552
  %ind.escape = add nsw i64 %n.vec552, -1
  br i1 %cmp.n570, label %.loopexit598, label %scalar.ph548.preheader

scalar.ph548.preheader:                           ; preds = %middle.block547, %vector.memcheck545, %.preheader466
  %indvar.ph = phi i64 [ 0, %vector.memcheck545 ], [ 0, %.preheader466 ], [ %n.vec552, %middle.block547 ]
  %.2258.ph = phi ptr [ %.0256, %vector.memcheck545 ], [ %.0256, %.preheader466 ], [ %ind.end554, %middle.block547 ]
  %.1244.ph = phi i32 [ %251, %vector.memcheck545 ], [ %251, %.preheader466 ], [ %ind.end557, %middle.block547 ]
  %.1.ph = phi ptr [ %250, %vector.memcheck545 ], [ %250, %.preheader466 ], [ %ind.end559, %middle.block547 ]
  %264 = add i32 %.1244.ph, -1
  %xtraiter645 = and i32 %.1244.ph, 3
  %lcmp.mod646.not = icmp eq i32 %xtraiter645, 0
  br i1 %lcmp.mod646.not, label %scalar.ph548.prol.loopexit, label %scalar.ph548.prol

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

scalar.ph548.prol.loopexit:                       ; preds = %scalar.ph548.prol, %scalar.ph548.preheader
  %indvar.lcssa628.unr = phi i64 [ poison, %scalar.ph548.preheader ], [ %indvar.prol, %scalar.ph548.prol ]
  %.lcssa627.unr = phi ptr [ poison, %scalar.ph548.preheader ], [ %267, %scalar.ph548.prol ]
  %indvar.unr = phi i64 [ %indvar.ph, %scalar.ph548.preheader ], [ %indvar.next.prol, %scalar.ph548.prol ]
  %.2258.unr = phi ptr [ %.2258.ph, %scalar.ph548.preheader ], [ %267, %scalar.ph548.prol ]
  %.1244.unr = phi i32 [ %.1244.ph, %scalar.ph548.preheader ], [ %268, %scalar.ph548.prol ]
  %.1.unr = phi ptr [ %.1.ph, %scalar.ph548.preheader ], [ %265, %scalar.ph548.prol ]
  %269 = icmp ult i32 %264, 3
  br i1 %269, label %.loopexit598, label %scalar.ph548

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

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

.loopexit598:                                     ; preds = %.loopexit598.loopexit.unr-lcssa, %scalar.ph548.prol.loopexit, %middle.block547
  %indvar.lcssa = phi i64 [ %ind.escape, %middle.block547 ], [ %indvar.lcssa628.unr, %scalar.ph548.prol.loopexit ], [ %indvar.next.2, %.loopexit598.loopexit.unr-lcssa ]
  %.lcssa495 = phi ptr [ %ind.end554, %middle.block547 ], [ %.lcssa627.unr, %scalar.ph548.prol.loopexit ], [ %281, %.loopexit598.loopexit.unr-lcssa ]
  %283 = sub nsw i32 %.0239, %251
  %284 = icmp ult i32 %28, %283
  br i1 %284, label %.preheader465, label %376

.preheader465:                                    ; preds = %.loopexit598
  br i1 %min.iters.check524, label %scalar.ph523.preheader, label %vector.memcheck520

vector.memcheck520:                               ; preds = %.preheader465
  %reass.sub = sub i64 %184, %31
  %285 = add i64 %reass.sub, 1
  %286 = add i64 %indvar.lcssa, %285
  %diff.check521 = icmp ult i64 %286, 32
  br i1 %diff.check521, label %scalar.ph523.preheader, label %vector.ph525

vector.ph525:                                     ; preds = %vector.memcheck520
  %ind.end528 = getelementptr i8, ptr %.lcssa495, i64 %n.vec527
  br label %vector.body535

vector.body535:                                   ; preds = %vector.body535, %vector.ph525
  %index536 = phi i64 [ 0, %vector.ph525 ], [ %index.next543, %vector.body535 ]
  %next.gep537 = getelementptr i8, ptr %.lcssa495, i64 %index536
  %next.gep539 = getelementptr i8, ptr %30, i64 %index536
  %287 = getelementptr i8, ptr %next.gep539, i64 16
  %wide.load541 = load <16 x i8>, ptr %next.gep539, align 1, !tbaa !27
  %wide.load542 = load <16 x i8>, ptr %287, align 1, !tbaa !27
  %288 = getelementptr i8, ptr %next.gep537, i64 16
  store <16 x i8> %wide.load541, ptr %next.gep537, align 1, !tbaa !27
  store <16 x i8> %wide.load542, ptr %288, align 1, !tbaa !27
  %index.next543 = add nuw i64 %index536, 32
  %289 = icmp eq i64 %index.next543, %n.vec527
  br i1 %289, label %middle.block522, label %vector.body535, !llvm.loop !44

middle.block522:                                  ; preds = %vector.body535
  br i1 %cmp.n544, label %.loopexit597, label %scalar.ph523.preheader

scalar.ph523.preheader:                           ; preds = %middle.block522, %vector.memcheck520, %.preheader465
  %.3259.ph = phi ptr [ %.lcssa495, %vector.memcheck520 ], [ %.lcssa495, %.preheader465 ], [ %ind.end528, %middle.block522 ]
  %.2245.ph = phi i32 [ %28, %vector.memcheck520 ], [ %28, %.preheader465 ], [ %ind.end531, %middle.block522 ]
  %.2.ph = phi ptr [ %30, %vector.memcheck520 ], [ %30, %.preheader465 ], [ %ind.end533, %middle.block522 ]
  %290 = add i32 %.2245.ph, -1
  %xtraiter648 = and i32 %.2245.ph, 7
  %lcmp.mod649.not = icmp eq i32 %xtraiter648, 0
  br i1 %lcmp.mod649.not, label %scalar.ph523.prol.loopexit, label %scalar.ph523.prol

scalar.ph523.prol:                                ; preds = %scalar.ph523.preheader, %scalar.ph523.prol
  %.3259.prol = phi ptr [ %293, %scalar.ph523.prol ], [ %.3259.ph, %scalar.ph523.preheader ]
  %.2245.prol = phi i32 [ %294, %scalar.ph523.prol ], [ %.2245.ph, %scalar.ph523.preheader ]
  %.2.prol = phi ptr [ %291, %scalar.ph523.prol ], [ %.2.ph, %scalar.ph523.preheader ]
  %prol.iter650 = phi i32 [ %prol.iter650.next, %scalar.ph523.prol ], [ 0, %scalar.ph523.preheader ]
  %291 = getelementptr inbounds i8, ptr %.2.prol, i64 1
  %292 = load i8, ptr %.2.prol, align 1, !tbaa !27
  %293 = getelementptr inbounds i8, ptr %.3259.prol, i64 1
  store i8 %292, ptr %.3259.prol, align 1, !tbaa !27
  %294 = add i32 %.2245.prol, -1
  %prol.iter650.next = add i32 %prol.iter650, 1
  %prol.iter650.cmp.not = icmp eq i32 %prol.iter650.next, %xtraiter648
  br i1 %prol.iter650.cmp.not, label %scalar.ph523.prol.loopexit, label %scalar.ph523.prol, !llvm.loop !45

scalar.ph523.prol.loopexit:                       ; preds = %scalar.ph523.prol, %scalar.ph523.preheader
  %.lcssa629.unr = phi ptr [ poison, %scalar.ph523.preheader ], [ %293, %scalar.ph523.prol ]
  %.3259.unr = phi ptr [ %.3259.ph, %scalar.ph523.preheader ], [ %293, %scalar.ph523.prol ]
  %.2245.unr = phi i32 [ %.2245.ph, %scalar.ph523.preheader ], [ %294, %scalar.ph523.prol ]
  %.2.unr = phi ptr [ %.2.ph, %scalar.ph523.preheader ], [ %291, %scalar.ph523.prol ]
  %295 = icmp ult i32 %290, 7
  br i1 %295, label %.loopexit597, label %scalar.ph523

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

.loopexit597:                                     ; preds = %scalar.ph523.prol.loopexit, %scalar.ph523, %middle.block522
  %.lcssa496 = phi ptr [ %ind.end528, %middle.block522 ], [ %.lcssa629.unr, %scalar.ph523.prol.loopexit ], [ %319, %scalar.ph523 ]
  %321 = sub i32 %283, %28
  %322 = zext nneg i32 %180 to i64
  %323 = sub nsw i64 0, %322
  %324 = getelementptr inbounds i8, ptr %.lcssa496, 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, %.0239
  br i1 %329, label %.preheader467, label %376

.preheader467:                                    ; 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.check575 = icmp ult i32 %333, 31
  br i1 %min.iters.check575, label %scalar.ph574.preheader, label %vector.memcheck571

vector.memcheck571:                               ; preds = %.preheader467
  %336 = add i64 %31, %327
  %337 = sub i64 %184, %336
  %diff.check572 = icmp ult i64 %337, 32
  br i1 %diff.check572, label %scalar.ph574.preheader, label %vector.ph576

vector.ph576:                                     ; preds = %vector.memcheck571
  %n.vec578 = and i64 %335, 8589934560
  %ind.end579 = getelementptr i8, ptr %.0256, i64 %n.vec578
  %.cast581 = trunc i64 %n.vec578 to i32
  %ind.end582 = sub i32 %189, %.cast581
  %ind.end584 = getelementptr i8, ptr %328, i64 %n.vec578
  br label %vector.body586

vector.body586:                                   ; preds = %vector.body586, %vector.ph576
  %index587 = phi i64 [ 0, %vector.ph576 ], [ %index.next594, %vector.body586 ]
  %next.gep588 = getelementptr i8, ptr %.0256, i64 %index587
  %next.gep590 = getelementptr i8, ptr %328, i64 %index587
  %338 = getelementptr i8, ptr %next.gep590, i64 16
  %wide.load592 = load <16 x i8>, ptr %next.gep590, align 1, !tbaa !27
  %wide.load593 = load <16 x i8>, ptr %338, align 1, !tbaa !27
  %339 = getelementptr i8, ptr %next.gep588, i64 16
  store <16 x i8> %wide.load592, ptr %next.gep588, align 1, !tbaa !27
  store <16 x i8> %wide.load593, ptr %339, align 1, !tbaa !27
  %index.next594 = add nuw i64 %index587, 32
  %340 = icmp eq i64 %index.next594, %n.vec578
  br i1 %340, label %middle.block573, label %vector.body586, !llvm.loop !47

middle.block573:                                  ; preds = %vector.body586
  %cmp.n595 = icmp eq i64 %335, %n.vec578
  br i1 %cmp.n595, label %.loopexit599, label %scalar.ph574.preheader

scalar.ph574.preheader:                           ; preds = %middle.block573, %vector.memcheck571, %.preheader467
  %.4260.ph = phi ptr [ %.0256, %vector.memcheck571 ], [ %.0256, %.preheader467 ], [ %ind.end579, %middle.block573 ]
  %.3246.ph = phi i32 [ %189, %vector.memcheck571 ], [ %189, %.preheader467 ], [ %ind.end582, %middle.block573 ]
  %.3.ph = phi ptr [ %328, %vector.memcheck571 ], [ %328, %.preheader467 ], [ %ind.end584, %middle.block573 ]
  %341 = add i32 %.3246.ph, -1
  %xtraiter = and i32 %.3246.ph, 7
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph574.prol.loopexit, label %scalar.ph574.prol

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

scalar.ph574.prol.loopexit:                       ; preds = %scalar.ph574.prol, %scalar.ph574.preheader
  %.lcssa626.unr = phi ptr [ poison, %scalar.ph574.preheader ], [ %344, %scalar.ph574.prol ]
  %.4260.unr = phi ptr [ %.4260.ph, %scalar.ph574.preheader ], [ %344, %scalar.ph574.prol ]
  %.3246.unr = phi i32 [ %.3246.ph, %scalar.ph574.preheader ], [ %345, %scalar.ph574.prol ]
  %.3.unr = phi ptr [ %.3.ph, %scalar.ph574.preheader ], [ %342, %scalar.ph574.prol ]
  %346 = icmp ult i32 %341, 7
  br i1 %346, label %.loopexit599, label %scalar.ph574

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

.loopexit599:                                     ; preds = %scalar.ph574.prol.loopexit, %scalar.ph574, %middle.block573
  %.lcssa494 = phi ptr [ %ind.end579, %middle.block573 ], [ %.lcssa626.unr, %scalar.ph574.prol.loopexit ], [ %370, %scalar.ph574 ]
  %372 = sub nsw i32 %.0239, %189
  %373 = zext nneg i32 %180 to i64
  %374 = sub nsw i64 0, %373
  %375 = getelementptr inbounds i8, ptr %.lcssa494, i64 %374
  br label %376

376:                                              ; preds = %.loopexit598, %.loopexit597, %247, %.loopexit599, %325, %194, %.loopexit596
  %.5261 = phi ptr [ %.lcssa497, %.loopexit596 ], [ %.0256, %194 ], [ %.lcssa496, %.loopexit597 ], [ %.lcssa495, %.loopexit598 ], [ %.0256, %247 ], [ %.lcssa494, %.loopexit599 ], [ %.0256, %325 ]
  %.1240 = phi i32 [ %241, %.loopexit596 ], [ %.0239, %194 ], [ %321, %.loopexit597 ], [ %283, %.loopexit598 ], [ %.0239, %247 ], [ %372, %.loopexit599 ], [ %.0239, %325 ]
  %.4 = phi ptr [ %244, %.loopexit596 ], [ %197, %194 ], [ %324, %.loopexit597 ], [ %30, %.loopexit598 ], [ %250, %247 ], [ %375, %.loopexit599 ], [ %328, %325 ]
  %377 = icmp ugt i32 %.1240, 2
  br i1 %377, label %.lr.ph376.preheader, label %._crit_edge377

.lr.ph376.preheader:                              ; preds = %376
  %378 = add i32 %.1240, -3
  %379 = udiv i32 %378, 3
  %380 = and i32 %379, 1
  %lcmp.mod655.not.not = icmp eq i32 %380, 0
  br i1 %lcmp.mod655.not.not, label %.lr.ph376.prol, label %.lr.ph376.prol.loopexit

.lr.ph376.prol:                                   ; preds = %.lr.ph376.preheader
  %381 = getelementptr inbounds i8, ptr %.4, i64 1
  %382 = load i8, ptr %.4, align 1, !tbaa !27
  %383 = getelementptr inbounds i8, ptr %.5261, i64 1
  store i8 %382, ptr %.5261, align 1, !tbaa !27
  %384 = getelementptr inbounds i8, ptr %.4, i64 2
  %385 = load i8, ptr %381, align 1, !tbaa !27
  %386 = getelementptr inbounds i8, ptr %.5261, i64 2
  store i8 %385, ptr %383, align 1, !tbaa !27
  %387 = getelementptr inbounds i8, ptr %.4, i64 3
  %388 = load i8, ptr %384, align 1, !tbaa !27
  %389 = getelementptr inbounds i8, ptr %.5261, i64 3
  store i8 %388, ptr %386, align 1, !tbaa !27
  %390 = add i32 %.1240, -3
  br label %.lr.ph376.prol.loopexit

.lr.ph376.prol.loopexit:                          ; preds = %.lr.ph376.prol, %.lr.ph376.preheader
  %.5374.unr = phi ptr [ %.4, %.lr.ph376.preheader ], [ %387, %.lr.ph376.prol ]
  %.2241373.unr = phi i32 [ %.1240, %.lr.ph376.preheader ], [ %390, %.lr.ph376.prol ]
  %.6262372.unr = phi ptr [ %.5261, %.lr.ph376.preheader ], [ %389, %.lr.ph376.prol ]
  %.lcssa633.unr = phi ptr [ poison, %.lr.ph376.preheader ], [ %387, %.lr.ph376.prol ]
  %.lcssa632.unr = phi ptr [ poison, %.lr.ph376.preheader ], [ %389, %.lr.ph376.prol ]
  %.lcssa631.unr = phi i32 [ poison, %.lr.ph376.preheader ], [ %390, %.lr.ph376.prol ]
  %391 = icmp ult i32 %378, 3
  br i1 %391, label %._crit_edge377, label %.lr.ph376

.lr.ph376:                                        ; preds = %.lr.ph376.prol.loopexit, %.lr.ph376
  %.5374 = phi ptr [ %407, %.lr.ph376 ], [ %.5374.unr, %.lr.ph376.prol.loopexit ]
  %.2241373 = phi i32 [ %410, %.lr.ph376 ], [ %.2241373.unr, %.lr.ph376.prol.loopexit ]
  %.6262372 = phi ptr [ %409, %.lr.ph376 ], [ %.6262372.unr, %.lr.ph376.prol.loopexit ]
  %392 = getelementptr inbounds i8, ptr %.5374, i64 1
  %393 = load i8, ptr %.5374, align 1, !tbaa !27
  %394 = getelementptr inbounds i8, ptr %.6262372, i64 1
  store i8 %393, ptr %.6262372, align 1, !tbaa !27
  %395 = getelementptr inbounds i8, ptr %.5374, i64 2
  %396 = load i8, ptr %392, align 1, !tbaa !27
  %397 = getelementptr inbounds i8, ptr %.6262372, i64 2
  store i8 %396, ptr %394, align 1, !tbaa !27
  %398 = getelementptr inbounds i8, ptr %.5374, i64 3
  %399 = load i8, ptr %395, align 1, !tbaa !27
  %400 = getelementptr inbounds i8, ptr %.6262372, i64 3
  store i8 %399, ptr %397, align 1, !tbaa !27
  %401 = getelementptr inbounds i8, ptr %.5374, i64 4
  %402 = load i8, ptr %398, align 1, !tbaa !27
  %403 = getelementptr inbounds i8, ptr %.6262372, i64 4
  store i8 %402, ptr %400, align 1, !tbaa !27
  %404 = getelementptr inbounds i8, ptr %.5374, i64 5
  %405 = load i8, ptr %401, align 1, !tbaa !27
  %406 = getelementptr inbounds i8, ptr %.6262372, i64 5
  store i8 %405, ptr %403, align 1, !tbaa !27
  %407 = getelementptr inbounds i8, ptr %.5374, i64 6
  %408 = load i8, ptr %404, align 1, !tbaa !27
  %409 = getelementptr inbounds i8, ptr %.6262372, i64 6
  store i8 %408, ptr %406, align 1, !tbaa !27
  %410 = add i32 %.2241373, -6
  %411 = icmp ugt i32 %410, 2
  br i1 %411, label %.lr.ph376, label %._crit_edge377, !llvm.loop !50

._crit_edge377:                                   ; preds = %.lr.ph376.prol.loopexit, %.lr.ph376, %376
  %.6262.lcssa = phi ptr [ %.5261, %376 ], [ %.lcssa632.unr, %.lr.ph376.prol.loopexit ], [ %409, %.lr.ph376 ]
  %.2241.lcssa = phi i32 [ %.1240, %376 ], [ %.lcssa631.unr, %.lr.ph376.prol.loopexit ], [ %410, %.lr.ph376 ]
  %.5.lcssa = phi ptr [ %.4, %376 ], [ %.lcssa633.unr, %.lr.ph376.prol.loopexit ], [ %407, %.lr.ph376 ]
  %.not324 = icmp eq i32 %.2241.lcssa, 0
  br i1 %.not324, label %490, label %412

412:                                              ; preds = %._crit_edge377
  %413 = load i8, ptr %.5.lcssa, align 1, !tbaa !27
  %414 = getelementptr inbounds i8, ptr %.6262.lcssa, i64 1
  store i8 %413, ptr %.6262.lcssa, align 1, !tbaa !27
  %415 = icmp eq i32 %.2241.lcssa, 2
  br i1 %415, label %416, label %490

416:                                              ; preds = %412
  %417 = getelementptr inbounds i8, ptr %.5.lcssa, i64 1
  %418 = load i8, ptr %417, align 1, !tbaa !27
  %419 = getelementptr inbounds i8, ptr %.6262.lcssa, i64 2
  store i8 %418, ptr %414, align 1, !tbaa !27
  br label %490

420:                                              ; preds = %176
  %421 = zext nneg i32 %180 to i64
  %422 = sub nsw i64 0, %421
  %423 = getelementptr inbounds i8, ptr %.0256, i64 %422
  br label %424

424:                                              ; preds = %424, %420
  %.7263 = phi ptr [ %.0256, %420 ], [ %433, %424 ]
  %.3242 = phi i32 [ %.0239, %420 ], [ %434, %424 ]
  %.6 = phi ptr [ %423, %420 ], [ %431, %424 ]
  %425 = getelementptr inbounds i8, ptr %.6, i64 1
  %426 = load i8, ptr %.6, align 1, !tbaa !27
  %427 = getelementptr inbounds i8, ptr %.7263, i64 1
  store i8 %426, ptr %.7263, align 1, !tbaa !27
  %428 = getelementptr inbounds i8, ptr %.6, i64 2
  %429 = load i8, ptr %425, align 1, !tbaa !27
  %430 = getelementptr inbounds i8, ptr %.7263, i64 2
  store i8 %429, ptr %427, align 1, !tbaa !27
  %431 = getelementptr inbounds i8, ptr %.6, i64 3
  %432 = load i8, ptr %428, align 1, !tbaa !27
  %433 = getelementptr inbounds i8, ptr %.7263, i64 3
  store i8 %432, ptr %430, align 1, !tbaa !27
  %434 = add i32 %.3242, -3
  %435 = icmp ugt i32 %434, 2
  br i1 %435, label %424, label %436, !llvm.loop !51

436:                                              ; preds = %424
  %.not318 = icmp eq i32 %434, 0
  br i1 %.not318, label %490, label %437

437:                                              ; preds = %436
  %438 = load i8, ptr %431, align 1, !tbaa !27
  %439 = getelementptr inbounds i8, ptr %.7263, i64 4
  store i8 %438, ptr %433, align 1, !tbaa !27
  %440 = icmp eq i32 %434, 2
  br i1 %440, label %441, label %490

441:                                              ; preds = %437
  %442 = getelementptr inbounds i8, ptr %.6, i64 4
  %443 = load i8, ptr %442, align 1, !tbaa !27
  %444 = getelementptr inbounds i8, ptr %.7263, i64 5
  store i8 %443, ptr %439, align 1, !tbaa !27
  br label %490

.lr.ph366:                                        ; preds = %142, %450
  %445 = phi i32 [ %466, %450 ], [ %152, %142 ]
  %446 = phi i32 [ %464, %450 ], [ %150, %142 ]
  %447 = phi i64 [ %463, %450 ], [ %149, %142 ]
  %.1248364 = phi ptr [ %458, %450 ], [ %144, %142 ]
  %448 = and i32 %445, 64
  %449 = icmp eq i32 %448, 0
  br i1 %449, label %450, label %.loopexit.sink.split.sink.split

450:                                              ; preds = %.lr.ph366
  %451 = getelementptr inbounds i8, ptr %.1248364, i64 2
  %452 = load i16, ptr %451, align 2, !tbaa !32
  %453 = zext i16 %452 to i64
  %454 = getelementptr inbounds %struct.code, ptr %39, i64 %453
  %notmask316 = shl nsw i32 -1, %445
  %455 = xor i32 %notmask316, -1
  %456 = zext nneg i32 %455 to i64
  %457 = and i64 %447, %456
  %458 = getelementptr inbounds %struct.code, ptr %454, i64 %457
  %459 = getelementptr inbounds i8, ptr %458, i64 1
  %460 = load i8, ptr %459, align 1, !tbaa !28
  %461 = zext i8 %460 to i32
  %462 = zext nneg i8 %460 to i64
  %463 = lshr i64 %447, %462
  %464 = sub i32 %446, %461
  %465 = load i8, ptr %458, align 2, !tbaa !31
  %466 = zext i8 %465 to i32
  %467 = and i32 %466, 16
  %.not315 = icmp eq i32 %467, 0
  br i1 %.not315, label %.lr.ph366, label %._crit_edge367

468:                                              ; preds = %.lr.ph
  %469 = and i32 %100, 64
  %470 = icmp eq i32 %469, 0
  br i1 %470, label %471, label %488

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

488:                                              ; preds = %468
  %489 = and i32 %100, 32
  %.not311 = icmp eq i32 %489, 0
  br i1 %.not311, label %.loopexit.sink.split.sink.split, label %.loopexit.sink.split

490:                                              ; preds = %._crit_edge, %436, %441, %437, %._crit_edge377, %416, %412
  %.8282 = phi i32 [ %.lcssa330, %._crit_edge ], [ %183, %416 ], [ %183, %412 ], [ %183, %._crit_edge377 ], [ %183, %441 ], [ %183, %437 ], [ %183, %436 ]
  %.8272 = phi i64 [ %.lcssa333, %._crit_edge ], [ %182, %416 ], [ %182, %412 ], [ %182, %._crit_edge377 ], [ %182, %441 ], [ %182, %437 ], [ %182, %436 ]
  %.8 = phi ptr [ %97, %._crit_edge ], [ %419, %416 ], [ %414, %412 ], [ %.6262.lcssa, %._crit_edge377 ], [ %444, %441 ], [ %439, %437 ], [ %433, %436 ]
  %.6255 = phi ptr [ %.1250, %._crit_edge ], [ %.5254, %416 ], [ %.5254, %412 ], [ %.5254, %._crit_edge377 ], [ %.5254, %441 ], [ %.5254, %437 ], [ %.5254, %436 ]
  %491 = icmp ult ptr %.6255, %10
  %492 = icmp ult ptr %.8, %22
  %493 = select i1 %491, i1 %492, i1 false
  br i1 %493, label %66, label %.loopexit, !llvm.loop !52

.loopexit.sink.split.sink.split:                  ; preds = %191, %.lr.ph366, %488
  %.str.sink = phi ptr [ @.str.2, %488 ], [ @.str.1, %.lr.ph366 ], [ @.str, %191 ]
  %.9283.ph.ph = phi i32 [ %98, %488 ], [ %446, %.lr.ph366 ], [ %183, %191 ]
  %.9273.ph.ph = phi i64 [ %99, %488 ], [ %447, %.lr.ph366 ], [ %182, %191 ]
  %.7.ph.ph = phi ptr [ %.1250, %488 ], [ %.4253, %.lr.ph366 ], [ %.5254, %191 ]
  %494 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %.str.sink, ptr %494, align 8, !tbaa !53
  br label %.loopexit.sink.split

.loopexit.sink.split:                             ; preds = %.loopexit.sink.split.sink.split, %488
  %.sink = phi i32 [ 16191, %488 ], [ 16209, %.loopexit.sink.split.sink.split ]
  %.9283.ph = phi i32 [ %98, %488 ], [ %.9283.ph.ph, %.loopexit.sink.split.sink.split ]
  %.9273.ph = phi i64 [ %99, %488 ], [ %.9273.ph.ph, %.loopexit.sink.split.sink.split ]
  %.7.ph = phi ptr [ %.1250, %488 ], [ %.7.ph.ph, %.loopexit.sink.split.sink.split ]
  %495 = getelementptr inbounds i8, ptr %4, i64 8
  store i32 %.sink, ptr %495, align 8, !tbaa !54
  br label %.loopexit

.loopexit:                                        ; preds = %490, %.loopexit.sink.split
  %.9283 = phi i32 [ %.9283.ph, %.loopexit.sink.split ], [ %.8282, %490 ]
  %.9273 = phi i64 [ %.9273.ph, %.loopexit.sink.split ], [ %.8272, %490 ]
  %.9 = phi ptr [ %.0256, %.loopexit.sink.split ], [ %.8, %490 ]
  %.7 = phi ptr [ %.7.ph, %.loopexit.sink.split ], [ %.6255, %490 ]
  %496 = lshr i32 %.9283, 3
  %497 = zext nneg i32 %496 to i64
  %498 = sub nsw i64 0, %497
  %499 = getelementptr inbounds i8, ptr %.7, i64 %498
  store ptr %499, ptr %0, align 8, !tbaa !12
  store ptr %.9, ptr %11, align 8, !tbaa !14
  %500 = ptrtoint ptr %10 to i64
  %501 = ptrtoint ptr %499 to i64
  %502 = sub i64 %500, %501
  %503 = trunc i64 %502 to i32
  %504 = add i32 %503, 5
  store i32 %504, ptr %6, align 8, !tbaa !13
  %505 = ptrtoint ptr %22 to i64
  %506 = ptrtoint ptr %.9 to i64
  %507 = sub i64 %505, %506
  %508 = and i32 %.9283, 7
  %notmask325 = shl nsw i32 -1, %508
  %509 = xor i32 %notmask325, -1
  %510 = zext nneg i32 %509 to i64
  %511 = and i64 %.9273, %510
  %512 = trunc i64 %507 to i32
  %513 = add i32 %512, 257
  store i32 %513, ptr %14, align 8, !tbaa !15
  store i64 %511, ptr %32, align 8, !tbaa !21
  store i32 %508, ptr %34, align 8, !tbaa !22
  ret void
}

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

!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 9064, !10, i64 9068, !10, i64 9072}
!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 9064}
!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 = distinct !{!50, !35}
!51 = distinct !{!51, !35}
!52 = distinct !{!52, !35}
!53 = !{!6, !7, i64 48}
!54 = !{!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