; LLVM IR from modlfo/AudioEngine :: AudioEngine/JuceLibraryCode/modules/juce_core/zip/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.code = type { i8, i8, i16 }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.inflate_state = type { i32, i32, i32, i32, i32, i32, i64, i64, ptr, i32, i32, i32, i32, ptr, i64, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, i32, i32, i32, ptr, [320 x i16], [288 x i16], [2048 x %struct.code] }

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

94:                                               ; preds = %597, %2
  %95 = load i32, ptr %16, align 4, !tbaa !9
  %96 = icmp ult i32 %95, 15
  br i1 %96, label %97, label %120

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

120:                                              ; preds = %97, %94
  %121 = load ptr, ptr %17, align 8, !tbaa !5
  %122 = load i64, ptr %15, align 8, !tbaa !24
  %123 = load i32, ptr %19, align 4, !tbaa !9
  %124 = zext i32 %123 to i64
  %125 = and i64 %122, %124
  %126 = getelementptr inbounds %struct.code, ptr %121, i64 %125
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %126, i64 4, i1 false), !tbaa.struct !31
  br label %127

127:                                              ; preds = %562, %120
  %128 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %129 = load i8, ptr %128, align 1, !tbaa !34
  %130 = zext i8 %129 to i32
  store i32 %130, ptr %22, align 4, !tbaa !9
  %131 = load i32, ptr %22, align 4, !tbaa !9
  %132 = load i64, ptr %15, align 8, !tbaa !24
  %133 = zext i32 %131 to i64
  %134 = lshr i64 %132, %133
  store i64 %134, ptr %15, align 8, !tbaa !24
  %135 = load i32, ptr %22, align 4, !tbaa !9
  %136 = load i32, ptr %16, align 4, !tbaa !9
  %137 = sub i32 %136, %135
  store i32 %137, ptr %16, align 4, !tbaa !9
  %138 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %139 = load i8, ptr %138, align 2, !tbaa !36
  %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 %149

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

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

153:                                              ; preds = %149
  %154 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %155 = load i16, ptr %154, align 2, !tbaa !37
  %156 = zext i16 %155 to i32
  store i32 %156, ptr %23, align 4, !tbaa !9
  %157 = load i32, ptr %22, align 4, !tbaa !9
  %158 = and i32 %157, 15
  store i32 %158, ptr %22, align 4, !tbaa !9
  %159 = load i32, ptr %22, align 4, !tbaa !9
  %160 = icmp ne i32 %159, 0
  br i1 %160, label %161, label %193

161:                                              ; preds = %153
  %162 = load i32, ptr %16, align 4, !tbaa !9
  %163 = load i32, ptr %22, align 4, !tbaa !9
  %164 = icmp ult i32 %162, %163
  br i1 %164, label %165, label %177

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

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

193:                                              ; preds = %177, %153
  %194 = load i32, ptr %16, align 4, !tbaa !9
  %195 = icmp ult i32 %194, 15
  br i1 %195, label %196, label %219

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

219:                                              ; preds = %196, %193
  %220 = load ptr, ptr %18, align 8, !tbaa !5
  %221 = load i64, ptr %15, align 8, !tbaa !24
  %222 = load i32, ptr %20, align 4, !tbaa !9
  %223 = zext i32 %222 to i64
  %224 = and i64 %221, %223
  %225 = getelementptr inbounds %struct.code, ptr %220, i64 %224
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %225, i64 4, i1 false), !tbaa.struct !31
  br label %226

226:                                              ; preds = %539, %219
  %227 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 1
  %228 = load i8, ptr %227, align 1, !tbaa !34
  %229 = zext i8 %228 to i32
  store i32 %229, ptr %22, align 4, !tbaa !9
  %230 = load i32, ptr %22, align 4, !tbaa !9
  %231 = load i64, ptr %15, align 8, !tbaa !24
  %232 = zext i32 %230 to i64
  %233 = lshr i64 %231, %232
  store i64 %233, ptr %15, align 8, !tbaa !24
  %234 = load i32, ptr %22, align 4, !tbaa !9
  %235 = load i32, ptr %16, align 4, !tbaa !9
  %236 = sub i32 %235, %234
  store i32 %236, ptr %16, align 4, !tbaa !9
  %237 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 0
  %238 = load i8, ptr %237, align 2, !tbaa !36
  %239 = zext i8 %238 to i32
  store i32 %239, ptr %22, align 4, !tbaa !9
  %240 = load i32, ptr %22, align 4, !tbaa !9
  %241 = and i32 %240, 16
  %242 = icmp ne i32 %241, 0
  br i1 %242, label %243, label %535

243:                                              ; preds = %226
  %244 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %245 = load i16, ptr %244, align 2, !tbaa !37
  %246 = zext i16 %245 to i32
  store i32 %246, ptr %24, align 4, !tbaa !9
  %247 = load i32, ptr %22, align 4, !tbaa !9
  %248 = and i32 %247, 15
  store i32 %248, ptr %22, align 4, !tbaa !9
  %249 = load i32, ptr %16, align 4, !tbaa !9
  %250 = load i32, ptr %22, align 4, !tbaa !9
  %251 = icmp ult i32 %249, %250
  br i1 %251, label %252, label %280

252:                                              ; preds = %243
  %253 = load ptr, ptr %6, align 8, !tbaa !5
  %254 = getelementptr inbounds i8, ptr %253, i32 1
  store ptr %254, ptr %6, align 8, !tbaa !5
  %255 = load i8, ptr %254, align 1, !tbaa !30
  %256 = zext i8 %255 to i64
  %257 = load i32, ptr %16, align 4, !tbaa !9
  %258 = zext i32 %257 to i64
  %259 = shl i64 %256, %258
  %260 = load i64, ptr %15, align 8, !tbaa !24
  %261 = add i64 %260, %259
  store i64 %261, ptr %15, align 8, !tbaa !24
  %262 = load i32, ptr %16, align 4, !tbaa !9
  %263 = add i32 %262, 8
  store i32 %263, ptr %16, align 4, !tbaa !9
  %264 = load i32, ptr %16, align 4, !tbaa !9
  %265 = load i32, ptr %22, align 4, !tbaa !9
  %266 = icmp ult i32 %264, %265
  br i1 %266, label %267, label %279

267:                                              ; preds = %252
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = getelementptr inbounds i8, ptr %268, i32 1
  store ptr %269, ptr %6, align 8, !tbaa !5
  %270 = load i8, ptr %269, align 1, !tbaa !30
  %271 = zext i8 %270 to i64
  %272 = load i32, ptr %16, align 4, !tbaa !9
  %273 = zext i32 %272 to i64
  %274 = shl i64 %271, %273
  %275 = load i64, ptr %15, align 8, !tbaa !24
  %276 = add i64 %275, %274
  store i64 %276, ptr %15, align 8, !tbaa !24
  %277 = load i32, ptr %16, align 4, !tbaa !9
  %278 = add i32 %277, 8
  store i32 %278, ptr %16, align 4, !tbaa !9
  br label %279

279:                                              ; preds = %267, %252
  br label %280

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

305:                                              ; preds = %280
  %306 = load i32, ptr %24, align 4, !tbaa !9
  %307 = load i32, ptr %22, align 4, !tbaa !9
  %308 = sub i32 %306, %307
  store i32 %308, ptr %22, align 4, !tbaa !9
  %309 = load i32, ptr %22, align 4, !tbaa !9
  %310 = load i32, ptr %12, align 4, !tbaa !9
  %311 = icmp ugt i32 %309, %310
  br i1 %311, label %312, label %317

312:                                              ; preds = %305
  %313 = load ptr, ptr %3, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.z_stream_s, ptr %313, i32 0, i32 6
  store ptr @.str, ptr %314, align 8, !tbaa !38
  %315 = load ptr, ptr %5, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.inflate_state, ptr %315, i32 0, i32 0
  store i32 27, ptr %316, align 8, !tbaa !39
  br label %599

317:                                              ; preds = %305
  %318 = load ptr, ptr %14, align 8, !tbaa !5
  %319 = getelementptr inbounds i8, ptr %318, i64 -1
  store ptr %319, ptr %25, align 8, !tbaa !5
  %320 = load i32, ptr %13, align 4, !tbaa !9
  %321 = icmp eq i32 %320, 0
  br i1 %321, label %322, label %353

322:                                              ; preds = %317
  %323 = load i32, ptr %11, align 4, !tbaa !9
  %324 = load i32, ptr %22, align 4, !tbaa !9
  %325 = sub i32 %323, %324
  %326 = load ptr, ptr %25, align 8, !tbaa !5
  %327 = zext i32 %325 to i64
  %328 = getelementptr inbounds i8, ptr %326, i64 %327
  store ptr %328, ptr %25, align 8, !tbaa !5
  %329 = load i32, ptr %22, align 4, !tbaa !9
  %330 = load i32, ptr %23, align 4, !tbaa !9
  %331 = icmp ult i32 %329, %330
  br i1 %331, label %332, label %352

332:                                              ; preds = %322
  %333 = load i32, ptr %22, align 4, !tbaa !9
  %334 = load i32, ptr %23, align 4, !tbaa !9
  %335 = sub i32 %334, %333
  store i32 %335, ptr %23, align 4, !tbaa !9
  br label %336

336:                                              ; preds = %342, %332
  %337 = load ptr, ptr %25, align 8, !tbaa !5
  %338 = getelementptr inbounds i8, ptr %337, i32 1
  store ptr %338, ptr %25, align 8, !tbaa !5
  %339 = load i8, ptr %338, align 1, !tbaa !30
  %340 = load ptr, ptr %8, align 8, !tbaa !5
  %341 = getelementptr inbounds i8, ptr %340, i32 1
  store ptr %341, ptr %8, align 8, !tbaa !5
  store i8 %339, ptr %341, align 1, !tbaa !30
  br label %342

342:                                              ; preds = %336
  %343 = load i32, ptr %22, align 4, !tbaa !9
  %344 = add i32 %343, -1
  store i32 %344, ptr %22, align 4, !tbaa !9
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %336, label %346, !llvm.loop !40

346:                                              ; preds = %342
  %347 = load ptr, ptr %8, align 8, !tbaa !5
  %348 = load i32, ptr %24, align 4, !tbaa !9
  %349 = zext i32 %348 to i64
  %350 = sub i64 0, %349
  %351 = getelementptr inbounds i8, ptr %347, i64 %350
  store ptr %351, ptr %25, align 8, !tbaa !5
  br label %352

352:                                              ; preds = %346, %322
  br label %447

353:                                              ; preds = %317
  %354 = load i32, ptr %13, align 4, !tbaa !9
  %355 = load i32, ptr %22, align 4, !tbaa !9
  %356 = icmp ult i32 %354, %355
  br i1 %356, label %357, label %415

357:                                              ; preds = %353
  %358 = load i32, ptr %11, align 4, !tbaa !9
  %359 = load i32, ptr %13, align 4, !tbaa !9
  %360 = add i32 %358, %359
  %361 = load i32, ptr %22, align 4, !tbaa !9
  %362 = sub i32 %360, %361
  %363 = load ptr, ptr %25, align 8, !tbaa !5
  %364 = zext i32 %362 to i64
  %365 = getelementptr inbounds i8, ptr %363, i64 %364
  store ptr %365, ptr %25, align 8, !tbaa !5
  %366 = load i32, ptr %13, align 4, !tbaa !9
  %367 = load i32, ptr %22, align 4, !tbaa !9
  %368 = sub i32 %367, %366
  store i32 %368, ptr %22, align 4, !tbaa !9
  %369 = load i32, ptr %22, align 4, !tbaa !9
  %370 = load i32, ptr %23, align 4, !tbaa !9
  %371 = icmp ult i32 %369, %370
  br i1 %371, label %372, label %414

372:                                              ; preds = %357
  %373 = load i32, ptr %22, align 4, !tbaa !9
  %374 = load i32, ptr %23, align 4, !tbaa !9
  %375 = sub i32 %374, %373
  store i32 %375, ptr %23, align 4, !tbaa !9
  br label %376

376:                                              ; preds = %382, %372
  %377 = load ptr, ptr %25, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i32 1
  store ptr %378, ptr %25, align 8, !tbaa !5
  %379 = load i8, ptr %378, align 1, !tbaa !30
  %380 = load ptr, ptr %8, align 8, !tbaa !5
  %381 = getelementptr inbounds i8, ptr %380, i32 1
  store ptr %381, ptr %8, align 8, !tbaa !5
  store i8 %379, ptr %381, align 1, !tbaa !30
  br label %382

382:                                              ; preds = %376
  %383 = load i32, ptr %22, align 4, !tbaa !9
  %384 = add i32 %383, -1
  store i32 %384, ptr %22, align 4, !tbaa !9
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %376, label %386, !llvm.loop !42

386:                                              ; preds = %382
  %387 = load ptr, ptr %14, align 8, !tbaa !5
  %388 = getelementptr inbounds i8, ptr %387, i64 -1
  store ptr %388, ptr %25, align 8, !tbaa !5
  %389 = load i32, ptr %13, align 4, !tbaa !9
  %390 = load i32, ptr %23, align 4, !tbaa !9
  %391 = icmp ult i32 %389, %390
  br i1 %391, label %392, label %413

392:                                              ; preds = %386
  %393 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %393, ptr %22, align 4, !tbaa !9
  %394 = load i32, ptr %22, align 4, !tbaa !9
  %395 = load i32, ptr %23, align 4, !tbaa !9
  %396 = sub i32 %395, %394
  store i32 %396, ptr %23, align 4, !tbaa !9
  br label %397

397:                                              ; preds = %403, %392
  %398 = load ptr, ptr %25, align 8, !tbaa !5
  %399 = getelementptr inbounds i8, ptr %398, i32 1
  store ptr %399, ptr %25, align 8, !tbaa !5
  %400 = load i8, ptr %399, align 1, !tbaa !30
  %401 = load ptr, ptr %8, align 8, !tbaa !5
  %402 = getelementptr inbounds i8, ptr %401, i32 1
  store ptr %402, ptr %8, align 8, !tbaa !5
  store i8 %400, ptr %402, align 1, !tbaa !30
  br label %403

403:                                              ; preds = %397
  %404 = load i32, ptr %22, align 4, !tbaa !9
  %405 = add i32 %404, -1
  store i32 %405, ptr %22, align 4, !tbaa !9
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %397, label %407, !llvm.loop !43

407:                                              ; preds = %403
  %408 = load ptr, ptr %8, align 8, !tbaa !5
  %409 = load i32, ptr %24, align 4, !tbaa !9
  %410 = zext i32 %409 to i64
  %411 = sub i64 0, %410
  %412 = getelementptr inbounds i8, ptr %408, i64 %411
  store ptr %412, ptr %25, align 8, !tbaa !5
  br label %413

413:                                              ; preds = %407, %386
  br label %414

414:                                              ; preds = %413, %357
  br label %446

415:                                              ; preds = %353
  %416 = load i32, ptr %13, align 4, !tbaa !9
  %417 = load i32, ptr %22, align 4, !tbaa !9
  %418 = sub i32 %416, %417
  %419 = load ptr, ptr %25, align 8, !tbaa !5
  %420 = zext i32 %418 to i64
  %421 = getelementptr inbounds i8, ptr %419, i64 %420
  store ptr %421, ptr %25, align 8, !tbaa !5
  %422 = load i32, ptr %22, align 4, !tbaa !9
  %423 = load i32, ptr %23, align 4, !tbaa !9
  %424 = icmp ult i32 %422, %423
  br i1 %424, label %425, label %445

425:                                              ; preds = %415
  %426 = load i32, ptr %22, align 4, !tbaa !9
  %427 = load i32, ptr %23, align 4, !tbaa !9
  %428 = sub i32 %427, %426
  store i32 %428, ptr %23, align 4, !tbaa !9
  br label %429

429:                                              ; preds = %435, %425
  %430 = load ptr, ptr %25, align 8, !tbaa !5
  %431 = getelementptr inbounds i8, ptr %430, i32 1
  store ptr %431, ptr %25, align 8, !tbaa !5
  %432 = load i8, ptr %431, align 1, !tbaa !30
  %433 = load ptr, ptr %8, align 8, !tbaa !5
  %434 = getelementptr inbounds i8, ptr %433, i32 1
  store ptr %434, ptr %8, align 8, !tbaa !5
  store i8 %432, ptr %434, align 1, !tbaa !30
  br label %435

435:                                              ; preds = %429
  %436 = load i32, ptr %22, align 4, !tbaa !9
  %437 = add i32 %436, -1
  store i32 %437, ptr %22, align 4, !tbaa !9
  %438 = icmp ne i32 %437, 0
  br i1 %438, label %429, label %439, !llvm.loop !44

439:                                              ; preds = %435
  %440 = load ptr, ptr %8, align 8, !tbaa !5
  %441 = load i32, ptr %24, align 4, !tbaa !9
  %442 = zext i32 %441 to i64
  %443 = sub i64 0, %442
  %444 = getelementptr inbounds i8, ptr %440, i64 %443
  store ptr %444, ptr %25, align 8, !tbaa !5
  br label %445

445:                                              ; preds = %439, %415
  br label %446

446:                                              ; preds = %445, %414
  br label %447

447:                                              ; preds = %446, %352
  br label %448

448:                                              ; preds = %451, %447
  %449 = load i32, ptr %23, align 4, !tbaa !9
  %450 = icmp ugt i32 %449, 2
  br i1 %450, label %451, label %469

451:                                              ; preds = %448
  %452 = load ptr, ptr %25, align 8, !tbaa !5
  %453 = getelementptr inbounds i8, ptr %452, i32 1
  store ptr %453, ptr %25, align 8, !tbaa !5
  %454 = load i8, ptr %453, align 1, !tbaa !30
  %455 = load ptr, ptr %8, align 8, !tbaa !5
  %456 = getelementptr inbounds i8, ptr %455, i32 1
  store ptr %456, ptr %8, align 8, !tbaa !5
  store i8 %454, ptr %456, align 1, !tbaa !30
  %457 = load ptr, ptr %25, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i32 1
  store ptr %458, ptr %25, align 8, !tbaa !5
  %459 = load i8, ptr %458, align 1, !tbaa !30
  %460 = load ptr, ptr %8, align 8, !tbaa !5
  %461 = getelementptr inbounds i8, ptr %460, i32 1
  store ptr %461, ptr %8, align 8, !tbaa !5
  store i8 %459, ptr %461, align 1, !tbaa !30
  %462 = load ptr, ptr %25, align 8, !tbaa !5
  %463 = getelementptr inbounds i8, ptr %462, i32 1
  store ptr %463, ptr %25, align 8, !tbaa !5
  %464 = load i8, ptr %463, align 1, !tbaa !30
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  %466 = getelementptr inbounds i8, ptr %465, i32 1
  store ptr %466, ptr %8, align 8, !tbaa !5
  store i8 %464, ptr %466, align 1, !tbaa !30
  %467 = load i32, ptr %23, align 4, !tbaa !9
  %468 = sub i32 %467, 3
  store i32 %468, ptr %23, align 4, !tbaa !9
  br label %448, !llvm.loop !45

469:                                              ; preds = %448
  %470 = load i32, ptr %23, align 4, !tbaa !9
  %471 = icmp ne i32 %470, 0
  br i1 %471, label %472, label %487

472:                                              ; preds = %469
  %473 = load ptr, ptr %25, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i32 1
  store ptr %474, ptr %25, align 8, !tbaa !5
  %475 = load i8, ptr %474, align 1, !tbaa !30
  %476 = load ptr, ptr %8, align 8, !tbaa !5
  %477 = getelementptr inbounds i8, ptr %476, i32 1
  store ptr %477, ptr %8, align 8, !tbaa !5
  store i8 %475, ptr %477, align 1, !tbaa !30
  %478 = load i32, ptr %23, align 4, !tbaa !9
  %479 = icmp ugt i32 %478, 1
  br i1 %479, label %480, label %486

480:                                              ; preds = %472
  %481 = load ptr, ptr %25, align 8, !tbaa !5
  %482 = getelementptr inbounds i8, ptr %481, i32 1
  store ptr %482, ptr %25, align 8, !tbaa !5
  %483 = load i8, ptr %482, align 1, !tbaa !30
  %484 = load ptr, ptr %8, align 8, !tbaa !5
  %485 = getelementptr inbounds i8, ptr %484, i32 1
  store ptr %485, ptr %8, align 8, !tbaa !5
  store i8 %483, ptr %485, align 1, !tbaa !30
  br label %486

486:                                              ; preds = %480, %472
  br label %487

487:                                              ; preds = %486, %469
  br label %534

488:                                              ; preds = %280
  %489 = load ptr, ptr %8, align 8, !tbaa !5
  %490 = load i32, ptr %24, align 4, !tbaa !9
  %491 = zext i32 %490 to i64
  %492 = sub i64 0, %491
  %493 = getelementptr inbounds i8, ptr %489, i64 %492
  store ptr %493, ptr %25, align 8, !tbaa !5
  br label %494

494:                                              ; preds = %512, %488
  %495 = load ptr, ptr %25, align 8, !tbaa !5
  %496 = getelementptr inbounds i8, ptr %495, i32 1
  store ptr %496, ptr %25, align 8, !tbaa !5
  %497 = load i8, ptr %496, align 1, !tbaa !30
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = getelementptr inbounds i8, ptr %498, i32 1
  store ptr %499, ptr %8, align 8, !tbaa !5
  store i8 %497, ptr %499, align 1, !tbaa !30
  %500 = load ptr, ptr %25, align 8, !tbaa !5
  %501 = getelementptr inbounds i8, ptr %500, i32 1
  store ptr %501, ptr %25, align 8, !tbaa !5
  %502 = load i8, ptr %501, align 1, !tbaa !30
  %503 = load ptr, ptr %8, align 8, !tbaa !5
  %504 = getelementptr inbounds i8, ptr %503, i32 1
  store ptr %504, ptr %8, align 8, !tbaa !5
  store i8 %502, ptr %504, align 1, !tbaa !30
  %505 = load ptr, ptr %25, align 8, !tbaa !5
  %506 = getelementptr inbounds i8, ptr %505, i32 1
  store ptr %506, ptr %25, align 8, !tbaa !5
  %507 = load i8, ptr %506, align 1, !tbaa !30
  %508 = load ptr, ptr %8, align 8, !tbaa !5
  %509 = getelementptr inbounds i8, ptr %508, i32 1
  store ptr %509, ptr %8, align 8, !tbaa !5
  store i8 %507, ptr %509, align 1, !tbaa !30
  %510 = load i32, ptr %23, align 4, !tbaa !9
  %511 = sub i32 %510, 3
  store i32 %511, ptr %23, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %494
  %513 = load i32, ptr %23, align 4, !tbaa !9
  %514 = icmp ugt i32 %513, 2
  br i1 %514, label %494, label %515, !llvm.loop !46

515:                                              ; preds = %512
  %516 = load i32, ptr %23, align 4, !tbaa !9
  %517 = icmp ne i32 %516, 0
  br i1 %517, label %518, label %533

518:                                              ; preds = %515
  %519 = load ptr, ptr %25, align 8, !tbaa !5
  %520 = getelementptr inbounds i8, ptr %519, i32 1
  store ptr %520, ptr %25, align 8, !tbaa !5
  %521 = load i8, ptr %520, align 1, !tbaa !30
  %522 = load ptr, ptr %8, align 8, !tbaa !5
  %523 = getelementptr inbounds i8, ptr %522, i32 1
  store ptr %523, ptr %8, align 8, !tbaa !5
  store i8 %521, ptr %523, align 1, !tbaa !30
  %524 = load i32, ptr %23, align 4, !tbaa !9
  %525 = icmp ugt i32 %524, 1
  br i1 %525, label %526, label %532

526:                                              ; preds = %518
  %527 = load ptr, ptr %25, align 8, !tbaa !5
  %528 = getelementptr inbounds i8, ptr %527, i32 1
  store ptr %528, ptr %25, align 8, !tbaa !5
  %529 = load i8, ptr %528, align 1, !tbaa !30
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = getelementptr inbounds i8, ptr %530, i32 1
  store ptr %531, ptr %8, align 8, !tbaa !5
  store i8 %529, ptr %531, align 1, !tbaa !30
  br label %532

532:                                              ; preds = %526, %518
  br label %533

533:                                              ; preds = %532, %515
  br label %534

534:                                              ; preds = %533, %487
  br label %557

535:                                              ; preds = %226
  %536 = load i32, ptr %22, align 4, !tbaa !9
  %537 = and i32 %536, 64
  %538 = icmp eq i32 %537, 0
  br i1 %538, label %539, label %552

539:                                              ; preds = %535
  %540 = load ptr, ptr %18, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %542 = load i16, ptr %541, align 2, !tbaa !37
  %543 = zext i16 %542 to i64
  %544 = load i64, ptr %15, align 8, !tbaa !24
  %545 = load i32, ptr %22, align 4, !tbaa !9
  %546 = shl i32 1, %545
  %547 = sub i32 %546, 1
  %548 = zext i32 %547 to i64
  %549 = and i64 %544, %548
  %550 = add i64 %543, %549
  %551 = getelementptr inbounds %struct.code, ptr %540, i64 %550
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %551, i64 4, i1 false), !tbaa.struct !31
  br label %226

552:                                              ; preds = %535
  %553 = load ptr, ptr %3, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.z_stream_s, ptr %553, i32 0, i32 6
  store ptr @.str.1, ptr %554, align 8, !tbaa !38
  %555 = load ptr, ptr %5, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.inflate_state, ptr %555, i32 0, i32 0
  store i32 27, ptr %556, align 8, !tbaa !39
  br label %599

557:                                              ; preds = %534
  br label %587

558:                                              ; preds = %149
  %559 = load i32, ptr %22, align 4, !tbaa !9
  %560 = and i32 %559, 64
  %561 = icmp eq i32 %560, 0
  br i1 %561, label %562, label %575

562:                                              ; preds = %558
  %563 = load ptr, ptr %17, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.code, ptr %21, i32 0, i32 2
  %565 = load i16, ptr %564, align 2, !tbaa !37
  %566 = zext i16 %565 to i64
  %567 = load i64, ptr %15, align 8, !tbaa !24
  %568 = load i32, ptr %22, align 4, !tbaa !9
  %569 = shl i32 1, %568
  %570 = sub i32 %569, 1
  %571 = zext i32 %570 to i64
  %572 = and i64 %567, %571
  %573 = add i64 %566, %572
  %574 = getelementptr inbounds %struct.code, ptr %563, i64 %573
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %21, ptr align 2 %574, i64 4, i1 false), !tbaa.struct !31
  br label %127

575:                                              ; preds = %558
  %576 = load i32, ptr %22, align 4, !tbaa !9
  %577 = and i32 %576, 32
  %578 = icmp ne i32 %577, 0
  br i1 %578, label %579, label %582

579:                                              ; preds = %575
  %580 = load ptr, ptr %5, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.inflate_state, ptr %580, i32 0, i32 0
  store i32 11, ptr %581, align 8, !tbaa !39
  br label %599

582:                                              ; preds = %575
  %583 = load ptr, ptr %3, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.z_stream_s, ptr %583, i32 0, i32 6
  store ptr @.str.2, ptr %584, align 8, !tbaa !38
  %585 = load ptr, ptr %5, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.inflate_state, ptr %585, i32 0, i32 0
  store i32 27, ptr %586, align 8, !tbaa !39
  br label %599

587:                                              ; preds = %557
  br label %588

588:                                              ; preds = %587, %143
  br label %589

589:                                              ; preds = %588
  %590 = load ptr, ptr %6, align 8, !tbaa !5
  %591 = load ptr, ptr %7, align 8, !tbaa !5
  %592 = icmp ult ptr %590, %591
  br i1 %592, label %593, label %597

593:                                              ; preds = %589
  %594 = load ptr, ptr %8, align 8, !tbaa !5
  %595 = load ptr, ptr %10, align 8, !tbaa !5
  %596 = icmp ult ptr %594, %595
  br label %597

597:                                              ; preds = %593, %589
  %598 = phi i1 [ false, %589 ], [ %596, %593 ]
  br i1 %598, label %94, label %599, !llvm.loop !47

599:                                              ; preds = %597, %582, %579, %552, %312
  %600 = load i32, ptr %16, align 4, !tbaa !9
  %601 = lshr i32 %600, 3
  store i32 %601, ptr %23, align 4, !tbaa !9
  %602 = load i32, ptr %23, align 4, !tbaa !9
  %603 = load ptr, ptr %6, align 8, !tbaa !5
  %604 = zext i32 %602 to i64
  %605 = sub i64 0, %604
  %606 = getelementptr inbounds i8, ptr %603, i64 %605
  store ptr %606, ptr %6, align 8, !tbaa !5
  %607 = load i32, ptr %23, align 4, !tbaa !9
  %608 = shl i32 %607, 3
  %609 = load i32, ptr %16, align 4, !tbaa !9
  %610 = sub i32 %609, %608
  store i32 %610, ptr %16, align 4, !tbaa !9
  %611 = load i32, ptr %16, align 4, !tbaa !9
  %612 = shl i32 1, %611
  %613 = sub i32 %612, 1
  %614 = zext i32 %613 to i64
  %615 = load i64, ptr %15, align 8, !tbaa !24
  %616 = and i64 %615, %614
  store i64 %616, ptr %15, align 8, !tbaa !24
  %617 = load ptr, ptr %6, align 8, !tbaa !5
  %618 = getelementptr inbounds i8, ptr %617, i64 1
  %619 = load ptr, ptr %3, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.z_stream_s, ptr %619, i32 0, i32 0
  store ptr %618, ptr %620, align 8, !tbaa !14
  %621 = load ptr, ptr %8, align 8, !tbaa !5
  %622 = getelementptr inbounds i8, ptr %621, i64 1
  %623 = load ptr, ptr %3, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.z_stream_s, ptr %623, i32 0, i32 3
  store ptr %622, ptr %624, align 8, !tbaa !16
  %625 = load ptr, ptr %6, align 8, !tbaa !5
  %626 = load ptr, ptr %7, align 8, !tbaa !5
  %627 = icmp ult ptr %625, %626
  br i1 %627, label %628, label %635

628:                                              ; preds = %599
  %629 = load ptr, ptr %7, align 8, !tbaa !5
  %630 = load ptr, ptr %6, align 8, !tbaa !5
  %631 = ptrtoint ptr %629 to i64
  %632 = ptrtoint ptr %630 to i64
  %633 = sub i64 %631, %632
  %634 = add nsw i64 5, %633
  br label %642

635:                                              ; preds = %599
  %636 = load ptr, ptr %6, align 8, !tbaa !5
  %637 = load ptr, ptr %7, align 8, !tbaa !5
  %638 = ptrtoint ptr %636 to i64
  %639 = ptrtoint ptr %637 to i64
  %640 = sub i64 %638, %639
  %641 = sub nsw i64 5, %640
  br label %642

642:                                              ; preds = %635, %628
  %643 = phi i64 [ %634, %628 ], [ %641, %635 ]
  %644 = trunc i64 %643 to i32
  %645 = load ptr, ptr %3, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.z_stream_s, ptr %645, i32 0, i32 1
  store i32 %644, ptr %646, align 8, !tbaa !15
  %647 = load ptr, ptr %8, align 8, !tbaa !5
  %648 = load ptr, ptr %10, align 8, !tbaa !5
  %649 = icmp ult ptr %647, %648
  br i1 %649, label %650, label %657

650:                                              ; preds = %642
  %651 = load ptr, ptr %10, align 8, !tbaa !5
  %652 = load ptr, ptr %8, align 8, !tbaa !5
  %653 = ptrtoint ptr %651 to i64
  %654 = ptrtoint ptr %652 to i64
  %655 = sub i64 %653, %654
  %656 = add nsw i64 257, %655
  br label %664

657:                                              ; preds = %642
  %658 = load ptr, ptr %8, align 8, !tbaa !5
  %659 = load ptr, ptr %10, align 8, !tbaa !5
  %660 = ptrtoint ptr %658 to i64
  %661 = ptrtoint ptr %659 to i64
  %662 = sub i64 %660, %661
  %663 = sub nsw i64 257, %662
  br label %664

664:                                              ; preds = %657, %650
  %665 = phi i64 [ %656, %650 ], [ %663, %657 ]
  %666 = trunc i64 %665 to i32
  %667 = load ptr, ptr %3, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.z_stream_s, ptr %667, i32 0, i32 4
  store i32 %666, ptr %668, align 8, !tbaa !17
  %669 = load i64, ptr %15, align 8, !tbaa !24
  %670 = load ptr, ptr %5, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.inflate_state, ptr %670, i32 0, i32 14
  store i64 %669, ptr %671, align 8, !tbaa !23
  %672 = load i32, ptr %16, align 4, !tbaa !9
  %673 = load ptr, ptr %5, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.inflate_state, ptr %673, i32 0, i32 15
  store i32 %672, ptr %674, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 52}
!19 = !{!"inflate_state", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !13, i64 24, !13, i64 32, !6, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !6, i64 64, !13, i64 72, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !6, i64 136, !7, i64 144, !7, i64 784, !7, i64 1360}
!20 = !{!19, !10, i64 56}
!21 = !{!19, !10, i64 60}
!22 = !{!19, !6, i64 64}
!23 = !{!19, !13, i64 72}
!24 = !{!13, !13, i64 0}
!25 = !{!19, !10, i64 80}
!26 = !{!19, !6, i64 96}
!27 = !{!19, !6, i64 104}
!28 = !{!19, !10, i64 112}
!29 = !{!19, !10, i64 116}
!30 = !{!7, !7, i64 0}
!31 = !{i64 0, i64 1, !30, i64 1, i64 1, !30, i64 2, i64 2, !32}
!32 = !{!33, !33, i64 0}
!33 = !{!"short", !7, i64 0}
!34 = !{!35, !7, i64 1}
!35 = !{!"", !7, i64 0, !7, i64 1, !33, i64 2}
!36 = !{!35, !7, i64 0}
!37 = !{!35, !33, i64 2}
!38 = !{!12, !6, i64 48}
!39 = !{!19, !10, i64 0}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = distinct !{!42, !41}
!43 = distinct !{!43, !41}
!44 = distinct !{!44, !41}
!45 = distinct !{!45, !41}
!46 = distinct !{!46, !41}
!47 = distinct !{!47, !41}


; 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 %5, i64 -1
  %7 = getelementptr inbounds i8, ptr %0, i64 8
  %8 = load i32, ptr %7, align 8, !tbaa !13
  %9 = add i32 %8, -5
  %10 = zext i32 %9 to i64
  %11 = getelementptr inbounds i8, ptr %6, i64 %10
  %12 = getelementptr inbounds i8, ptr %0, i64 24
  %13 = load ptr, ptr %12, align 8, !tbaa !14
  %14 = ptrtoint ptr %13 to i64
  %15 = getelementptr inbounds i8, ptr %13, i64 -1
  %16 = getelementptr inbounds i8, ptr %0, i64 32
  %17 = load i32, ptr %16, align 8, !tbaa !15
  %18 = sub i32 %1, %17
  %19 = zext i32 %18 to i64
  %20 = sub nsw i64 0, %19
  %21 = getelementptr inbounds i8, ptr %15, i64 %20
  %22 = add i32 %17, -257
  %23 = zext i32 %22 to i64
  %24 = getelementptr inbounds i8, ptr %15, i64 %23
  %25 = getelementptr inbounds i8, ptr %4, i64 52
  %26 = load i32, ptr %25, align 4, !tbaa !16
  %27 = getelementptr inbounds i8, ptr %4, i64 56
  %28 = load i32, ptr %27, align 8, !tbaa !18
  %29 = getelementptr inbounds i8, ptr %4, i64 60
  %30 = load i32, ptr %29, align 4, !tbaa !19
  %31 = getelementptr inbounds i8, ptr %4, i64 64
  %32 = load ptr, ptr %31, align 8, !tbaa !20
  %33 = ptrtoint ptr %32 to i64
  %34 = getelementptr inbounds i8, ptr %4, i64 72
  %35 = load i64, ptr %34, align 8, !tbaa !21
  %36 = getelementptr inbounds i8, ptr %4, i64 80
  %37 = load i32, ptr %36, align 8, !tbaa !22
  %38 = getelementptr inbounds i8, ptr %4, i64 96
  %39 = load ptr, ptr %38, align 8, !tbaa !23
  %40 = getelementptr inbounds i8, ptr %4, i64 104
  %41 = load ptr, ptr %40, align 8, !tbaa !24
  %42 = getelementptr inbounds i8, ptr %4, i64 112
  %43 = load i32, ptr %42, align 8, !tbaa !25
  %notmask = shl nsw i32 -1, %43
  %44 = xor i32 %notmask, -1
  %45 = getelementptr inbounds i8, ptr %4, i64 116
  %46 = load i32, ptr %45, align 4, !tbaa !26
  %notmask317 = shl nsw i32 -1, %46
  %47 = xor i32 %notmask317, -1
  %48 = zext nneg i32 %44 to i64
  %49 = zext nneg i32 %47 to i64
  %50 = ptrtoint ptr %21 to i64
  %51 = getelementptr inbounds i8, ptr %32, i64 -1
  %52 = icmp eq i32 %30, 0
  %53 = add i32 %30, %26
  %54 = trunc i64 %14 to i32
  %55 = add i32 %17, %54
  %56 = add i32 %55, -2
  %57 = sub i32 %56, %1
  %58 = zext i32 %30 to i64
  %59 = trunc i64 %14 to i32
  %60 = add i32 %17, %59
  %61 = add i32 %60, -2
  %62 = add i32 %30, %1
  %63 = sub i32 %61, %62
  %64 = trunc i64 %14 to i32
  %65 = add i32 %17, %64
  %66 = add i32 %65, -2
  %67 = sub i32 %66, %1
  %min.iters.check540 = icmp ult i32 %30, 32
  %n.vec543 = and i64 %58, 4294967264
  %.cast546 = trunc nuw i64 %n.vec543 to i32
  %ind.end547 = sub i32 %30, %.cast546
  %ind.end549 = getelementptr i8, ptr %51, i64 %n.vec543
  %cmp.n560 = icmp eq i64 %n.vec543, %58
  br label %68

68:                                               ; preds = %477, %2
  %.0283 = phi i32 [ %37, %2 ], [ %.8291, %477 ]
  %.0273 = phi i64 [ %35, %2 ], [ %.8281, %477 ]
  %.0265 = phi ptr [ %15, %2 ], [ %.8, %477 ]
  %.0258 = phi ptr [ %6, %2 ], [ %.6264, %477 ]
  %69 = icmp ult i32 %.0283, 15
  br i1 %69, label %70, label %85

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

85:                                               ; preds = %70, %68
  %.1284 = phi i32 [ %84, %70 ], [ %.0283, %68 ]
  %.1274 = phi i64 [ %83, %70 ], [ %.0273, %68 ]
  %.1259 = phi ptr [ %78, %70 ], [ %.0258, %68 ]
  %86 = and i64 %.1274, %48
  %.sroa.0.0.in365 = getelementptr inbounds %struct.code, ptr %39, i64 %86
  %.sroa.0.0366 = load i8, ptr %.sroa.0.0.in365, align 2, !tbaa !27
  %.sroa.8.0.in367 = getelementptr inbounds %struct.code, ptr %39, i64 %86, i32 1
  %.sroa.8.0368 = load i8, ptr %.sroa.8.0.in367, align 1, !tbaa !27
  %.sroa.10.0.in369 = getelementptr inbounds %struct.code, ptr %39, i64 %86, i32 2
  %.sroa.10.0370 = load i16, ptr %.sroa.10.0.in369, align 2, !tbaa !28
  %87 = zext i8 %.sroa.8.0368 to i32
  %88 = zext nneg i8 %.sroa.8.0368 to i64
  %89 = lshr i64 %.1274, %88
  %90 = sub i32 %.1284, %87
  %91 = icmp eq i8 %.sroa.0.0366, 0
  br i1 %91, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %464, %85
  %.sroa.10.0.lcssa = phi i16 [ %.sroa.10.0370, %85 ], [ %.sroa.10.0, %464 ]
  %.lcssa339 = phi i64 [ %89, %85 ], [ %472, %464 ]
  %.lcssa336 = phi i32 [ %90, %85 ], [ %473, %464 ]
  %92 = trunc i16 %.sroa.10.0.lcssa to i8
  %93 = getelementptr inbounds i8, ptr %.0265, i64 1
  store i8 %92, ptr %93, align 1, !tbaa !27
  br label %477

.lr.ph:                                           ; preds = %85, %464
  %.in = phi i8 [ %.sroa.0.0, %464 ], [ %.sroa.0.0366, %85 ]
  %94 = phi i32 [ %473, %464 ], [ %90, %85 ]
  %95 = phi i64 [ %472, %464 ], [ %89, %85 ]
  %.sroa.10.0371 = phi i16 [ %.sroa.10.0, %464 ], [ %.sroa.10.0370, %85 ]
  %96 = zext i8 %.in to i32
  %97 = and i32 %96, 16
  %.not = icmp eq i32 %97, 0
  br i1 %.not, label %461, label %98

98:                                               ; preds = %.lr.ph
  %99 = zext i16 %.sroa.10.0371 to i32
  %100 = and i32 %96, 15
  %.not320 = icmp eq i32 %100, 0
  br i1 %.not320, label %119, label %101

101:                                              ; preds = %98
  %102 = icmp ult i32 %94, %100
  br i1 %102, label %103, label %111

103:                                              ; preds = %101
  %104 = getelementptr inbounds i8, ptr %.1259, i64 1
  %105 = load i8, ptr %104, align 1, !tbaa !27
  %106 = zext i8 %105 to i64
  %107 = zext nneg i32 %94 to i64
  %108 = shl nuw nsw i64 %106, %107
  %109 = add i64 %108, %95
  %110 = add nuw nsw i32 %94, 8
  br label %111

111:                                              ; preds = %103, %101
  %.3286 = phi i32 [ %110, %103 ], [ %94, %101 ]
  %.3276 = phi i64 [ %109, %103 ], [ %95, %101 ]
  %.2260 = phi ptr [ %104, %103 ], [ %.1259, %101 ]
  %112 = trunc i64 %.3276 to i32
  %notmask321 = shl nsw i32 -1, %100
  %113 = xor i32 %notmask321, -1
  %114 = and i32 %112, %113
  %115 = add nuw nsw i32 %114, %99
  %116 = zext nneg i32 %100 to i64
  %117 = lshr i64 %.3276, %116
  %118 = sub i32 %.3286, %100
  br label %119

119:                                              ; preds = %111, %98
  %.4287 = phi i32 [ %118, %111 ], [ %94, %98 ]
  %.4277 = phi i64 [ %117, %111 ], [ %95, %98 ]
  %.3261 = phi ptr [ %.2260, %111 ], [ %.1259, %98 ]
  %.0250 = phi i32 [ %115, %111 ], [ %99, %98 ]
  %120 = icmp ult i32 %.4287, 15
  br i1 %120, label %121, label %136

121:                                              ; preds = %119
  %122 = getelementptr inbounds i8, ptr %.3261, i64 1
  %123 = load i8, ptr %122, align 1, !tbaa !27
  %124 = zext i8 %123 to i64
  %125 = zext nneg i32 %.4287 to i64
  %126 = shl nuw nsw i64 %124, %125
  %127 = add i64 %126, %.4277
  %128 = add nuw nsw i32 %.4287, 8
  %129 = getelementptr inbounds i8, ptr %.3261, i64 2
  %130 = load i8, ptr %129, align 1, !tbaa !27
  %131 = zext i8 %130 to i64
  %132 = zext nneg i32 %128 to i64
  %133 = shl nuw nsw i64 %131, %132
  %134 = add i64 %127, %133
  %135 = or disjoint i32 %.4287, 16
  br label %136

136:                                              ; preds = %121, %119
  %.5288 = phi i32 [ %135, %121 ], [ %.4287, %119 ]
  %.5278 = phi i64 [ %134, %121 ], [ %.4277, %119 ]
  %.4262 = phi ptr [ %129, %121 ], [ %.3261, %119 ]
  %137 = and i64 %.5278, %49
  %.sroa.0.1.in374 = getelementptr inbounds %struct.code, ptr %41, i64 %137
  %.sroa.0.1375 = load i8, ptr %.sroa.0.1.in374, align 2, !tbaa !27
  %.sroa.8.1.in376 = getelementptr inbounds %struct.code, ptr %41, i64 %137, i32 1
  %.sroa.8.1377 = load i8, ptr %.sroa.8.1.in376, align 1, !tbaa !27
  %.sroa.10.1.in378 = getelementptr inbounds %struct.code, ptr %41, i64 %137, i32 2
  %.sroa.10.1379 = load i16, ptr %.sroa.10.1.in378, align 2, !tbaa !28
  %138 = zext i8 %.sroa.8.1377 to i32
  %139 = zext nneg i8 %.sroa.8.1377 to i64
  %140 = lshr i64 %.5278, %139
  %141 = sub i32 %.5288, %138
  %142 = zext i8 %.sroa.0.1375 to i32
  %143 = and i32 %142, 16
  %.not322380 = icmp eq i32 %143, 0
  br i1 %.not322380, label %.lr.ph383, label %._crit_edge384

._crit_edge384:                                   ; preds = %449, %136
  %.sroa.10.1.lcssa = phi i16 [ %.sroa.10.1379, %136 ], [ %.sroa.10.1, %449 ]
  %.lcssa347 = phi i64 [ %140, %136 ], [ %457, %449 ]
  %.lcssa345 = phi i32 [ %141, %136 ], [ %458, %449 ]
  %.lcssa = phi i32 [ %142, %136 ], [ %459, %449 ]
  %144 = zext i16 %.sroa.10.1.lcssa to i32
  %145 = and i32 %.lcssa, 15
  %146 = icmp ult i32 %.lcssa345, %145
  br i1 %146, label %147, label %164

147:                                              ; preds = %._crit_edge384
  %148 = getelementptr inbounds i8, ptr %.4262, i64 1
  %149 = load i8, ptr %148, align 1, !tbaa !27
  %150 = zext i8 %149 to i64
  %151 = zext nneg i32 %.lcssa345 to i64
  %152 = shl nuw nsw i64 %150, %151
  %153 = add i64 %152, %.lcssa347
  %154 = add nuw nsw i32 %.lcssa345, 8
  %155 = icmp ult i32 %154, %145
  br i1 %155, label %156, label %164

156:                                              ; preds = %147
  %157 = getelementptr inbounds i8, ptr %.4262, i64 2
  %158 = load i8, ptr %157, align 1, !tbaa !27
  %159 = zext i8 %158 to i64
  %160 = zext nneg i32 %154 to i64
  %161 = shl nuw nsw i64 %159, %160
  %162 = add i64 %161, %153
  %163 = add nuw nsw i32 %.lcssa345, 16
  br label %164

164:                                              ; preds = %147, %156, %._crit_edge384
  %.7290 = phi i32 [ %163, %156 ], [ %154, %147 ], [ %.lcssa345, %._crit_edge384 ]
  %.7280 = phi i64 [ %162, %156 ], [ %153, %147 ], [ %.lcssa347, %._crit_edge384 ]
  %.5263 = phi ptr [ %157, %156 ], [ %148, %147 ], [ %.4262, %._crit_edge384 ]
  %165 = trunc i64 %.7280 to i32
  %notmask324 = shl nsw i32 -1, %145
  %166 = xor i32 %notmask324, -1
  %167 = and i32 %165, %166
  %168 = add nuw nsw i32 %167, %144
  %169 = zext nneg i32 %145 to i64
  %170 = lshr i64 %.7280, %169
  %171 = sub i32 %.7290, %145
  %172 = ptrtoint ptr %.0265 to i64
  %173 = sub i64 %172, %50
  %174 = trunc i64 %173 to i32
  %175 = icmp ugt i32 %168, %174
  br i1 %175, label %176, label %418

176:                                              ; preds = %164
  %177 = sub nsw i32 %168, %174
  %178 = icmp ugt i32 %177, %28
  br i1 %178, label %.loopexit.sink.split.sink.split, label %179

179:                                              ; preds = %176
  br i1 %52, label %180, label %234

180:                                              ; preds = %179
  %181 = sub i32 %26, %177
  %182 = zext i32 %181 to i64
  %183 = getelementptr inbounds i8, ptr %51, i64 %182
  %184 = icmp ult i32 %177, %.0250
  br i1 %184, label %.preheader, label %373

.preheader:                                       ; preds = %180
  %185 = add i32 %57, %167
  %186 = add i32 %185, %144
  %187 = trunc i64 %172 to i32
  %188 = sub i32 %186, %187
  %189 = zext i32 %188 to i64
  %190 = add nuw nsw i64 %189, 1
  %min.iters.check = icmp ult i32 %188, 31
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader
  %191 = add i64 %172, 1
  %192 = add i64 %33, %182
  %193 = sub i64 %191, %192
  %diff.check = icmp ult i64 %193, 32
  br i1 %diff.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %190, 8589934560
  %ind.end = getelementptr i8, ptr %.0265, i64 %n.vec
  %.cast = trunc i64 %n.vec to i32
  %ind.end528 = sub i32 %177, %.cast
  %ind.end530 = getelementptr i8, ptr %183, 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 %.0265, i64 %index
  %next.gep533 = getelementptr i8, ptr %183, i64 %index
  %194 = getelementptr inbounds i8, ptr %next.gep533, i64 1
  %195 = getelementptr inbounds i8, ptr %next.gep533, i64 17
  %wide.load = load <16 x i8>, ptr %194, align 1, !tbaa !27
  %wide.load535 = load <16 x i8>, ptr %195, align 1, !tbaa !27
  %196 = getelementptr inbounds i8, ptr %next.gep, i64 1
  %197 = getelementptr inbounds i8, ptr %next.gep, i64 17
  store <16 x i8> %wide.load, ptr %196, align 1, !tbaa !27
  store <16 x i8> %wide.load535, ptr %197, align 1, !tbaa !27
  %index.next = add nuw i64 %index, 32
  %198 = icmp eq i64 %index.next, %n.vec
  br i1 %198, label %middle.block, label %vector.body, !llvm.loop !30

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.preheader
  %.1266.ph = phi ptr [ %.0265, %vector.memcheck ], [ %.0265, %.preheader ], [ %ind.end, %middle.block ]
  %.0254.ph = phi i32 [ %177, %vector.memcheck ], [ %177, %.preheader ], [ %ind.end528, %middle.block ]
  %.0.ph = phi ptr [ %183, %vector.memcheck ], [ %183, %.preheader ], [ %ind.end530, %middle.block ]
  %199 = add i32 %.0254.ph, -1
  %xtraiter666 = and i32 %.0254.ph, 7
  %lcmp.mod667.not = icmp eq i32 %xtraiter666, 0
  br i1 %lcmp.mod667.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.1266.prol = phi ptr [ %202, %scalar.ph.prol ], [ %.1266.ph, %scalar.ph.preheader ]
  %.0254.prol = phi i32 [ %203, %scalar.ph.prol ], [ %.0254.ph, %scalar.ph.preheader ]
  %.0.prol = phi ptr [ %200, %scalar.ph.prol ], [ %.0.ph, %scalar.ph.preheader ]
  %prol.iter668 = phi i32 [ %prol.iter668.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %200 = getelementptr inbounds i8, ptr %.0.prol, i64 1
  %201 = load i8, ptr %200, align 1, !tbaa !27
  %202 = getelementptr inbounds i8, ptr %.1266.prol, i64 1
  store i8 %201, ptr %202, align 1, !tbaa !27
  %203 = add i32 %.0254.prol, -1
  %prol.iter668.next = add i32 %prol.iter668, 1
  %prol.iter668.cmp.not = icmp eq i32 %prol.iter668.next, %xtraiter666
  br i1 %prol.iter668.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !34

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.lcssa645.unr = phi ptr [ poison, %scalar.ph.preheader ], [ %202, %scalar.ph.prol ]
  %.1266.unr = phi ptr [ %.1266.ph, %scalar.ph.preheader ], [ %202, %scalar.ph.prol ]
  %.0254.unr = phi i32 [ %.0254.ph, %scalar.ph.preheader ], [ %203, %scalar.ph.prol ]
  %.0.unr = phi ptr [ %.0.ph, %scalar.ph.preheader ], [ %200, %scalar.ph.prol ]
  %204 = icmp ult i32 %199, 7
  br i1 %204, label %.loopexit612, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.1266 = phi ptr [ %228, %scalar.ph ], [ %.1266.unr, %scalar.ph.prol.loopexit ]
  %.0254 = phi i32 [ %229, %scalar.ph ], [ %.0254.unr, %scalar.ph.prol.loopexit ]
  %.0 = phi ptr [ %226, %scalar.ph ], [ %.0.unr, %scalar.ph.prol.loopexit ]
  %205 = getelementptr inbounds i8, ptr %.0, i64 1
  %206 = load i8, ptr %205, align 1, !tbaa !27
  %207 = getelementptr inbounds i8, ptr %.1266, i64 1
  store i8 %206, ptr %207, align 1, !tbaa !27
  %208 = getelementptr inbounds i8, ptr %.0, i64 2
  %209 = load i8, ptr %208, align 1, !tbaa !27
  %210 = getelementptr inbounds i8, ptr %.1266, i64 2
  store i8 %209, ptr %210, align 1, !tbaa !27
  %211 = getelementptr inbounds i8, ptr %.0, i64 3
  %212 = load i8, ptr %211, align 1, !tbaa !27
  %213 = getelementptr inbounds i8, ptr %.1266, i64 3
  store i8 %212, ptr %213, align 1, !tbaa !27
  %214 = getelementptr inbounds i8, ptr %.0, i64 4
  %215 = load i8, ptr %214, align 1, !tbaa !27
  %216 = getelementptr inbounds i8, ptr %.1266, i64 4
  store i8 %215, ptr %216, align 1, !tbaa !27
  %217 = getelementptr inbounds i8, ptr %.0, i64 5
  %218 = load i8, ptr %217, align 1, !tbaa !27
  %219 = getelementptr inbounds i8, ptr %.1266, i64 5
  store i8 %218, ptr %219, align 1, !tbaa !27
  %220 = getelementptr inbounds i8, ptr %.0, i64 6
  %221 = load i8, ptr %220, align 1, !tbaa !27
  %222 = getelementptr inbounds i8, ptr %.1266, i64 6
  store i8 %221, ptr %222, align 1, !tbaa !27
  %223 = getelementptr inbounds i8, ptr %.0, i64 7
  %224 = load i8, ptr %223, align 1, !tbaa !27
  %225 = getelementptr inbounds i8, ptr %.1266, i64 7
  store i8 %224, ptr %225, align 1, !tbaa !27
  %226 = getelementptr inbounds i8, ptr %.0, i64 8
  %227 = load i8, ptr %226, align 1, !tbaa !27
  %228 = getelementptr inbounds i8, ptr %.1266, i64 8
  store i8 %227, ptr %228, align 1, !tbaa !27
  %229 = add i32 %.0254, -8
  %.not329.7 = icmp eq i32 %229, 0
  br i1 %.not329.7, label %.loopexit612, label %scalar.ph, !llvm.loop !36

.loopexit612:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %.lcssa513 = phi ptr [ %ind.end, %middle.block ], [ %.lcssa645.unr, %scalar.ph.prol.loopexit ], [ %228, %scalar.ph ]
  %230 = sub nsw i32 %.0250, %177
  %231 = zext nneg i32 %168 to i64
  %232 = sub nsw i64 0, %231
  %233 = getelementptr inbounds i8, ptr %.lcssa513, i64 %232
  br label %373

234:                                              ; preds = %179
  %235 = icmp ult i32 %30, %177
  br i1 %235, label %236, label %319

236:                                              ; preds = %234
  %237 = sub i32 %53, %177
  %238 = zext i32 %237 to i64
  %239 = getelementptr inbounds i8, ptr %51, i64 %238
  %240 = sub i32 %177, %30
  %241 = icmp ult i32 %240, %.0250
  br i1 %241, label %.preheader483, label %373

.preheader483:                                    ; preds = %236
  %242 = add i32 %63, %167
  %243 = add i32 %242, %144
  %244 = trunc i64 %172 to i32
  %245 = sub i32 %243, %244
  %246 = zext i32 %245 to i64
  %247 = add nuw nsw i64 %246, 1
  %min.iters.check565 = icmp ult i32 %245, 31
  br i1 %min.iters.check565, label %scalar.ph564.preheader, label %vector.memcheck561

vector.memcheck561:                               ; preds = %.preheader483
  %248 = add i64 %172, 1
  %249 = add i64 %33, %238
  %250 = sub i64 %248, %249
  %diff.check562 = icmp ult i64 %250, 32
  br i1 %diff.check562, label %scalar.ph564.preheader, label %vector.ph566

vector.ph566:                                     ; preds = %vector.memcheck561
  %n.vec568 = and i64 %247, 8589934560
  %ind.end570 = getelementptr i8, ptr %.0265, i64 %n.vec568
  %.cast572 = trunc i64 %n.vec568 to i32
  %ind.end573 = sub i32 %240, %.cast572
  %ind.end575 = getelementptr i8, ptr %239, i64 %n.vec568
  br label %vector.body577

vector.body577:                                   ; preds = %vector.body577, %vector.ph566
  %index578 = phi i64 [ 0, %vector.ph566 ], [ %index.next585, %vector.body577 ]
  %next.gep579 = getelementptr i8, ptr %.0265, i64 %index578
  %next.gep581 = getelementptr i8, ptr %239, i64 %index578
  %251 = getelementptr inbounds i8, ptr %next.gep581, i64 1
  %252 = getelementptr inbounds i8, ptr %next.gep581, i64 17
  %wide.load583 = load <16 x i8>, ptr %251, align 1, !tbaa !27
  %wide.load584 = load <16 x i8>, ptr %252, align 1, !tbaa !27
  %253 = getelementptr inbounds i8, ptr %next.gep579, i64 1
  %254 = getelementptr inbounds i8, ptr %next.gep579, i64 17
  store <16 x i8> %wide.load583, ptr %253, align 1, !tbaa !27
  store <16 x i8> %wide.load584, ptr %254, align 1, !tbaa !27
  %index.next585 = add nuw i64 %index578, 32
  %255 = icmp eq i64 %index.next585, %n.vec568
  br i1 %255, label %middle.block563, label %vector.body577, !llvm.loop !37

middle.block563:                                  ; preds = %vector.body577
  %cmp.n586 = icmp eq i64 %247, %n.vec568
  %ind.escape = add nsw i64 %n.vec568, -1
  br i1 %cmp.n586, label %.loopexit614, label %scalar.ph564.preheader

scalar.ph564.preheader:                           ; preds = %middle.block563, %vector.memcheck561, %.preheader483
  %indvar.ph = phi i64 [ 0, %vector.memcheck561 ], [ 0, %.preheader483 ], [ %n.vec568, %middle.block563 ]
  %.2267.ph = phi ptr [ %.0265, %vector.memcheck561 ], [ %.0265, %.preheader483 ], [ %ind.end570, %middle.block563 ]
  %.1255.ph = phi i32 [ %240, %vector.memcheck561 ], [ %240, %.preheader483 ], [ %ind.end573, %middle.block563 ]
  %.1.ph = phi ptr [ %239, %vector.memcheck561 ], [ %239, %.preheader483 ], [ %ind.end575, %middle.block563 ]
  %256 = add i32 %.1255.ph, -1
  %xtraiter660 = and i32 %.1255.ph, 3
  %lcmp.mod661.not = icmp eq i32 %xtraiter660, 0
  br i1 %lcmp.mod661.not, label %scalar.ph564.prol.loopexit, label %scalar.ph564.prol

scalar.ph564.prol:                                ; preds = %scalar.ph564.preheader, %scalar.ph564.prol
  %indvar.prol = phi i64 [ %indvar.next.prol, %scalar.ph564.prol ], [ %indvar.ph, %scalar.ph564.preheader ]
  %.2267.prol = phi ptr [ %259, %scalar.ph564.prol ], [ %.2267.ph, %scalar.ph564.preheader ]
  %.1255.prol = phi i32 [ %260, %scalar.ph564.prol ], [ %.1255.ph, %scalar.ph564.preheader ]
  %.1.prol = phi ptr [ %257, %scalar.ph564.prol ], [ %.1.ph, %scalar.ph564.preheader ]
  %prol.iter662 = phi i32 [ %prol.iter662.next, %scalar.ph564.prol ], [ 0, %scalar.ph564.preheader ]
  %257 = getelementptr inbounds i8, ptr %.1.prol, i64 1
  %258 = load i8, ptr %257, align 1, !tbaa !27
  %259 = getelementptr inbounds i8, ptr %.2267.prol, i64 1
  store i8 %258, ptr %259, align 1, !tbaa !27
  %260 = add i32 %.1255.prol, -1
  %indvar.next.prol = add i64 %indvar.prol, 1
  %prol.iter662.next = add i32 %prol.iter662, 1
  %prol.iter662.cmp.not = icmp eq i32 %prol.iter662.next, %xtraiter660
  br i1 %prol.iter662.cmp.not, label %scalar.ph564.prol.loopexit, label %scalar.ph564.prol, !llvm.loop !38

scalar.ph564.prol.loopexit:                       ; preds = %scalar.ph564.prol, %scalar.ph564.preheader
  %indvar.lcssa643.unr = phi i64 [ poison, %scalar.ph564.preheader ], [ %indvar.prol, %scalar.ph564.prol ]
  %.lcssa642.unr = phi ptr [ poison, %scalar.ph564.preheader ], [ %259, %scalar.ph564.prol ]
  %indvar.unr = phi i64 [ %indvar.ph, %scalar.ph564.preheader ], [ %indvar.next.prol, %scalar.ph564.prol ]
  %.2267.unr = phi ptr [ %.2267.ph, %scalar.ph564.preheader ], [ %259, %scalar.ph564.prol ]
  %.1255.unr = phi i32 [ %.1255.ph, %scalar.ph564.preheader ], [ %260, %scalar.ph564.prol ]
  %.1.unr = phi ptr [ %.1.ph, %scalar.ph564.preheader ], [ %257, %scalar.ph564.prol ]
  %261 = icmp ult i32 %256, 3
  br i1 %261, label %.loopexit614, label %scalar.ph564

scalar.ph564:                                     ; preds = %scalar.ph564.prol.loopexit, %scalar.ph564
  %indvar = phi i64 [ %indvar.next.3, %scalar.ph564 ], [ %indvar.unr, %scalar.ph564.prol.loopexit ]
  %.2267 = phi ptr [ %273, %scalar.ph564 ], [ %.2267.unr, %scalar.ph564.prol.loopexit ]
  %.1255 = phi i32 [ %274, %scalar.ph564 ], [ %.1255.unr, %scalar.ph564.prol.loopexit ]
  %.1 = phi ptr [ %271, %scalar.ph564 ], [ %.1.unr, %scalar.ph564.prol.loopexit ]
  %262 = getelementptr inbounds i8, ptr %.1, i64 1
  %263 = load i8, ptr %262, align 1, !tbaa !27
  %264 = getelementptr inbounds i8, ptr %.2267, i64 1
  store i8 %263, ptr %264, align 1, !tbaa !27
  %265 = getelementptr inbounds i8, ptr %.1, i64 2
  %266 = load i8, ptr %265, align 1, !tbaa !27
  %267 = getelementptr inbounds i8, ptr %.2267, i64 2
  store i8 %266, ptr %267, align 1, !tbaa !27
  %268 = getelementptr inbounds i8, ptr %.1, i64 3
  %269 = load i8, ptr %268, align 1, !tbaa !27
  %270 = getelementptr inbounds i8, ptr %.2267, i64 3
  store i8 %269, ptr %270, align 1, !tbaa !27
  %271 = getelementptr inbounds i8, ptr %.1, i64 4
  %272 = load i8, ptr %271, align 1, !tbaa !27
  %273 = getelementptr inbounds i8, ptr %.2267, i64 4
  store i8 %272, ptr %273, align 1, !tbaa !27
  %274 = add i32 %.1255, -4
  %.not327.3 = icmp eq i32 %274, 0
  %indvar.next.3 = add i64 %indvar, 4
  br i1 %.not327.3, label %.loopexit614.loopexit.unr-lcssa, label %scalar.ph564, !llvm.loop !39

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

.loopexit614:                                     ; preds = %.loopexit614.loopexit.unr-lcssa, %scalar.ph564.prol.loopexit, %middle.block563
  %indvar.lcssa = phi i64 [ %ind.escape, %middle.block563 ], [ %indvar.lcssa643.unr, %scalar.ph564.prol.loopexit ], [ %indvar.next.2, %.loopexit614.loopexit.unr-lcssa ]
  %.lcssa511 = phi ptr [ %ind.end570, %middle.block563 ], [ %.lcssa642.unr, %scalar.ph564.prol.loopexit ], [ %273, %.loopexit614.loopexit.unr-lcssa ]
  %275 = sub nsw i32 %.0250, %240
  %276 = icmp ult i32 %30, %275
  br i1 %276, label %.preheader482, label %373

.preheader482:                                    ; preds = %.loopexit614
  br i1 %min.iters.check540, label %scalar.ph539.preheader, label %vector.memcheck536

vector.memcheck536:                               ; preds = %.preheader482
  %reass.sub = sub i64 %172, %33
  %277 = add i64 %reass.sub, 2
  %278 = add i64 %indvar.lcssa, %277
  %diff.check537 = icmp ult i64 %278, 32
  br i1 %diff.check537, label %scalar.ph539.preheader, label %vector.ph541

vector.ph541:                                     ; preds = %vector.memcheck536
  %ind.end544 = getelementptr i8, ptr %.lcssa511, i64 %n.vec543
  br label %vector.body551

vector.body551:                                   ; preds = %vector.body551, %vector.ph541
  %index552 = phi i64 [ 0, %vector.ph541 ], [ %index.next559, %vector.body551 ]
  %next.gep553 = getelementptr i8, ptr %.lcssa511, i64 %index552
  %next.gep555 = getelementptr i8, ptr %51, i64 %index552
  %279 = getelementptr inbounds i8, ptr %next.gep555, i64 1
  %280 = getelementptr inbounds i8, ptr %next.gep555, i64 17
  %wide.load557 = load <16 x i8>, ptr %279, align 1, !tbaa !27
  %wide.load558 = load <16 x i8>, ptr %280, align 1, !tbaa !27
  %281 = getelementptr inbounds i8, ptr %next.gep553, i64 1
  %282 = getelementptr inbounds i8, ptr %next.gep553, i64 17
  store <16 x i8> %wide.load557, ptr %281, align 1, !tbaa !27
  store <16 x i8> %wide.load558, ptr %282, align 1, !tbaa !27
  %index.next559 = add nuw i64 %index552, 32
  %283 = icmp eq i64 %index.next559, %n.vec543
  br i1 %283, label %middle.block538, label %vector.body551, !llvm.loop !40

middle.block538:                                  ; preds = %vector.body551
  br i1 %cmp.n560, label %.loopexit613, label %scalar.ph539.preheader

scalar.ph539.preheader:                           ; preds = %middle.block538, %vector.memcheck536, %.preheader482
  %.3268.ph = phi ptr [ %.lcssa511, %vector.memcheck536 ], [ %.lcssa511, %.preheader482 ], [ %ind.end544, %middle.block538 ]
  %.2256.ph = phi i32 [ %30, %vector.memcheck536 ], [ %30, %.preheader482 ], [ %ind.end547, %middle.block538 ]
  %.2.ph = phi ptr [ %51, %vector.memcheck536 ], [ %51, %.preheader482 ], [ %ind.end549, %middle.block538 ]
  %284 = add i32 %.2256.ph, -1
  %xtraiter663 = and i32 %.2256.ph, 7
  %lcmp.mod664.not = icmp eq i32 %xtraiter663, 0
  br i1 %lcmp.mod664.not, label %scalar.ph539.prol.loopexit, label %scalar.ph539.prol

scalar.ph539.prol:                                ; preds = %scalar.ph539.preheader, %scalar.ph539.prol
  %.3268.prol = phi ptr [ %287, %scalar.ph539.prol ], [ %.3268.ph, %scalar.ph539.preheader ]
  %.2256.prol = phi i32 [ %288, %scalar.ph539.prol ], [ %.2256.ph, %scalar.ph539.preheader ]
  %.2.prol = phi ptr [ %285, %scalar.ph539.prol ], [ %.2.ph, %scalar.ph539.preheader ]
  %prol.iter665 = phi i32 [ %prol.iter665.next, %scalar.ph539.prol ], [ 0, %scalar.ph539.preheader ]
  %285 = getelementptr inbounds i8, ptr %.2.prol, i64 1
  %286 = load i8, ptr %285, align 1, !tbaa !27
  %287 = getelementptr inbounds i8, ptr %.3268.prol, i64 1
  store i8 %286, ptr %287, align 1, !tbaa !27
  %288 = add i32 %.2256.prol, -1
  %prol.iter665.next = add i32 %prol.iter665, 1
  %prol.iter665.cmp.not = icmp eq i32 %prol.iter665.next, %xtraiter663
  br i1 %prol.iter665.cmp.not, label %scalar.ph539.prol.loopexit, label %scalar.ph539.prol, !llvm.loop !41

scalar.ph539.prol.loopexit:                       ; preds = %scalar.ph539.prol, %scalar.ph539.preheader
  %.lcssa644.unr = phi ptr [ poison, %scalar.ph539.preheader ], [ %287, %scalar.ph539.prol ]
  %.3268.unr = phi ptr [ %.3268.ph, %scalar.ph539.preheader ], [ %287, %scalar.ph539.prol ]
  %.2256.unr = phi i32 [ %.2256.ph, %scalar.ph539.preheader ], [ %288, %scalar.ph539.prol ]
  %.2.unr = phi ptr [ %.2.ph, %scalar.ph539.preheader ], [ %285, %scalar.ph539.prol ]
  %289 = icmp ult i32 %284, 7
  br i1 %289, label %.loopexit613, label %scalar.ph539

scalar.ph539:                                     ; preds = %scalar.ph539.prol.loopexit, %scalar.ph539
  %.3268 = phi ptr [ %313, %scalar.ph539 ], [ %.3268.unr, %scalar.ph539.prol.loopexit ]
  %.2256 = phi i32 [ %314, %scalar.ph539 ], [ %.2256.unr, %scalar.ph539.prol.loopexit ]
  %.2 = phi ptr [ %311, %scalar.ph539 ], [ %.2.unr, %scalar.ph539.prol.loopexit ]
  %290 = getelementptr inbounds i8, ptr %.2, i64 1
  %291 = load i8, ptr %290, align 1, !tbaa !27
  %292 = getelementptr inbounds i8, ptr %.3268, i64 1
  store i8 %291, ptr %292, align 1, !tbaa !27
  %293 = getelementptr inbounds i8, ptr %.2, i64 2
  %294 = load i8, ptr %293, align 1, !tbaa !27
  %295 = getelementptr inbounds i8, ptr %.3268, i64 2
  store i8 %294, ptr %295, align 1, !tbaa !27
  %296 = getelementptr inbounds i8, ptr %.2, i64 3
  %297 = load i8, ptr %296, align 1, !tbaa !27
  %298 = getelementptr inbounds i8, ptr %.3268, i64 3
  store i8 %297, ptr %298, align 1, !tbaa !27
  %299 = getelementptr inbounds i8, ptr %.2, i64 4
  %300 = load i8, ptr %299, align 1, !tbaa !27
  %301 = getelementptr inbounds i8, ptr %.3268, i64 4
  store i8 %300, ptr %301, align 1, !tbaa !27
  %302 = getelementptr inbounds i8, ptr %.2, i64 5
  %303 = load i8, ptr %302, align 1, !tbaa !27
  %304 = getelementptr inbounds i8, ptr %.3268, i64 5
  store i8 %303, ptr %304, align 1, !tbaa !27
  %305 = getelementptr inbounds i8, ptr %.2, i64 6
  %306 = load i8, ptr %305, align 1, !tbaa !27
  %307 = getelementptr inbounds i8, ptr %.3268, i64 6
  store i8 %306, ptr %307, align 1, !tbaa !27
  %308 = getelementptr inbounds i8, ptr %.2, i64 7
  %309 = load i8, ptr %308, align 1, !tbaa !27
  %310 = getelementptr inbounds i8, ptr %.3268, i64 7
  store i8 %309, ptr %310, align 1, !tbaa !27
  %311 = getelementptr inbounds i8, ptr %.2, i64 8
  %312 = load i8, ptr %311, align 1, !tbaa !27
  %313 = getelementptr inbounds i8, ptr %.3268, i64 8
  store i8 %312, ptr %313, align 1, !tbaa !27
  %314 = add i32 %.2256, -8
  %.not328.7 = icmp eq i32 %314, 0
  br i1 %.not328.7, label %.loopexit613, label %scalar.ph539, !llvm.loop !42

.loopexit613:                                     ; preds = %scalar.ph539.prol.loopexit, %scalar.ph539, %middle.block538
  %.lcssa512 = phi ptr [ %ind.end544, %middle.block538 ], [ %.lcssa644.unr, %scalar.ph539.prol.loopexit ], [ %313, %scalar.ph539 ]
  %315 = sub i32 %275, %30
  %316 = zext nneg i32 %168 to i64
  %317 = sub nsw i64 0, %316
  %318 = getelementptr inbounds i8, ptr %.lcssa512, i64 %317
  br label %373

319:                                              ; preds = %234
  %320 = sub i32 %30, %177
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds i8, ptr %51, i64 %321
  %323 = icmp ult i32 %177, %.0250
  br i1 %323, label %.preheader484, label %373

.preheader484:                                    ; preds = %319
  %324 = add i32 %67, %167
  %325 = add i32 %324, %144
  %326 = trunc i64 %172 to i32
  %327 = sub i32 %325, %326
  %328 = zext i32 %327 to i64
  %329 = add nuw nsw i64 %328, 1
  %min.iters.check591 = icmp ult i32 %327, 31
  br i1 %min.iters.check591, label %scalar.ph590.preheader, label %vector.memcheck587

vector.memcheck587:                               ; preds = %.preheader484
  %330 = add i64 %172, 1
  %331 = add i64 %33, %321
  %332 = sub i64 %330, %331
  %diff.check588 = icmp ult i64 %332, 32
  br i1 %diff.check588, label %scalar.ph590.preheader, label %vector.ph592

vector.ph592:                                     ; preds = %vector.memcheck587
  %n.vec594 = and i64 %329, 8589934560
  %ind.end595 = getelementptr i8, ptr %.0265, i64 %n.vec594
  %.cast597 = trunc i64 %n.vec594 to i32
  %ind.end598 = sub i32 %177, %.cast597
  %ind.end600 = getelementptr i8, ptr %322, i64 %n.vec594
  br label %vector.body602

vector.body602:                                   ; preds = %vector.body602, %vector.ph592
  %index603 = phi i64 [ 0, %vector.ph592 ], [ %index.next610, %vector.body602 ]
  %next.gep604 = getelementptr i8, ptr %.0265, i64 %index603
  %next.gep606 = getelementptr i8, ptr %322, i64 %index603
  %333 = getelementptr inbounds i8, ptr %next.gep606, i64 1
  %334 = getelementptr inbounds i8, ptr %next.gep606, i64 17
  %wide.load608 = load <16 x i8>, ptr %333, align 1, !tbaa !27
  %wide.load609 = load <16 x i8>, ptr %334, align 1, !tbaa !27
  %335 = getelementptr inbounds i8, ptr %next.gep604, i64 1
  %336 = getelementptr inbounds i8, ptr %next.gep604, i64 17
  store <16 x i8> %wide.load608, ptr %335, align 1, !tbaa !27
  store <16 x i8> %wide.load609, ptr %336, align 1, !tbaa !27
  %index.next610 = add nuw i64 %index603, 32
  %337 = icmp eq i64 %index.next610, %n.vec594
  br i1 %337, label %middle.block589, label %vector.body602, !llvm.loop !43

middle.block589:                                  ; preds = %vector.body602
  %cmp.n611 = icmp eq i64 %329, %n.vec594
  br i1 %cmp.n611, label %.loopexit615, label %scalar.ph590.preheader

scalar.ph590.preheader:                           ; preds = %middle.block589, %vector.memcheck587, %.preheader484
  %.4269.ph = phi ptr [ %.0265, %vector.memcheck587 ], [ %.0265, %.preheader484 ], [ %ind.end595, %middle.block589 ]
  %.3257.ph = phi i32 [ %177, %vector.memcheck587 ], [ %177, %.preheader484 ], [ %ind.end598, %middle.block589 ]
  %.3.ph = phi ptr [ %322, %vector.memcheck587 ], [ %322, %.preheader484 ], [ %ind.end600, %middle.block589 ]
  %338 = add i32 %.3257.ph, -1
  %xtraiter = and i32 %.3257.ph, 7
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph590.prol.loopexit, label %scalar.ph590.prol

scalar.ph590.prol:                                ; preds = %scalar.ph590.preheader, %scalar.ph590.prol
  %.4269.prol = phi ptr [ %341, %scalar.ph590.prol ], [ %.4269.ph, %scalar.ph590.preheader ]
  %.3257.prol = phi i32 [ %342, %scalar.ph590.prol ], [ %.3257.ph, %scalar.ph590.preheader ]
  %.3.prol = phi ptr [ %339, %scalar.ph590.prol ], [ %.3.ph, %scalar.ph590.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %scalar.ph590.prol ], [ 0, %scalar.ph590.preheader ]
  %339 = getelementptr inbounds i8, ptr %.3.prol, i64 1
  %340 = load i8, ptr %339, align 1, !tbaa !27
  %341 = getelementptr inbounds i8, ptr %.4269.prol, i64 1
  store i8 %340, ptr %341, align 1, !tbaa !27
  %342 = add i32 %.3257.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.ph590.prol.loopexit, label %scalar.ph590.prol, !llvm.loop !44

scalar.ph590.prol.loopexit:                       ; preds = %scalar.ph590.prol, %scalar.ph590.preheader
  %.lcssa641.unr = phi ptr [ poison, %scalar.ph590.preheader ], [ %341, %scalar.ph590.prol ]
  %.4269.unr = phi ptr [ %.4269.ph, %scalar.ph590.preheader ], [ %341, %scalar.ph590.prol ]
  %.3257.unr = phi i32 [ %.3257.ph, %scalar.ph590.preheader ], [ %342, %scalar.ph590.prol ]
  %.3.unr = phi ptr [ %.3.ph, %scalar.ph590.preheader ], [ %339, %scalar.ph590.prol ]
  %343 = icmp ult i32 %338, 7
  br i1 %343, label %.loopexit615, label %scalar.ph590

scalar.ph590:                                     ; preds = %scalar.ph590.prol.loopexit, %scalar.ph590
  %.4269 = phi ptr [ %367, %scalar.ph590 ], [ %.4269.unr, %scalar.ph590.prol.loopexit ]
  %.3257 = phi i32 [ %368, %scalar.ph590 ], [ %.3257.unr, %scalar.ph590.prol.loopexit ]
  %.3 = phi ptr [ %365, %scalar.ph590 ], [ %.3.unr, %scalar.ph590.prol.loopexit ]
  %344 = getelementptr inbounds i8, ptr %.3, i64 1
  %345 = load i8, ptr %344, align 1, !tbaa !27
  %346 = getelementptr inbounds i8, ptr %.4269, i64 1
  store i8 %345, ptr %346, align 1, !tbaa !27
  %347 = getelementptr inbounds i8, ptr %.3, i64 2
  %348 = load i8, ptr %347, align 1, !tbaa !27
  %349 = getelementptr inbounds i8, ptr %.4269, i64 2
  store i8 %348, ptr %349, align 1, !tbaa !27
  %350 = getelementptr inbounds i8, ptr %.3, i64 3
  %351 = load i8, ptr %350, align 1, !tbaa !27
  %352 = getelementptr inbounds i8, ptr %.4269, i64 3
  store i8 %351, ptr %352, align 1, !tbaa !27
  %353 = getelementptr inbounds i8, ptr %.3, i64 4
  %354 = load i8, ptr %353, align 1, !tbaa !27
  %355 = getelementptr inbounds i8, ptr %.4269, i64 4
  store i8 %354, ptr %355, align 1, !tbaa !27
  %356 = getelementptr inbounds i8, ptr %.3, i64 5
  %357 = load i8, ptr %356, align 1, !tbaa !27
  %358 = getelementptr inbounds i8, ptr %.4269, i64 5
  store i8 %357, ptr %358, align 1, !tbaa !27
  %359 = getelementptr inbounds i8, ptr %.3, i64 6
  %360 = load i8, ptr %359, align 1, !tbaa !27
  %361 = getelementptr inbounds i8, ptr %.4269, i64 6
  store i8 %360, ptr %361, align 1, !tbaa !27
  %362 = getelementptr inbounds i8, ptr %.3, i64 7
  %363 = load i8, ptr %362, align 1, !tbaa !27
  %364 = getelementptr inbounds i8, ptr %.4269, i64 7
  store i8 %363, ptr %364, align 1, !tbaa !27
  %365 = getelementptr inbounds i8, ptr %.3, i64 8
  %366 = load i8, ptr %365, align 1, !tbaa !27
  %367 = getelementptr inbounds i8, ptr %.4269, i64 8
  store i8 %366, ptr %367, align 1, !tbaa !27
  %368 = add i32 %.3257, -8
  %.not326.7 = icmp eq i32 %368, 0
  br i1 %.not326.7, label %.loopexit615, label %scalar.ph590, !llvm.loop !45

.loopexit615:                                     ; preds = %scalar.ph590.prol.loopexit, %scalar.ph590, %middle.block589
  %.lcssa510 = phi ptr [ %ind.end595, %middle.block589 ], [ %.lcssa641.unr, %scalar.ph590.prol.loopexit ], [ %367, %scalar.ph590 ]
  %369 = sub nsw i32 %.0250, %177
  %370 = zext nneg i32 %168 to i64
  %371 = sub nsw i64 0, %370
  %372 = getelementptr inbounds i8, ptr %.lcssa510, i64 %371
  br label %373

373:                                              ; preds = %.loopexit614, %.loopexit613, %236, %.loopexit615, %319, %180, %.loopexit612
  %.5270 = phi ptr [ %.lcssa513, %.loopexit612 ], [ %.0265, %180 ], [ %.lcssa512, %.loopexit613 ], [ %.lcssa511, %.loopexit614 ], [ %.0265, %236 ], [ %.lcssa510, %.loopexit615 ], [ %.0265, %319 ]
  %.1251 = phi i32 [ %230, %.loopexit612 ], [ %.0250, %180 ], [ %315, %.loopexit613 ], [ %275, %.loopexit614 ], [ %.0250, %236 ], [ %369, %.loopexit615 ], [ %.0250, %319 ]
  %.4 = phi ptr [ %233, %.loopexit612 ], [ %183, %180 ], [ %318, %.loopexit613 ], [ %51, %.loopexit614 ], [ %239, %236 ], [ %372, %.loopexit615 ], [ %322, %319 ]
  %374 = icmp ugt i32 %.1251, 2
  br i1 %374, label %.lr.ph393.preheader, label %._crit_edge394

.lr.ph393.preheader:                              ; preds = %373
  %375 = add i32 %.1251, -3
  %376 = udiv i32 %375, 3
  %377 = and i32 %376, 1
  %lcmp.mod670.not.not = icmp eq i32 %377, 0
  br i1 %lcmp.mod670.not.not, label %.lr.ph393.prol, label %.lr.ph393.prol.loopexit

.lr.ph393.prol:                                   ; preds = %.lr.ph393.preheader
  %378 = getelementptr inbounds i8, ptr %.4, i64 1
  %379 = load i8, ptr %378, align 1, !tbaa !27
  %380 = getelementptr inbounds i8, ptr %.5270, i64 1
  store i8 %379, ptr %380, align 1, !tbaa !27
  %381 = getelementptr inbounds i8, ptr %.4, i64 2
  %382 = load i8, ptr %381, align 1, !tbaa !27
  %383 = getelementptr inbounds i8, ptr %.5270, i64 2
  store i8 %382, ptr %383, align 1, !tbaa !27
  %384 = getelementptr inbounds i8, ptr %.4, i64 3
  %385 = load i8, ptr %384, align 1, !tbaa !27
  %386 = getelementptr inbounds i8, ptr %.5270, i64 3
  store i8 %385, ptr %386, align 1, !tbaa !27
  %387 = add i32 %.1251, -3
  br label %.lr.ph393.prol.loopexit

.lr.ph393.prol.loopexit:                          ; preds = %.lr.ph393.prol, %.lr.ph393.preheader
  %.5391.unr = phi ptr [ %.4, %.lr.ph393.preheader ], [ %384, %.lr.ph393.prol ]
  %.2252390.unr = phi i32 [ %.1251, %.lr.ph393.preheader ], [ %387, %.lr.ph393.prol ]
  %.6271389.unr = phi ptr [ %.5270, %.lr.ph393.preheader ], [ %386, %.lr.ph393.prol ]
  %.lcssa648.unr = phi ptr [ poison, %.lr.ph393.preheader ], [ %384, %.lr.ph393.prol ]
  %.lcssa647.unr = phi ptr [ poison, %.lr.ph393.preheader ], [ %386, %.lr.ph393.prol ]
  %.lcssa646.unr = phi i32 [ poison, %.lr.ph393.preheader ], [ %387, %.lr.ph393.prol ]
  %388 = icmp ult i32 %375, 3
  br i1 %388, label %._crit_edge394, label %.lr.ph393

.lr.ph393:                                        ; preds = %.lr.ph393.prol.loopexit, %.lr.ph393
  %.5391 = phi ptr [ %404, %.lr.ph393 ], [ %.5391.unr, %.lr.ph393.prol.loopexit ]
  %.2252390 = phi i32 [ %407, %.lr.ph393 ], [ %.2252390.unr, %.lr.ph393.prol.loopexit ]
  %.6271389 = phi ptr [ %406, %.lr.ph393 ], [ %.6271389.unr, %.lr.ph393.prol.loopexit ]
  %389 = getelementptr inbounds i8, ptr %.5391, i64 1
  %390 = load i8, ptr %389, align 1, !tbaa !27
  %391 = getelementptr inbounds i8, ptr %.6271389, i64 1
  store i8 %390, ptr %391, align 1, !tbaa !27
  %392 = getelementptr inbounds i8, ptr %.5391, i64 2
  %393 = load i8, ptr %392, align 1, !tbaa !27
  %394 = getelementptr inbounds i8, ptr %.6271389, i64 2
  store i8 %393, ptr %394, align 1, !tbaa !27
  %395 = getelementptr inbounds i8, ptr %.5391, i64 3
  %396 = load i8, ptr %395, align 1, !tbaa !27
  %397 = getelementptr inbounds i8, ptr %.6271389, i64 3
  store i8 %396, ptr %397, align 1, !tbaa !27
  %398 = getelementptr inbounds i8, ptr %.5391, i64 4
  %399 = load i8, ptr %398, align 1, !tbaa !27
  %400 = getelementptr inbounds i8, ptr %.6271389, i64 4
  store i8 %399, ptr %400, align 1, !tbaa !27
  %401 = getelementptr inbounds i8, ptr %.5391, i64 5
  %402 = load i8, ptr %401, align 1, !tbaa !27
  %403 = getelementptr inbounds i8, ptr %.6271389, i64 5
  store i8 %402, ptr %403, align 1, !tbaa !27
  %404 = getelementptr inbounds i8, ptr %.5391, i64 6
  %405 = load i8, ptr %404, align 1, !tbaa !27
  %406 = getelementptr inbounds i8, ptr %.6271389, i64 6
  store i8 %405, ptr %406, align 1, !tbaa !27
  %407 = add i32 %.2252390, -6
  %408 = icmp ugt i32 %407, 2
  br i1 %408, label %.lr.ph393, label %._crit_edge394, !llvm.loop !46

._crit_edge394:                                   ; preds = %.lr.ph393.prol.loopexit, %.lr.ph393, %373
  %.6271.lcssa = phi ptr [ %.5270, %373 ], [ %.lcssa647.unr, %.lr.ph393.prol.loopexit ], [ %406, %.lr.ph393 ]
  %.2252.lcssa = phi i32 [ %.1251, %373 ], [ %.lcssa646.unr, %.lr.ph393.prol.loopexit ], [ %407, %.lr.ph393 ]
  %.5.lcssa = phi ptr [ %.4, %373 ], [ %.lcssa648.unr, %.lr.ph393.prol.loopexit ], [ %404, %.lr.ph393 ]
  %.not330 = icmp eq i32 %.2252.lcssa, 0
  br i1 %.not330, label %477, label %409

409:                                              ; preds = %._crit_edge394
  %410 = getelementptr inbounds i8, ptr %.5.lcssa, i64 1
  %411 = load i8, ptr %410, align 1, !tbaa !27
  %412 = getelementptr inbounds i8, ptr %.6271.lcssa, i64 1
  store i8 %411, ptr %412, align 1, !tbaa !27
  %413 = icmp eq i32 %.2252.lcssa, 2
  br i1 %413, label %414, label %477

414:                                              ; preds = %409
  %415 = getelementptr inbounds i8, ptr %.5.lcssa, i64 2
  %416 = load i8, ptr %415, align 1, !tbaa !27
  %417 = getelementptr inbounds i8, ptr %.6271.lcssa, i64 2
  store i8 %416, ptr %417, align 1, !tbaa !27
  br label %477

418:                                              ; preds = %164
  %419 = zext nneg i32 %168 to i64
  %420 = sub nsw i64 0, %419
  %421 = getelementptr inbounds i8, ptr %.0265, i64 %420
  br label %422

422:                                              ; preds = %422, %418
  %.7272 = phi ptr [ %.0265, %418 ], [ %431, %422 ]
  %.3253 = phi i32 [ %.0250, %418 ], [ %432, %422 ]
  %.6 = phi ptr [ %421, %418 ], [ %429, %422 ]
  %423 = getelementptr inbounds i8, ptr %.6, i64 1
  %424 = load i8, ptr %423, align 1, !tbaa !27
  %425 = getelementptr inbounds i8, ptr %.7272, i64 1
  store i8 %424, ptr %425, align 1, !tbaa !27
  %426 = getelementptr inbounds i8, ptr %.6, i64 2
  %427 = load i8, ptr %426, align 1, !tbaa !27
  %428 = getelementptr inbounds i8, ptr %.7272, i64 2
  store i8 %427, ptr %428, align 1, !tbaa !27
  %429 = getelementptr inbounds i8, ptr %.6, i64 3
  %430 = load i8, ptr %429, align 1, !tbaa !27
  %431 = getelementptr inbounds i8, ptr %.7272, i64 3
  store i8 %430, ptr %431, align 1, !tbaa !27
  %432 = add i32 %.3253, -3
  %433 = icmp ugt i32 %432, 2
  br i1 %433, label %422, label %434, !llvm.loop !47

434:                                              ; preds = %422
  %.not325 = icmp eq i32 %432, 0
  br i1 %.not325, label %477, label %435

435:                                              ; preds = %434
  %436 = getelementptr inbounds i8, ptr %.6, i64 4
  %437 = load i8, ptr %436, align 1, !tbaa !27
  %438 = getelementptr inbounds i8, ptr %.7272, i64 4
  store i8 %437, ptr %438, align 1, !tbaa !27
  %439 = icmp eq i32 %432, 2
  br i1 %439, label %440, label %477

440:                                              ; preds = %435
  %441 = getelementptr inbounds i8, ptr %.6, i64 5
  %442 = load i8, ptr %441, align 1, !tbaa !27
  %443 = getelementptr inbounds i8, ptr %.7272, i64 5
  store i8 %442, ptr %443, align 1, !tbaa !27
  br label %477

.lr.ph383:                                        ; preds = %136, %449
  %444 = phi i32 [ %459, %449 ], [ %142, %136 ]
  %445 = phi i32 [ %458, %449 ], [ %141, %136 ]
  %446 = phi i64 [ %457, %449 ], [ %140, %136 ]
  %.sroa.10.1381 = phi i16 [ %.sroa.10.1, %449 ], [ %.sroa.10.1379, %136 ]
  %447 = and i32 %444, 64
  %448 = icmp eq i32 %447, 0
  br i1 %448, label %449, label %.loopexit.sink.split.sink.split

449:                                              ; preds = %.lr.ph383
  %450 = zext i16 %.sroa.10.1381 to i64
  %notmask323 = shl nsw i32 -1, %444
  %451 = xor i32 %notmask323, -1
  %452 = zext nneg i32 %451 to i64
  %453 = and i64 %446, %452
  %454 = add nuw nsw i64 %453, %450
  %.sroa.0.1.in = getelementptr inbounds %struct.code, ptr %41, i64 %454
  %.sroa.0.1 = load i8, ptr %.sroa.0.1.in, align 2, !tbaa !27
  %.sroa.8.1.in = getelementptr inbounds %struct.code, ptr %41, i64 %454, i32 1
  %.sroa.8.1 = load i8, ptr %.sroa.8.1.in, align 1, !tbaa !27
  %.sroa.10.1.in = getelementptr inbounds %struct.code, ptr %41, i64 %454, i32 2
  %.sroa.10.1 = load i16, ptr %.sroa.10.1.in, align 2, !tbaa !28
  %455 = zext i8 %.sroa.8.1 to i32
  %456 = zext nneg i8 %.sroa.8.1 to i64
  %457 = lshr i64 %446, %456
  %458 = sub i32 %445, %455
  %459 = zext i8 %.sroa.0.1 to i32
  %460 = and i32 %459, 16
  %.not322 = icmp eq i32 %460, 0
  br i1 %.not322, label %.lr.ph383, label %._crit_edge384

461:                                              ; preds = %.lr.ph
  %462 = and i32 %96, 64
  %463 = icmp eq i32 %462, 0
  br i1 %463, label %464, label %475

464:                                              ; preds = %461
  %465 = zext i16 %.sroa.10.0371 to i64
  %notmask319 = shl nsw i32 -1, %96
  %466 = xor i32 %notmask319, -1
  %467 = zext nneg i32 %466 to i64
  %468 = and i64 %95, %467
  %469 = add nuw nsw i64 %468, %465
  %.sroa.0.0.in = getelementptr inbounds %struct.code, ptr %39, i64 %469
  %.sroa.0.0 = load i8, ptr %.sroa.0.0.in, align 2, !tbaa !27
  %.sroa.8.0.in = getelementptr inbounds %struct.code, ptr %39, i64 %469, i32 1
  %.sroa.8.0 = load i8, ptr %.sroa.8.0.in, align 1, !tbaa !27
  %.sroa.10.0.in = getelementptr inbounds %struct.code, ptr %39, i64 %469, i32 2
  %.sroa.10.0 = load i16, ptr %.sroa.10.0.in, align 2, !tbaa !28
  %470 = zext i8 %.sroa.8.0 to i32
  %471 = zext nneg i8 %.sroa.8.0 to i64
  %472 = lshr i64 %95, %471
  %473 = sub i32 %94, %470
  %474 = icmp eq i8 %.sroa.0.0, 0
  br i1 %474, label %._crit_edge, label %.lr.ph

475:                                              ; preds = %461
  %476 = and i32 %96, 32
  %.not318 = icmp eq i32 %476, 0
  br i1 %.not318, label %.loopexit.sink.split.sink.split, label %.loopexit.sink.split

477:                                              ; preds = %._crit_edge, %434, %440, %435, %._crit_edge394, %414, %409
  %.8291 = phi i32 [ %.lcssa336, %._crit_edge ], [ %171, %414 ], [ %171, %409 ], [ %171, %._crit_edge394 ], [ %171, %440 ], [ %171, %435 ], [ %171, %434 ]
  %.8281 = phi i64 [ %.lcssa339, %._crit_edge ], [ %170, %414 ], [ %170, %409 ], [ %170, %._crit_edge394 ], [ %170, %440 ], [ %170, %435 ], [ %170, %434 ]
  %.8 = phi ptr [ %93, %._crit_edge ], [ %417, %414 ], [ %412, %409 ], [ %.6271.lcssa, %._crit_edge394 ], [ %443, %440 ], [ %438, %435 ], [ %431, %434 ]
  %.6264 = phi ptr [ %.1259, %._crit_edge ], [ %.5263, %414 ], [ %.5263, %409 ], [ %.5263, %._crit_edge394 ], [ %.5263, %440 ], [ %.5263, %435 ], [ %.5263, %434 ]
  %478 = icmp ult ptr %.6264, %11
  %479 = icmp ult ptr %.8, %24
  %480 = select i1 %478, i1 %479, i1 false
  br i1 %480, label %68, label %.loopexit, !llvm.loop !48

.loopexit.sink.split.sink.split:                  ; preds = %176, %.lr.ph383, %475
  %.str.sink = phi ptr [ @.str.2, %475 ], [ @.str.1, %.lr.ph383 ], [ @.str, %176 ]
  %.9292.ph.ph = phi i32 [ %94, %475 ], [ %445, %.lr.ph383 ], [ %171, %176 ]
  %.9282.ph.ph = phi i64 [ %95, %475 ], [ %446, %.lr.ph383 ], [ %170, %176 ]
  %.7.ph.ph = phi ptr [ %.1259, %475 ], [ %.4262, %.lr.ph383 ], [ %.5263, %176 ]
  %481 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %.str.sink, ptr %481, align 8, !tbaa !49
  br label %.loopexit.sink.split

.loopexit.sink.split:                             ; preds = %.loopexit.sink.split.sink.split, %475
  %.sink = phi i32 [ 11, %475 ], [ 27, %.loopexit.sink.split.sink.split ]
  %.9292.ph = phi i32 [ %94, %475 ], [ %.9292.ph.ph, %.loopexit.sink.split.sink.split ]
  %.9282.ph = phi i64 [ %95, %475 ], [ %.9282.ph.ph, %.loopexit.sink.split.sink.split ]
  %.7.ph = phi ptr [ %.1259, %475 ], [ %.7.ph.ph, %.loopexit.sink.split.sink.split ]
  store i32 %.sink, ptr %4, align 8, !tbaa !50
  br label %.loopexit

.loopexit:                                        ; preds = %477, %.loopexit.sink.split
  %.9292 = phi i32 [ %.9292.ph, %.loopexit.sink.split ], [ %.8291, %477 ]
  %.9282 = phi i64 [ %.9282.ph, %.loopexit.sink.split ], [ %.8281, %477 ]
  %.9 = phi ptr [ %.0265, %.loopexit.sink.split ], [ %.8, %477 ]
  %.7 = phi ptr [ %.7.ph, %.loopexit.sink.split ], [ %.6264, %477 ]
  %482 = lshr i32 %.9292, 3
  %483 = zext nneg i32 %482 to i64
  %484 = sub nsw i64 0, %483
  %485 = getelementptr inbounds i8, ptr %.7, i64 %484
  %486 = getelementptr inbounds i8, ptr %485, i64 1
  store ptr %486, ptr %0, align 8, !tbaa !12
  %487 = getelementptr inbounds i8, ptr %.9, i64 1
  store ptr %487, ptr %12, align 8, !tbaa !14
  %488 = ptrtoint ptr %11 to i64
  %489 = ptrtoint ptr %485 to i64
  %490 = sub i64 %488, %489
  %491 = trunc i64 %490 to i32
  %492 = add i32 %491, 5
  store i32 %492, ptr %7, align 8, !tbaa !13
  %493 = ptrtoint ptr %24 to i64
  %494 = ptrtoint ptr %.9 to i64
  %495 = sub i64 %493, %494
  %496 = and i32 %.9292, 7
  %notmask331 = shl nsw i32 -1, %496
  %497 = xor i32 %notmask331, -1
  %498 = zext nneg i32 %497 to i64
  %499 = and i64 %.9282, %498
  %500 = trunc i64 %495 to i32
  %501 = add i32 %500, 257
  store i32 %501, ptr %16, align 8, !tbaa !15
  store i64 %499, ptr %34, align 8, !tbaa !21
  store i32 %496, ptr %36, 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 52}
!17 = !{!"inflate_state", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !11, i64 24, !11, i64 32, !7, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !7, i64 64, !11, i64 72, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !7, i64 96, !7, i64 104, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !7, i64 136, !8, i64 144, !8, i64 784, !8, i64 1360}
!18 = !{!17, !10, i64 56}
!19 = !{!17, !10, i64 60}
!20 = !{!17, !7, i64 64}
!21 = !{!17, !11, i64 72}
!22 = !{!17, !10, i64 80}
!23 = !{!17, !7, i64 96}
!24 = !{!17, !7, i64 104}
!25 = !{!17, !10, i64 112}
!26 = !{!17, !10, i64 116}
!27 = !{!8, !8, i64 0}
!28 = !{!29, !29, i64 0}
!29 = !{!"short", !8, i64 0}
!30 = distinct !{!30, !31, !32, !33}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!"llvm.loop.isvectorized", i32 1}
!33 = !{!"llvm.loop.unroll.runtime.disable"}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.unroll.disable"}
!36 = distinct !{!36, !31, !32}
!37 = distinct !{!37, !31, !32, !33}
!38 = distinct !{!38, !35}
!39 = distinct !{!39, !31, !32}
!40 = distinct !{!40, !31, !32, !33}
!41 = distinct !{!41, !35}
!42 = distinct !{!42, !31, !32}
!43 = distinct !{!43, !31, !32, !33}
!44 = distinct !{!44, !35}
!45 = distinct !{!45, !31, !32}
!46 = distinct !{!46, !31}
!47 = distinct !{!47, !31}
!48 = distinct !{!48, !31}
!49 = !{!6, !7, i64 48}
!50 = !{!17, !10, i64 0}


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