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

; 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.png_struct_def = type { [1 x %struct.__jmp_buf_tag], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i32, i32, i32, %struct.z_stream_s, ptr, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_row_info_struct, i32, i32, ptr, i16, i16, [5 x i8], i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i8, float, %struct.png_color_16_struct, %struct.png_color_16_struct, ptr, i32, i32, i32, float, float, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_color_8_struct, %struct.png_color_8_struct, ptr, %struct.png_color_16_struct, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i64, i64, i64, i32, i32, i64, i64, ptr, ptr, ptr, ptr, ptr, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, i32, ptr, i8, i16, i16, i16, i32, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i32, i32, i32, %struct.png_unknown_chunk_t, i32, i32, ptr, i32 }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.png_row_info_struct = type { i32, i64, i8, i8, i8, i8 }
%struct.png_color_8_struct = type { i8, i8, i8, i8, i8 }
%struct.png_color_16_struct = type { i8, i16, i16, i16, i16 }
%struct.png_unknown_chunk_t = type { [5 x i8], ptr, i64, i8 }

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

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

; Function Attrs: nounwind uwtable
define dso_local void @png_write_find_filter(ptr noundef %0, ptr noundef %1) #1 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i8, align 1
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca ptr, align 8
  %77 = alloca ptr, align 8
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca ptr, align 8
  %87 = alloca ptr, align 8
  %88 = alloca ptr, align 8
  %89 = alloca ptr, align 8
  %90 = alloca ptr, align 8
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca i32, align 4
  %104 = alloca i32, align 4
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #2
  %110 = load ptr, ptr %3, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.png_struct_def, ptr %110, i32 0, i32 49
  %112 = load i8, ptr %111, align 1, !tbaa !9
  store i8 %112, ptr %10, align 1, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  %113 = load ptr, ptr %4, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.png_row_info_struct, ptr %113, i32 0, i32 1
  %115 = load i64, ptr %114, align 8, !tbaa !21
  %116 = trunc i64 %115 to i32
  store i32 %116, ptr %11, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.png_struct_def, ptr %117, i32 0, i32 103
  %119 = load i8, ptr %118, align 1, !tbaa !23
  %120 = zext i8 %119 to i32
  store i32 %120, ptr %12, align 4, !tbaa !22
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.png_row_info_struct, ptr %121, i32 0, i32 5
  %123 = load i8, ptr %122, align 1, !tbaa !24
  %124 = zext i8 %123 to i32
  %125 = add nsw i32 %124, 7
  %126 = ashr i32 %125, 3
  store i32 %126, ptr %9, align 4, !tbaa !22
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.png_struct_def, ptr %127, i32 0, i32 32
  %129 = load ptr, ptr %128, align 8, !tbaa !25
  store ptr %129, ptr %6, align 8, !tbaa !5
  %130 = load ptr, ptr %3, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.png_struct_def, ptr %130, i32 0, i32 33
  %132 = load ptr, ptr %131, align 8, !tbaa !26
  store ptr %132, ptr %5, align 8, !tbaa !5
  %133 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %133, ptr %7, align 8, !tbaa !5
  store i32 2147483647, ptr %8, align 4, !tbaa !22
  %134 = load i8, ptr %10, align 1, !tbaa !20
  %135 = zext i8 %134 to i32
  %136 = and i32 %135, 8
  %137 = icmp ne i32 %136, 0
  br i1 %137, label %138, label %252

138:                                              ; preds = %2
  %139 = load i8, ptr %10, align 1, !tbaa !20
  %140 = zext i8 %139 to i32
  %141 = icmp ne i32 %140, 8
  br i1 %141, label %142, label %252

142:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  store i32 0, ptr %14, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #2
  store i32 0, ptr %15, align 4, !tbaa !22
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = getelementptr inbounds i8, ptr %143, i64 1
  store ptr %144, ptr %13, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %164, %142
  %146 = load i32, ptr %15, align 4, !tbaa !22
  %147 = load i32, ptr %11, align 4, !tbaa !22
  %148 = icmp ult i32 %146, %147
  br i1 %148, label %149, label %169

149:                                              ; preds = %145
  %150 = load ptr, ptr %13, align 8, !tbaa !5
  %151 = load i8, ptr %150, align 1, !tbaa !20
  %152 = zext i8 %151 to i32
  store i32 %152, ptr %16, align 4, !tbaa !22
  %153 = load i32, ptr %16, align 4, !tbaa !22
  %154 = icmp slt i32 %153, 128
  br i1 %154, label %155, label %157

155:                                              ; preds = %149
  %156 = load i32, ptr %16, align 4, !tbaa !22
  br label %160

157:                                              ; preds = %149
  %158 = load i32, ptr %16, align 4, !tbaa !22
  %159 = sub nsw i32 256, %158
  br label %160

160:                                              ; preds = %157, %155
  %161 = phi i32 [ %156, %155 ], [ %159, %157 ]
  %162 = load i32, ptr %14, align 4, !tbaa !22
  %163 = add i32 %162, %161
  store i32 %163, ptr %14, align 4, !tbaa !22
  br label %164

164:                                              ; preds = %160
  %165 = load i32, ptr %15, align 4, !tbaa !22
  %166 = add i32 %165, 1
  store i32 %166, ptr %15, align 4, !tbaa !22
  %167 = load ptr, ptr %13, align 8, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %167, i32 1
  store ptr %168, ptr %13, align 8, !tbaa !5
  br label %145, !llvm.loop !27

169:                                              ; preds = %145
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.png_struct_def, ptr %170, i32 0, i32 102
  %172 = load i8, ptr %171, align 8, !tbaa !29
  %173 = zext i8 %172 to i32
  %174 = icmp eq i32 %173, 2
  br i1 %174, label %175, label %250

175:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  %176 = load i32, ptr %14, align 4, !tbaa !22
  %177 = and i32 %176, 65535
  store i32 %177, ptr %18, align 4, !tbaa !22
  %178 = load i32, ptr %14, align 4, !tbaa !22
  %179 = lshr i32 %178, 10
  %180 = and i32 %179, 4194240
  store i32 %180, ptr %17, align 4, !tbaa !22
  store i32 0, ptr %19, align 4, !tbaa !22
  br label %181

181:                                              ; preds = %219, %175
  %182 = load i32, ptr %19, align 4, !tbaa !22
  %183 = load i32, ptr %12, align 4, !tbaa !22
  %184 = icmp slt i32 %182, %183
  br i1 %184, label %185, label %222

185:                                              ; preds = %181
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.png_struct_def, ptr %186, i32 0, i32 104
  %188 = load ptr, ptr %187, align 8, !tbaa !30
  %189 = load i32, ptr %19, align 4, !tbaa !22
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i8, ptr %188, i64 %190
  %192 = load i8, ptr %191, align 1, !tbaa !20
  %193 = zext i8 %192 to i32
  %194 = icmp eq i32 %193, 0
  br i1 %194, label %195, label %218

195:                                              ; preds = %185
  %196 = load i32, ptr %18, align 4, !tbaa !22
  %197 = load ptr, ptr %3, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.png_struct_def, ptr %197, i32 0, i32 105
  %199 = load ptr, ptr %198, align 8, !tbaa !31
  %200 = load i32, ptr %19, align 4, !tbaa !22
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i16, ptr %199, i64 %201
  %203 = load i16, ptr %202, align 2, !tbaa !32
  %204 = zext i16 %203 to i32
  %205 = mul i32 %196, %204
  %206 = lshr i32 %205, 8
  store i32 %206, ptr %18, align 4, !tbaa !22
  %207 = load i32, ptr %17, align 4, !tbaa !22
  %208 = load ptr, ptr %3, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.png_struct_def, ptr %208, i32 0, i32 105
  %210 = load ptr, ptr %209, align 8, !tbaa !31
  %211 = load i32, ptr %19, align 4, !tbaa !22
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i16, ptr %210, i64 %212
  %214 = load i16, ptr %213, align 2, !tbaa !32
  %215 = zext i16 %214 to i32
  %216 = mul i32 %207, %215
  %217 = lshr i32 %216, 8
  store i32 %217, ptr %17, align 4, !tbaa !22
  br label %218

218:                                              ; preds = %195, %185
  br label %219

219:                                              ; preds = %218
  %220 = load i32, ptr %19, align 4, !tbaa !22
  %221 = add nsw i32 %220, 1
  store i32 %221, ptr %19, align 4, !tbaa !22
  br label %181, !llvm.loop !33

222:                                              ; preds = %181
  %223 = load i32, ptr %18, align 4, !tbaa !22
  %224 = load ptr, ptr %3, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.png_struct_def, ptr %224, i32 0, i32 107
  %226 = load ptr, ptr %225, align 8, !tbaa !34
  %227 = getelementptr inbounds i16, ptr %226, i64 0
  %228 = load i16, ptr %227, align 2, !tbaa !32
  %229 = zext i16 %228 to i32
  %230 = mul i32 %223, %229
  %231 = lshr i32 %230, 3
  store i32 %231, ptr %18, align 4, !tbaa !22
  %232 = load i32, ptr %17, align 4, !tbaa !22
  %233 = load ptr, ptr %3, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.png_struct_def, ptr %233, i32 0, i32 107
  %235 = load ptr, ptr %234, align 8, !tbaa !34
  %236 = getelementptr inbounds i16, ptr %235, i64 0
  %237 = load i16, ptr %236, align 2, !tbaa !32
  %238 = zext i16 %237 to i32
  %239 = mul i32 %232, %238
  %240 = lshr i32 %239, 3
  store i32 %240, ptr %17, align 4, !tbaa !22
  %241 = load i32, ptr %17, align 4, !tbaa !22
  %242 = icmp ugt i32 %241, 4194240
  br i1 %242, label %243, label %244

243:                                              ; preds = %222
  store i32 2147483647, ptr %14, align 4, !tbaa !22
  br label %249

244:                                              ; preds = %222
  %245 = load i32, ptr %17, align 4, !tbaa !22
  %246 = shl i32 %245, 10
  %247 = load i32, ptr %18, align 4, !tbaa !22
  %248 = add i32 %246, %247
  store i32 %248, ptr %14, align 4, !tbaa !22
  br label %249

249:                                              ; preds = %244, %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #2
  br label %250

250:                                              ; preds = %249, %169
  %251 = load i32, ptr %14, align 4, !tbaa !22
  store i32 %251, ptr %8, align 4, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  br label %252

252:                                              ; preds = %250, %138, %2
  %253 = load i8, ptr %10, align 1, !tbaa !20
  %254 = zext i8 %253 to i32
  %255 = icmp eq i32 %254, 16
  br i1 %255, label %256, label %309

256:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #2
  store i32 0, ptr %23, align 4, !tbaa !22
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = getelementptr inbounds i8, ptr %257, i64 1
  store ptr %258, ptr %20, align 8, !tbaa !5
  %259 = load ptr, ptr %3, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.png_struct_def, ptr %259, i32 0, i32 34
  %261 = load ptr, ptr %260, align 8, !tbaa !35
  %262 = getelementptr inbounds i8, ptr %261, i64 1
  store ptr %262, ptr %22, align 8, !tbaa !5
  br label %263

263:                                              ; preds = %271, %256
  %264 = load i32, ptr %23, align 4, !tbaa !22
  %265 = load i32, ptr %9, align 4, !tbaa !22
  %266 = icmp ult i32 %264, %265
  br i1 %266, label %267, label %278

267:                                              ; preds = %263
  %268 = load ptr, ptr %20, align 8, !tbaa !5
  %269 = load i8, ptr %268, align 1, !tbaa !20
  %270 = load ptr, ptr %22, align 8, !tbaa !5
  store i8 %269, ptr %270, align 1, !tbaa !20
  br label %271

271:                                              ; preds = %267
  %272 = load i32, ptr %23, align 4, !tbaa !22
  %273 = add i32 %272, 1
  store i32 %273, ptr %23, align 4, !tbaa !22
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %274, i32 1
  store ptr %275, ptr %20, align 8, !tbaa !5
  %276 = load ptr, ptr %22, align 8, !tbaa !5
  %277 = getelementptr inbounds i8, ptr %276, i32 1
  store ptr %277, ptr %22, align 8, !tbaa !5
  br label %263, !llvm.loop !36

278:                                              ; preds = %263
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 1
  store ptr %280, ptr %21, align 8, !tbaa !5
  br label %281

281:                                              ; preds = %296, %278
  %282 = load i32, ptr %23, align 4, !tbaa !22
  %283 = load i32, ptr %11, align 4, !tbaa !22
  %284 = icmp ult i32 %282, %283
  br i1 %284, label %285, label %305

285:                                              ; preds = %281
  %286 = load ptr, ptr %20, align 8, !tbaa !5
  %287 = load i8, ptr %286, align 1, !tbaa !20
  %288 = zext i8 %287 to i32
  %289 = load ptr, ptr %21, align 8, !tbaa !5
  %290 = load i8, ptr %289, align 1, !tbaa !20
  %291 = zext i8 %290 to i32
  %292 = sub nsw i32 %288, %291
  %293 = and i32 %292, 255
  %294 = trunc i32 %293 to i8
  %295 = load ptr, ptr %22, align 8, !tbaa !5
  store i8 %294, ptr %295, align 1, !tbaa !20
  br label %296

296:                                              ; preds = %285
  %297 = load i32, ptr %23, align 4, !tbaa !22
  %298 = add i32 %297, 1
  store i32 %298, ptr %23, align 4, !tbaa !22
  %299 = load ptr, ptr %20, align 8, !tbaa !5
  %300 = getelementptr inbounds i8, ptr %299, i32 1
  store ptr %300, ptr %20, align 8, !tbaa !5
  %301 = load ptr, ptr %21, align 8, !tbaa !5
  %302 = getelementptr inbounds i8, ptr %301, i32 1
  store ptr %302, ptr %21, align 8, !tbaa !5
  %303 = load ptr, ptr %22, align 8, !tbaa !5
  %304 = getelementptr inbounds i8, ptr %303, i32 1
  store ptr %304, ptr %22, align 8, !tbaa !5
  br label %281, !llvm.loop !37

305:                                              ; preds = %281
  %306 = load ptr, ptr %3, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.png_struct_def, ptr %306, i32 0, i32 34
  %308 = load ptr, ptr %307, align 8, !tbaa !35
  store ptr %308, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #2
  br label %566

309:                                              ; preds = %252
  %310 = load i8, ptr %10, align 1, !tbaa !20
  %311 = zext i8 %310 to i32
  %312 = and i32 %311, 16
  %313 = icmp ne i32 %312, 0
  br i1 %313, label %314, label %565

314:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #2
  store i32 0, ptr %27, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #2
  %315 = load i32, ptr %8, align 4, !tbaa !22
  store i32 %315, ptr %28, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #2
  %316 = load ptr, ptr %3, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.png_struct_def, ptr %316, i32 0, i32 102
  %318 = load i8, ptr %317, align 8, !tbaa !29
  %319 = zext i8 %318 to i32
  %320 = icmp eq i32 %319, 2
  br i1 %320, label %321, label %396

321:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #2
  %322 = load i32, ptr %28, align 4, !tbaa !22
  %323 = and i32 %322, 65535
  store i32 %323, ptr %33, align 4, !tbaa !22
  %324 = load i32, ptr %28, align 4, !tbaa !22
  %325 = lshr i32 %324, 10
  %326 = and i32 %325, 4194240
  store i32 %326, ptr %32, align 4, !tbaa !22
  store i32 0, ptr %31, align 4, !tbaa !22
  br label %327

327:                                              ; preds = %365, %321
  %328 = load i32, ptr %31, align 4, !tbaa !22
  %329 = load i32, ptr %12, align 4, !tbaa !22
  %330 = icmp slt i32 %328, %329
  br i1 %330, label %331, label %368

331:                                              ; preds = %327
  %332 = load ptr, ptr %3, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.png_struct_def, ptr %332, i32 0, i32 104
  %334 = load ptr, ptr %333, align 8, !tbaa !30
  %335 = load i32, ptr %31, align 4, !tbaa !22
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i8, ptr %334, i64 %336
  %338 = load i8, ptr %337, align 1, !tbaa !20
  %339 = zext i8 %338 to i32
  %340 = icmp eq i32 %339, 1
  br i1 %340, label %341, label %364

341:                                              ; preds = %331
  %342 = load i32, ptr %33, align 4, !tbaa !22
  %343 = load ptr, ptr %3, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.png_struct_def, ptr %343, i32 0, i32 106
  %345 = load ptr, ptr %344, align 8, !tbaa !38
  %346 = load i32, ptr %31, align 4, !tbaa !22
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i16, ptr %345, i64 %347
  %349 = load i16, ptr %348, align 2, !tbaa !32
  %350 = zext i16 %349 to i32
  %351 = mul i32 %342, %350
  %352 = lshr i32 %351, 8
  store i32 %352, ptr %33, align 4, !tbaa !22
  %353 = load i32, ptr %32, align 4, !tbaa !22
  %354 = load ptr, ptr %3, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.png_struct_def, ptr %354, i32 0, i32 106
  %356 = load ptr, ptr %355, align 8, !tbaa !38
  %357 = load i32, ptr %31, align 4, !tbaa !22
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds i16, ptr %356, i64 %358
  %360 = load i16, ptr %359, align 2, !tbaa !32
  %361 = zext i16 %360 to i32
  %362 = mul i32 %353, %361
  %363 = lshr i32 %362, 8
  store i32 %363, ptr %32, align 4, !tbaa !22
  br label %364

364:                                              ; preds = %341, %331
  br label %365

365:                                              ; preds = %364
  %366 = load i32, ptr %31, align 4, !tbaa !22
  %367 = add nsw i32 %366, 1
  store i32 %367, ptr %31, align 4, !tbaa !22
  br label %327, !llvm.loop !39

368:                                              ; preds = %327
  %369 = load i32, ptr %33, align 4, !tbaa !22
  %370 = load ptr, ptr %3, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.png_struct_def, ptr %370, i32 0, i32 108
  %372 = load ptr, ptr %371, align 8, !tbaa !40
  %373 = getelementptr inbounds i16, ptr %372, i64 1
  %374 = load i16, ptr %373, align 2, !tbaa !32
  %375 = zext i16 %374 to i32
  %376 = mul i32 %369, %375
  %377 = lshr i32 %376, 3
  store i32 %377, ptr %33, align 4, !tbaa !22
  %378 = load i32, ptr %32, align 4, !tbaa !22
  %379 = load ptr, ptr %3, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.png_struct_def, ptr %379, i32 0, i32 108
  %381 = load ptr, ptr %380, align 8, !tbaa !40
  %382 = getelementptr inbounds i16, ptr %381, i64 1
  %383 = load i16, ptr %382, align 2, !tbaa !32
  %384 = zext i16 %383 to i32
  %385 = mul i32 %378, %384
  %386 = lshr i32 %385, 3
  store i32 %386, ptr %32, align 4, !tbaa !22
  %387 = load i32, ptr %32, align 4, !tbaa !22
  %388 = icmp ugt i32 %387, 4194240
  br i1 %388, label %389, label %390

389:                                              ; preds = %368
  store i32 2147483647, ptr %28, align 4, !tbaa !22
  br label %395

390:                                              ; preds = %368
  %391 = load i32, ptr %32, align 4, !tbaa !22
  %392 = shl i32 %391, 10
  %393 = load i32, ptr %33, align 4, !tbaa !22
  %394 = add i32 %392, %393
  store i32 %394, ptr %28, align 4, !tbaa !22
  br label %395

395:                                              ; preds = %390, %389
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #2
  br label %396

396:                                              ; preds = %395, %314
  store i32 0, ptr %29, align 4, !tbaa !22
  %397 = load ptr, ptr %7, align 8, !tbaa !5
  %398 = getelementptr inbounds i8, ptr %397, i64 1
  store ptr %398, ptr %24, align 8, !tbaa !5
  %399 = load ptr, ptr %3, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.png_struct_def, ptr %399, i32 0, i32 34
  %401 = load ptr, ptr %400, align 8, !tbaa !35
  %402 = getelementptr inbounds i8, ptr %401, i64 1
  store ptr %402, ptr %25, align 8, !tbaa !5
  br label %403

403:                                              ; preds = %423, %396
  %404 = load i32, ptr %29, align 4, !tbaa !22
  %405 = load i32, ptr %9, align 4, !tbaa !22
  %406 = icmp ult i32 %404, %405
  br i1 %406, label %407, label %430

407:                                              ; preds = %403
  %408 = load ptr, ptr %24, align 8, !tbaa !5
  %409 = load i8, ptr %408, align 1, !tbaa !20
  %410 = load ptr, ptr %25, align 8, !tbaa !5
  store i8 %409, ptr %410, align 1, !tbaa !20
  %411 = zext i8 %409 to i32
  store i32 %411, ptr %30, align 4, !tbaa !22
  %412 = load i32, ptr %30, align 4, !tbaa !22
  %413 = icmp slt i32 %412, 128
  br i1 %413, label %414, label %416

414:                                              ; preds = %407
  %415 = load i32, ptr %30, align 4, !tbaa !22
  br label %419

416:                                              ; preds = %407
  %417 = load i32, ptr %30, align 4, !tbaa !22
  %418 = sub nsw i32 256, %417
  br label %419

419:                                              ; preds = %416, %414
  %420 = phi i32 [ %415, %414 ], [ %418, %416 ]
  %421 = load i32, ptr %27, align 4, !tbaa !22
  %422 = add i32 %421, %420
  store i32 %422, ptr %27, align 4, !tbaa !22
  br label %423

423:                                              ; preds = %419
  %424 = load i32, ptr %29, align 4, !tbaa !22
  %425 = add i32 %424, 1
  store i32 %425, ptr %29, align 4, !tbaa !22
  %426 = load ptr, ptr %24, align 8, !tbaa !5
  %427 = getelementptr inbounds i8, ptr %426, i32 1
  store ptr %427, ptr %24, align 8, !tbaa !5
  %428 = load ptr, ptr %25, align 8, !tbaa !5
  %429 = getelementptr inbounds i8, ptr %428, i32 1
  store ptr %429, ptr %25, align 8, !tbaa !5
  br label %403, !llvm.loop !41

430:                                              ; preds = %403
  %431 = load ptr, ptr %7, align 8, !tbaa !5
  %432 = getelementptr inbounds i8, ptr %431, i64 1
  store ptr %432, ptr %26, align 8, !tbaa !5
  br label %433

433:                                              ; preds = %465, %430
  %434 = load i32, ptr %29, align 4, !tbaa !22
  %435 = load i32, ptr %11, align 4, !tbaa !22
  %436 = icmp ult i32 %434, %435
  br i1 %436, label %437, label %474

437:                                              ; preds = %433
  %438 = load ptr, ptr %24, align 8, !tbaa !5
  %439 = load i8, ptr %438, align 1, !tbaa !20
  %440 = zext i8 %439 to i32
  %441 = load ptr, ptr %26, align 8, !tbaa !5
  %442 = load i8, ptr %441, align 1, !tbaa !20
  %443 = zext i8 %442 to i32
  %444 = sub nsw i32 %440, %443
  %445 = and i32 %444, 255
  %446 = trunc i32 %445 to i8
  %447 = load ptr, ptr %25, align 8, !tbaa !5
  store i8 %446, ptr %447, align 1, !tbaa !20
  %448 = zext i8 %446 to i32
  store i32 %448, ptr %30, align 4, !tbaa !22
  %449 = load i32, ptr %30, align 4, !tbaa !22
  %450 = icmp slt i32 %449, 128
  br i1 %450, label %451, label %453

451:                                              ; preds = %437
  %452 = load i32, ptr %30, align 4, !tbaa !22
  br label %456

453:                                              ; preds = %437
  %454 = load i32, ptr %30, align 4, !tbaa !22
  %455 = sub nsw i32 256, %454
  br label %456

456:                                              ; preds = %453, %451
  %457 = phi i32 [ %452, %451 ], [ %455, %453 ]
  %458 = load i32, ptr %27, align 4, !tbaa !22
  %459 = add i32 %458, %457
  store i32 %459, ptr %27, align 4, !tbaa !22
  %460 = load i32, ptr %27, align 4, !tbaa !22
  %461 = load i32, ptr %28, align 4, !tbaa !22
  %462 = icmp ugt i32 %460, %461
  br i1 %462, label %463, label %464

463:                                              ; preds = %456
  br label %474

464:                                              ; preds = %456
  br label %465

465:                                              ; preds = %464
  %466 = load i32, ptr %29, align 4, !tbaa !22
  %467 = add i32 %466, 1
  store i32 %467, ptr %29, align 4, !tbaa !22
  %468 = load ptr, ptr %24, align 8, !tbaa !5
  %469 = getelementptr inbounds i8, ptr %468, i32 1
  store ptr %469, ptr %24, align 8, !tbaa !5
  %470 = load ptr, ptr %26, align 8, !tbaa !5
  %471 = getelementptr inbounds i8, ptr %470, i32 1
  store ptr %471, ptr %26, align 8, !tbaa !5
  %472 = load ptr, ptr %25, align 8, !tbaa !5
  %473 = getelementptr inbounds i8, ptr %472, i32 1
  store ptr %473, ptr %25, align 8, !tbaa !5
  br label %433, !llvm.loop !42

474:                                              ; preds = %463, %433
  %475 = load ptr, ptr %3, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.png_struct_def, ptr %475, i32 0, i32 102
  %477 = load i8, ptr %476, align 8, !tbaa !29
  %478 = zext i8 %477 to i32
  %479 = icmp eq i32 %478, 2
  br i1 %479, label %480, label %555

480:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #2
  %481 = load i32, ptr %27, align 4, !tbaa !22
  %482 = and i32 %481, 65535
  store i32 %482, ptr %36, align 4, !tbaa !22
  %483 = load i32, ptr %27, align 4, !tbaa !22
  %484 = lshr i32 %483, 10
  %485 = and i32 %484, 4194240
  store i32 %485, ptr %35, align 4, !tbaa !22
  store i32 0, ptr %34, align 4, !tbaa !22
  br label %486

486:                                              ; preds = %524, %480
  %487 = load i32, ptr %34, align 4, !tbaa !22
  %488 = load i32, ptr %12, align 4, !tbaa !22
  %489 = icmp slt i32 %487, %488
  br i1 %489, label %490, label %527

490:                                              ; preds = %486
  %491 = load ptr, ptr %3, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.png_struct_def, ptr %491, i32 0, i32 104
  %493 = load ptr, ptr %492, align 8, !tbaa !30
  %494 = load i32, ptr %34, align 4, !tbaa !22
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds i8, ptr %493, i64 %495
  %497 = load i8, ptr %496, align 1, !tbaa !20
  %498 = zext i8 %497 to i32
  %499 = icmp eq i32 %498, 1
  br i1 %499, label %500, label %523

500:                                              ; preds = %490
  %501 = load i32, ptr %36, align 4, !tbaa !22
  %502 = load ptr, ptr %3, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.png_struct_def, ptr %502, i32 0, i32 106
  %504 = load ptr, ptr %503, align 8, !tbaa !38
  %505 = load i32, ptr %34, align 4, !tbaa !22
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds i16, ptr %504, i64 %506
  %508 = load i16, ptr %507, align 2, !tbaa !32
  %509 = zext i16 %508 to i32
  %510 = mul i32 %501, %509
  %511 = lshr i32 %510, 8
  store i32 %511, ptr %36, align 4, !tbaa !22
  %512 = load i32, ptr %35, align 4, !tbaa !22
  %513 = load ptr, ptr %3, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.png_struct_def, ptr %513, i32 0, i32 106
  %515 = load ptr, ptr %514, align 8, !tbaa !38
  %516 = load i32, ptr %34, align 4, !tbaa !22
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds i16, ptr %515, i64 %517
  %519 = load i16, ptr %518, align 2, !tbaa !32
  %520 = zext i16 %519 to i32
  %521 = mul i32 %512, %520
  %522 = lshr i32 %521, 8
  store i32 %522, ptr %35, align 4, !tbaa !22
  br label %523

523:                                              ; preds = %500, %490
  br label %524

524:                                              ; preds = %523
  %525 = load i32, ptr %34, align 4, !tbaa !22
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %34, align 4, !tbaa !22
  br label %486, !llvm.loop !43

527:                                              ; preds = %486
  %528 = load i32, ptr %36, align 4, !tbaa !22
  %529 = load ptr, ptr %3, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.png_struct_def, ptr %529, i32 0, i32 108
  %531 = load ptr, ptr %530, align 8, !tbaa !40
  %532 = getelementptr inbounds i16, ptr %531, i64 1
  %533 = load i16, ptr %532, align 2, !tbaa !32
  %534 = zext i16 %533 to i32
  %535 = mul i32 %528, %534
  %536 = lshr i32 %535, 3
  store i32 %536, ptr %36, align 4, !tbaa !22
  %537 = load i32, ptr %35, align 4, !tbaa !22
  %538 = load ptr, ptr %3, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.png_struct_def, ptr %538, i32 0, i32 108
  %540 = load ptr, ptr %539, align 8, !tbaa !40
  %541 = getelementptr inbounds i16, ptr %540, i64 1
  %542 = load i16, ptr %541, align 2, !tbaa !32
  %543 = zext i16 %542 to i32
  %544 = mul i32 %537, %543
  %545 = lshr i32 %544, 3
  store i32 %545, ptr %35, align 4, !tbaa !22
  %546 = load i32, ptr %35, align 4, !tbaa !22
  %547 = icmp ugt i32 %546, 4194240
  br i1 %547, label %548, label %549

548:                                              ; preds = %527
  store i32 2147483647, ptr %27, align 4, !tbaa !22
  br label %554

549:                                              ; preds = %527
  %550 = load i32, ptr %35, align 4, !tbaa !22
  %551 = shl i32 %550, 10
  %552 = load i32, ptr %36, align 4, !tbaa !22
  %553 = add i32 %551, %552
  store i32 %553, ptr %27, align 4, !tbaa !22
  br label %554

554:                                              ; preds = %549, %548
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #2
  br label %555

555:                                              ; preds = %554, %474
  %556 = load i32, ptr %27, align 4, !tbaa !22
  %557 = load i32, ptr %8, align 4, !tbaa !22
  %558 = icmp ult i32 %556, %557
  br i1 %558, label %559, label %564

559:                                              ; preds = %555
  %560 = load i32, ptr %27, align 4, !tbaa !22
  store i32 %560, ptr %8, align 4, !tbaa !22
  %561 = load ptr, ptr %3, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.png_struct_def, ptr %561, i32 0, i32 34
  %563 = load ptr, ptr %562, align 8, !tbaa !35
  store ptr %563, ptr %5, align 8, !tbaa !5
  br label %564

564:                                              ; preds = %559, %555
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #2
  br label %565

565:                                              ; preds = %564, %309
  br label %566

566:                                              ; preds = %565, %305
  %567 = load i8, ptr %10, align 1, !tbaa !20
  %568 = zext i8 %567 to i32
  %569 = icmp eq i32 %568, 32
  br i1 %569, label %570, label %607

570:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #2
  store i32 0, ptr %40, align 4, !tbaa !22
  %571 = load ptr, ptr %7, align 8, !tbaa !5
  %572 = getelementptr inbounds i8, ptr %571, i64 1
  store ptr %572, ptr %37, align 8, !tbaa !5
  %573 = load ptr, ptr %3, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.png_struct_def, ptr %573, i32 0, i32 35
  %575 = load ptr, ptr %574, align 8, !tbaa !44
  %576 = getelementptr inbounds i8, ptr %575, i64 1
  store ptr %576, ptr %38, align 8, !tbaa !5
  %577 = load ptr, ptr %6, align 8, !tbaa !5
  %578 = getelementptr inbounds i8, ptr %577, i64 1
  store ptr %578, ptr %39, align 8, !tbaa !5
  br label %579

579:                                              ; preds = %594, %570
  %580 = load i32, ptr %40, align 4, !tbaa !22
  %581 = load i32, ptr %11, align 4, !tbaa !22
  %582 = icmp ult i32 %580, %581
  br i1 %582, label %583, label %603

583:                                              ; preds = %579
  %584 = load ptr, ptr %37, align 8, !tbaa !5
  %585 = load i8, ptr %584, align 1, !tbaa !20
  %586 = zext i8 %585 to i32
  %587 = load ptr, ptr %39, align 8, !tbaa !5
  %588 = load i8, ptr %587, align 1, !tbaa !20
  %589 = zext i8 %588 to i32
  %590 = sub nsw i32 %586, %589
  %591 = and i32 %590, 255
  %592 = trunc i32 %591 to i8
  %593 = load ptr, ptr %38, align 8, !tbaa !5
  store i8 %592, ptr %593, align 1, !tbaa !20
  br label %594

594:                                              ; preds = %583
  %595 = load i32, ptr %40, align 4, !tbaa !22
  %596 = add i32 %595, 1
  store i32 %596, ptr %40, align 4, !tbaa !22
  %597 = load ptr, ptr %37, align 8, !tbaa !5
  %598 = getelementptr inbounds i8, ptr %597, i32 1
  store ptr %598, ptr %37, align 8, !tbaa !5
  %599 = load ptr, ptr %39, align 8, !tbaa !5
  %600 = getelementptr inbounds i8, ptr %599, i32 1
  store ptr %600, ptr %39, align 8, !tbaa !5
  %601 = load ptr, ptr %38, align 8, !tbaa !5
  %602 = getelementptr inbounds i8, ptr %601, i32 1
  store ptr %602, ptr %38, align 8, !tbaa !5
  br label %579, !llvm.loop !45

603:                                              ; preds = %579
  %604 = load ptr, ptr %3, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.png_struct_def, ptr %604, i32 0, i32 35
  %606 = load ptr, ptr %605, align 8, !tbaa !44
  store ptr %606, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #2
  br label %833

607:                                              ; preds = %566
  %608 = load i8, ptr %10, align 1, !tbaa !20
  %609 = zext i8 %608 to i32
  %610 = and i32 %609, 32
  %611 = icmp ne i32 %610, 0
  br i1 %611, label %612, label %832

612:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #2
  store i32 0, ptr %44, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #2
  %613 = load i32, ptr %8, align 4, !tbaa !22
  store i32 %613, ptr %45, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #2
  %614 = load ptr, ptr %3, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.png_struct_def, ptr %614, i32 0, i32 102
  %616 = load i8, ptr %615, align 8, !tbaa !29
  %617 = zext i8 %616 to i32
  %618 = icmp eq i32 %617, 2
  br i1 %618, label %619, label %694

619:                                              ; preds = %612
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #2
  %620 = load i32, ptr %45, align 4, !tbaa !22
  %621 = and i32 %620, 65535
  store i32 %621, ptr %50, align 4, !tbaa !22
  %622 = load i32, ptr %45, align 4, !tbaa !22
  %623 = lshr i32 %622, 10
  %624 = and i32 %623, 4194240
  store i32 %624, ptr %49, align 4, !tbaa !22
  store i32 0, ptr %48, align 4, !tbaa !22
  br label %625

625:                                              ; preds = %663, %619
  %626 = load i32, ptr %48, align 4, !tbaa !22
  %627 = load i32, ptr %12, align 4, !tbaa !22
  %628 = icmp slt i32 %626, %627
  br i1 %628, label %629, label %666

629:                                              ; preds = %625
  %630 = load ptr, ptr %3, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.png_struct_def, ptr %630, i32 0, i32 104
  %632 = load ptr, ptr %631, align 8, !tbaa !30
  %633 = load i32, ptr %48, align 4, !tbaa !22
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds i8, ptr %632, i64 %634
  %636 = load i8, ptr %635, align 1, !tbaa !20
  %637 = zext i8 %636 to i32
  %638 = icmp eq i32 %637, 2
  br i1 %638, label %639, label %662

639:                                              ; preds = %629
  %640 = load i32, ptr %50, align 4, !tbaa !22
  %641 = load ptr, ptr %3, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.png_struct_def, ptr %641, i32 0, i32 106
  %643 = load ptr, ptr %642, align 8, !tbaa !38
  %644 = load i32, ptr %48, align 4, !tbaa !22
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds i16, ptr %643, i64 %645
  %647 = load i16, ptr %646, align 2, !tbaa !32
  %648 = zext i16 %647 to i32
  %649 = mul i32 %640, %648
  %650 = lshr i32 %649, 8
  store i32 %650, ptr %50, align 4, !tbaa !22
  %651 = load i32, ptr %49, align 4, !tbaa !22
  %652 = load ptr, ptr %3, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.png_struct_def, ptr %652, i32 0, i32 106
  %654 = load ptr, ptr %653, align 8, !tbaa !38
  %655 = load i32, ptr %48, align 4, !tbaa !22
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds i16, ptr %654, i64 %656
  %658 = load i16, ptr %657, align 2, !tbaa !32
  %659 = zext i16 %658 to i32
  %660 = mul i32 %651, %659
  %661 = lshr i32 %660, 8
  store i32 %661, ptr %49, align 4, !tbaa !22
  br label %662

662:                                              ; preds = %639, %629
  br label %663

663:                                              ; preds = %662
  %664 = load i32, ptr %48, align 4, !tbaa !22
  %665 = add nsw i32 %664, 1
  store i32 %665, ptr %48, align 4, !tbaa !22
  br label %625, !llvm.loop !46

666:                                              ; preds = %625
  %667 = load i32, ptr %50, align 4, !tbaa !22
  %668 = load ptr, ptr %3, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.png_struct_def, ptr %668, i32 0, i32 108
  %670 = load ptr, ptr %669, align 8, !tbaa !40
  %671 = getelementptr inbounds i16, ptr %670, i64 2
  %672 = load i16, ptr %671, align 2, !tbaa !32
  %673 = zext i16 %672 to i32
  %674 = mul i32 %667, %673
  %675 = lshr i32 %674, 3
  store i32 %675, ptr %50, align 4, !tbaa !22
  %676 = load i32, ptr %49, align 4, !tbaa !22
  %677 = load ptr, ptr %3, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.png_struct_def, ptr %677, i32 0, i32 108
  %679 = load ptr, ptr %678, align 8, !tbaa !40
  %680 = getelementptr inbounds i16, ptr %679, i64 2
  %681 = load i16, ptr %680, align 2, !tbaa !32
  %682 = zext i16 %681 to i32
  %683 = mul i32 %676, %682
  %684 = lshr i32 %683, 3
  store i32 %684, ptr %49, align 4, !tbaa !22
  %685 = load i32, ptr %49, align 4, !tbaa !22
  %686 = icmp ugt i32 %685, 4194240
  br i1 %686, label %687, label %688

687:                                              ; preds = %666
  store i32 2147483647, ptr %45, align 4, !tbaa !22
  br label %693

688:                                              ; preds = %666
  %689 = load i32, ptr %49, align 4, !tbaa !22
  %690 = shl i32 %689, 10
  %691 = load i32, ptr %50, align 4, !tbaa !22
  %692 = add i32 %690, %691
  store i32 %692, ptr %45, align 4, !tbaa !22
  br label %693

693:                                              ; preds = %688, %687
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #2
  br label %694

694:                                              ; preds = %693, %612
  store i32 0, ptr %46, align 4, !tbaa !22
  %695 = load ptr, ptr %7, align 8, !tbaa !5
  %696 = getelementptr inbounds i8, ptr %695, i64 1
  store ptr %696, ptr %41, align 8, !tbaa !5
  %697 = load ptr, ptr %3, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.png_struct_def, ptr %697, i32 0, i32 35
  %699 = load ptr, ptr %698, align 8, !tbaa !44
  %700 = getelementptr inbounds i8, ptr %699, i64 1
  store ptr %700, ptr %42, align 8, !tbaa !5
  %701 = load ptr, ptr %6, align 8, !tbaa !5
  %702 = getelementptr inbounds i8, ptr %701, i64 1
  store ptr %702, ptr %43, align 8, !tbaa !5
  br label %703

703:                                              ; preds = %738, %694
  %704 = load i32, ptr %46, align 4, !tbaa !22
  %705 = load i32, ptr %11, align 4, !tbaa !22
  %706 = icmp ult i32 %704, %705
  br i1 %706, label %707, label %741

707:                                              ; preds = %703
  %708 = load ptr, ptr %41, align 8, !tbaa !5
  %709 = getelementptr inbounds i8, ptr %708, i32 1
  store ptr %709, ptr %41, align 8, !tbaa !5
  %710 = load i8, ptr %708, align 1, !tbaa !20
  %711 = zext i8 %710 to i32
  %712 = load ptr, ptr %43, align 8, !tbaa !5
  %713 = getelementptr inbounds i8, ptr %712, i32 1
  store ptr %713, ptr %43, align 8, !tbaa !5
  %714 = load i8, ptr %712, align 1, !tbaa !20
  %715 = zext i8 %714 to i32
  %716 = sub nsw i32 %711, %715
  %717 = and i32 %716, 255
  %718 = trunc i32 %717 to i8
  %719 = load ptr, ptr %42, align 8, !tbaa !5
  %720 = getelementptr inbounds i8, ptr %719, i32 1
  store ptr %720, ptr %42, align 8, !tbaa !5
  store i8 %718, ptr %719, align 1, !tbaa !20
  %721 = zext i8 %718 to i32
  store i32 %721, ptr %47, align 4, !tbaa !22
  %722 = load i32, ptr %47, align 4, !tbaa !22
  %723 = icmp slt i32 %722, 128
  br i1 %723, label %724, label %726

724:                                              ; preds = %707
  %725 = load i32, ptr %47, align 4, !tbaa !22
  br label %729

726:                                              ; preds = %707
  %727 = load i32, ptr %47, align 4, !tbaa !22
  %728 = sub nsw i32 256, %727
  br label %729

729:                                              ; preds = %726, %724
  %730 = phi i32 [ %725, %724 ], [ %728, %726 ]
  %731 = load i32, ptr %44, align 4, !tbaa !22
  %732 = add i32 %731, %730
  store i32 %732, ptr %44, align 4, !tbaa !22
  %733 = load i32, ptr %44, align 4, !tbaa !22
  %734 = load i32, ptr %45, align 4, !tbaa !22
  %735 = icmp ugt i32 %733, %734
  br i1 %735, label %736, label %737

736:                                              ; preds = %729
  br label %741

737:                                              ; preds = %729
  br label %738

738:                                              ; preds = %737
  %739 = load i32, ptr %46, align 4, !tbaa !22
  %740 = add i32 %739, 1
  store i32 %740, ptr %46, align 4, !tbaa !22
  br label %703, !llvm.loop !47

741:                                              ; preds = %736, %703
  %742 = load ptr, ptr %3, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.png_struct_def, ptr %742, i32 0, i32 102
  %744 = load i8, ptr %743, align 8, !tbaa !29
  %745 = zext i8 %744 to i32
  %746 = icmp eq i32 %745, 2
  br i1 %746, label %747, label %822

747:                                              ; preds = %741
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #2
  %748 = load i32, ptr %44, align 4, !tbaa !22
  %749 = and i32 %748, 65535
  store i32 %749, ptr %53, align 4, !tbaa !22
  %750 = load i32, ptr %44, align 4, !tbaa !22
  %751 = lshr i32 %750, 10
  %752 = and i32 %751, 4194240
  store i32 %752, ptr %52, align 4, !tbaa !22
  store i32 0, ptr %51, align 4, !tbaa !22
  br label %753

753:                                              ; preds = %791, %747
  %754 = load i32, ptr %51, align 4, !tbaa !22
  %755 = load i32, ptr %12, align 4, !tbaa !22
  %756 = icmp slt i32 %754, %755
  br i1 %756, label %757, label %794

757:                                              ; preds = %753
  %758 = load ptr, ptr %3, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.png_struct_def, ptr %758, i32 0, i32 104
  %760 = load ptr, ptr %759, align 8, !tbaa !30
  %761 = load i32, ptr %51, align 4, !tbaa !22
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds i8, ptr %760, i64 %762
  %764 = load i8, ptr %763, align 1, !tbaa !20
  %765 = zext i8 %764 to i32
  %766 = icmp eq i32 %765, 2
  br i1 %766, label %767, label %790

767:                                              ; preds = %757
  %768 = load i32, ptr %53, align 4, !tbaa !22
  %769 = load ptr, ptr %3, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.png_struct_def, ptr %769, i32 0, i32 105
  %771 = load ptr, ptr %770, align 8, !tbaa !31
  %772 = load i32, ptr %51, align 4, !tbaa !22
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds i16, ptr %771, i64 %773
  %775 = load i16, ptr %774, align 2, !tbaa !32
  %776 = zext i16 %775 to i32
  %777 = mul i32 %768, %776
  %778 = lshr i32 %777, 8
  store i32 %778, ptr %53, align 4, !tbaa !22
  %779 = load i32, ptr %52, align 4, !tbaa !22
  %780 = load ptr, ptr %3, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.png_struct_def, ptr %780, i32 0, i32 105
  %782 = load ptr, ptr %781, align 8, !tbaa !31
  %783 = load i32, ptr %51, align 4, !tbaa !22
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds i16, ptr %782, i64 %784
  %786 = load i16, ptr %785, align 2, !tbaa !32
  %787 = zext i16 %786 to i32
  %788 = mul i32 %779, %787
  %789 = lshr i32 %788, 8
  store i32 %789, ptr %52, align 4, !tbaa !22
  br label %790

790:                                              ; preds = %767, %757
  br label %791

791:                                              ; preds = %790
  %792 = load i32, ptr %51, align 4, !tbaa !22
  %793 = add nsw i32 %792, 1
  store i32 %793, ptr %51, align 4, !tbaa !22
  br label %753, !llvm.loop !48

794:                                              ; preds = %753
  %795 = load i32, ptr %53, align 4, !tbaa !22
  %796 = load ptr, ptr %3, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.png_struct_def, ptr %796, i32 0, i32 107
  %798 = load ptr, ptr %797, align 8, !tbaa !34
  %799 = getelementptr inbounds i16, ptr %798, i64 2
  %800 = load i16, ptr %799, align 2, !tbaa !32
  %801 = zext i16 %800 to i32
  %802 = mul i32 %795, %801
  %803 = lshr i32 %802, 3
  store i32 %803, ptr %53, align 4, !tbaa !22
  %804 = load i32, ptr %52, align 4, !tbaa !22
  %805 = load ptr, ptr %3, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.png_struct_def, ptr %805, i32 0, i32 107
  %807 = load ptr, ptr %806, align 8, !tbaa !34
  %808 = getelementptr inbounds i16, ptr %807, i64 2
  %809 = load i16, ptr %808, align 2, !tbaa !32
  %810 = zext i16 %809 to i32
  %811 = mul i32 %804, %810
  %812 = lshr i32 %811, 3
  store i32 %812, ptr %52, align 4, !tbaa !22
  %813 = load i32, ptr %52, align 4, !tbaa !22
  %814 = icmp ugt i32 %813, 4194240
  br i1 %814, label %815, label %816

815:                                              ; preds = %794
  store i32 2147483647, ptr %44, align 4, !tbaa !22
  br label %821

816:                                              ; preds = %794
  %817 = load i32, ptr %52, align 4, !tbaa !22
  %818 = shl i32 %817, 10
  %819 = load i32, ptr %53, align 4, !tbaa !22
  %820 = add i32 %818, %819
  store i32 %820, ptr %44, align 4, !tbaa !22
  br label %821

821:                                              ; preds = %816, %815
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #2
  br label %822

822:                                              ; preds = %821, %741
  %823 = load i32, ptr %44, align 4, !tbaa !22
  %824 = load i32, ptr %8, align 4, !tbaa !22
  %825 = icmp ult i32 %823, %824
  br i1 %825, label %826, label %831

826:                                              ; preds = %822
  %827 = load i32, ptr %44, align 4, !tbaa !22
  store i32 %827, ptr %8, align 4, !tbaa !22
  %828 = load ptr, ptr %3, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.png_struct_def, ptr %828, i32 0, i32 35
  %830 = load ptr, ptr %829, align 8, !tbaa !44
  store ptr %830, ptr %5, align 8, !tbaa !5
  br label %831

831:                                              ; preds = %826, %822
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #2
  br label %832

832:                                              ; preds = %831, %607
  br label %833

833:                                              ; preds = %832, %603
  %834 = load i8, ptr %10, align 1, !tbaa !20
  %835 = zext i8 %834 to i32
  %836 = icmp eq i32 %835, 64
  br i1 %836, label %837, label %902

837:                                              ; preds = %833
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #2
  store i32 0, ptr %58, align 4, !tbaa !22
  %838 = load ptr, ptr %7, align 8, !tbaa !5
  %839 = getelementptr inbounds i8, ptr %838, i64 1
  store ptr %839, ptr %54, align 8, !tbaa !5
  %840 = load ptr, ptr %3, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.png_struct_def, ptr %840, i32 0, i32 36
  %842 = load ptr, ptr %841, align 8, !tbaa !49
  %843 = getelementptr inbounds i8, ptr %842, i64 1
  store ptr %843, ptr %55, align 8, !tbaa !5
  %844 = load ptr, ptr %6, align 8, !tbaa !5
  %845 = getelementptr inbounds i8, ptr %844, i64 1
  store ptr %845, ptr %56, align 8, !tbaa !5
  br label %846

846:                                              ; preds = %865, %837
  %847 = load i32, ptr %58, align 4, !tbaa !22
  %848 = load i32, ptr %9, align 4, !tbaa !22
  %849 = icmp ult i32 %847, %848
  br i1 %849, label %850, label %868

850:                                              ; preds = %846
  %851 = load ptr, ptr %54, align 8, !tbaa !5
  %852 = getelementptr inbounds i8, ptr %851, i32 1
  store ptr %852, ptr %54, align 8, !tbaa !5
  %853 = load i8, ptr %851, align 1, !tbaa !20
  %854 = zext i8 %853 to i32
  %855 = load ptr, ptr %56, align 8, !tbaa !5
  %856 = getelementptr inbounds i8, ptr %855, i32 1
  store ptr %856, ptr %56, align 8, !tbaa !5
  %857 = load i8, ptr %855, align 1, !tbaa !20
  %858 = zext i8 %857 to i32
  %859 = sdiv i32 %858, 2
  %860 = sub nsw i32 %854, %859
  %861 = and i32 %860, 255
  %862 = trunc i32 %861 to i8
  %863 = load ptr, ptr %55, align 8, !tbaa !5
  %864 = getelementptr inbounds i8, ptr %863, i32 1
  store ptr %864, ptr %55, align 8, !tbaa !5
  store i8 %862, ptr %863, align 1, !tbaa !20
  br label %865

865:                                              ; preds = %850
  %866 = load i32, ptr %58, align 4, !tbaa !22
  %867 = add i32 %866, 1
  store i32 %867, ptr %58, align 4, !tbaa !22
  br label %846, !llvm.loop !50

868:                                              ; preds = %846
  %869 = load ptr, ptr %7, align 8, !tbaa !5
  %870 = getelementptr inbounds i8, ptr %869, i64 1
  store ptr %870, ptr %57, align 8, !tbaa !5
  br label %871

871:                                              ; preds = %895, %868
  %872 = load i32, ptr %58, align 4, !tbaa !22
  %873 = load i32, ptr %11, align 4, !tbaa !22
  %874 = icmp ult i32 %872, %873
  br i1 %874, label %875, label %898

875:                                              ; preds = %871
  %876 = load ptr, ptr %54, align 8, !tbaa !5
  %877 = getelementptr inbounds i8, ptr %876, i32 1
  store ptr %877, ptr %54, align 8, !tbaa !5
  %878 = load i8, ptr %876, align 1, !tbaa !20
  %879 = zext i8 %878 to i32
  %880 = load ptr, ptr %56, align 8, !tbaa !5
  %881 = getelementptr inbounds i8, ptr %880, i32 1
  store ptr %881, ptr %56, align 8, !tbaa !5
  %882 = load i8, ptr %880, align 1, !tbaa !20
  %883 = zext i8 %882 to i32
  %884 = load ptr, ptr %57, align 8, !tbaa !5
  %885 = getelementptr inbounds i8, ptr %884, i32 1
  store ptr %885, ptr %57, align 8, !tbaa !5
  %886 = load i8, ptr %884, align 1, !tbaa !20
  %887 = zext i8 %886 to i32
  %888 = add nsw i32 %883, %887
  %889 = sdiv i32 %888, 2
  %890 = sub nsw i32 %879, %889
  %891 = and i32 %890, 255
  %892 = trunc i32 %891 to i8
  %893 = load ptr, ptr %55, align 8, !tbaa !5
  %894 = getelementptr inbounds i8, ptr %893, i32 1
  store ptr %894, ptr %55, align 8, !tbaa !5
  store i8 %892, ptr %893, align 1, !tbaa !20
  br label %895

895:                                              ; preds = %875
  %896 = load i32, ptr %58, align 4, !tbaa !22
  %897 = add i32 %896, 1
  store i32 %897, ptr %58, align 4, !tbaa !22
  br label %871, !llvm.loop !51

898:                                              ; preds = %871
  %899 = load ptr, ptr %3, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.png_struct_def, ptr %899, i32 0, i32 36
  %901 = load ptr, ptr %900, align 8, !tbaa !49
  store ptr %901, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #2
  br label %1171

902:                                              ; preds = %833
  %903 = load i8, ptr %10, align 1, !tbaa !20
  %904 = zext i8 %903 to i32
  %905 = and i32 %904, 64
  %906 = icmp ne i32 %905, 0
  br i1 %906, label %907, label %1170

907:                                              ; preds = %902
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #2
  store i32 0, ptr %63, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #2
  %908 = load i32, ptr %8, align 4, !tbaa !22
  store i32 %908, ptr %64, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #2
  %909 = load ptr, ptr %3, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.png_struct_def, ptr %909, i32 0, i32 102
  %911 = load i8, ptr %910, align 8, !tbaa !29
  %912 = zext i8 %911 to i32
  %913 = icmp eq i32 %912, 2
  br i1 %913, label %914, label %989

914:                                              ; preds = %907
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #2
  %915 = load i32, ptr %64, align 4, !tbaa !22
  %916 = and i32 %915, 65535
  store i32 %916, ptr %69, align 4, !tbaa !22
  %917 = load i32, ptr %64, align 4, !tbaa !22
  %918 = lshr i32 %917, 10
  %919 = and i32 %918, 4194240
  store i32 %919, ptr %68, align 4, !tbaa !22
  store i32 0, ptr %67, align 4, !tbaa !22
  br label %920

920:                                              ; preds = %958, %914
  %921 = load i32, ptr %67, align 4, !tbaa !22
  %922 = load i32, ptr %12, align 4, !tbaa !22
  %923 = icmp slt i32 %921, %922
  br i1 %923, label %924, label %961

924:                                              ; preds = %920
  %925 = load ptr, ptr %3, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.png_struct_def, ptr %925, i32 0, i32 104
  %927 = load ptr, ptr %926, align 8, !tbaa !30
  %928 = load i32, ptr %67, align 4, !tbaa !22
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds i8, ptr %927, i64 %929
  %931 = load i8, ptr %930, align 1, !tbaa !20
  %932 = zext i8 %931 to i32
  %933 = icmp eq i32 %932, 3
  br i1 %933, label %934, label %957

934:                                              ; preds = %924
  %935 = load i32, ptr %69, align 4, !tbaa !22
  %936 = load ptr, ptr %3, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.png_struct_def, ptr %936, i32 0, i32 106
  %938 = load ptr, ptr %937, align 8, !tbaa !38
  %939 = load i32, ptr %67, align 4, !tbaa !22
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds i16, ptr %938, i64 %940
  %942 = load i16, ptr %941, align 2, !tbaa !32
  %943 = zext i16 %942 to i32
  %944 = mul i32 %935, %943
  %945 = lshr i32 %944, 8
  store i32 %945, ptr %69, align 4, !tbaa !22
  %946 = load i32, ptr %68, align 4, !tbaa !22
  %947 = load ptr, ptr %3, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.png_struct_def, ptr %947, i32 0, i32 106
  %949 = load ptr, ptr %948, align 8, !tbaa !38
  %950 = load i32, ptr %67, align 4, !tbaa !22
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds i16, ptr %949, i64 %951
  %953 = load i16, ptr %952, align 2, !tbaa !32
  %954 = zext i16 %953 to i32
  %955 = mul i32 %946, %954
  %956 = lshr i32 %955, 8
  store i32 %956, ptr %68, align 4, !tbaa !22
  br label %957

957:                                              ; preds = %934, %924
  br label %958

958:                                              ; preds = %957
  %959 = load i32, ptr %67, align 4, !tbaa !22
  %960 = add nsw i32 %959, 1
  store i32 %960, ptr %67, align 4, !tbaa !22
  br label %920, !llvm.loop !52

961:                                              ; preds = %920
  %962 = load i32, ptr %69, align 4, !tbaa !22
  %963 = load ptr, ptr %3, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.png_struct_def, ptr %963, i32 0, i32 108
  %965 = load ptr, ptr %964, align 8, !tbaa !40
  %966 = getelementptr inbounds i16, ptr %965, i64 3
  %967 = load i16, ptr %966, align 2, !tbaa !32
  %968 = zext i16 %967 to i32
  %969 = mul i32 %962, %968
  %970 = lshr i32 %969, 3
  store i32 %970, ptr %69, align 4, !tbaa !22
  %971 = load i32, ptr %68, align 4, !tbaa !22
  %972 = load ptr, ptr %3, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.png_struct_def, ptr %972, i32 0, i32 108
  %974 = load ptr, ptr %973, align 8, !tbaa !40
  %975 = getelementptr inbounds i16, ptr %974, i64 3
  %976 = load i16, ptr %975, align 2, !tbaa !32
  %977 = zext i16 %976 to i32
  %978 = mul i32 %971, %977
  %979 = lshr i32 %978, 3
  store i32 %979, ptr %68, align 4, !tbaa !22
  %980 = load i32, ptr %68, align 4, !tbaa !22
  %981 = icmp ugt i32 %980, 4194240
  br i1 %981, label %982, label %983

982:                                              ; preds = %961
  store i32 2147483647, ptr %64, align 4, !tbaa !22
  br label %988

983:                                              ; preds = %961
  %984 = load i32, ptr %68, align 4, !tbaa !22
  %985 = shl i32 %984, 10
  %986 = load i32, ptr %69, align 4, !tbaa !22
  %987 = add i32 %985, %986
  store i32 %987, ptr %64, align 4, !tbaa !22
  br label %988

988:                                              ; preds = %983, %982
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #2
  br label %989

989:                                              ; preds = %988, %907
  store i32 0, ptr %65, align 4, !tbaa !22
  %990 = load ptr, ptr %7, align 8, !tbaa !5
  %991 = getelementptr inbounds i8, ptr %990, i64 1
  store ptr %991, ptr %59, align 8, !tbaa !5
  %992 = load ptr, ptr %3, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.png_struct_def, ptr %992, i32 0, i32 36
  %994 = load ptr, ptr %993, align 8, !tbaa !49
  %995 = getelementptr inbounds i8, ptr %994, i64 1
  store ptr %995, ptr %60, align 8, !tbaa !5
  %996 = load ptr, ptr %6, align 8, !tbaa !5
  %997 = getelementptr inbounds i8, ptr %996, i64 1
  store ptr %997, ptr %61, align 8, !tbaa !5
  br label %998

998:                                              ; preds = %1029, %989
  %999 = load i32, ptr %65, align 4, !tbaa !22
  %1000 = load i32, ptr %9, align 4, !tbaa !22
  %1001 = icmp ult i32 %999, %1000
  br i1 %1001, label %1002, label %1032

1002:                                             ; preds = %998
  %1003 = load ptr, ptr %59, align 8, !tbaa !5
  %1004 = getelementptr inbounds i8, ptr %1003, i32 1
  store ptr %1004, ptr %59, align 8, !tbaa !5
  %1005 = load i8, ptr %1003, align 1, !tbaa !20
  %1006 = zext i8 %1005 to i32
  %1007 = load ptr, ptr %61, align 8, !tbaa !5
  %1008 = getelementptr inbounds i8, ptr %1007, i32 1
  store ptr %1008, ptr %61, align 8, !tbaa !5
  %1009 = load i8, ptr %1007, align 1, !tbaa !20
  %1010 = zext i8 %1009 to i32
  %1011 = sdiv i32 %1010, 2
  %1012 = sub nsw i32 %1006, %1011
  %1013 = and i32 %1012, 255
  %1014 = trunc i32 %1013 to i8
  %1015 = load ptr, ptr %60, align 8, !tbaa !5
  %1016 = getelementptr inbounds i8, ptr %1015, i32 1
  store ptr %1016, ptr %60, align 8, !tbaa !5
  store i8 %1014, ptr %1015, align 1, !tbaa !20
  %1017 = zext i8 %1014 to i32
  store i32 %1017, ptr %66, align 4, !tbaa !22
  %1018 = load i32, ptr %66, align 4, !tbaa !22
  %1019 = icmp slt i32 %1018, 128
  br i1 %1019, label %1020, label %1022

1020:                                             ; preds = %1002
  %1021 = load i32, ptr %66, align 4, !tbaa !22
  br label %1025

1022:                                             ; preds = %1002
  %1023 = load i32, ptr %66, align 4, !tbaa !22
  %1024 = sub nsw i32 256, %1023
  br label %1025

1025:                                             ; preds = %1022, %1020
  %1026 = phi i32 [ %1021, %1020 ], [ %1024, %1022 ]
  %1027 = load i32, ptr %63, align 4, !tbaa !22
  %1028 = add i32 %1027, %1026
  store i32 %1028, ptr %63, align 4, !tbaa !22
  br label %1029

1029:                                             ; preds = %1025
  %1030 = load i32, ptr %65, align 4, !tbaa !22
  %1031 = add i32 %1030, 1
  store i32 %1031, ptr %65, align 4, !tbaa !22
  br label %998, !llvm.loop !53

1032:                                             ; preds = %998
  %1033 = load ptr, ptr %7, align 8, !tbaa !5
  %1034 = getelementptr inbounds i8, ptr %1033, i64 1
  store ptr %1034, ptr %62, align 8, !tbaa !5
  br label %1035

1035:                                             ; preds = %1076, %1032
  %1036 = load i32, ptr %65, align 4, !tbaa !22
  %1037 = load i32, ptr %11, align 4, !tbaa !22
  %1038 = icmp ult i32 %1036, %1037
  br i1 %1038, label %1039, label %1079

1039:                                             ; preds = %1035
  %1040 = load ptr, ptr %59, align 8, !tbaa !5
  %1041 = getelementptr inbounds i8, ptr %1040, i32 1
  store ptr %1041, ptr %59, align 8, !tbaa !5
  %1042 = load i8, ptr %1040, align 1, !tbaa !20
  %1043 = zext i8 %1042 to i32
  %1044 = load ptr, ptr %61, align 8, !tbaa !5
  %1045 = getelementptr inbounds i8, ptr %1044, i32 1
  store ptr %1045, ptr %61, align 8, !tbaa !5
  %1046 = load i8, ptr %1044, align 1, !tbaa !20
  %1047 = zext i8 %1046 to i32
  %1048 = load ptr, ptr %62, align 8, !tbaa !5
  %1049 = getelementptr inbounds i8, ptr %1048, i32 1
  store ptr %1049, ptr %62, align 8, !tbaa !5
  %1050 = load i8, ptr %1048, align 1, !tbaa !20
  %1051 = zext i8 %1050 to i32
  %1052 = add nsw i32 %1047, %1051
  %1053 = sdiv i32 %1052, 2
  %1054 = sub nsw i32 %1043, %1053
  %1055 = and i32 %1054, 255
  %1056 = trunc i32 %1055 to i8
  %1057 = load ptr, ptr %60, align 8, !tbaa !5
  %1058 = getelementptr inbounds i8, ptr %1057, i32 1
  store ptr %1058, ptr %60, align 8, !tbaa !5
  store i8 %1056, ptr %1057, align 1, !tbaa !20
  %1059 = zext i8 %1056 to i32
  store i32 %1059, ptr %66, align 4, !tbaa !22
  %1060 = load i32, ptr %66, align 4, !tbaa !22
  %1061 = icmp slt i32 %1060, 128
  br i1 %1061, label %1062, label %1064

1062:                                             ; preds = %1039
  %1063 = load i32, ptr %66, align 4, !tbaa !22
  br label %1067

1064:                                             ; preds = %1039
  %1065 = load i32, ptr %66, align 4, !tbaa !22
  %1066 = sub nsw i32 256, %1065
  br label %1067

1067:                                             ; preds = %1064, %1062
  %1068 = phi i32 [ %1063, %1062 ], [ %1066, %1064 ]
  %1069 = load i32, ptr %63, align 4, !tbaa !22
  %1070 = add i32 %1069, %1068
  store i32 %1070, ptr %63, align 4, !tbaa !22
  %1071 = load i32, ptr %63, align 4, !tbaa !22
  %1072 = load i32, ptr %64, align 4, !tbaa !22
  %1073 = icmp ugt i32 %1071, %1072
  br i1 %1073, label %1074, label %1075

1074:                                             ; preds = %1067
  br label %1079

1075:                                             ; preds = %1067
  br label %1076

1076:                                             ; preds = %1075
  %1077 = load i32, ptr %65, align 4, !tbaa !22
  %1078 = add i32 %1077, 1
  store i32 %1078, ptr %65, align 4, !tbaa !22
  br label %1035, !llvm.loop !54

1079:                                             ; preds = %1074, %1035
  %1080 = load ptr, ptr %3, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.png_struct_def, ptr %1080, i32 0, i32 102
  %1082 = load i8, ptr %1081, align 8, !tbaa !29
  %1083 = zext i8 %1082 to i32
  %1084 = icmp eq i32 %1083, 2
  br i1 %1084, label %1085, label %1160

1085:                                             ; preds = %1079
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #2
  %1086 = load i32, ptr %63, align 4, !tbaa !22
  %1087 = and i32 %1086, 65535
  store i32 %1087, ptr %72, align 4, !tbaa !22
  %1088 = load i32, ptr %63, align 4, !tbaa !22
  %1089 = lshr i32 %1088, 10
  %1090 = and i32 %1089, 4194240
  store i32 %1090, ptr %71, align 4, !tbaa !22
  store i32 0, ptr %70, align 4, !tbaa !22
  br label %1091

1091:                                             ; preds = %1129, %1085
  %1092 = load i32, ptr %70, align 4, !tbaa !22
  %1093 = load i32, ptr %12, align 4, !tbaa !22
  %1094 = icmp slt i32 %1092, %1093
  br i1 %1094, label %1095, label %1132

1095:                                             ; preds = %1091
  %1096 = load ptr, ptr %3, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.png_struct_def, ptr %1096, i32 0, i32 104
  %1098 = load ptr, ptr %1097, align 8, !tbaa !30
  %1099 = load i32, ptr %70, align 4, !tbaa !22
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds i8, ptr %1098, i64 %1100
  %1102 = load i8, ptr %1101, align 1, !tbaa !20
  %1103 = zext i8 %1102 to i32
  %1104 = icmp eq i32 %1103, 0
  br i1 %1104, label %1105, label %1128

1105:                                             ; preds = %1095
  %1106 = load i32, ptr %72, align 4, !tbaa !22
  %1107 = load ptr, ptr %3, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.png_struct_def, ptr %1107, i32 0, i32 105
  %1109 = load ptr, ptr %1108, align 8, !tbaa !31
  %1110 = load i32, ptr %70, align 4, !tbaa !22
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds i16, ptr %1109, i64 %1111
  %1113 = load i16, ptr %1112, align 2, !tbaa !32
  %1114 = zext i16 %1113 to i32
  %1115 = mul i32 %1106, %1114
  %1116 = lshr i32 %1115, 8
  store i32 %1116, ptr %72, align 4, !tbaa !22
  %1117 = load i32, ptr %71, align 4, !tbaa !22
  %1118 = load ptr, ptr %3, align 8, !tbaa !5
  %1119 = getelementptr inbounds %struct.png_struct_def, ptr %1118, i32 0, i32 105
  %1120 = load ptr, ptr %1119, align 8, !tbaa !31
  %1121 = load i32, ptr %70, align 4, !tbaa !22
  %1122 = sext i32 %1121 to i64
  %1123 = getelementptr inbounds i16, ptr %1120, i64 %1122
  %1124 = load i16, ptr %1123, align 2, !tbaa !32
  %1125 = zext i16 %1124 to i32
  %1126 = mul i32 %1117, %1125
  %1127 = lshr i32 %1126, 8
  store i32 %1127, ptr %71, align 4, !tbaa !22
  br label %1128

1128:                                             ; preds = %1105, %1095
  br label %1129

1129:                                             ; preds = %1128
  %1130 = load i32, ptr %70, align 4, !tbaa !22
  %1131 = add nsw i32 %1130, 1
  store i32 %1131, ptr %70, align 4, !tbaa !22
  br label %1091, !llvm.loop !55

1132:                                             ; preds = %1091
  %1133 = load i32, ptr %72, align 4, !tbaa !22
  %1134 = load ptr, ptr %3, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.png_struct_def, ptr %1134, i32 0, i32 107
  %1136 = load ptr, ptr %1135, align 8, !tbaa !34
  %1137 = getelementptr inbounds i16, ptr %1136, i64 3
  %1138 = load i16, ptr %1137, align 2, !tbaa !32
  %1139 = zext i16 %1138 to i32
  %1140 = mul i32 %1133, %1139
  %1141 = lshr i32 %1140, 3
  store i32 %1141, ptr %72, align 4, !tbaa !22
  %1142 = load i32, ptr %71, align 4, !tbaa !22
  %1143 = load ptr, ptr %3, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.png_struct_def, ptr %1143, i32 0, i32 107
  %1145 = load ptr, ptr %1144, align 8, !tbaa !34
  %1146 = getelementptr inbounds i16, ptr %1145, i64 3
  %1147 = load i16, ptr %1146, align 2, !tbaa !32
  %1148 = zext i16 %1147 to i32
  %1149 = mul i32 %1142, %1148
  %1150 = lshr i32 %1149, 3
  store i32 %1150, ptr %71, align 4, !tbaa !22
  %1151 = load i32, ptr %71, align 4, !tbaa !22
  %1152 = icmp ugt i32 %1151, 4194240
  br i1 %1152, label %1153, label %1154

1153:                                             ; preds = %1132
  store i32 2147483647, ptr %63, align 4, !tbaa !22
  br label %1159

1154:                                             ; preds = %1132
  %1155 = load i32, ptr %71, align 4, !tbaa !22
  %1156 = shl i32 %1155, 10
  %1157 = load i32, ptr %72, align 4, !tbaa !22
  %1158 = add i32 %1156, %1157
  store i32 %1158, ptr %63, align 4, !tbaa !22
  br label %1159

1159:                                             ; preds = %1154, %1153
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #2
  br label %1160

1160:                                             ; preds = %1159, %1079
  %1161 = load i32, ptr %63, align 4, !tbaa !22
  %1162 = load i32, ptr %8, align 4, !tbaa !22
  %1163 = icmp ult i32 %1161, %1162
  br i1 %1163, label %1164, label %1169

1164:                                             ; preds = %1160
  %1165 = load i32, ptr %63, align 4, !tbaa !22
  store i32 %1165, ptr %8, align 4, !tbaa !22
  %1166 = load ptr, ptr %3, align 8, !tbaa !5
  %1167 = getelementptr inbounds %struct.png_struct_def, ptr %1166, i32 0, i32 36
  %1168 = load ptr, ptr %1167, align 8, !tbaa !49
  store ptr %1168, ptr %5, align 8, !tbaa !5
  br label %1169

1169:                                             ; preds = %1164, %1160
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #2
  br label %1170

1170:                                             ; preds = %1169, %902
  br label %1171

1171:                                             ; preds = %1170, %898
  %1172 = load i8, ptr %10, align 1, !tbaa !20
  %1173 = zext i8 %1172 to i32
  %1174 = icmp eq i32 %1173, 128
  br i1 %1174, label %1175, label %1304

1175:                                             ; preds = %1171
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #2
  store i32 0, ptr %78, align 4, !tbaa !22
  %1176 = load ptr, ptr %7, align 8, !tbaa !5
  %1177 = getelementptr inbounds i8, ptr %1176, i64 1
  store ptr %1177, ptr %73, align 8, !tbaa !5
  %1178 = load ptr, ptr %3, align 8, !tbaa !5
  %1179 = getelementptr inbounds %struct.png_struct_def, ptr %1178, i32 0, i32 37
  %1180 = load ptr, ptr %1179, align 8, !tbaa !56
  %1181 = getelementptr inbounds i8, ptr %1180, i64 1
  store ptr %1181, ptr %74, align 8, !tbaa !5
  %1182 = load ptr, ptr %6, align 8, !tbaa !5
  %1183 = getelementptr inbounds i8, ptr %1182, i64 1
  store ptr %1183, ptr %75, align 8, !tbaa !5
  br label %1184

1184:                                             ; preds = %1202, %1175
  %1185 = load i32, ptr %78, align 4, !tbaa !22
  %1186 = load i32, ptr %9, align 4, !tbaa !22
  %1187 = icmp ult i32 %1185, %1186
  br i1 %1187, label %1188, label %1205

1188:                                             ; preds = %1184
  %1189 = load ptr, ptr %73, align 8, !tbaa !5
  %1190 = getelementptr inbounds i8, ptr %1189, i32 1
  store ptr %1190, ptr %73, align 8, !tbaa !5
  %1191 = load i8, ptr %1189, align 1, !tbaa !20
  %1192 = zext i8 %1191 to i32
  %1193 = load ptr, ptr %75, align 8, !tbaa !5
  %1194 = getelementptr inbounds i8, ptr %1193, i32 1
  store ptr %1194, ptr %75, align 8, !tbaa !5
  %1195 = load i8, ptr %1193, align 1, !tbaa !20
  %1196 = zext i8 %1195 to i32
  %1197 = sub nsw i32 %1192, %1196
  %1198 = and i32 %1197, 255
  %1199 = trunc i32 %1198 to i8
  %1200 = load ptr, ptr %74, align 8, !tbaa !5
  %1201 = getelementptr inbounds i8, ptr %1200, i32 1
  store ptr %1201, ptr %74, align 8, !tbaa !5
  store i8 %1199, ptr %1200, align 1, !tbaa !20
  br label %1202

1202:                                             ; preds = %1188
  %1203 = load i32, ptr %78, align 4, !tbaa !22
  %1204 = add i32 %1203, 1
  store i32 %1204, ptr %78, align 4, !tbaa !22
  br label %1184, !llvm.loop !57

1205:                                             ; preds = %1184
  %1206 = load ptr, ptr %7, align 8, !tbaa !5
  %1207 = getelementptr inbounds i8, ptr %1206, i64 1
  store ptr %1207, ptr %77, align 8, !tbaa !5
  %1208 = load ptr, ptr %6, align 8, !tbaa !5
  %1209 = getelementptr inbounds i8, ptr %1208, i64 1
  store ptr %1209, ptr %76, align 8, !tbaa !5
  br label %1210

1210:                                             ; preds = %1297, %1205
  %1211 = load i32, ptr %78, align 4, !tbaa !22
  %1212 = load i32, ptr %11, align 4, !tbaa !22
  %1213 = icmp ult i32 %1211, %1212
  br i1 %1213, label %1214, label %1300

1214:                                             ; preds = %1210
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #2
  %1215 = load ptr, ptr %75, align 8, !tbaa !5
  %1216 = getelementptr inbounds i8, ptr %1215, i32 1
  store ptr %1216, ptr %75, align 8, !tbaa !5
  %1217 = load i8, ptr %1215, align 1, !tbaa !20
  %1218 = zext i8 %1217 to i32
  store i32 %1218, ptr %80, align 4, !tbaa !22
  %1219 = load ptr, ptr %76, align 8, !tbaa !5
  %1220 = getelementptr inbounds i8, ptr %1219, i32 1
  store ptr %1220, ptr %76, align 8, !tbaa !5
  %1221 = load i8, ptr %1219, align 1, !tbaa !20
  %1222 = zext i8 %1221 to i32
  store i32 %1222, ptr %81, align 4, !tbaa !22
  %1223 = load ptr, ptr %77, align 8, !tbaa !5
  %1224 = getelementptr inbounds i8, ptr %1223, i32 1
  store ptr %1224, ptr %77, align 8, !tbaa !5
  %1225 = load i8, ptr %1223, align 1, !tbaa !20
  %1226 = zext i8 %1225 to i32
  store i32 %1226, ptr %79, align 4, !tbaa !22
  %1227 = load i32, ptr %80, align 4, !tbaa !22
  %1228 = load i32, ptr %81, align 4, !tbaa !22
  %1229 = sub nsw i32 %1227, %1228
  store i32 %1229, ptr %85, align 4, !tbaa !22
  %1230 = load i32, ptr %79, align 4, !tbaa !22
  %1231 = load i32, ptr %81, align 4, !tbaa !22
  %1232 = sub nsw i32 %1230, %1231
  store i32 %1232, ptr %84, align 4, !tbaa !22
  %1233 = load i32, ptr %85, align 4, !tbaa !22
  %1234 = icmp slt i32 %1233, 0
  br i1 %1234, label %1235, label %1238

1235:                                             ; preds = %1214
  %1236 = load i32, ptr %85, align 4, !tbaa !22
  %1237 = sub nsw i32 0, %1236
  br label %1240

1238:                                             ; preds = %1214
  %1239 = load i32, ptr %85, align 4, !tbaa !22
  br label %1240

1240:                                             ; preds = %1238, %1235
  %1241 = phi i32 [ %1237, %1235 ], [ %1239, %1238 ]
  store i32 %1241, ptr %82, align 4, !tbaa !22
  %1242 = load i32, ptr %84, align 4, !tbaa !22
  %1243 = icmp slt i32 %1242, 0
  br i1 %1243, label %1244, label %1247

1244:                                             ; preds = %1240
  %1245 = load i32, ptr %84, align 4, !tbaa !22
  %1246 = sub nsw i32 0, %1245
  br label %1249

1247:                                             ; preds = %1240
  %1248 = load i32, ptr %84, align 4, !tbaa !22
  br label %1249

1249:                                             ; preds = %1247, %1244
  %1250 = phi i32 [ %1246, %1244 ], [ %1248, %1247 ]
  store i32 %1250, ptr %83, align 4, !tbaa !22
  %1251 = load i32, ptr %85, align 4, !tbaa !22
  %1252 = load i32, ptr %84, align 4, !tbaa !22
  %1253 = add nsw i32 %1251, %1252
  %1254 = icmp slt i32 %1253, 0
  br i1 %1254, label %1255, label %1260

1255:                                             ; preds = %1249
  %1256 = load i32, ptr %85, align 4, !tbaa !22
  %1257 = load i32, ptr %84, align 4, !tbaa !22
  %1258 = add nsw i32 %1256, %1257
  %1259 = sub nsw i32 0, %1258
  br label %1264

1260:                                             ; preds = %1249
  %1261 = load i32, ptr %85, align 4, !tbaa !22
  %1262 = load i32, ptr %84, align 4, !tbaa !22
  %1263 = add nsw i32 %1261, %1262
  br label %1264

1264:                                             ; preds = %1260, %1255
  %1265 = phi i32 [ %1259, %1255 ], [ %1263, %1260 ]
  store i32 %1265, ptr %84, align 4, !tbaa !22
  %1266 = load i32, ptr %82, align 4, !tbaa !22
  %1267 = load i32, ptr %83, align 4, !tbaa !22
  %1268 = icmp sle i32 %1266, %1267
  br i1 %1268, label %1269, label %1275

1269:                                             ; preds = %1264
  %1270 = load i32, ptr %82, align 4, !tbaa !22
  %1271 = load i32, ptr %84, align 4, !tbaa !22
  %1272 = icmp sle i32 %1270, %1271
  br i1 %1272, label %1273, label %1275

1273:                                             ; preds = %1269
  %1274 = load i32, ptr %79, align 4, !tbaa !22
  br label %1285

1275:                                             ; preds = %1269, %1264
  %1276 = load i32, ptr %83, align 4, !tbaa !22
  %1277 = load i32, ptr %84, align 4, !tbaa !22
  %1278 = icmp sle i32 %1276, %1277
  br i1 %1278, label %1279, label %1281

1279:                                             ; preds = %1275
  %1280 = load i32, ptr %80, align 4, !tbaa !22
  br label %1283

1281:                                             ; preds = %1275
  %1282 = load i32, ptr %81, align 4, !tbaa !22
  br label %1283

1283:                                             ; preds = %1281, %1279
  %1284 = phi i32 [ %1280, %1279 ], [ %1282, %1281 ]
  br label %1285

1285:                                             ; preds = %1283, %1273
  %1286 = phi i32 [ %1274, %1273 ], [ %1284, %1283 ]
  store i32 %1286, ptr %85, align 4, !tbaa !22
  %1287 = load ptr, ptr %73, align 8, !tbaa !5
  %1288 = getelementptr inbounds i8, ptr %1287, i32 1
  store ptr %1288, ptr %73, align 8, !tbaa !5
  %1289 = load i8, ptr %1287, align 1, !tbaa !20
  %1290 = zext i8 %1289 to i32
  %1291 = load i32, ptr %85, align 4, !tbaa !22
  %1292 = sub nsw i32 %1290, %1291
  %1293 = and i32 %1292, 255
  %1294 = trunc i32 %1293 to i8
  %1295 = load ptr, ptr %74, align 8, !tbaa !5
  %1296 = getelementptr inbounds i8, ptr %1295, i32 1
  store ptr %1296, ptr %74, align 8, !tbaa !5
  store i8 %1294, ptr %1295, align 1, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #2
  br label %1297

1297:                                             ; preds = %1285
  %1298 = load i32, ptr %78, align 4, !tbaa !22
  %1299 = add i32 %1298, 1
  store i32 %1299, ptr %78, align 4, !tbaa !22
  br label %1210, !llvm.loop !58

1300:                                             ; preds = %1210
  %1301 = load ptr, ptr %3, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.png_struct_def, ptr %1301, i32 0, i32 37
  %1303 = load ptr, ptr %1302, align 8, !tbaa !56
  store ptr %1303, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #2
  br label %1639

1304:                                             ; preds = %1171
  %1305 = load i8, ptr %10, align 1, !tbaa !20
  %1306 = zext i8 %1305 to i32
  %1307 = and i32 %1306, 128
  %1308 = icmp ne i32 %1307, 0
  br i1 %1308, label %1309, label %1638

1309:                                             ; preds = %1304
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #2
  store i32 0, ptr %91, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #2
  %1310 = load i32, ptr %8, align 4, !tbaa !22
  store i32 %1310, ptr %92, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #2
  %1311 = load ptr, ptr %3, align 8, !tbaa !5
  %1312 = getelementptr inbounds %struct.png_struct_def, ptr %1311, i32 0, i32 102
  %1313 = load i8, ptr %1312, align 8, !tbaa !29
  %1314 = zext i8 %1313 to i32
  %1315 = icmp eq i32 %1314, 2
  br i1 %1315, label %1316, label %1391

1316:                                             ; preds = %1309
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #2
  %1317 = load i32, ptr %92, align 4, !tbaa !22
  %1318 = and i32 %1317, 65535
  store i32 %1318, ptr %97, align 4, !tbaa !22
  %1319 = load i32, ptr %92, align 4, !tbaa !22
  %1320 = lshr i32 %1319, 10
  %1321 = and i32 %1320, 4194240
  store i32 %1321, ptr %96, align 4, !tbaa !22
  store i32 0, ptr %95, align 4, !tbaa !22
  br label %1322

1322:                                             ; preds = %1360, %1316
  %1323 = load i32, ptr %95, align 4, !tbaa !22
  %1324 = load i32, ptr %12, align 4, !tbaa !22
  %1325 = icmp slt i32 %1323, %1324
  br i1 %1325, label %1326, label %1363

1326:                                             ; preds = %1322
  %1327 = load ptr, ptr %3, align 8, !tbaa !5
  %1328 = getelementptr inbounds %struct.png_struct_def, ptr %1327, i32 0, i32 104
  %1329 = load ptr, ptr %1328, align 8, !tbaa !30
  %1330 = load i32, ptr %95, align 4, !tbaa !22
  %1331 = sext i32 %1330 to i64
  %1332 = getelementptr inbounds i8, ptr %1329, i64 %1331
  %1333 = load i8, ptr %1332, align 1, !tbaa !20
  %1334 = zext i8 %1333 to i32
  %1335 = icmp eq i32 %1334, 4
  br i1 %1335, label %1336, label %1359

1336:                                             ; preds = %1326
  %1337 = load i32, ptr %97, align 4, !tbaa !22
  %1338 = load ptr, ptr %3, align 8, !tbaa !5
  %1339 = getelementptr inbounds %struct.png_struct_def, ptr %1338, i32 0, i32 106
  %1340 = load ptr, ptr %1339, align 8, !tbaa !38
  %1341 = load i32, ptr %95, align 4, !tbaa !22
  %1342 = sext i32 %1341 to i64
  %1343 = getelementptr inbounds i16, ptr %1340, i64 %1342
  %1344 = load i16, ptr %1343, align 2, !tbaa !32
  %1345 = zext i16 %1344 to i32
  %1346 = mul i32 %1337, %1345
  %1347 = lshr i32 %1346, 8
  store i32 %1347, ptr %97, align 4, !tbaa !22
  %1348 = load i32, ptr %96, align 4, !tbaa !22
  %1349 = load ptr, ptr %3, align 8, !tbaa !5
  %1350 = getelementptr inbounds %struct.png_struct_def, ptr %1349, i32 0, i32 106
  %1351 = load ptr, ptr %1350, align 8, !tbaa !38
  %1352 = load i32, ptr %95, align 4, !tbaa !22
  %1353 = sext i32 %1352 to i64
  %1354 = getelementptr inbounds i16, ptr %1351, i64 %1353
  %1355 = load i16, ptr %1354, align 2, !tbaa !32
  %1356 = zext i16 %1355 to i32
  %1357 = mul i32 %1348, %1356
  %1358 = lshr i32 %1357, 8
  store i32 %1358, ptr %96, align 4, !tbaa !22
  br label %1359

1359:                                             ; preds = %1336, %1326
  br label %1360

1360:                                             ; preds = %1359
  %1361 = load i32, ptr %95, align 4, !tbaa !22
  %1362 = add nsw i32 %1361, 1
  store i32 %1362, ptr %95, align 4, !tbaa !22
  br label %1322, !llvm.loop !59

1363:                                             ; preds = %1322
  %1364 = load i32, ptr %97, align 4, !tbaa !22
  %1365 = load ptr, ptr %3, align 8, !tbaa !5
  %1366 = getelementptr inbounds %struct.png_struct_def, ptr %1365, i32 0, i32 108
  %1367 = load ptr, ptr %1366, align 8, !tbaa !40
  %1368 = getelementptr inbounds i16, ptr %1367, i64 4
  %1369 = load i16, ptr %1368, align 2, !tbaa !32
  %1370 = zext i16 %1369 to i32
  %1371 = mul i32 %1364, %1370
  %1372 = lshr i32 %1371, 3
  store i32 %1372, ptr %97, align 4, !tbaa !22
  %1373 = load i32, ptr %96, align 4, !tbaa !22
  %1374 = load ptr, ptr %3, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct.png_struct_def, ptr %1374, i32 0, i32 108
  %1376 = load ptr, ptr %1375, align 8, !tbaa !40
  %1377 = getelementptr inbounds i16, ptr %1376, i64 4
  %1378 = load i16, ptr %1377, align 2, !tbaa !32
  %1379 = zext i16 %1378 to i32
  %1380 = mul i32 %1373, %1379
  %1381 = lshr i32 %1380, 3
  store i32 %1381, ptr %96, align 4, !tbaa !22
  %1382 = load i32, ptr %96, align 4, !tbaa !22
  %1383 = icmp ugt i32 %1382, 4194240
  br i1 %1383, label %1384, label %1385

1384:                                             ; preds = %1363
  store i32 2147483647, ptr %92, align 4, !tbaa !22
  br label %1390

1385:                                             ; preds = %1363
  %1386 = load i32, ptr %96, align 4, !tbaa !22
  %1387 = shl i32 %1386, 10
  %1388 = load i32, ptr %97, align 4, !tbaa !22
  %1389 = add i32 %1387, %1388
  store i32 %1389, ptr %92, align 4, !tbaa !22
  br label %1390

1390:                                             ; preds = %1385, %1384
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #2
  br label %1391

1391:                                             ; preds = %1390, %1309
  store i32 0, ptr %93, align 4, !tbaa !22
  %1392 = load ptr, ptr %7, align 8, !tbaa !5
  %1393 = getelementptr inbounds i8, ptr %1392, i64 1
  store ptr %1393, ptr %86, align 8, !tbaa !5
  %1394 = load ptr, ptr %3, align 8, !tbaa !5
  %1395 = getelementptr inbounds %struct.png_struct_def, ptr %1394, i32 0, i32 37
  %1396 = load ptr, ptr %1395, align 8, !tbaa !56
  %1397 = getelementptr inbounds i8, ptr %1396, i64 1
  store ptr %1397, ptr %87, align 8, !tbaa !5
  %1398 = load ptr, ptr %6, align 8, !tbaa !5
  %1399 = getelementptr inbounds i8, ptr %1398, i64 1
  store ptr %1399, ptr %88, align 8, !tbaa !5
  br label %1400

1400:                                             ; preds = %1430, %1391
  %1401 = load i32, ptr %93, align 4, !tbaa !22
  %1402 = load i32, ptr %9, align 4, !tbaa !22
  %1403 = icmp ult i32 %1401, %1402
  br i1 %1403, label %1404, label %1433

1404:                                             ; preds = %1400
  %1405 = load ptr, ptr %86, align 8, !tbaa !5
  %1406 = getelementptr inbounds i8, ptr %1405, i32 1
  store ptr %1406, ptr %86, align 8, !tbaa !5
  %1407 = load i8, ptr %1405, align 1, !tbaa !20
  %1408 = zext i8 %1407 to i32
  %1409 = load ptr, ptr %88, align 8, !tbaa !5
  %1410 = getelementptr inbounds i8, ptr %1409, i32 1
  store ptr %1410, ptr %88, align 8, !tbaa !5
  %1411 = load i8, ptr %1409, align 1, !tbaa !20
  %1412 = zext i8 %1411 to i32
  %1413 = sub nsw i32 %1408, %1412
  %1414 = and i32 %1413, 255
  %1415 = trunc i32 %1414 to i8
  %1416 = load ptr, ptr %87, align 8, !tbaa !5
  %1417 = getelementptr inbounds i8, ptr %1416, i32 1
  store ptr %1417, ptr %87, align 8, !tbaa !5
  store i8 %1415, ptr %1416, align 1, !tbaa !20
  %1418 = zext i8 %1415 to i32
  store i32 %1418, ptr %94, align 4, !tbaa !22
  %1419 = load i32, ptr %94, align 4, !tbaa !22
  %1420 = icmp slt i32 %1419, 128
  br i1 %1420, label %1421, label %1423

1421:                                             ; preds = %1404
  %1422 = load i32, ptr %94, align 4, !tbaa !22
  br label %1426

1423:                                             ; preds = %1404
  %1424 = load i32, ptr %94, align 4, !tbaa !22
  %1425 = sub nsw i32 256, %1424
  br label %1426

1426:                                             ; preds = %1423, %1421
  %1427 = phi i32 [ %1422, %1421 ], [ %1425, %1423 ]
  %1428 = load i32, ptr %91, align 4, !tbaa !22
  %1429 = add i32 %1428, %1427
  store i32 %1429, ptr %91, align 4, !tbaa !22
  br label %1430

1430:                                             ; preds = %1426
  %1431 = load i32, ptr %93, align 4, !tbaa !22
  %1432 = add i32 %1431, 1
  store i32 %1432, ptr %93, align 4, !tbaa !22
  br label %1400, !llvm.loop !60

1433:                                             ; preds = %1400
  %1434 = load ptr, ptr %7, align 8, !tbaa !5
  %1435 = getelementptr inbounds i8, ptr %1434, i64 1
  store ptr %1435, ptr %90, align 8, !tbaa !5
  %1436 = load ptr, ptr %6, align 8, !tbaa !5
  %1437 = getelementptr inbounds i8, ptr %1436, i64 1
  store ptr %1437, ptr %89, align 8, !tbaa !5
  br label %1438

1438:                                             ; preds = %1545, %1433
  %1439 = load i32, ptr %93, align 4, !tbaa !22
  %1440 = load i32, ptr %11, align 4, !tbaa !22
  %1441 = icmp ult i32 %1439, %1440
  br i1 %1441, label %1442, label %1548

1442:                                             ; preds = %1438
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #2
  %1443 = load ptr, ptr %88, align 8, !tbaa !5
  %1444 = getelementptr inbounds i8, ptr %1443, i32 1
  store ptr %1444, ptr %88, align 8, !tbaa !5
  %1445 = load i8, ptr %1443, align 1, !tbaa !20
  %1446 = zext i8 %1445 to i32
  store i32 %1446, ptr %99, align 4, !tbaa !22
  %1447 = load ptr, ptr %89, align 8, !tbaa !5
  %1448 = getelementptr inbounds i8, ptr %1447, i32 1
  store ptr %1448, ptr %89, align 8, !tbaa !5
  %1449 = load i8, ptr %1447, align 1, !tbaa !20
  %1450 = zext i8 %1449 to i32
  store i32 %1450, ptr %100, align 4, !tbaa !22
  %1451 = load ptr, ptr %90, align 8, !tbaa !5
  %1452 = getelementptr inbounds i8, ptr %1451, i32 1
  store ptr %1452, ptr %90, align 8, !tbaa !5
  %1453 = load i8, ptr %1451, align 1, !tbaa !20
  %1454 = zext i8 %1453 to i32
  store i32 %1454, ptr %98, align 4, !tbaa !22
  %1455 = load i32, ptr %99, align 4, !tbaa !22
  %1456 = load i32, ptr %100, align 4, !tbaa !22
  %1457 = sub nsw i32 %1455, %1456
  store i32 %1457, ptr %104, align 4, !tbaa !22
  %1458 = load i32, ptr %98, align 4, !tbaa !22
  %1459 = load i32, ptr %100, align 4, !tbaa !22
  %1460 = sub nsw i32 %1458, %1459
  store i32 %1460, ptr %103, align 4, !tbaa !22
  %1461 = load i32, ptr %104, align 4, !tbaa !22
  %1462 = icmp slt i32 %1461, 0
  br i1 %1462, label %1463, label %1466

1463:                                             ; preds = %1442
  %1464 = load i32, ptr %104, align 4, !tbaa !22
  %1465 = sub nsw i32 0, %1464
  br label %1468

1466:                                             ; preds = %1442
  %1467 = load i32, ptr %104, align 4, !tbaa !22
  br label %1468

1468:                                             ; preds = %1466, %1463
  %1469 = phi i32 [ %1465, %1463 ], [ %1467, %1466 ]
  store i32 %1469, ptr %101, align 4, !tbaa !22
  %1470 = load i32, ptr %103, align 4, !tbaa !22
  %1471 = icmp slt i32 %1470, 0
  br i1 %1471, label %1472, label %1475

1472:                                             ; preds = %1468
  %1473 = load i32, ptr %103, align 4, !tbaa !22
  %1474 = sub nsw i32 0, %1473
  br label %1477

1475:                                             ; preds = %1468
  %1476 = load i32, ptr %103, align 4, !tbaa !22
  br label %1477

1477:                                             ; preds = %1475, %1472
  %1478 = phi i32 [ %1474, %1472 ], [ %1476, %1475 ]
  store i32 %1478, ptr %102, align 4, !tbaa !22
  %1479 = load i32, ptr %104, align 4, !tbaa !22
  %1480 = load i32, ptr %103, align 4, !tbaa !22
  %1481 = add nsw i32 %1479, %1480
  %1482 = icmp slt i32 %1481, 0
  br i1 %1482, label %1483, label %1488

1483:                                             ; preds = %1477
  %1484 = load i32, ptr %104, align 4, !tbaa !22
  %1485 = load i32, ptr %103, align 4, !tbaa !22
  %1486 = add nsw i32 %1484, %1485
  %1487 = sub nsw i32 0, %1486
  br label %1492

1488:                                             ; preds = %1477
  %1489 = load i32, ptr %104, align 4, !tbaa !22
  %1490 = load i32, ptr %103, align 4, !tbaa !22
  %1491 = add nsw i32 %1489, %1490
  br label %1492

1492:                                             ; preds = %1488, %1483
  %1493 = phi i32 [ %1487, %1483 ], [ %1491, %1488 ]
  store i32 %1493, ptr %103, align 4, !tbaa !22
  %1494 = load i32, ptr %101, align 4, !tbaa !22
  %1495 = load i32, ptr %102, align 4, !tbaa !22
  %1496 = icmp sle i32 %1494, %1495
  br i1 %1496, label %1497, label %1503

1497:                                             ; preds = %1492
  %1498 = load i32, ptr %101, align 4, !tbaa !22
  %1499 = load i32, ptr %103, align 4, !tbaa !22
  %1500 = icmp sle i32 %1498, %1499
  br i1 %1500, label %1501, label %1503

1501:                                             ; preds = %1497
  %1502 = load i32, ptr %98, align 4, !tbaa !22
  br label %1513

1503:                                             ; preds = %1497, %1492
  %1504 = load i32, ptr %102, align 4, !tbaa !22
  %1505 = load i32, ptr %103, align 4, !tbaa !22
  %1506 = icmp sle i32 %1504, %1505
  br i1 %1506, label %1507, label %1509

1507:                                             ; preds = %1503
  %1508 = load i32, ptr %99, align 4, !tbaa !22
  br label %1511

1509:                                             ; preds = %1503
  %1510 = load i32, ptr %100, align 4, !tbaa !22
  br label %1511

1511:                                             ; preds = %1509, %1507
  %1512 = phi i32 [ %1508, %1507 ], [ %1510, %1509 ]
  br label %1513

1513:                                             ; preds = %1511, %1501
  %1514 = phi i32 [ %1502, %1501 ], [ %1512, %1511 ]
  store i32 %1514, ptr %104, align 4, !tbaa !22
  %1515 = load ptr, ptr %86, align 8, !tbaa !5
  %1516 = getelementptr inbounds i8, ptr %1515, i32 1
  store ptr %1516, ptr %86, align 8, !tbaa !5
  %1517 = load i8, ptr %1515, align 1, !tbaa !20
  %1518 = zext i8 %1517 to i32
  %1519 = load i32, ptr %104, align 4, !tbaa !22
  %1520 = sub nsw i32 %1518, %1519
  %1521 = and i32 %1520, 255
  %1522 = trunc i32 %1521 to i8
  %1523 = load ptr, ptr %87, align 8, !tbaa !5
  %1524 = getelementptr inbounds i8, ptr %1523, i32 1
  store ptr %1524, ptr %87, align 8, !tbaa !5
  store i8 %1522, ptr %1523, align 1, !tbaa !20
  %1525 = zext i8 %1522 to i32
  store i32 %1525, ptr %94, align 4, !tbaa !22
  %1526 = load i32, ptr %94, align 4, !tbaa !22
  %1527 = icmp slt i32 %1526, 128
  br i1 %1527, label %1528, label %1530

1528:                                             ; preds = %1513
  %1529 = load i32, ptr %94, align 4, !tbaa !22
  br label %1533

1530:                                             ; preds = %1513
  %1531 = load i32, ptr %94, align 4, !tbaa !22
  %1532 = sub nsw i32 256, %1531
  br label %1533

1533:                                             ; preds = %1530, %1528
  %1534 = phi i32 [ %1529, %1528 ], [ %1532, %1530 ]
  %1535 = load i32, ptr %91, align 4, !tbaa !22
  %1536 = add i32 %1535, %1534
  store i32 %1536, ptr %91, align 4, !tbaa !22
  %1537 = load i32, ptr %91, align 4, !tbaa !22
  %1538 = load i32, ptr %92, align 4, !tbaa !22
  %1539 = icmp ugt i32 %1537, %1538
  br i1 %1539, label %1540, label %1541

1540:                                             ; preds = %1533
  store i32 68, ptr %105, align 4
  br label %1542

1541:                                             ; preds = %1533
  store i32 0, ptr %105, align 4
  br label %1542

1542:                                             ; preds = %1541, %1540
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #2
  %1543 = load i32, ptr %105, align 4
  switch i32 %1543, label %1681 [
    i32 0, label %1544
    i32 68, label %1548
  ]

1544:                                             ; preds = %1542
  br label %1545

1545:                                             ; preds = %1544
  %1546 = load i32, ptr %93, align 4, !tbaa !22
  %1547 = add i32 %1546, 1
  store i32 %1547, ptr %93, align 4, !tbaa !22
  br label %1438, !llvm.loop !61

1548:                                             ; preds = %1542, %1438
  %1549 = load ptr, ptr %3, align 8, !tbaa !5
  %1550 = getelementptr inbounds %struct.png_struct_def, ptr %1549, i32 0, i32 102
  %1551 = load i8, ptr %1550, align 8, !tbaa !29
  %1552 = zext i8 %1551 to i32
  %1553 = icmp eq i32 %1552, 2
  br i1 %1553, label %1554, label %1629

1554:                                             ; preds = %1548
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #2
  %1555 = load i32, ptr %91, align 4, !tbaa !22
  %1556 = and i32 %1555, 65535
  store i32 %1556, ptr %108, align 4, !tbaa !22
  %1557 = load i32, ptr %91, align 4, !tbaa !22
  %1558 = lshr i32 %1557, 10
  %1559 = and i32 %1558, 4194240
  store i32 %1559, ptr %107, align 4, !tbaa !22
  store i32 0, ptr %106, align 4, !tbaa !22
  br label %1560

1560:                                             ; preds = %1598, %1554
  %1561 = load i32, ptr %106, align 4, !tbaa !22
  %1562 = load i32, ptr %12, align 4, !tbaa !22
  %1563 = icmp slt i32 %1561, %1562
  br i1 %1563, label %1564, label %1601

1564:                                             ; preds = %1560
  %1565 = load ptr, ptr %3, align 8, !tbaa !5
  %1566 = getelementptr inbounds %struct.png_struct_def, ptr %1565, i32 0, i32 104
  %1567 = load ptr, ptr %1566, align 8, !tbaa !30
  %1568 = load i32, ptr %106, align 4, !tbaa !22
  %1569 = sext i32 %1568 to i64
  %1570 = getelementptr inbounds i8, ptr %1567, i64 %1569
  %1571 = load i8, ptr %1570, align 1, !tbaa !20
  %1572 = zext i8 %1571 to i32
  %1573 = icmp eq i32 %1572, 4
  br i1 %1573, label %1574, label %1597

1574:                                             ; preds = %1564
  %1575 = load i32, ptr %108, align 4, !tbaa !22
  %1576 = load ptr, ptr %3, align 8, !tbaa !5
  %1577 = getelementptr inbounds %struct.png_struct_def, ptr %1576, i32 0, i32 105
  %1578 = load ptr, ptr %1577, align 8, !tbaa !31
  %1579 = load i32, ptr %106, align 4, !tbaa !22
  %1580 = sext i32 %1579 to i64
  %1581 = getelementptr inbounds i16, ptr %1578, i64 %1580
  %1582 = load i16, ptr %1581, align 2, !tbaa !32
  %1583 = zext i16 %1582 to i32
  %1584 = mul i32 %1575, %1583
  %1585 = lshr i32 %1584, 8
  store i32 %1585, ptr %108, align 4, !tbaa !22
  %1586 = load i32, ptr %107, align 4, !tbaa !22
  %1587 = load ptr, ptr %3, align 8, !tbaa !5
  %1588 = getelementptr inbounds %struct.png_struct_def, ptr %1587, i32 0, i32 105
  %1589 = load ptr, ptr %1588, align 8, !tbaa !31
  %1590 = load i32, ptr %106, align 4, !tbaa !22
  %1591 = sext i32 %1590 to i64
  %1592 = getelementptr inbounds i16, ptr %1589, i64 %1591
  %1593 = load i16, ptr %1592, align 2, !tbaa !32
  %1594 = zext i16 %1593 to i32
  %1595 = mul i32 %1586, %1594
  %1596 = lshr i32 %1595, 8
  store i32 %1596, ptr %107, align 4, !tbaa !22
  br label %1597

1597:                                             ; preds = %1574, %1564
  br label %1598

1598:                                             ; preds = %1597
  %1599 = load i32, ptr %106, align 4, !tbaa !22
  %1600 = add nsw i32 %1599, 1
  store i32 %1600, ptr %106, align 4, !tbaa !22
  br label %1560, !llvm.loop !62

1601:                                             ; preds = %1560
  %1602 = load i32, ptr %108, align 4, !tbaa !22
  %1603 = load ptr, ptr %3, align 8, !tbaa !5
  %1604 = getelementptr inbounds %struct.png_struct_def, ptr %1603, i32 0, i32 107
  %1605 = load ptr, ptr %1604, align 8, !tbaa !34
  %1606 = getelementptr inbounds i16, ptr %1605, i64 4
  %1607 = load i16, ptr %1606, align 2, !tbaa !32
  %1608 = zext i16 %1607 to i32
  %1609 = mul i32 %1602, %1608
  %1610 = lshr i32 %1609, 3
  store i32 %1610, ptr %108, align 4, !tbaa !22
  %1611 = load i32, ptr %107, align 4, !tbaa !22
  %1612 = load ptr, ptr %3, align 8, !tbaa !5
  %1613 = getelementptr inbounds %struct.png_struct_def, ptr %1612, i32 0, i32 107
  %1614 = load ptr, ptr %1613, align 8, !tbaa !34
  %1615 = getelementptr inbounds i16, ptr %1614, i64 4
  %1616 = load i16, ptr %1615, align 2, !tbaa !32
  %1617 = zext i16 %1616 to i32
  %1618 = mul i32 %1611, %1617
  %1619 = lshr i32 %1618, 3
  store i32 %1619, ptr %107, align 4, !tbaa !22
  %1620 = load i32, ptr %107, align 4, !tbaa !22
  %1621 = icmp ugt i32 %1620, 4194240
  br i1 %1621, label %1622, label %1623

1622:                                             ; preds = %1601
  store i32 2147483647, ptr %91, align 4, !tbaa !22
  br label %1628

1623:                                             ; preds = %1601
  %1624 = load i32, ptr %107, align 4, !tbaa !22
  %1625 = shl i32 %1624, 10
  %1626 = load i32, ptr %108, align 4, !tbaa !22
  %1627 = add i32 %1625, %1626
  store i32 %1627, ptr %91, align 4, !tbaa !22
  br label %1628

1628:                                             ; preds = %1623, %1622
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #2
  br label %1629

1629:                                             ; preds = %1628, %1548
  %1630 = load i32, ptr %91, align 4, !tbaa !22
  %1631 = load i32, ptr %8, align 4, !tbaa !22
  %1632 = icmp ult i32 %1630, %1631
  br i1 %1632, label %1633, label %1637

1633:                                             ; preds = %1629
  %1634 = load ptr, ptr %3, align 8, !tbaa !5
  %1635 = getelementptr inbounds %struct.png_struct_def, ptr %1634, i32 0, i32 37
  %1636 = load ptr, ptr %1635, align 8, !tbaa !56
  store ptr %1636, ptr %5, align 8, !tbaa !5
  br label %1637

1637:                                             ; preds = %1633, %1629
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #2
  br label %1638

1638:                                             ; preds = %1637, %1304
  br label %1639

1639:                                             ; preds = %1638, %1300
  %1640 = load ptr, ptr %3, align 8, !tbaa !5
  %1641 = load ptr, ptr %5, align 8, !tbaa !5
  call void @png_write_filtered_row(ptr noundef %1640, ptr noundef %1641)
  %1642 = load ptr, ptr %3, align 8, !tbaa !5
  %1643 = getelementptr inbounds %struct.png_struct_def, ptr %1642, i32 0, i32 103
  %1644 = load i8, ptr %1643, align 1, !tbaa !23
  %1645 = zext i8 %1644 to i32
  %1646 = icmp sgt i32 %1645, 0
  br i1 %1646, label %1647, label %1680

1647:                                             ; preds = %1639
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #2
  store i32 1, ptr %109, align 4, !tbaa !22
  br label %1648

1648:                                             ; preds = %1667, %1647
  %1649 = load i32, ptr %109, align 4, !tbaa !22
  %1650 = load i32, ptr %12, align 4, !tbaa !22
  %1651 = icmp slt i32 %1649, %1650
  br i1 %1651, label %1652, label %1670

1652:                                             ; preds = %1648
  %1653 = load ptr, ptr %3, align 8, !tbaa !5
  %1654 = getelementptr inbounds %struct.png_struct_def, ptr %1653, i32 0, i32 104
  %1655 = load ptr, ptr %1654, align 8, !tbaa !30
  %1656 = load i32, ptr %109, align 4, !tbaa !22
  %1657 = sub nsw i32 %1656, 1
  %1658 = sext i32 %1657 to i64
  %1659 = getelementptr inbounds i8, ptr %1655, i64 %1658
  %1660 = load i8, ptr %1659, align 1, !tbaa !20
  %1661 = load ptr, ptr %3, align 8, !tbaa !5
  %1662 = getelementptr inbounds %struct.png_struct_def, ptr %1661, i32 0, i32 104
  %1663 = load ptr, ptr %1662, align 8, !tbaa !30
  %1664 = load i32, ptr %109, align 4, !tbaa !22
  %1665 = sext i32 %1664 to i64
  %1666 = getelementptr inbounds i8, ptr %1663, i64 %1665
  store i8 %1660, ptr %1666, align 1, !tbaa !20
  br label %1667

1667:                                             ; preds = %1652
  %1668 = load i32, ptr %109, align 4, !tbaa !22
  %1669 = add nsw i32 %1668, 1
  store i32 %1669, ptr %109, align 4, !tbaa !22
  br label %1648, !llvm.loop !63

1670:                                             ; preds = %1648
  %1671 = load ptr, ptr %5, align 8, !tbaa !5
  %1672 = getelementptr inbounds i8, ptr %1671, i64 0
  %1673 = load i8, ptr %1672, align 1, !tbaa !20
  %1674 = load ptr, ptr %3, align 8, !tbaa !5
  %1675 = getelementptr inbounds %struct.png_struct_def, ptr %1674, i32 0, i32 104
  %1676 = load ptr, ptr %1675, align 8, !tbaa !30
  %1677 = load i32, ptr %109, align 4, !tbaa !22
  %1678 = sext i32 %1677 to i64
  %1679 = getelementptr inbounds i8, ptr %1676, i64 %1678
  store i8 %1673, ptr %1679, align 1, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #2
  br label %1680

1680:                                             ; preds = %1670, %1639
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #2
  ret void

1681:                                             ; preds = %1542
  unreachable
}

; Function Attrs: nounwind uwtable
declare dso_local void @png_write_filtered_row(ptr noundef, ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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, !7, i64 589}
!10 = !{!"png_struct_def", !7, i64 0, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !7, i64 280, !7, i64 281, !11, i64 284, !11, i64 288, !11, i64 292, !12, i64 296, !6, i64 408, !13, i64 416, !11, i64 424, !11, i64 428, !11, i64 432, !11, i64 436, !11, i64 440, !11, i64 444, !11, i64 448, !11, i64 452, !11, i64 456, !13, i64 464, !13, i64 472, !11, i64 480, !11, i64 484, !6, i64 488, !6, i64 496, !6, i64 504, !6, i64 512, !6, i64 520, !6, i64 528, !14, i64 536, !11, i64 560, !11, i64 564, !6, i64 568, !15, i64 576, !15, i64 578, !7, i64 580, !7, i64 585, !7, i64 586, !7, i64 587, !7, i64 588, !7, i64 589, !7, i64 590, !7, i64 591, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !15, i64 598, !7, i64 600, !16, i64 604, !17, i64 608, !17, i64 618, !6, i64 632, !11, i64 640, !11, i64 644, !11, i64 648, !16, i64 652, !16, i64 656, !6, i64 664, !6, i64 672, !6, i64 680, !6, i64 688, !6, i64 696, !6, i64 704, !18, i64 712, !18, i64 717, !6, i64 728, !17, i64 736, !6, i64 752, !6, i64 760, !6, i64 768, !6, i64 776, !6, i64 784, !6, i64 792, !6, i64 800, !6, i64 808, !6, i64 816, !11, i64 824, !11, i64 828, !13, i64 832, !13, i64 840, !13, i64 848, !13, i64 856, !11, i64 864, !11, i64 868, !13, i64 872, !13, i64 880, !6, i64 888, !6, i64 896, !6, i64 904, !6, i64 912, !6, i64 920, !7, i64 928, !7, i64 929, !6, i64 936, !6, i64 944, !6, i64 952, !6, i64 960, !6, i64 968, !6, i64 976, !11, i64 984, !6, i64 992, !6, i64 1000, !11, i64 1008, !6, i64 1016, !7, i64 1024, !15, i64 1026, !15, i64 1028, !15, i64 1030, !11, i64 1032, !11, i64 1036, !7, i64 1040, !6, i64 1048, !6, i64 1056, !6, i64 1064, !6, i64 1072, !6, i64 1080, !6, i64 1088, !6, i64 1096, !7, i64 1104, !11, i64 1108, !11, i64 1112, !11, i64 1116, !19, i64 1120, !11, i64 1152, !11, i64 1156, !6, i64 1160, !11, i64 1168}
!11 = !{!"int", !7, i64 0}
!12 = !{!"z_stream_s", !6, i64 0, !11, i64 8, !13, i64 16, !6, i64 24, !11, i64 32, !13, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !11, i64 88, !13, i64 96, !13, i64 104}
!13 = !{!"long", !7, i64 0}
!14 = !{!"png_row_info_struct", !11, i64 0, !13, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!15 = !{!"short", !7, i64 0}
!16 = !{!"float", !7, i64 0}
!17 = !{!"png_color_16_struct", !7, i64 0, !15, i64 2, !15, i64 4, !15, i64 6, !15, i64 8}
!18 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!19 = !{!"png_unknown_chunk_t", !7, i64 0, !6, i64 8, !13, i64 16, !7, i64 24}
!20 = !{!7, !7, i64 0}
!21 = !{!14, !13, i64 8}
!22 = !{!11, !11, i64 0}
!23 = !{!10, !7, i64 929}
!24 = !{!14, !7, i64 19}
!25 = !{!10, !6, i64 488}
!26 = !{!10, !6, i64 496}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!10, !7, i64 928}
!30 = !{!10, !6, i64 936}
!31 = !{!10, !6, i64 944}
!32 = !{!15, !15, i64 0}
!33 = distinct !{!33, !28}
!34 = !{!10, !6, i64 960}
!35 = !{!10, !6, i64 504}
!36 = distinct !{!36, !28}
!37 = distinct !{!37, !28}
!38 = !{!10, !6, i64 952}
!39 = distinct !{!39, !28}
!40 = !{!10, !6, i64 968}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28}
!43 = distinct !{!43, !28}
!44 = !{!10, !6, i64 512}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !28}
!49 = !{!10, !6, i64 520}
!50 = distinct !{!50, !28}
!51 = distinct !{!51, !28}
!52 = distinct !{!52, !28}
!53 = distinct !{!53, !28}
!54 = distinct !{!54, !28}
!55 = distinct !{!55, !28}
!56 = !{!10, !6, i64 528}
!57 = distinct !{!57, !28}
!58 = distinct !{!58, !28}
!59 = distinct !{!59, !28}
!60 = distinct !{!60, !28}
!61 = distinct !{!61, !28}
!62 = distinct !{!62, !28}
!63 = distinct !{!63, !28}


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

; Function Attrs: nounwind uwtable
define dso_local void @png_write_find_filter(ptr noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 589
  %4 = load i8, ptr %3, align 1, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 8
  %6 = load i64, ptr %5, align 8, !tbaa !19
  %7 = trunc i64 %6 to i32
  %8 = getelementptr inbounds i8, ptr %0, i64 929
  %9 = load i8, ptr %8, align 1, !tbaa !20
  %10 = getelementptr inbounds i8, ptr %1, i64 19
  %11 = load i8, ptr %10, align 1, !tbaa !21
  %12 = zext i8 %11 to i32
  %13 = add nuw nsw i32 %12, 7
  %14 = lshr i32 %13, 3
  %15 = getelementptr inbounds i8, ptr %0, i64 488
  %16 = load ptr, ptr %15, align 8, !tbaa !22
  %17 = ptrtoint ptr %16 to i64
  %18 = getelementptr inbounds i8, ptr %0, i64 496
  %19 = load ptr, ptr %18, align 8, !tbaa !23
  %20 = ptrtoint ptr %19 to i64
  %21 = zext i8 %4 to i32
  %22 = and i32 %21, 8
  %23 = icmp ne i32 %22, 0
  %24 = icmp ne i8 %4, 8
  %or.cond = and i1 %24, %23
  br i1 %or.cond, label %.preheader697, label %109

.preheader697:                                    ; preds = %2
  %.not940 = icmp eq i32 %7, 0
  br i1 %.not940, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader697
  %25 = and i64 %6, 4294967295
  %min.iters.check = icmp ult i64 %25, 8
  br i1 %min.iters.check, label %.lr.ph.preheader1585, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.mod.vf = and i64 %6, 7
  %n.vec = sub nsw i64 %25, %n.mod.vf
  %ind.end = getelementptr i8, ptr %19, i64 %n.vec
  %ind.end1114 = trunc i64 %n.vec to i32
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %36, %vector.body ]
  %vec.phi1116 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %37, %vector.body ]
  %next.gep = getelementptr i8, ptr %19, i64 %index
  %26 = getelementptr inbounds i8, ptr %next.gep, i64 1
  %27 = getelementptr inbounds i8, ptr %next.gep, i64 5
  %wide.load = load <4 x i8>, ptr %26, align 1, !tbaa !24
  %wide.load1118 = load <4 x i8>, ptr %27, align 1, !tbaa !24
  %28 = zext <4 x i8> %wide.load to <4 x i32>
  %29 = zext <4 x i8> %wide.load1118 to <4 x i32>
  %30 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %28
  %31 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %29
  %32 = icmp slt <4 x i8> %wide.load, zeroinitializer
  %33 = icmp slt <4 x i8> %wide.load1118, zeroinitializer
  %34 = select <4 x i1> %32, <4 x i32> %30, <4 x i32> %28
  %35 = select <4 x i1> %33, <4 x i32> %31, <4 x i32> %29
  %36 = add <4 x i32> %34, %vec.phi
  %37 = add <4 x i32> %35, %vec.phi1116
  %index.next = add nuw i64 %index, 8
  %38 = icmp eq i64 %index.next, %n.vec
  br i1 %38, label %middle.block, label %vector.body, !llvm.loop !25

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %37, %36
  %39 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %n.mod.vf, 0
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader1585

.lr.ph.preheader1585:                             ; preds = %middle.block, %.lr.ph.preheader
  %.pn688700.ph = phi ptr [ %19, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.0489699.ph = phi i32 [ 0, %.lr.ph.preheader ], [ %39, %middle.block ]
  %.0492698.ph = phi i32 [ 0, %.lr.ph.preheader ], [ %ind.end1114, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader1585, %.lr.ph
  %.pn688700 = phi ptr [ %.0488, %.lr.ph ], [ %.pn688700.ph, %.lr.ph.preheader1585 ]
  %.0489699 = phi i32 [ %45, %.lr.ph ], [ %.0489699.ph, %.lr.ph.preheader1585 ]
  %.0492698 = phi i32 [ %46, %.lr.ph ], [ %.0492698.ph, %.lr.ph.preheader1585 ]
  %.0488 = getelementptr inbounds i8, ptr %.pn688700, i64 1
  %40 = load i8, ptr %.0488, align 1, !tbaa !24
  %41 = zext i8 %40 to i32
  %42 = sub nuw nsw i32 256, %41
  %43 = icmp slt i8 %40, 0
  %44 = select i1 %43, i32 %42, i32 %41
  %45 = add i32 %44, %.0489699
  %46 = add nuw i32 %.0492698, 1
  %exitcond.not = icmp eq i32 %46, %7
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !29

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %.preheader697
  %.0489.lcssa = phi i32 [ 0, %.preheader697 ], [ %39, %middle.block ], [ %45, %.lr.ph ]
  %47 = getelementptr inbounds i8, ptr %0, i64 928
  %48 = load i8, ptr %47, align 8, !tbaa !30
  %49 = icmp eq i8 %48, 2
  br i1 %49, label %50, label %109

50:                                               ; preds = %._crit_edge
  %51 = and i32 %.0489.lcssa, 65535
  %52 = lshr i32 %.0489.lcssa, 10
  %53 = and i32 %52, 4194240
  %.not941 = icmp eq i8 %9, 0
  br i1 %.not941, label %._crit_edge706, label %.lr.ph705

.lr.ph705:                                        ; preds = %50
  %54 = getelementptr inbounds i8, ptr %0, i64 936
  %55 = load ptr, ptr %54, align 8, !tbaa !31
  %56 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count = zext i8 %9 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %57 = icmp eq i8 %9, 1
  br i1 %57, label %._crit_edge706.loopexit.unr-lcssa, label %.lr.ph705.new

.lr.ph705.new:                                    ; preds = %.lr.ph705
  %unroll_iter = and i64 %wide.trip.count, 254
  br label %58

58:                                               ; preds = %84, %.lr.ph705.new
  %indvars.iv = phi i64 [ 0, %.lr.ph705.new ], [ %indvars.iv.next.1, %84 ]
  %.0515703 = phi i32 [ %53, %.lr.ph705.new ], [ %.1516.1, %84 ]
  %.0517702 = phi i32 [ %51, %.lr.ph705.new ], [ %.1518.1, %84 ]
  %niter = phi i64 [ 0, %.lr.ph705.new ], [ %niter.next.1, %84 ]
  %59 = getelementptr inbounds i8, ptr %55, i64 %indvars.iv
  %60 = load i8, ptr %59, align 1, !tbaa !24
  %61 = icmp eq i8 %60, 0
  br i1 %61, label %62, label %71

62:                                               ; preds = %58
  %63 = load ptr, ptr %56, align 8, !tbaa !32
  %64 = getelementptr inbounds i16, ptr %63, i64 %indvars.iv
  %65 = load i16, ptr %64, align 2, !tbaa !33
  %66 = zext i16 %65 to i32
  %67 = mul i32 %.0517702, %66
  %68 = lshr i32 %67, 8
  %69 = mul i32 %.0515703, %66
  %70 = lshr i32 %69, 8
  br label %71

71:                                               ; preds = %58, %62
  %.1518 = phi i32 [ %68, %62 ], [ %.0517702, %58 ]
  %.1516 = phi i32 [ %70, %62 ], [ %.0515703, %58 ]
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %72 = getelementptr inbounds i8, ptr %55, i64 %indvars.iv.next
  %73 = load i8, ptr %72, align 1, !tbaa !24
  %74 = icmp eq i8 %73, 0
  br i1 %74, label %75, label %84

75:                                               ; preds = %71
  %76 = load ptr, ptr %56, align 8, !tbaa !32
  %77 = getelementptr inbounds i16, ptr %76, i64 %indvars.iv.next
  %78 = load i16, ptr %77, align 2, !tbaa !33
  %79 = zext i16 %78 to i32
  %80 = mul i32 %.1518, %79
  %81 = lshr i32 %80, 8
  %82 = mul i32 %.1516, %79
  %83 = lshr i32 %82, 8
  br label %84

84:                                               ; preds = %75, %71
  %.1518.1 = phi i32 [ %81, %75 ], [ %.1518, %71 ]
  %.1516.1 = phi i32 [ %83, %75 ], [ %.1516, %71 ]
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge706.loopexit.unr-lcssa, label %58, !llvm.loop !34

._crit_edge706.loopexit.unr-lcssa:                ; preds = %84, %.lr.ph705
  %.1518.lcssa.ph = phi i32 [ poison, %.lr.ph705 ], [ %.1518.1, %84 ]
  %.1516.lcssa.ph = phi i32 [ poison, %.lr.ph705 ], [ %.1516.1, %84 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph705 ], [ %indvars.iv.next.1, %84 ]
  %.0515703.unr = phi i32 [ %53, %.lr.ph705 ], [ %.1516.1, %84 ]
  %.0517702.unr = phi i32 [ %51, %.lr.ph705 ], [ %.1518.1, %84 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge706, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge706.loopexit.unr-lcssa
  %85 = getelementptr inbounds i8, ptr %55, i64 %indvars.iv.unr
  %86 = load i8, ptr %85, align 1, !tbaa !24
  %87 = icmp eq i8 %86, 0
  br i1 %87, label %88, label %._crit_edge706

88:                                               ; preds = %.epil.preheader
  %89 = load ptr, ptr %56, align 8, !tbaa !32
  %90 = getelementptr inbounds i16, ptr %89, i64 %indvars.iv.unr
  %91 = load i16, ptr %90, align 2, !tbaa !33
  %92 = zext i16 %91 to i32
  %93 = mul i32 %.0517702.unr, %92
  %94 = lshr i32 %93, 8
  %95 = mul i32 %.0515703.unr, %92
  %96 = lshr i32 %95, 8
  br label %._crit_edge706

._crit_edge706:                                   ; preds = %._crit_edge706.loopexit.unr-lcssa, %88, %.epil.preheader, %50
  %.0517.lcssa = phi i32 [ %51, %50 ], [ %.1518.lcssa.ph, %._crit_edge706.loopexit.unr-lcssa ], [ %94, %88 ], [ %.0517702.unr, %.epil.preheader ]
  %.0515.lcssa = phi i32 [ %53, %50 ], [ %.1516.lcssa.ph, %._crit_edge706.loopexit.unr-lcssa ], [ %96, %88 ], [ %.0515703.unr, %.epil.preheader ]
  %97 = getelementptr inbounds i8, ptr %0, i64 960
  %98 = load ptr, ptr %97, align 8, !tbaa !35
  %99 = load i16, ptr %98, align 2, !tbaa !33
  %100 = zext i16 %99 to i32
  %101 = mul i32 %.0515.lcssa, %100
  %102 = icmp ugt i32 %101, 33553927
  br i1 %102, label %109, label %103

103:                                              ; preds = %._crit_edge706
  %104 = mul i32 %.0517.lcssa, %100
  %105 = lshr i32 %104, 3
  %106 = shl nuw i32 %101, 7
  %107 = and i32 %106, -1024
  %108 = add i32 %107, %105
  br label %109

109:                                              ; preds = %._crit_edge, %._crit_edge706, %103, %2
  %.0481 = phi i32 [ 2147483647, %2 ], [ %.0489.lcssa, %._crit_edge ], [ %108, %103 ], [ 2147483647, %._crit_edge706 ]
  %110 = icmp eq i8 %4, 16
  br i1 %110, label %111, label %189

111:                                              ; preds = %109
  %112 = getelementptr i8, ptr %19, i64 1
  %113 = getelementptr inbounds i8, ptr %0, i64 504
  %114 = load ptr, ptr %113, align 8, !tbaa !36
  %.0578746 = getelementptr i8, ptr %114, i64 1
  %.not945 = icmp eq i8 %11, 0
  br i1 %.not945, label %.preheader695, label %.lr.ph751.preheader

.lr.ph751.preheader:                              ; preds = %111
  %115 = ptrtoint ptr %114 to i64
  %116 = add nsw i32 %14, -1
  %117 = zext i32 %116 to i64
  %118 = add nuw nsw i64 %117, 1
  %min.iters.check1149 = icmp ult i32 %116, 15
  %119 = sub i64 %115, %20
  %diff.check1146 = icmp ult i64 %119, 16
  %or.cond1549 = select i1 %min.iters.check1149, i1 true, i1 %diff.check1146
  br i1 %or.cond1549, label %.lr.ph751.preheader1575, label %vector.ph1150

.lr.ph751.preheader1575:                          ; preds = %middle.block1147, %.lr.ph751.preheader
  %.0578749.ph = phi ptr [ %.0578746, %.lr.ph751.preheader ], [ %ind.end1153, %middle.block1147 ]
  %.0520748.ph = phi ptr [ %112, %.lr.ph751.preheader ], [ %ind.end1155, %middle.block1147 ]
  %.0618747.ph = phi i32 [ 0, %.lr.ph751.preheader ], [ %ind.end1157, %middle.block1147 ]
  %120 = sub i32 %14, %.0618747.ph
  %xtraiter1607 = and i32 %120, 7
  %lcmp.mod1608.not = icmp eq i32 %xtraiter1607, 0
  br i1 %lcmp.mod1608.not, label %.lr.ph751.prol.loopexit, label %.lr.ph751.prol

.lr.ph751.prol:                                   ; preds = %.lr.ph751.preheader1575, %.lr.ph751.prol
  %.0578749.prol = phi ptr [ %.0578.prol, %.lr.ph751.prol ], [ %.0578749.ph, %.lr.ph751.preheader1575 ]
  %.0520748.prol = phi ptr [ %123, %.lr.ph751.prol ], [ %.0520748.ph, %.lr.ph751.preheader1575 ]
  %.0618747.prol = phi i32 [ %122, %.lr.ph751.prol ], [ %.0618747.ph, %.lr.ph751.preheader1575 ]
  %prol.iter = phi i32 [ %prol.iter.next, %.lr.ph751.prol ], [ 0, %.lr.ph751.preheader1575 ]
  %121 = load i8, ptr %.0520748.prol, align 1, !tbaa !24
  store i8 %121, ptr %.0578749.prol, align 1, !tbaa !24
  %122 = add nuw nsw i32 %.0618747.prol, 1
  %123 = getelementptr inbounds i8, ptr %.0520748.prol, i64 1
  %.0578.prol = getelementptr inbounds i8, ptr %.0578749.prol, i64 1
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter1607
  br i1 %prol.iter.cmp.not, label %.lr.ph751.prol.loopexit, label %.lr.ph751.prol, !llvm.loop !37

.lr.ph751.prol.loopexit:                          ; preds = %.lr.ph751.prol, %.lr.ph751.preheader1575
  %.lcssa1577.unr = phi ptr [ poison, %.lr.ph751.preheader1575 ], [ %123, %.lr.ph751.prol ]
  %.0578.lcssa1576.unr = phi ptr [ poison, %.lr.ph751.preheader1575 ], [ %.0578.prol, %.lr.ph751.prol ]
  %.0578749.unr = phi ptr [ %.0578749.ph, %.lr.ph751.preheader1575 ], [ %.0578.prol, %.lr.ph751.prol ]
  %.0520748.unr = phi ptr [ %.0520748.ph, %.lr.ph751.preheader1575 ], [ %123, %.lr.ph751.prol ]
  %.0618747.unr = phi i32 [ %.0618747.ph, %.lr.ph751.preheader1575 ], [ %122, %.lr.ph751.prol ]
  %124 = sub i32 %.0618747.ph, %14
  %125 = icmp ugt i32 %124, -8
  br i1 %125, label %.preheader695, label %.lr.ph751

vector.ph1150:                                    ; preds = %.lr.ph751.preheader
  %n.vec1152 = and i64 %118, 8589934576
  %ind.end1153 = getelementptr i8, ptr %.0578746, i64 %n.vec1152
  %ind.end1155 = getelementptr i8, ptr %112, i64 %n.vec1152
  %ind.end1157 = trunc i64 %n.vec1152 to i32
  br label %vector.body1159

vector.body1159:                                  ; preds = %vector.body1159, %vector.ph1150
  %index1160 = phi i64 [ 0, %vector.ph1150 ], [ %index.next1164, %vector.body1159 ]
  %next.gep1161 = getelementptr i8, ptr %.0578746, i64 %index1160
  %next.gep1162 = getelementptr i8, ptr %112, i64 %index1160
  %wide.load1163 = load <16 x i8>, ptr %next.gep1162, align 1, !tbaa !24
  store <16 x i8> %wide.load1163, ptr %next.gep1161, align 1, !tbaa !24
  %index.next1164 = add nuw i64 %index1160, 16
  %126 = icmp eq i64 %index.next1164, %n.vec1152
  br i1 %126, label %middle.block1147, label %vector.body1159, !llvm.loop !39

middle.block1147:                                 ; preds = %vector.body1159
  %cmp.n1165 = icmp eq i64 %118, %n.vec1152
  br i1 %cmp.n1165, label %.preheader695, label %.lr.ph751.preheader1575

.preheader695:                                    ; preds = %.lr.ph751.prol.loopexit, %.lr.ph751, %middle.block1147, %111
  %.0618.lcssa = phi i32 [ 0, %111 ], [ %14, %middle.block1147 ], [ %14, %.lr.ph751 ], [ %14, %.lr.ph751.prol.loopexit ]
  %.0520.lcssa = phi ptr [ %112, %111 ], [ %ind.end1155, %middle.block1147 ], [ %.lcssa1577.unr, %.lr.ph751.prol.loopexit ], [ %167, %.lr.ph751 ]
  %.0578.lcssa = phi ptr [ %.0578746, %111 ], [ %ind.end1153, %middle.block1147 ], [ %.0578.lcssa1576.unr, %.lr.ph751.prol.loopexit ], [ %.0578.7, %.lr.ph751 ]
  %.0578.lcssa1167 = ptrtoint ptr %.0578.lcssa to i64
  %.0520.lcssa1169 = ptrtoint ptr %.0520.lcssa to i64
  %127 = icmp ult i32 %.0618.lcssa, %7
  br i1 %127, label %iter.check, label %.sink.split

iter.check:                                       ; preds = %.preheader695
  %128 = xor i32 %.0618.lcssa, -1
  %129 = add i32 %128, %7
  %130 = zext i32 %129 to i64
  %131 = add nuw nsw i64 %130, 1
  %min.iters.check1173 = icmp ult i32 %129, 7
  br i1 %min.iters.check1173, label %.lr.ph759.preheader, label %vector.memcheck1166

vector.memcheck1166:                              ; preds = %iter.check
  %132 = sub i64 %20, %.0578.lcssa1167
  %diff.check1168 = icmp ugt i64 %132, -33
  %133 = sub i64 %.0578.lcssa1167, %.0520.lcssa1169
  %diff.check1170 = icmp ult i64 %133, 32
  %conflict.rdx = or i1 %diff.check1168, %diff.check1170
  br i1 %conflict.rdx, label %.lr.ph759.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %vector.memcheck1166
  %min.iters.check1175 = icmp ult i32 %129, 31
  br i1 %min.iters.check1175, label %vec.epilog.ph, label %vector.ph1176

vector.ph1176:                                    ; preds = %vector.main.loop.iter.check
  %n.vec1178 = and i64 %131, 8589934560
  br label %vector.body1179

vector.body1179:                                  ; preds = %vector.body1179, %vector.ph1176
  %index1180 = phi i64 [ 0, %vector.ph1176 ], [ %index.next1191, %vector.body1179 ]
  %next.gep1181 = getelementptr i8, ptr %.0520.lcssa, i64 %index1180
  %next.gep1183 = getelementptr i8, ptr %112, i64 %index1180
  %next.gep1185 = getelementptr i8, ptr %.0578.lcssa, i64 %index1180
  %134 = getelementptr i8, ptr %next.gep1181, i64 16
  %wide.load1187 = load <16 x i8>, ptr %next.gep1181, align 1, !tbaa !24
  %wide.load1188 = load <16 x i8>, ptr %134, align 1, !tbaa !24
  %135 = getelementptr i8, ptr %next.gep1183, i64 16
  %wide.load1189 = load <16 x i8>, ptr %next.gep1183, align 1, !tbaa !24
  %wide.load1190 = load <16 x i8>, ptr %135, align 1, !tbaa !24
  %136 = sub <16 x i8> %wide.load1187, %wide.load1189
  %137 = sub <16 x i8> %wide.load1188, %wide.load1190
  %138 = getelementptr i8, ptr %next.gep1185, i64 16
  store <16 x i8> %136, ptr %next.gep1185, align 1, !tbaa !24
  store <16 x i8> %137, ptr %138, align 1, !tbaa !24
  %index.next1191 = add nuw i64 %index1180, 32
  %139 = icmp eq i64 %index.next1191, %n.vec1178
  br i1 %139, label %middle.block1171, label %vector.body1179, !llvm.loop !40

middle.block1171:                                 ; preds = %vector.body1179
  %cmp.n1192 = icmp eq i64 %131, %n.vec1178
  br i1 %cmp.n1192, label %.sink.split, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block1171
  %.cast1205 = trunc i64 %n.vec1178 to i32
  %ind.end1206 = add i32 %.0618.lcssa, %.cast1205
  %ind.end1202 = getelementptr i8, ptr %.0578.lcssa, i64 %n.vec1178
  %ind.end1199 = getelementptr i8, ptr %112, i64 %n.vec1178
  %ind.end1196 = getelementptr i8, ptr %.0520.lcssa, i64 %n.vec1178
  %n.vec.remaining = and i64 %131, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph759.preheader, label %vec.epilog.ph

.lr.ph759.preheader:                              ; preds = %vec.epilog.middle.block, %vector.memcheck1166, %iter.check, %vec.epilog.iter.check
  %.1521758.ph = phi ptr [ %.0520.lcssa, %iter.check ], [ %.0520.lcssa, %vector.memcheck1166 ], [ %ind.end1196, %vec.epilog.iter.check ], [ %ind.end1195, %vec.epilog.middle.block ]
  %.0522757.ph = phi ptr [ %112, %iter.check ], [ %112, %vector.memcheck1166 ], [ %ind.end1199, %vec.epilog.iter.check ], [ %ind.end1198, %vec.epilog.middle.block ]
  %.1579756.ph = phi ptr [ %.0578.lcssa, %iter.check ], [ %.0578.lcssa, %vector.memcheck1166 ], [ %ind.end1202, %vec.epilog.iter.check ], [ %ind.end1201, %vec.epilog.middle.block ]
  %.1619755.ph = phi i32 [ %.0618.lcssa, %iter.check ], [ %.0618.lcssa, %vector.memcheck1166 ], [ %ind.end1206, %vec.epilog.iter.check ], [ %ind.end1204, %vec.epilog.middle.block ]
  %140 = sub i32 %7, %.1619755.ph
  %xtraiter1609 = and i32 %140, 3
  %lcmp.mod1610.not = icmp eq i32 %xtraiter1609, 0
  br i1 %lcmp.mod1610.not, label %.lr.ph759.prol.loopexit, label %.lr.ph759.prol

.lr.ph759.prol:                                   ; preds = %.lr.ph759.preheader, %.lr.ph759.prol
  %.1521758.prol = phi ptr [ %144, %.lr.ph759.prol ], [ %.1521758.ph, %.lr.ph759.preheader ]
  %.0522757.prol = phi ptr [ %145, %.lr.ph759.prol ], [ %.0522757.ph, %.lr.ph759.preheader ]
  %.1579756.prol = phi ptr [ %146, %.lr.ph759.prol ], [ %.1579756.ph, %.lr.ph759.preheader ]
  %.1619755.prol = phi i32 [ %143, %.lr.ph759.prol ], [ %.1619755.ph, %.lr.ph759.preheader ]
  %prol.iter1611 = phi i32 [ %prol.iter1611.next, %.lr.ph759.prol ], [ 0, %.lr.ph759.preheader ]
  %141 = load i8, ptr %.1521758.prol, align 1, !tbaa !24
  %142 = load i8, ptr %.0522757.prol, align 1, !tbaa !24
  %.narrow686.prol = sub i8 %141, %142
  store i8 %.narrow686.prol, ptr %.1579756.prol, align 1, !tbaa !24
  %143 = add nuw i32 %.1619755.prol, 1
  %144 = getelementptr inbounds i8, ptr %.1521758.prol, i64 1
  %145 = getelementptr inbounds i8, ptr %.0522757.prol, i64 1
  %146 = getelementptr inbounds i8, ptr %.1579756.prol, i64 1
  %prol.iter1611.next = add i32 %prol.iter1611, 1
  %prol.iter1611.cmp.not = icmp eq i32 %prol.iter1611.next, %xtraiter1609
  br i1 %prol.iter1611.cmp.not, label %.lr.ph759.prol.loopexit, label %.lr.ph759.prol, !llvm.loop !41

.lr.ph759.prol.loopexit:                          ; preds = %.lr.ph759.prol, %.lr.ph759.preheader
  %.1521758.unr = phi ptr [ %.1521758.ph, %.lr.ph759.preheader ], [ %144, %.lr.ph759.prol ]
  %.0522757.unr = phi ptr [ %.0522757.ph, %.lr.ph759.preheader ], [ %145, %.lr.ph759.prol ]
  %.1579756.unr = phi ptr [ %.1579756.ph, %.lr.ph759.preheader ], [ %146, %.lr.ph759.prol ]
  %.1619755.unr = phi i32 [ %.1619755.ph, %.lr.ph759.preheader ], [ %143, %.lr.ph759.prol ]
  %147 = sub i32 %.1619755.ph, %7
  %148 = icmp ugt i32 %147, -4
  br i1 %148, label %.sink.split, label %.lr.ph759

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec1178, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec1194 = and i64 %131, 8589934584
  %ind.end1195 = getelementptr i8, ptr %.0520.lcssa, i64 %n.vec1194
  %ind.end1198 = getelementptr i8, ptr %112, i64 %n.vec1194
  %ind.end1201 = getelementptr i8, ptr %.0578.lcssa, i64 %n.vec1194
  %.cast = trunc i64 %n.vec1194 to i32
  %ind.end1204 = add i32 %.0618.lcssa, %.cast
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index1208 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next1214, %vec.epilog.vector.body ]
  %next.gep1209 = getelementptr i8, ptr %.0520.lcssa, i64 %index1208
  %next.gep1210 = getelementptr i8, ptr %112, i64 %index1208
  %next.gep1211 = getelementptr i8, ptr %.0578.lcssa, i64 %index1208
  %wide.load1212 = load <8 x i8>, ptr %next.gep1209, align 1, !tbaa !24
  %wide.load1213 = load <8 x i8>, ptr %next.gep1210, align 1, !tbaa !24
  %149 = sub <8 x i8> %wide.load1212, %wide.load1213
  store <8 x i8> %149, ptr %next.gep1211, align 1, !tbaa !24
  %index.next1214 = add nuw i64 %index1208, 8
  %150 = icmp eq i64 %index.next1214, %n.vec1194
  br i1 %150, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !42

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n1215 = icmp eq i64 %131, %n.vec1194
  br i1 %cmp.n1215, label %.sink.split, label %.lr.ph759.preheader

.lr.ph751:                                        ; preds = %.lr.ph751.prol.loopexit, %.lr.ph751
  %.0578749 = phi ptr [ %.0578.7, %.lr.ph751 ], [ %.0578749.unr, %.lr.ph751.prol.loopexit ]
  %.0520748 = phi ptr [ %167, %.lr.ph751 ], [ %.0520748.unr, %.lr.ph751.prol.loopexit ]
  %.0618747 = phi i32 [ %166, %.lr.ph751 ], [ %.0618747.unr, %.lr.ph751.prol.loopexit ]
  %151 = load i8, ptr %.0520748, align 1, !tbaa !24
  store i8 %151, ptr %.0578749, align 1, !tbaa !24
  %152 = getelementptr inbounds i8, ptr %.0520748, i64 1
  %.0578 = getelementptr inbounds i8, ptr %.0578749, i64 1
  %153 = load i8, ptr %152, align 1, !tbaa !24
  store i8 %153, ptr %.0578, align 1, !tbaa !24
  %154 = getelementptr inbounds i8, ptr %.0520748, i64 2
  %.0578.1 = getelementptr inbounds i8, ptr %.0578749, i64 2
  %155 = load i8, ptr %154, align 1, !tbaa !24
  store i8 %155, ptr %.0578.1, align 1, !tbaa !24
  %156 = getelementptr inbounds i8, ptr %.0520748, i64 3
  %.0578.2 = getelementptr inbounds i8, ptr %.0578749, i64 3
  %157 = load i8, ptr %156, align 1, !tbaa !24
  store i8 %157, ptr %.0578.2, align 1, !tbaa !24
  %158 = getelementptr inbounds i8, ptr %.0520748, i64 4
  %.0578.3 = getelementptr inbounds i8, ptr %.0578749, i64 4
  %159 = load i8, ptr %158, align 1, !tbaa !24
  store i8 %159, ptr %.0578.3, align 1, !tbaa !24
  %160 = getelementptr inbounds i8, ptr %.0520748, i64 5
  %.0578.4 = getelementptr inbounds i8, ptr %.0578749, i64 5
  %161 = load i8, ptr %160, align 1, !tbaa !24
  store i8 %161, ptr %.0578.4, align 1, !tbaa !24
  %162 = getelementptr inbounds i8, ptr %.0520748, i64 6
  %.0578.5 = getelementptr inbounds i8, ptr %.0578749, i64 6
  %163 = load i8, ptr %162, align 1, !tbaa !24
  store i8 %163, ptr %.0578.5, align 1, !tbaa !24
  %164 = getelementptr inbounds i8, ptr %.0520748, i64 7
  %.0578.6 = getelementptr inbounds i8, ptr %.0578749, i64 7
  %165 = load i8, ptr %164, align 1, !tbaa !24
  store i8 %165, ptr %.0578.6, align 1, !tbaa !24
  %166 = add nuw nsw i32 %.0618747, 8
  %167 = getelementptr inbounds i8, ptr %.0520748, i64 8
  %.0578.7 = getelementptr inbounds i8, ptr %.0578749, i64 8
  %exitcond1001.not.7 = icmp eq i32 %166, %14
  br i1 %exitcond1001.not.7, label %.preheader695, label %.lr.ph751, !llvm.loop !43

.lr.ph759:                                        ; preds = %.lr.ph759.prol.loopexit, %.lr.ph759
  %.1521758 = phi ptr [ %186, %.lr.ph759 ], [ %.1521758.unr, %.lr.ph759.prol.loopexit ]
  %.0522757 = phi ptr [ %187, %.lr.ph759 ], [ %.0522757.unr, %.lr.ph759.prol.loopexit ]
  %.1579756 = phi ptr [ %188, %.lr.ph759 ], [ %.1579756.unr, %.lr.ph759.prol.loopexit ]
  %.1619755 = phi i32 [ %185, %.lr.ph759 ], [ %.1619755.unr, %.lr.ph759.prol.loopexit ]
  %168 = load i8, ptr %.1521758, align 1, !tbaa !24
  %169 = load i8, ptr %.0522757, align 1, !tbaa !24
  %.narrow686 = sub i8 %168, %169
  store i8 %.narrow686, ptr %.1579756, align 1, !tbaa !24
  %170 = getelementptr inbounds i8, ptr %.1521758, i64 1
  %171 = getelementptr inbounds i8, ptr %.0522757, i64 1
  %172 = getelementptr inbounds i8, ptr %.1579756, i64 1
  %173 = load i8, ptr %170, align 1, !tbaa !24
  %174 = load i8, ptr %171, align 1, !tbaa !24
  %.narrow686.1 = sub i8 %173, %174
  store i8 %.narrow686.1, ptr %172, align 1, !tbaa !24
  %175 = getelementptr inbounds i8, ptr %.1521758, i64 2
  %176 = getelementptr inbounds i8, ptr %.0522757, i64 2
  %177 = getelementptr inbounds i8, ptr %.1579756, i64 2
  %178 = load i8, ptr %175, align 1, !tbaa !24
  %179 = load i8, ptr %176, align 1, !tbaa !24
  %.narrow686.2 = sub i8 %178, %179
  store i8 %.narrow686.2, ptr %177, align 1, !tbaa !24
  %180 = getelementptr inbounds i8, ptr %.1521758, i64 3
  %181 = getelementptr inbounds i8, ptr %.0522757, i64 3
  %182 = getelementptr inbounds i8, ptr %.1579756, i64 3
  %183 = load i8, ptr %180, align 1, !tbaa !24
  %184 = load i8, ptr %181, align 1, !tbaa !24
  %.narrow686.3 = sub i8 %183, %184
  store i8 %.narrow686.3, ptr %182, align 1, !tbaa !24
  %185 = add nuw i32 %.1619755, 4
  %186 = getelementptr inbounds i8, ptr %.1521758, i64 4
  %187 = getelementptr inbounds i8, ptr %.0522757, i64 4
  %188 = getelementptr inbounds i8, ptr %.1579756, i64 4
  %exitcond1002.not.3 = icmp eq i32 %185, %7
  br i1 %exitcond1002.not.3, label %.sink.split, label %.lr.ph759, !llvm.loop !44

189:                                              ; preds = %109
  %190 = and i32 %21, 16
  %.not = icmp eq i32 %190, 0
  br i1 %.not, label %382, label %191

191:                                              ; preds = %189
  %192 = getelementptr inbounds i8, ptr %0, i64 928
  %193 = load i8, ptr %192, align 8, !tbaa !30
  %194 = icmp eq i8 %193, 2
  br i1 %194, label %195, label %255

195:                                              ; preds = %191
  %196 = and i32 %.0481, 65535
  %197 = lshr i32 %.0481, 10
  %198 = and i32 %197, 4194240
  %.not942 = icmp eq i8 %9, 0
  br i1 %.not942, label %._crit_edge714, label %.lr.ph713

.lr.ph713:                                        ; preds = %195
  %199 = getelementptr inbounds i8, ptr %0, i64 936
  %200 = load ptr, ptr %199, align 8, !tbaa !31
  %201 = getelementptr inbounds i8, ptr %0, i64 952
  %wide.trip.count993 = zext i8 %9 to i64
  %xtraiter1592 = and i64 %wide.trip.count993, 1
  %202 = icmp eq i8 %9, 1
  br i1 %202, label %._crit_edge714.loopexit.unr-lcssa, label %.lr.ph713.new

.lr.ph713.new:                                    ; preds = %.lr.ph713
  %unroll_iter1596 = and i64 %wide.trip.count993, 254
  br label %203

203:                                              ; preds = %229, %.lr.ph713.new
  %indvars.iv990 = phi i64 [ 0, %.lr.ph713.new ], [ %indvars.iv.next991.1, %229 ]
  %.0599711 = phi i32 [ %196, %.lr.ph713.new ], [ %.1600.1, %229 ]
  %.0601710 = phi i32 [ %198, %.lr.ph713.new ], [ %.1602.1, %229 ]
  %niter1597 = phi i64 [ 0, %.lr.ph713.new ], [ %niter1597.next.1, %229 ]
  %204 = getelementptr inbounds i8, ptr %200, i64 %indvars.iv990
  %205 = load i8, ptr %204, align 1, !tbaa !24
  %206 = icmp eq i8 %205, 1
  br i1 %206, label %207, label %216

207:                                              ; preds = %203
  %208 = load ptr, ptr %201, align 8, !tbaa !45
  %209 = getelementptr inbounds i16, ptr %208, i64 %indvars.iv990
  %210 = load i16, ptr %209, align 2, !tbaa !33
  %211 = zext i16 %210 to i32
  %212 = mul i32 %.0599711, %211
  %213 = lshr i32 %212, 8
  %214 = mul i32 %.0601710, %211
  %215 = lshr i32 %214, 8
  br label %216

216:                                              ; preds = %203, %207
  %.1602 = phi i32 [ %215, %207 ], [ %.0601710, %203 ]
  %.1600 = phi i32 [ %213, %207 ], [ %.0599711, %203 ]
  %indvars.iv.next991 = or disjoint i64 %indvars.iv990, 1
  %217 = getelementptr inbounds i8, ptr %200, i64 %indvars.iv.next991
  %218 = load i8, ptr %217, align 1, !tbaa !24
  %219 = icmp eq i8 %218, 1
  br i1 %219, label %220, label %229

220:                                              ; preds = %216
  %221 = load ptr, ptr %201, align 8, !tbaa !45
  %222 = getelementptr inbounds i16, ptr %221, i64 %indvars.iv.next991
  %223 = load i16, ptr %222, align 2, !tbaa !33
  %224 = zext i16 %223 to i32
  %225 = mul i32 %.1600, %224
  %226 = lshr i32 %225, 8
  %227 = mul i32 %.1602, %224
  %228 = lshr i32 %227, 8
  br label %229

229:                                              ; preds = %220, %216
  %.1602.1 = phi i32 [ %228, %220 ], [ %.1602, %216 ]
  %.1600.1 = phi i32 [ %226, %220 ], [ %.1600, %216 ]
  %indvars.iv.next991.1 = add nuw nsw i64 %indvars.iv990, 2
  %niter1597.next.1 = add i64 %niter1597, 2
  %niter1597.ncmp.1 = icmp eq i64 %niter1597.next.1, %unroll_iter1596
  br i1 %niter1597.ncmp.1, label %._crit_edge714.loopexit.unr-lcssa, label %203, !llvm.loop !46

._crit_edge714.loopexit.unr-lcssa:                ; preds = %229, %.lr.ph713
  %.1602.lcssa.ph = phi i32 [ poison, %.lr.ph713 ], [ %.1602.1, %229 ]
  %.1600.lcssa.ph = phi i32 [ poison, %.lr.ph713 ], [ %.1600.1, %229 ]
  %indvars.iv990.unr = phi i64 [ 0, %.lr.ph713 ], [ %indvars.iv.next991.1, %229 ]
  %.0599711.unr = phi i32 [ %196, %.lr.ph713 ], [ %.1600.1, %229 ]
  %.0601710.unr = phi i32 [ %198, %.lr.ph713 ], [ %.1602.1, %229 ]
  %lcmp.mod1593.not = icmp eq i64 %xtraiter1592, 0
  br i1 %lcmp.mod1593.not, label %._crit_edge714, label %.epil.preheader1591

.epil.preheader1591:                              ; preds = %._crit_edge714.loopexit.unr-lcssa
  %230 = getelementptr inbounds i8, ptr %200, i64 %indvars.iv990.unr
  %231 = load i8, ptr %230, align 1, !tbaa !24
  %232 = icmp eq i8 %231, 1
  br i1 %232, label %233, label %._crit_edge714

233:                                              ; preds = %.epil.preheader1591
  %234 = load ptr, ptr %201, align 8, !tbaa !45
  %235 = getelementptr inbounds i16, ptr %234, i64 %indvars.iv990.unr
  %236 = load i16, ptr %235, align 2, !tbaa !33
  %237 = zext i16 %236 to i32
  %238 = mul i32 %.0599711.unr, %237
  %239 = lshr i32 %238, 8
  %240 = mul i32 %.0601710.unr, %237
  %241 = lshr i32 %240, 8
  br label %._crit_edge714

._crit_edge714:                                   ; preds = %._crit_edge714.loopexit.unr-lcssa, %233, %.epil.preheader1591, %195
  %.0601.lcssa = phi i32 [ %198, %195 ], [ %.1602.lcssa.ph, %._crit_edge714.loopexit.unr-lcssa ], [ %241, %233 ], [ %.0601710.unr, %.epil.preheader1591 ]
  %.0599.lcssa = phi i32 [ %196, %195 ], [ %.1600.lcssa.ph, %._crit_edge714.loopexit.unr-lcssa ], [ %239, %233 ], [ %.0599711.unr, %.epil.preheader1591 ]
  %242 = getelementptr inbounds i8, ptr %0, i64 968
  %243 = load ptr, ptr %242, align 8, !tbaa !47
  %244 = getelementptr inbounds i8, ptr %243, i64 2
  %245 = load i16, ptr %244, align 2, !tbaa !33
  %246 = zext i16 %245 to i32
  %247 = mul i32 %.0601.lcssa, %246
  %248 = icmp ugt i32 %247, 33553927
  br i1 %248, label %255, label %249

249:                                              ; preds = %._crit_edge714
  %250 = mul i32 %.0599.lcssa, %246
  %251 = lshr i32 %250, 3
  %252 = shl nuw i32 %247, 7
  %253 = and i32 %252, -1024
  %254 = add i32 %253, %251
  br label %255

255:                                              ; preds = %249, %._crit_edge714, %191
  %.1607 = phi i32 [ %.0481, %191 ], [ %254, %249 ], [ 2147483647, %._crit_edge714 ]
  %256 = getelementptr inbounds i8, ptr %19, i64 1
  %257 = getelementptr inbounds i8, ptr %0, i64 504
  %258 = load ptr, ptr %257, align 8, !tbaa !36
  %.0614717 = getelementptr i8, ptr %258, i64 1
  %.not943 = icmp eq i8 %11, 0
  br i1 %.not943, label %.preheader696, label %.lr.ph723.preheader

.lr.ph723.preheader:                              ; preds = %255
  %259 = ptrtoint ptr %258 to i64
  %260 = add nsw i32 %14, -1
  %261 = zext i32 %260 to i64
  %262 = add nuw nsw i64 %261, 1
  %min.iters.check1121 = icmp ult i32 %260, 7
  %263 = sub i64 %259, %20
  %diff.check = icmp ult i64 %263, 8
  %or.cond1550 = select i1 %min.iters.check1121, i1 true, i1 %diff.check
  br i1 %or.cond1550, label %.lr.ph723.preheader1579, label %vector.ph1122

.lr.ph723.preheader1579:                          ; preds = %middle.block1119, %.lr.ph723.preheader
  %.0614721.ph = phi ptr [ %.0614717, %.lr.ph723.preheader ], [ %ind.end1125, %middle.block1119 ]
  %.0604720.ph = phi i32 [ 0, %.lr.ph723.preheader ], [ %ind.end1127, %middle.block1119 ]
  %.0608719.ph = phi i32 [ 0, %.lr.ph723.preheader ], [ %287, %middle.block1119 ]
  %.0616718.ph = phi ptr [ %256, %.lr.ph723.preheader ], [ %ind.end1129, %middle.block1119 ]
  %264 = sub i32 %14, %.0604720.ph
  %.neg = add i32 %.0604720.ph, 1
  %xtraiter1598 = and i32 %264, 1
  %lcmp.mod1599.not = icmp eq i32 %xtraiter1598, 0
  br i1 %lcmp.mod1599.not, label %.lr.ph723.prol.loopexit, label %.lr.ph723.prol

.lr.ph723.prol:                                   ; preds = %.lr.ph723.preheader1579
  %265 = load i8, ptr %.0616718.ph, align 1, !tbaa !24
  store i8 %265, ptr %.0614721.ph, align 1, !tbaa !24
  %266 = zext i8 %265 to i32
  %267 = sub nuw nsw i32 256, %266
  %268 = icmp slt i8 %265, 0
  %269 = select i1 %268, i32 %267, i32 %266
  %270 = add i32 %269, %.0608719.ph
  %271 = add nuw nsw i32 %.0604720.ph, 1
  %272 = getelementptr inbounds i8, ptr %.0616718.ph, i64 1
  %.0614.prol = getelementptr inbounds i8, ptr %.0614721.ph, i64 1
  br label %.lr.ph723.prol.loopexit

.lr.ph723.prol.loopexit:                          ; preds = %.lr.ph723.prol, %.lr.ph723.preheader1579
  %.lcssa1582.unr = phi i32 [ poison, %.lr.ph723.preheader1579 ], [ %270, %.lr.ph723.prol ]
  %.lcssa1581.unr = phi ptr [ poison, %.lr.ph723.preheader1579 ], [ %272, %.lr.ph723.prol ]
  %.0614.lcssa1580.unr = phi ptr [ poison, %.lr.ph723.preheader1579 ], [ %.0614.prol, %.lr.ph723.prol ]
  %.0614721.unr = phi ptr [ %.0614721.ph, %.lr.ph723.preheader1579 ], [ %.0614.prol, %.lr.ph723.prol ]
  %.0604720.unr = phi i32 [ %.0604720.ph, %.lr.ph723.preheader1579 ], [ %271, %.lr.ph723.prol ]
  %.0608719.unr = phi i32 [ %.0608719.ph, %.lr.ph723.preheader1579 ], [ %270, %.lr.ph723.prol ]
  %.0616718.unr = phi ptr [ %.0616718.ph, %.lr.ph723.preheader1579 ], [ %272, %.lr.ph723.prol ]
  %273 = icmp eq i32 %14, %.neg
  br i1 %273, label %.preheader696, label %.lr.ph723

vector.ph1122:                                    ; preds = %.lr.ph723.preheader
  %n.vec1124 = and i64 %262, 8589934584
  %ind.end1125 = getelementptr i8, ptr %.0614717, i64 %n.vec1124
  %ind.end1127 = trunc i64 %n.vec1124 to i32
  %ind.end1129 = getelementptr i8, ptr %256, i64 %n.vec1124
  br label %vector.body1131

vector.body1131:                                  ; preds = %vector.body1131, %vector.ph1122
  %index1132 = phi i64 [ 0, %vector.ph1122 ], [ %index.next1141, %vector.body1131 ]
  %vec.phi1133 = phi <4 x i32> [ zeroinitializer, %vector.ph1122 ], [ %284, %vector.body1131 ]
  %vec.phi1134 = phi <4 x i32> [ zeroinitializer, %vector.ph1122 ], [ %285, %vector.body1131 ]
  %next.gep1135 = getelementptr i8, ptr %.0614717, i64 %index1132
  %next.gep1137 = getelementptr i8, ptr %256, i64 %index1132
  %274 = getelementptr i8, ptr %next.gep1137, i64 4
  %wide.load1139 = load <4 x i8>, ptr %next.gep1137, align 1, !tbaa !24
  %wide.load1140 = load <4 x i8>, ptr %274, align 1, !tbaa !24
  %275 = getelementptr i8, ptr %next.gep1135, i64 4
  store <4 x i8> %wide.load1139, ptr %next.gep1135, align 1, !tbaa !24
  store <4 x i8> %wide.load1140, ptr %275, align 1, !tbaa !24
  %276 = zext <4 x i8> %wide.load1139 to <4 x i32>
  %277 = zext <4 x i8> %wide.load1140 to <4 x i32>
  %278 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %276
  %279 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %277
  %280 = icmp slt <4 x i8> %wide.load1139, zeroinitializer
  %281 = icmp slt <4 x i8> %wide.load1140, zeroinitializer
  %282 = select <4 x i1> %280, <4 x i32> %278, <4 x i32> %276
  %283 = select <4 x i1> %281, <4 x i32> %279, <4 x i32> %277
  %284 = add <4 x i32> %282, %vec.phi1133
  %285 = add <4 x i32> %283, %vec.phi1134
  %index.next1141 = add nuw i64 %index1132, 8
  %286 = icmp eq i64 %index.next1141, %n.vec1124
  br i1 %286, label %middle.block1119, label %vector.body1131, !llvm.loop !48

middle.block1119:                                 ; preds = %vector.body1131
  %bin.rdx1142 = add <4 x i32> %285, %284
  %287 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx1142)
  %cmp.n1143 = icmp eq i64 %262, %n.vec1124
  br i1 %cmp.n1143, label %.preheader696, label %.lr.ph723.preheader1579

.preheader696:                                    ; preds = %.lr.ph723.prol.loopexit, %.lr.ph723, %middle.block1119, %255
  %.0616.lcssa = phi ptr [ %256, %255 ], [ %ind.end1129, %middle.block1119 ], [ %.lcssa1581.unr, %.lr.ph723.prol.loopexit ], [ %303, %.lr.ph723 ]
  %.0608.lcssa = phi i32 [ 0, %255 ], [ %287, %middle.block1119 ], [ %.lcssa1582.unr, %.lr.ph723.prol.loopexit ], [ %301, %.lr.ph723 ]
  %.0604.lcssa = phi i32 [ 0, %255 ], [ %14, %middle.block1119 ], [ %14, %.lr.ph723 ], [ %14, %.lr.ph723.prol.loopexit ]
  %.0614.lcssa = phi ptr [ %.0614717, %255 ], [ %ind.end1125, %middle.block1119 ], [ %.0614.lcssa1580.unr, %.lr.ph723.prol.loopexit ], [ %.0614.1, %.lr.ph723 ]
  %288 = icmp ult i32 %.0604.lcssa, %7
  br i1 %288, label %.lr.ph733, label %._crit_edge734

.lr.ph723:                                        ; preds = %.lr.ph723.prol.loopexit, %.lr.ph723
  %.0614721 = phi ptr [ %.0614.1, %.lr.ph723 ], [ %.0614721.unr, %.lr.ph723.prol.loopexit ]
  %.0604720 = phi i32 [ %302, %.lr.ph723 ], [ %.0604720.unr, %.lr.ph723.prol.loopexit ]
  %.0608719 = phi i32 [ %301, %.lr.ph723 ], [ %.0608719.unr, %.lr.ph723.prol.loopexit ]
  %.0616718 = phi ptr [ %303, %.lr.ph723 ], [ %.0616718.unr, %.lr.ph723.prol.loopexit ]
  %289 = load i8, ptr %.0616718, align 1, !tbaa !24
  store i8 %289, ptr %.0614721, align 1, !tbaa !24
  %290 = zext i8 %289 to i32
  %291 = sub nuw nsw i32 256, %290
  %292 = icmp slt i8 %289, 0
  %293 = select i1 %292, i32 %291, i32 %290
  %294 = add i32 %293, %.0608719
  %295 = getelementptr inbounds i8, ptr %.0616718, i64 1
  %.0614 = getelementptr inbounds i8, ptr %.0614721, i64 1
  %296 = load i8, ptr %295, align 1, !tbaa !24
  store i8 %296, ptr %.0614, align 1, !tbaa !24
  %297 = zext i8 %296 to i32
  %298 = sub nuw nsw i32 256, %297
  %299 = icmp slt i8 %296, 0
  %300 = select i1 %299, i32 %298, i32 %297
  %301 = add i32 %300, %294
  %302 = add nuw nsw i32 %.0604720, 2
  %303 = getelementptr inbounds i8, ptr %.0616718, i64 2
  %.0614.1 = getelementptr inbounds i8, ptr %.0614721, i64 2
  %exitcond995.not.1 = icmp eq i32 %302, %14
  br i1 %exitcond995.not.1, label %.preheader696, label %.lr.ph723, !llvm.loop !49

.lr.ph733:                                        ; preds = %.preheader696, %.lr.ph733
  %.1605732 = phi i32 [ %312, %.lr.ph733 ], [ %.0604.lcssa, %.preheader696 ]
  %.1609731 = phi i32 [ %310, %.lr.ph733 ], [ %.0608.lcssa, %.preheader696 ]
  %.0613730 = phi ptr [ %314, %.lr.ph733 ], [ %256, %.preheader696 ]
  %.1615729 = phi ptr [ %315, %.lr.ph733 ], [ %.0614.lcssa, %.preheader696 ]
  %.1617728 = phi ptr [ %313, %.lr.ph733 ], [ %.0616.lcssa, %.preheader696 ]
  %304 = load i8, ptr %.1617728, align 1, !tbaa !24
  %305 = load i8, ptr %.0613730, align 1, !tbaa !24
  %.narrow = sub i8 %304, %305
  store i8 %.narrow, ptr %.1615729, align 1, !tbaa !24
  %306 = zext i8 %.narrow to i32
  %307 = sub nuw nsw i32 256, %306
  %308 = icmp slt i8 %.narrow, 0
  %309 = select i1 %308, i32 %307, i32 %306
  %310 = add i32 %309, %.1609731
  %311 = icmp ule i32 %310, %.1607
  %312 = add nuw i32 %.1605732, 1
  %313 = getelementptr inbounds i8, ptr %.1617728, i64 1
  %314 = getelementptr inbounds i8, ptr %.0613730, i64 1
  %315 = getelementptr inbounds i8, ptr %.1615729, i64 1
  %316 = icmp ult i32 %312, %7
  %or.cond926 = select i1 %311, i1 %316, i1 false
  br i1 %or.cond926, label %.lr.ph733, label %._crit_edge734, !llvm.loop !50

._crit_edge734:                                   ; preds = %.lr.ph733, %.preheader696
  %.2610 = phi i32 [ %.0608.lcssa, %.preheader696 ], [ %310, %.lr.ph733 ]
  %317 = load i8, ptr %192, align 8, !tbaa !30
  %318 = icmp eq i8 %317, 2
  br i1 %318, label %319, label %379

319:                                              ; preds = %._crit_edge734
  %320 = and i32 %.2610, 65535
  %321 = lshr i32 %.2610, 10
  %322 = and i32 %321, 4194240
  %.not944 = icmp eq i8 %9, 0
  br i1 %.not944, label %._crit_edge743, label %.lr.ph742

.lr.ph742:                                        ; preds = %319
  %323 = getelementptr inbounds i8, ptr %0, i64 936
  %324 = load ptr, ptr %323, align 8, !tbaa !31
  %325 = getelementptr inbounds i8, ptr %0, i64 952
  %wide.trip.count999 = zext i8 %9 to i64
  %xtraiter1601 = and i64 %wide.trip.count999, 1
  %326 = icmp eq i8 %9, 1
  br i1 %326, label %._crit_edge743.loopexit.unr-lcssa, label %.lr.ph742.new

.lr.ph742.new:                                    ; preds = %.lr.ph742
  %unroll_iter1605 = and i64 %wide.trip.count999, 254
  br label %327

327:                                              ; preds = %353, %.lr.ph742.new
  %indvars.iv996 = phi i64 [ 0, %.lr.ph742.new ], [ %indvars.iv.next997.1, %353 ]
  %.0594740 = phi i32 [ %320, %.lr.ph742.new ], [ %.1595.1, %353 ]
  %.0596739 = phi i32 [ %322, %.lr.ph742.new ], [ %.1597.1, %353 ]
  %niter1606 = phi i64 [ 0, %.lr.ph742.new ], [ %niter1606.next.1, %353 ]
  %328 = getelementptr inbounds i8, ptr %324, i64 %indvars.iv996
  %329 = load i8, ptr %328, align 1, !tbaa !24
  %330 = icmp eq i8 %329, 1
  br i1 %330, label %331, label %340

331:                                              ; preds = %327
  %332 = load ptr, ptr %325, align 8, !tbaa !45
  %333 = getelementptr inbounds i16, ptr %332, i64 %indvars.iv996
  %334 = load i16, ptr %333, align 2, !tbaa !33
  %335 = zext i16 %334 to i32
  %336 = mul i32 %.0594740, %335
  %337 = lshr i32 %336, 8
  %338 = mul i32 %.0596739, %335
  %339 = lshr i32 %338, 8
  br label %340

340:                                              ; preds = %327, %331
  %.1597 = phi i32 [ %339, %331 ], [ %.0596739, %327 ]
  %.1595 = phi i32 [ %337, %331 ], [ %.0594740, %327 ]
  %indvars.iv.next997 = or disjoint i64 %indvars.iv996, 1
  %341 = getelementptr inbounds i8, ptr %324, i64 %indvars.iv.next997
  %342 = load i8, ptr %341, align 1, !tbaa !24
  %343 = icmp eq i8 %342, 1
  br i1 %343, label %344, label %353

344:                                              ; preds = %340
  %345 = load ptr, ptr %325, align 8, !tbaa !45
  %346 = getelementptr inbounds i16, ptr %345, i64 %indvars.iv.next997
  %347 = load i16, ptr %346, align 2, !tbaa !33
  %348 = zext i16 %347 to i32
  %349 = mul i32 %.1595, %348
  %350 = lshr i32 %349, 8
  %351 = mul i32 %.1597, %348
  %352 = lshr i32 %351, 8
  br label %353

353:                                              ; preds = %344, %340
  %.1597.1 = phi i32 [ %352, %344 ], [ %.1597, %340 ]
  %.1595.1 = phi i32 [ %350, %344 ], [ %.1595, %340 ]
  %indvars.iv.next997.1 = add nuw nsw i64 %indvars.iv996, 2
  %niter1606.next.1 = add i64 %niter1606, 2
  %niter1606.ncmp.1 = icmp eq i64 %niter1606.next.1, %unroll_iter1605
  br i1 %niter1606.ncmp.1, label %._crit_edge743.loopexit.unr-lcssa, label %327, !llvm.loop !51

._crit_edge743.loopexit.unr-lcssa:                ; preds = %353, %.lr.ph742
  %.1597.lcssa.ph = phi i32 [ poison, %.lr.ph742 ], [ %.1597.1, %353 ]
  %.1595.lcssa.ph = phi i32 [ poison, %.lr.ph742 ], [ %.1595.1, %353 ]
  %indvars.iv996.unr = phi i64 [ 0, %.lr.ph742 ], [ %indvars.iv.next997.1, %353 ]
  %.0594740.unr = phi i32 [ %320, %.lr.ph742 ], [ %.1595.1, %353 ]
  %.0596739.unr = phi i32 [ %322, %.lr.ph742 ], [ %.1597.1, %353 ]
  %lcmp.mod1602.not = icmp eq i64 %xtraiter1601, 0
  br i1 %lcmp.mod1602.not, label %._crit_edge743, label %.epil.preheader1600

.epil.preheader1600:                              ; preds = %._crit_edge743.loopexit.unr-lcssa
  %354 = getelementptr inbounds i8, ptr %324, i64 %indvars.iv996.unr
  %355 = load i8, ptr %354, align 1, !tbaa !24
  %356 = icmp eq i8 %355, 1
  br i1 %356, label %357, label %._crit_edge743

357:                                              ; preds = %.epil.preheader1600
  %358 = load ptr, ptr %325, align 8, !tbaa !45
  %359 = getelementptr inbounds i16, ptr %358, i64 %indvars.iv996.unr
  %360 = load i16, ptr %359, align 2, !tbaa !33
  %361 = zext i16 %360 to i32
  %362 = mul i32 %.0594740.unr, %361
  %363 = lshr i32 %362, 8
  %364 = mul i32 %.0596739.unr, %361
  %365 = lshr i32 %364, 8
  br label %._crit_edge743

._crit_edge743:                                   ; preds = %._crit_edge743.loopexit.unr-lcssa, %357, %.epil.preheader1600, %319
  %.0596.lcssa = phi i32 [ %322, %319 ], [ %.1597.lcssa.ph, %._crit_edge743.loopexit.unr-lcssa ], [ %365, %357 ], [ %.0596739.unr, %.epil.preheader1600 ]
  %.0594.lcssa = phi i32 [ %320, %319 ], [ %.1595.lcssa.ph, %._crit_edge743.loopexit.unr-lcssa ], [ %363, %357 ], [ %.0594740.unr, %.epil.preheader1600 ]
  %366 = getelementptr inbounds i8, ptr %0, i64 968
  %367 = load ptr, ptr %366, align 8, !tbaa !47
  %368 = getelementptr inbounds i8, ptr %367, i64 2
  %369 = load i16, ptr %368, align 2, !tbaa !33
  %370 = zext i16 %369 to i32
  %371 = mul i32 %.0596.lcssa, %370
  %372 = icmp ugt i32 %371, 33553927
  br i1 %372, label %379, label %373

373:                                              ; preds = %._crit_edge743
  %374 = mul i32 %.0594.lcssa, %370
  %375 = lshr i32 %374, 3
  %376 = shl nuw i32 %371, 7
  %377 = and i32 %376, -1024
  %378 = add i32 %377, %375
  br label %379

379:                                              ; preds = %373, %._crit_edge743, %._crit_edge734
  %.4612 = phi i32 [ %.2610, %._crit_edge734 ], [ %378, %373 ], [ 2147483647, %._crit_edge743 ]
  %380 = icmp ult i32 %.4612, %.0481
  br i1 %380, label %.sink.split, label %382

.sink.split:                                      ; preds = %.lr.ph759.prol.loopexit, %.lr.ph759, %middle.block1171, %vec.epilog.middle.block, %379, %.preheader695
  %.sink = phi ptr [ %113, %.preheader695 ], [ %257, %379 ], [ %113, %vec.epilog.middle.block ], [ %113, %middle.block1171 ], [ %113, %.lr.ph759 ], [ %113, %.lr.ph759.prol.loopexit ]
  %.2483.ph = phi i32 [ %.0481, %.preheader695 ], [ %.4612, %379 ], [ %.0481, %vec.epilog.middle.block ], [ %.0481, %middle.block1171 ], [ %.0481, %.lr.ph759 ], [ %.0481, %.lr.ph759.prol.loopexit ]
  %381 = load ptr, ptr %.sink, align 8, !tbaa !36
  br label %382

382:                                              ; preds = %.sink.split, %379, %189
  %.2483 = phi i32 [ %.0481, %189 ], [ %.0481, %379 ], [ %.2483.ph, %.sink.split ]
  %.1480 = phi ptr [ %19, %189 ], [ %19, %379 ], [ %381, %.sink.split ]
  %383 = icmp eq i8 %4, 32
  br i1 %383, label %384, label %417

384:                                              ; preds = %382
  %385 = getelementptr inbounds i8, ptr %0, i64 512
  %386 = load ptr, ptr %385, align 8, !tbaa !52
  %387 = ptrtoint ptr %386 to i64
  %.not949 = icmp eq i32 %7, 0
  br i1 %.not949, label %.thread1059, label %iter.check1224

iter.check1224:                                   ; preds = %384
  %388 = and i64 %6, 4294967295
  %min.iters.check1222 = icmp ult i64 %388, 8
  br i1 %min.iters.check1222, label %.lr.ph796.preheader, label %vector.memcheck1216

vector.memcheck1216:                              ; preds = %iter.check1224
  %389 = sub i64 %387, %20
  %diff.check1217 = icmp ult i64 %389, 32
  %390 = sub i64 %387, %17
  %diff.check1218 = icmp ult i64 %390, 32
  %conflict.rdx1219 = or i1 %diff.check1217, %diff.check1218
  br i1 %conflict.rdx1219, label %.lr.ph796.preheader, label %vector.main.loop.iter.check1226

vector.main.loop.iter.check1226:                  ; preds = %vector.memcheck1216
  %min.iters.check1225 = icmp ult i64 %388, 32
  br i1 %min.iters.check1225, label %vec.epilog.ph1246, label %vector.ph1227

vector.ph1227:                                    ; preds = %vector.main.loop.iter.check1226
  %n.mod.vf1228 = and i64 %6, 31
  %n.vec1229 = sub nsw i64 %388, %n.mod.vf1228
  br label %vector.body1230

vector.body1230:                                  ; preds = %vector.body1230, %vector.ph1227
  %index1231 = phi i64 [ 0, %vector.ph1227 ], [ %index.next1242, %vector.body1230 ]
  %next.gep1232 = getelementptr i8, ptr %16, i64 %index1231
  %next.gep1234 = getelementptr i8, ptr %386, i64 %index1231
  %next.gep1236 = getelementptr i8, ptr %19, i64 %index1231
  %391 = getelementptr inbounds i8, ptr %next.gep1234, i64 1
  %392 = getelementptr inbounds i8, ptr %next.gep1232, i64 1
  %393 = getelementptr inbounds i8, ptr %next.gep1236, i64 1
  %394 = getelementptr inbounds i8, ptr %next.gep1236, i64 17
  %wide.load1238 = load <16 x i8>, ptr %393, align 1, !tbaa !24
  %wide.load1239 = load <16 x i8>, ptr %394, align 1, !tbaa !24
  %395 = getelementptr inbounds i8, ptr %next.gep1232, i64 17
  %wide.load1240 = load <16 x i8>, ptr %392, align 1, !tbaa !24
  %wide.load1241 = load <16 x i8>, ptr %395, align 1, !tbaa !24
  %396 = sub <16 x i8> %wide.load1238, %wide.load1240
  %397 = sub <16 x i8> %wide.load1239, %wide.load1241
  %398 = getelementptr inbounds i8, ptr %next.gep1234, i64 17
  store <16 x i8> %396, ptr %391, align 1, !tbaa !24
  store <16 x i8> %397, ptr %398, align 1, !tbaa !24
  %index.next1242 = add nuw i64 %index1231, 32
  %399 = icmp eq i64 %index.next1242, %n.vec1229
  br i1 %399, label %middle.block1220, label %vector.body1230, !llvm.loop !53

middle.block1220:                                 ; preds = %vector.body1230
  %cmp.n1243 = icmp eq i64 %n.mod.vf1228, 0
  br i1 %cmp.n1243, label %._crit_edge797.sink.split, label %vec.epilog.iter.check1247

vec.epilog.iter.check1247:                        ; preds = %middle.block1220
  %ind.end1265 = getelementptr i8, ptr %19, i64 %n.vec1229
  %ind.end1262 = getelementptr i8, ptr %386, i64 %n.vec1229
  %ind.end1259 = getelementptr i8, ptr %16, i64 %n.vec1229
  %ind.end1256 = trunc i64 %n.vec1229 to i32
  %min.epilog.iters.check1249 = icmp ult i64 %n.mod.vf1228, 8
  br i1 %min.epilog.iters.check1249, label %.lr.ph796.preheader, label %vec.epilog.ph1246

vec.epilog.ph1246:                                ; preds = %vector.main.loop.iter.check1226, %vec.epilog.iter.check1247
  %vec.epilog.resume.val1250 = phi i64 [ %n.vec1229, %vec.epilog.iter.check1247 ], [ 0, %vector.main.loop.iter.check1226 ]
  %n.mod.vf1251 = and i64 %6, 7
  %n.vec1252 = sub nsw i64 %388, %n.mod.vf1251
  %ind.end1254 = trunc i64 %n.vec1252 to i32
  %ind.end1258 = getelementptr i8, ptr %16, i64 %n.vec1252
  %ind.end1261 = getelementptr i8, ptr %386, i64 %n.vec1252
  %ind.end1264 = getelementptr i8, ptr %19, i64 %n.vec1252
  %invariant.gep = getelementptr i8, ptr %386, i64 1
  %invariant.gep1715 = getelementptr i8, ptr %16, i64 1
  %invariant.gep1717 = getelementptr i8, ptr %19, i64 1
  br label %vec.epilog.vector.body1267

vec.epilog.vector.body1267:                       ; preds = %vec.epilog.vector.body1267, %vec.epilog.ph1246
  %index1268 = phi i64 [ %vec.epilog.resume.val1250, %vec.epilog.ph1246 ], [ %index.next1274, %vec.epilog.vector.body1267 ]
  %gep = getelementptr i8, ptr %invariant.gep, i64 %index1268
  %gep1716 = getelementptr i8, ptr %invariant.gep1715, i64 %index1268
  %gep1718 = getelementptr i8, ptr %invariant.gep1717, i64 %index1268
  %wide.load1272 = load <8 x i8>, ptr %gep1718, align 1, !tbaa !24
  %wide.load1273 = load <8 x i8>, ptr %gep1716, align 1, !tbaa !24
  %400 = sub <8 x i8> %wide.load1272, %wide.load1273
  store <8 x i8> %400, ptr %gep, align 1, !tbaa !24
  %index.next1274 = add nuw i64 %index1268, 8
  %401 = icmp eq i64 %index.next1274, %n.vec1252
  br i1 %401, label %vec.epilog.middle.block1244, label %vec.epilog.vector.body1267, !llvm.loop !54

vec.epilog.middle.block1244:                      ; preds = %vec.epilog.vector.body1267
  %cmp.n1275 = icmp eq i64 %n.mod.vf1251, 0
  br i1 %cmp.n1275, label %._crit_edge797.sink.split, label %.lr.ph796.preheader

.lr.ph796.preheader:                              ; preds = %vec.epilog.middle.block1244, %vector.memcheck1216, %iter.check1224, %vec.epilog.iter.check1247
  %.0590794.ph = phi i32 [ 0, %iter.check1224 ], [ 0, %vector.memcheck1216 ], [ %ind.end1256, %vec.epilog.iter.check1247 ], [ %ind.end1254, %vec.epilog.middle.block1244 ]
  %.pn683793.ph = phi ptr [ %16, %iter.check1224 ], [ %16, %vector.memcheck1216 ], [ %ind.end1259, %vec.epilog.iter.check1247 ], [ %ind.end1258, %vec.epilog.middle.block1244 ]
  %.pn684792.ph = phi ptr [ %386, %iter.check1224 ], [ %386, %vector.memcheck1216 ], [ %ind.end1262, %vec.epilog.iter.check1247 ], [ %ind.end1261, %vec.epilog.middle.block1244 ]
  %.pn682791.ph = phi ptr [ %19, %iter.check1224 ], [ %19, %vector.memcheck1216 ], [ %ind.end1265, %vec.epilog.iter.check1247 ], [ %ind.end1264, %vec.epilog.middle.block1244 ]
  %402 = sub i32 %7, %.0590794.ph
  %xtraiter1626 = and i32 %402, 3
  %lcmp.mod1627.not = icmp eq i32 %xtraiter1626, 0
  br i1 %lcmp.mod1627.not, label %.lr.ph796.prol.loopexit, label %.lr.ph796.prol

.lr.ph796.prol:                                   ; preds = %.lr.ph796.preheader, %.lr.ph796.prol
  %.0590794.prol = phi i32 [ %405, %.lr.ph796.prol ], [ %.0590794.ph, %.lr.ph796.preheader ]
  %.pn683793.prol = phi ptr [ %.0591.prol, %.lr.ph796.prol ], [ %.pn683793.ph, %.lr.ph796.preheader ]
  %.pn684792.prol = phi ptr [ %.0592.prol, %.lr.ph796.prol ], [ %.pn684792.ph, %.lr.ph796.preheader ]
  %.pn682791.prol = phi ptr [ %.0593.prol, %.lr.ph796.prol ], [ %.pn682791.ph, %.lr.ph796.preheader ]
  %prol.iter1628 = phi i32 [ %prol.iter1628.next, %.lr.ph796.prol ], [ 0, %.lr.ph796.preheader ]
  %.0592.prol = getelementptr inbounds i8, ptr %.pn684792.prol, i64 1
  %.0591.prol = getelementptr inbounds i8, ptr %.pn683793.prol, i64 1
  %.0593.prol = getelementptr inbounds i8, ptr %.pn682791.prol, i64 1
  %403 = load i8, ptr %.0593.prol, align 1, !tbaa !24
  %404 = load i8, ptr %.0591.prol, align 1, !tbaa !24
  %.narrow681.prol = sub i8 %403, %404
  store i8 %.narrow681.prol, ptr %.0592.prol, align 1, !tbaa !24
  %405 = add nuw i32 %.0590794.prol, 1
  %prol.iter1628.next = add i32 %prol.iter1628, 1
  %prol.iter1628.cmp.not = icmp eq i32 %prol.iter1628.next, %xtraiter1626
  br i1 %prol.iter1628.cmp.not, label %.lr.ph796.prol.loopexit, label %.lr.ph796.prol, !llvm.loop !55

.lr.ph796.prol.loopexit:                          ; preds = %.lr.ph796.prol, %.lr.ph796.preheader
  %.0590794.unr = phi i32 [ %.0590794.ph, %.lr.ph796.preheader ], [ %405, %.lr.ph796.prol ]
  %.pn683793.unr = phi ptr [ %.pn683793.ph, %.lr.ph796.preheader ], [ %.0591.prol, %.lr.ph796.prol ]
  %.pn684792.unr = phi ptr [ %.pn684792.ph, %.lr.ph796.preheader ], [ %.0592.prol, %.lr.ph796.prol ]
  %.pn682791.unr = phi ptr [ %.pn682791.ph, %.lr.ph796.preheader ], [ %.0593.prol, %.lr.ph796.prol ]
  %406 = sub i32 %.0590794.ph, %7
  %407 = icmp ugt i32 %406, -4
  br i1 %407, label %._crit_edge797.sink.split, label %.lr.ph796

.lr.ph796:                                        ; preds = %.lr.ph796.prol.loopexit, %.lr.ph796
  %.0590794 = phi i32 [ %416, %.lr.ph796 ], [ %.0590794.unr, %.lr.ph796.prol.loopexit ]
  %.pn683793 = phi ptr [ %.0591.3, %.lr.ph796 ], [ %.pn683793.unr, %.lr.ph796.prol.loopexit ]
  %.pn684792 = phi ptr [ %.0592.3, %.lr.ph796 ], [ %.pn684792.unr, %.lr.ph796.prol.loopexit ]
  %.pn682791 = phi ptr [ %.0593.3, %.lr.ph796 ], [ %.pn682791.unr, %.lr.ph796.prol.loopexit ]
  %.0592 = getelementptr inbounds i8, ptr %.pn684792, i64 1
  %.0591 = getelementptr inbounds i8, ptr %.pn683793, i64 1
  %.0593 = getelementptr inbounds i8, ptr %.pn682791, i64 1
  %408 = load i8, ptr %.0593, align 1, !tbaa !24
  %409 = load i8, ptr %.0591, align 1, !tbaa !24
  %.narrow681 = sub i8 %408, %409
  store i8 %.narrow681, ptr %.0592, align 1, !tbaa !24
  %.0592.1 = getelementptr inbounds i8, ptr %.pn684792, i64 2
  %.0591.1 = getelementptr inbounds i8, ptr %.pn683793, i64 2
  %.0593.1 = getelementptr inbounds i8, ptr %.pn682791, i64 2
  %410 = load i8, ptr %.0593.1, align 1, !tbaa !24
  %411 = load i8, ptr %.0591.1, align 1, !tbaa !24
  %.narrow681.1 = sub i8 %410, %411
  store i8 %.narrow681.1, ptr %.0592.1, align 1, !tbaa !24
  %.0592.2 = getelementptr inbounds i8, ptr %.pn684792, i64 3
  %.0591.2 = getelementptr inbounds i8, ptr %.pn683793, i64 3
  %.0593.2 = getelementptr inbounds i8, ptr %.pn682791, i64 3
  %412 = load i8, ptr %.0593.2, align 1, !tbaa !24
  %413 = load i8, ptr %.0591.2, align 1, !tbaa !24
  %.narrow681.2 = sub i8 %412, %413
  store i8 %.narrow681.2, ptr %.0592.2, align 1, !tbaa !24
  %.0592.3 = getelementptr inbounds i8, ptr %.pn684792, i64 4
  %.0591.3 = getelementptr inbounds i8, ptr %.pn683793, i64 4
  %.0593.3 = getelementptr inbounds i8, ptr %.pn682791, i64 4
  %414 = load i8, ptr %.0593.3, align 1, !tbaa !24
  %415 = load i8, ptr %.0591.3, align 1, !tbaa !24
  %.narrow681.3 = sub i8 %414, %415
  store i8 %.narrow681.3, ptr %.0592.3, align 1, !tbaa !24
  %416 = add nuw i32 %.0590794, 4
  %exitcond1014.not.3 = icmp eq i32 %416, %7
  br i1 %exitcond1014.not.3, label %._crit_edge797.sink.split, label %.lr.ph796, !llvm.loop !56

417:                                              ; preds = %382
  %418 = and i32 %21, 32
  %.not645 = icmp eq i32 %418, 0
  br i1 %.not645, label %._crit_edge797, label %419

419:                                              ; preds = %417
  %420 = getelementptr inbounds i8, ptr %0, i64 928
  %421 = load i8, ptr %420, align 8, !tbaa !30
  %422 = icmp eq i8 %421, 2
  br i1 %422, label %423, label %483

423:                                              ; preds = %419
  %424 = and i32 %.2483, 65535
  %425 = lshr i32 %.2483, 10
  %426 = and i32 %425, 4194240
  %.not946 = icmp eq i8 %9, 0
  br i1 %.not946, label %._crit_edge766, label %.lr.ph765

.lr.ph765:                                        ; preds = %423
  %427 = getelementptr inbounds i8, ptr %0, i64 936
  %428 = load ptr, ptr %427, align 8, !tbaa !31
  %429 = getelementptr inbounds i8, ptr %0, i64 952
  %wide.trip.count1006 = zext i8 %9 to i64
  %xtraiter1613 = and i64 %wide.trip.count1006, 1
  %430 = icmp eq i8 %9, 1
  br i1 %430, label %._crit_edge766.loopexit.unr-lcssa, label %.lr.ph765.new

.lr.ph765.new:                                    ; preds = %.lr.ph765
  %unroll_iter1617 = and i64 %wide.trip.count1006, 254
  br label %431

431:                                              ; preds = %457, %.lr.ph765.new
  %indvars.iv1003 = phi i64 [ 0, %.lr.ph765.new ], [ %indvars.iv.next1004.1, %457 ]
  %.0573763 = phi i32 [ %424, %.lr.ph765.new ], [ %.1574.1, %457 ]
  %.0575762 = phi i32 [ %426, %.lr.ph765.new ], [ %.1576.1, %457 ]
  %niter1618 = phi i64 [ 0, %.lr.ph765.new ], [ %niter1618.next.1, %457 ]
  %432 = getelementptr inbounds i8, ptr %428, i64 %indvars.iv1003
  %433 = load i8, ptr %432, align 1, !tbaa !24
  %434 = icmp eq i8 %433, 2
  br i1 %434, label %435, label %444

435:                                              ; preds = %431
  %436 = load ptr, ptr %429, align 8, !tbaa !45
  %437 = getelementptr inbounds i16, ptr %436, i64 %indvars.iv1003
  %438 = load i16, ptr %437, align 2, !tbaa !33
  %439 = zext i16 %438 to i32
  %440 = mul i32 %.0573763, %439
  %441 = lshr i32 %440, 8
  %442 = mul i32 %.0575762, %439
  %443 = lshr i32 %442, 8
  br label %444

444:                                              ; preds = %431, %435
  %.1576 = phi i32 [ %443, %435 ], [ %.0575762, %431 ]
  %.1574 = phi i32 [ %441, %435 ], [ %.0573763, %431 ]
  %indvars.iv.next1004 = or disjoint i64 %indvars.iv1003, 1
  %445 = getelementptr inbounds i8, ptr %428, i64 %indvars.iv.next1004
  %446 = load i8, ptr %445, align 1, !tbaa !24
  %447 = icmp eq i8 %446, 2
  br i1 %447, label %448, label %457

448:                                              ; preds = %444
  %449 = load ptr, ptr %429, align 8, !tbaa !45
  %450 = getelementptr inbounds i16, ptr %449, i64 %indvars.iv.next1004
  %451 = load i16, ptr %450, align 2, !tbaa !33
  %452 = zext i16 %451 to i32
  %453 = mul i32 %.1574, %452
  %454 = lshr i32 %453, 8
  %455 = mul i32 %.1576, %452
  %456 = lshr i32 %455, 8
  br label %457

457:                                              ; preds = %448, %444
  %.1576.1 = phi i32 [ %456, %448 ], [ %.1576, %444 ]
  %.1574.1 = phi i32 [ %454, %448 ], [ %.1574, %444 ]
  %indvars.iv.next1004.1 = add nuw nsw i64 %indvars.iv1003, 2
  %niter1618.next.1 = add i64 %niter1618, 2
  %niter1618.ncmp.1 = icmp eq i64 %niter1618.next.1, %unroll_iter1617
  br i1 %niter1618.ncmp.1, label %._crit_edge766.loopexit.unr-lcssa, label %431, !llvm.loop !57

._crit_edge766.loopexit.unr-lcssa:                ; preds = %457, %.lr.ph765
  %.1576.lcssa.ph = phi i32 [ poison, %.lr.ph765 ], [ %.1576.1, %457 ]
  %.1574.lcssa.ph = phi i32 [ poison, %.lr.ph765 ], [ %.1574.1, %457 ]
  %indvars.iv1003.unr = phi i64 [ 0, %.lr.ph765 ], [ %indvars.iv.next1004.1, %457 ]
  %.0573763.unr = phi i32 [ %424, %.lr.ph765 ], [ %.1574.1, %457 ]
  %.0575762.unr = phi i32 [ %426, %.lr.ph765 ], [ %.1576.1, %457 ]
  %lcmp.mod1614.not = icmp eq i64 %xtraiter1613, 0
  br i1 %lcmp.mod1614.not, label %._crit_edge766, label %.epil.preheader1612

.epil.preheader1612:                              ; preds = %._crit_edge766.loopexit.unr-lcssa
  %458 = getelementptr inbounds i8, ptr %428, i64 %indvars.iv1003.unr
  %459 = load i8, ptr %458, align 1, !tbaa !24
  %460 = icmp eq i8 %459, 2
  br i1 %460, label %461, label %._crit_edge766

461:                                              ; preds = %.epil.preheader1612
  %462 = load ptr, ptr %429, align 8, !tbaa !45
  %463 = getelementptr inbounds i16, ptr %462, i64 %indvars.iv1003.unr
  %464 = load i16, ptr %463, align 2, !tbaa !33
  %465 = zext i16 %464 to i32
  %466 = mul i32 %.0573763.unr, %465
  %467 = lshr i32 %466, 8
  %468 = mul i32 %.0575762.unr, %465
  %469 = lshr i32 %468, 8
  br label %._crit_edge766

._crit_edge766:                                   ; preds = %._crit_edge766.loopexit.unr-lcssa, %461, %.epil.preheader1612, %423
  %.0575.lcssa = phi i32 [ %426, %423 ], [ %.1576.lcssa.ph, %._crit_edge766.loopexit.unr-lcssa ], [ %469, %461 ], [ %.0575762.unr, %.epil.preheader1612 ]
  %.0573.lcssa = phi i32 [ %424, %423 ], [ %.1574.lcssa.ph, %._crit_edge766.loopexit.unr-lcssa ], [ %467, %461 ], [ %.0573763.unr, %.epil.preheader1612 ]
  %470 = getelementptr inbounds i8, ptr %0, i64 968
  %471 = load ptr, ptr %470, align 8, !tbaa !47
  %472 = getelementptr inbounds i8, ptr %471, i64 4
  %473 = load i16, ptr %472, align 2, !tbaa !33
  %474 = zext i16 %473 to i32
  %475 = mul i32 %.0575.lcssa, %474
  %476 = icmp ugt i32 %475, 33553927
  br i1 %476, label %483, label %477

477:                                              ; preds = %._crit_edge766
  %478 = mul i32 %.0573.lcssa, %474
  %479 = lshr i32 %478, 3
  %480 = shl nuw i32 %475, 7
  %481 = and i32 %480, -1024
  %482 = add i32 %481, %479
  br label %483

483:                                              ; preds = %477, %._crit_edge766, %419
  %.1582 = phi i32 [ %.2483, %419 ], [ %482, %477 ], [ 2147483647, %._crit_edge766 ]
  %484 = getelementptr inbounds i8, ptr %0, i64 512
  %.not947 = icmp eq i32 %7, 0
  br i1 %.not947, label %._crit_edge779, label %.lr.ph778.preheader

.lr.ph778.preheader:                              ; preds = %483
  %485 = load ptr, ptr %484, align 8, !tbaa !52
  br label %.lr.ph778

.lr.ph778:                                        ; preds = %.lr.ph778, %.lr.ph778.preheader
  %.pn646.pn = phi ptr [ %19, %.lr.ph778.preheader ], [ %.0589776, %.lr.ph778 ]
  %.pn647.pn = phi ptr [ %16, %.lr.ph778.preheader ], [ %.0587775, %.lr.ph778 ]
  %.pn649.pn = phi ptr [ %485, %.lr.ph778.preheader ], [ %.0588774, %.lr.ph778 ]
  %.0580773 = phi i32 [ 0, %.lr.ph778.preheader ], [ %494, %.lr.ph778 ]
  %.0583772 = phi i32 [ 0, %.lr.ph778.preheader ], [ %492, %.lr.ph778 ]
  %.0588774 = getelementptr inbounds i8, ptr %.pn649.pn, i64 1
  %.0587775 = getelementptr inbounds i8, ptr %.pn647.pn, i64 1
  %.0589776 = getelementptr inbounds i8, ptr %.pn646.pn, i64 1
  %486 = load i8, ptr %.0589776, align 1, !tbaa !24
  %487 = load i8, ptr %.0587775, align 1, !tbaa !24
  %.narrow648 = sub i8 %486, %487
  store i8 %.narrow648, ptr %.0588774, align 1, !tbaa !24
  %488 = zext i8 %.narrow648 to i32
  %489 = sub nuw nsw i32 256, %488
  %490 = icmp slt i8 %.narrow648, 0
  %491 = select i1 %490, i32 %489, i32 %488
  %492 = add i32 %491, %.0583772
  %493 = icmp ugt i32 %492, %.1582
  %494 = add nuw i32 %.0580773, 1
  %exitcond1008.not = icmp eq i32 %494, %7
  %or.cond1086 = select i1 %493, i1 true, i1 %exitcond1008.not
  br i1 %or.cond1086, label %._crit_edge779.loopexit, label %.lr.ph778, !llvm.loop !58

._crit_edge779.loopexit:                          ; preds = %.lr.ph778
  %.pre = load i8, ptr %420, align 8, !tbaa !30
  br label %._crit_edge779

._crit_edge779:                                   ; preds = %._crit_edge779.loopexit, %483
  %495 = phi i8 [ %421, %483 ], [ %.pre, %._crit_edge779.loopexit ]
  %.1584 = phi i32 [ 0, %483 ], [ %492, %._crit_edge779.loopexit ]
  %496 = icmp eq i8 %495, 2
  br i1 %496, label %497, label %557

497:                                              ; preds = %._crit_edge779
  %498 = and i32 %.1584, 65535
  %499 = lshr i32 %.1584, 10
  %500 = and i32 %499, 4194240
  %.not948 = icmp eq i8 %9, 0
  br i1 %.not948, label %._crit_edge788, label %.lr.ph787

.lr.ph787:                                        ; preds = %497
  %501 = getelementptr inbounds i8, ptr %0, i64 936
  %502 = load ptr, ptr %501, align 8, !tbaa !31
  %503 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count1012 = zext i8 %9 to i64
  %xtraiter1620 = and i64 %wide.trip.count1012, 1
  %504 = icmp eq i8 %9, 1
  br i1 %504, label %._crit_edge788.loopexit.unr-lcssa, label %.lr.ph787.new

.lr.ph787.new:                                    ; preds = %.lr.ph787
  %unroll_iter1624 = and i64 %wide.trip.count1012, 254
  br label %505

505:                                              ; preds = %531, %.lr.ph787.new
  %indvars.iv1009 = phi i64 [ 0, %.lr.ph787.new ], [ %indvars.iv.next1010.1, %531 ]
  %.0568785 = phi i32 [ %498, %.lr.ph787.new ], [ %.1569.1, %531 ]
  %.0570784 = phi i32 [ %500, %.lr.ph787.new ], [ %.1571.1, %531 ]
  %niter1625 = phi i64 [ 0, %.lr.ph787.new ], [ %niter1625.next.1, %531 ]
  %506 = getelementptr inbounds i8, ptr %502, i64 %indvars.iv1009
  %507 = load i8, ptr %506, align 1, !tbaa !24
  %508 = icmp eq i8 %507, 2
  br i1 %508, label %509, label %518

509:                                              ; preds = %505
  %510 = load ptr, ptr %503, align 8, !tbaa !32
  %511 = getelementptr inbounds i16, ptr %510, i64 %indvars.iv1009
  %512 = load i16, ptr %511, align 2, !tbaa !33
  %513 = zext i16 %512 to i32
  %514 = mul i32 %.0568785, %513
  %515 = lshr i32 %514, 8
  %516 = mul i32 %.0570784, %513
  %517 = lshr i32 %516, 8
  br label %518

518:                                              ; preds = %505, %509
  %.1571 = phi i32 [ %517, %509 ], [ %.0570784, %505 ]
  %.1569 = phi i32 [ %515, %509 ], [ %.0568785, %505 ]
  %indvars.iv.next1010 = or disjoint i64 %indvars.iv1009, 1
  %519 = getelementptr inbounds i8, ptr %502, i64 %indvars.iv.next1010
  %520 = load i8, ptr %519, align 1, !tbaa !24
  %521 = icmp eq i8 %520, 2
  br i1 %521, label %522, label %531

522:                                              ; preds = %518
  %523 = load ptr, ptr %503, align 8, !tbaa !32
  %524 = getelementptr inbounds i16, ptr %523, i64 %indvars.iv.next1010
  %525 = load i16, ptr %524, align 2, !tbaa !33
  %526 = zext i16 %525 to i32
  %527 = mul i32 %.1569, %526
  %528 = lshr i32 %527, 8
  %529 = mul i32 %.1571, %526
  %530 = lshr i32 %529, 8
  br label %531

531:                                              ; preds = %522, %518
  %.1571.1 = phi i32 [ %530, %522 ], [ %.1571, %518 ]
  %.1569.1 = phi i32 [ %528, %522 ], [ %.1569, %518 ]
  %indvars.iv.next1010.1 = add nuw nsw i64 %indvars.iv1009, 2
  %niter1625.next.1 = add i64 %niter1625, 2
  %niter1625.ncmp.1 = icmp eq i64 %niter1625.next.1, %unroll_iter1624
  br i1 %niter1625.ncmp.1, label %._crit_edge788.loopexit.unr-lcssa, label %505, !llvm.loop !59

._crit_edge788.loopexit.unr-lcssa:                ; preds = %531, %.lr.ph787
  %.1571.lcssa.ph = phi i32 [ poison, %.lr.ph787 ], [ %.1571.1, %531 ]
  %.1569.lcssa.ph = phi i32 [ poison, %.lr.ph787 ], [ %.1569.1, %531 ]
  %indvars.iv1009.unr = phi i64 [ 0, %.lr.ph787 ], [ %indvars.iv.next1010.1, %531 ]
  %.0568785.unr = phi i32 [ %498, %.lr.ph787 ], [ %.1569.1, %531 ]
  %.0570784.unr = phi i32 [ %500, %.lr.ph787 ], [ %.1571.1, %531 ]
  %lcmp.mod1621.not = icmp eq i64 %xtraiter1620, 0
  br i1 %lcmp.mod1621.not, label %._crit_edge788, label %.epil.preheader1619

.epil.preheader1619:                              ; preds = %._crit_edge788.loopexit.unr-lcssa
  %532 = getelementptr inbounds i8, ptr %502, i64 %indvars.iv1009.unr
  %533 = load i8, ptr %532, align 1, !tbaa !24
  %534 = icmp eq i8 %533, 2
  br i1 %534, label %535, label %._crit_edge788

535:                                              ; preds = %.epil.preheader1619
  %536 = load ptr, ptr %503, align 8, !tbaa !32
  %537 = getelementptr inbounds i16, ptr %536, i64 %indvars.iv1009.unr
  %538 = load i16, ptr %537, align 2, !tbaa !33
  %539 = zext i16 %538 to i32
  %540 = mul i32 %.0568785.unr, %539
  %541 = lshr i32 %540, 8
  %542 = mul i32 %.0570784.unr, %539
  %543 = lshr i32 %542, 8
  br label %._crit_edge788

._crit_edge788:                                   ; preds = %._crit_edge788.loopexit.unr-lcssa, %535, %.epil.preheader1619, %497
  %.0570.lcssa = phi i32 [ %500, %497 ], [ %.1571.lcssa.ph, %._crit_edge788.loopexit.unr-lcssa ], [ %543, %535 ], [ %.0570784.unr, %.epil.preheader1619 ]
  %.0568.lcssa = phi i32 [ %498, %497 ], [ %.1569.lcssa.ph, %._crit_edge788.loopexit.unr-lcssa ], [ %541, %535 ], [ %.0568785.unr, %.epil.preheader1619 ]
  %544 = getelementptr inbounds i8, ptr %0, i64 960
  %545 = load ptr, ptr %544, align 8, !tbaa !35
  %546 = getelementptr inbounds i8, ptr %545, i64 4
  %547 = load i16, ptr %546, align 2, !tbaa !33
  %548 = zext i16 %547 to i32
  %549 = mul i32 %.0570.lcssa, %548
  %550 = icmp ugt i32 %549, 33553927
  br i1 %550, label %557, label %551

551:                                              ; preds = %._crit_edge788
  %552 = mul i32 %.0568.lcssa, %548
  %553 = lshr i32 %552, 3
  %554 = shl nuw i32 %549, 7
  %555 = and i32 %554, -1024
  %556 = add i32 %555, %553
  br label %557

557:                                              ; preds = %551, %._crit_edge788, %._crit_edge779
  %.3586 = phi i32 [ %.1584, %._crit_edge779 ], [ %556, %551 ], [ 2147483647, %._crit_edge788 ]
  %558 = icmp ult i32 %.3586, %.2483
  br i1 %558, label %._crit_edge797.sink.split, label %._crit_edge797

._crit_edge797.sink.split:                        ; preds = %.lr.ph796.prol.loopexit, %.lr.ph796, %middle.block1220, %vec.epilog.middle.block1244, %557
  %.sink1087 = phi ptr [ %484, %557 ], [ %385, %vec.epilog.middle.block1244 ], [ %385, %middle.block1220 ], [ %385, %.lr.ph796 ], [ %385, %.lr.ph796.prol.loopexit ]
  %.4485.ph = phi i32 [ %.3586, %557 ], [ %.2483, %vec.epilog.middle.block1244 ], [ %.2483, %middle.block1220 ], [ %.2483, %.lr.ph796 ], [ %.2483, %.lr.ph796.prol.loopexit ]
  %.pre1046 = load ptr, ptr %.sink1087, align 8, !tbaa !52
  br label %._crit_edge797

._crit_edge797:                                   ; preds = %._crit_edge797.sink.split, %557, %417
  %.4485 = phi i32 [ %.2483, %417 ], [ %.2483, %557 ], [ %.4485.ph, %._crit_edge797.sink.split ]
  %.3 = phi ptr [ %.1480, %417 ], [ %.1480, %557 ], [ %.pre1046, %._crit_edge797.sink.split ]
  %559 = icmp eq i8 %4, 64
  br i1 %559, label %560, label %658

560:                                              ; preds = %._crit_edge797
  %561 = getelementptr inbounds i8, ptr %19, i64 1
  %562 = getelementptr inbounds i8, ptr %0, i64 520
  %563 = load ptr, ptr %562, align 8, !tbaa !60
  %564 = ptrtoint ptr %563 to i64
  %.0564839 = getelementptr inbounds i8, ptr %563, i64 1
  %.0562840 = getelementptr inbounds i8, ptr %16, i64 1
  %.not953 = icmp eq i8 %11, 0
  br i1 %.not953, label %.preheader693, label %.lr.ph846.preheader

.lr.ph846.preheader:                              ; preds = %560
  %565 = add nsw i32 %14, -1
  %566 = zext i32 %565 to i64
  %567 = add nuw nsw i64 %566, 1
  %min.iters.check1319 = icmp ult i32 %565, 15
  br i1 %min.iters.check1319, label %.lr.ph846.preheader1562, label %vector.memcheck1313

.lr.ph846.preheader1562:                          ; preds = %middle.block1317, %vector.memcheck1313, %.lr.ph846.preheader
  %.0562844.ph = phi ptr [ %.0562840, %vector.memcheck1313 ], [ %.0562840, %.lr.ph846.preheader ], [ %ind.end1323, %middle.block1317 ]
  %.0564843.ph = phi ptr [ %.0564839, %vector.memcheck1313 ], [ %.0564839, %.lr.ph846.preheader ], [ %ind.end1325, %middle.block1317 ]
  %.0559842.ph = phi i32 [ 0, %vector.memcheck1313 ], [ 0, %.lr.ph846.preheader ], [ %ind.end1328, %middle.block1317 ]
  %.0566841.ph = phi ptr [ %561, %vector.memcheck1313 ], [ %561, %.lr.ph846.preheader ], [ %ind.end1330, %middle.block1317 ]
  %568 = sub i32 %14, %.0559842.ph
  %xtraiter1646 = and i32 %568, 3
  %lcmp.mod1647.not = icmp eq i32 %xtraiter1646, 0
  br i1 %lcmp.mod1647.not, label %.lr.ph846.prol.loopexit, label %.lr.ph846.prol

.lr.ph846.prol:                                   ; preds = %.lr.ph846.preheader1562, %.lr.ph846.prol
  %.0562844.prol = phi ptr [ %.0562.prol, %.lr.ph846.prol ], [ %.0562844.ph, %.lr.ph846.preheader1562 ]
  %.0564843.prol = phi ptr [ %.0564.prol, %.lr.ph846.prol ], [ %.0564843.ph, %.lr.ph846.preheader1562 ]
  %.0559842.prol = phi i32 [ %573, %.lr.ph846.prol ], [ %.0559842.ph, %.lr.ph846.preheader1562 ]
  %.0566841.prol = phi ptr [ %569, %.lr.ph846.prol ], [ %.0566841.ph, %.lr.ph846.preheader1562 ]
  %prol.iter1648 = phi i32 [ %prol.iter1648.next, %.lr.ph846.prol ], [ 0, %.lr.ph846.preheader1562 ]
  %569 = getelementptr inbounds i8, ptr %.0566841.prol, i64 1
  %570 = load i8, ptr %.0566841.prol, align 1, !tbaa !24
  %571 = load i8, ptr %.0562844.prol, align 1, !tbaa !24
  %572 = lshr i8 %571, 1
  %.narrow678.prol = sub i8 %570, %572
  store i8 %.narrow678.prol, ptr %.0564843.prol, align 1, !tbaa !24
  %573 = add nuw nsw i32 %.0559842.prol, 1
  %.0564.prol = getelementptr inbounds i8, ptr %.0564843.prol, i64 1
  %.0562.prol = getelementptr inbounds i8, ptr %.0562844.prol, i64 1
  %prol.iter1648.next = add i32 %prol.iter1648, 1
  %prol.iter1648.cmp.not = icmp eq i32 %prol.iter1648.next, %xtraiter1646
  br i1 %prol.iter1648.cmp.not, label %.lr.ph846.prol.loopexit, label %.lr.ph846.prol, !llvm.loop !61

.lr.ph846.prol.loopexit:                          ; preds = %.lr.ph846.prol, %.lr.ph846.preheader1562
  %.lcssa1565.unr = phi ptr [ poison, %.lr.ph846.preheader1562 ], [ %569, %.lr.ph846.prol ]
  %.0564.lcssa1564.unr = phi ptr [ poison, %.lr.ph846.preheader1562 ], [ %.0564.prol, %.lr.ph846.prol ]
  %.0562.lcssa1563.unr = phi ptr [ poison, %.lr.ph846.preheader1562 ], [ %.0562.prol, %.lr.ph846.prol ]
  %.0562844.unr = phi ptr [ %.0562844.ph, %.lr.ph846.preheader1562 ], [ %.0562.prol, %.lr.ph846.prol ]
  %.0564843.unr = phi ptr [ %.0564843.ph, %.lr.ph846.preheader1562 ], [ %.0564.prol, %.lr.ph846.prol ]
  %.0559842.unr = phi i32 [ %.0559842.ph, %.lr.ph846.preheader1562 ], [ %573, %.lr.ph846.prol ]
  %.0566841.unr = phi ptr [ %.0566841.ph, %.lr.ph846.preheader1562 ], [ %569, %.lr.ph846.prol ]
  %574 = sub i32 %.0559842.ph, %14
  %575 = icmp ugt i32 %574, -4
  br i1 %575, label %.preheader693, label %.lr.ph846

vector.memcheck1313:                              ; preds = %.lr.ph846.preheader
  %576 = sub i64 %564, %20
  %diff.check1314 = icmp ult i64 %576, 16
  %577 = sub i64 %564, %17
  %diff.check1315 = icmp ult i64 %577, 16
  %conflict.rdx1316 = or i1 %diff.check1314, %diff.check1315
  br i1 %conflict.rdx1316, label %.lr.ph846.preheader1562, label %vector.ph1320

vector.ph1320:                                    ; preds = %vector.memcheck1313
  %n.vec1322 = and i64 %567, 8589934576
  %ind.end1323 = getelementptr i8, ptr %.0562840, i64 %n.vec1322
  %ind.end1325 = getelementptr i8, ptr %.0564839, i64 %n.vec1322
  %ind.end1328 = trunc i64 %n.vec1322 to i32
  %ind.end1330 = getelementptr i8, ptr %561, i64 %n.vec1322
  br label %vector.body1332

vector.body1332:                                  ; preds = %vector.body1332, %vector.ph1320
  %index1333 = phi i64 [ 0, %vector.ph1320 ], [ %index.next1339, %vector.body1332 ]
  %next.gep1334 = getelementptr i8, ptr %.0562840, i64 %index1333
  %next.gep1335 = getelementptr i8, ptr %.0564839, i64 %index1333
  %next.gep1336 = getelementptr i8, ptr %561, i64 %index1333
  %wide.load1337 = load <16 x i8>, ptr %next.gep1336, align 1, !tbaa !24
  %wide.load1338 = load <16 x i8>, ptr %next.gep1334, align 1, !tbaa !24
  %578 = lshr <16 x i8> %wide.load1338, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
  %579 = sub <16 x i8> %wide.load1337, %578
  store <16 x i8> %579, ptr %next.gep1335, align 1, !tbaa !24
  %index.next1339 = add nuw i64 %index1333, 16
  %580 = icmp eq i64 %index.next1339, %n.vec1322
  br i1 %580, label %middle.block1317, label %vector.body1332, !llvm.loop !62

middle.block1317:                                 ; preds = %vector.body1332
  %cmp.n1340 = icmp eq i64 %567, %n.vec1322
  br i1 %cmp.n1340, label %.preheader693, label %.lr.ph846.preheader1562

.preheader693:                                    ; preds = %.lr.ph846.prol.loopexit, %.lr.ph846, %middle.block1317, %560
  %.0566.lcssa = phi ptr [ %561, %560 ], [ %ind.end1330, %middle.block1317 ], [ %.lcssa1565.unr, %.lr.ph846.prol.loopexit ], [ %630, %.lr.ph846 ]
  %.0559.lcssa = phi i32 [ 0, %560 ], [ %14, %middle.block1317 ], [ %14, %.lr.ph846 ], [ %14, %.lr.ph846.prol.loopexit ]
  %.0564.lcssa = phi ptr [ %.0564839, %560 ], [ %ind.end1325, %middle.block1317 ], [ %.0564.lcssa1564.unr, %.lr.ph846.prol.loopexit ], [ %.0564.3, %.lr.ph846 ]
  %.0562.lcssa = phi ptr [ %.0562840, %560 ], [ %ind.end1323, %middle.block1317 ], [ %.0562.lcssa1563.unr, %.lr.ph846.prol.loopexit ], [ %.0562.3, %.lr.ph846 ]
  %.0564.lcssa1342 = ptrtoint ptr %.0564.lcssa to i64
  %.0566.lcssa1344 = ptrtoint ptr %.0566.lcssa to i64
  %.0562.lcssa1347 = ptrtoint ptr %.0562.lcssa to i64
  %581 = icmp ult i32 %.0559.lcssa, %7
  br i1 %581, label %iter.check1354, label %.sink.split1088

iter.check1354:                                   ; preds = %.preheader693
  %582 = xor i32 %.0559.lcssa, -1
  %583 = add i32 %582, %7
  %584 = zext i32 %583 to i64
  %585 = add nuw nsw i64 %584, 1
  %min.iters.check1352 = icmp ult i32 %583, 7
  br i1 %min.iters.check1352, label %.lr.ph856.preheader, label %vector.memcheck1341

vector.memcheck1341:                              ; preds = %iter.check1354
  %586 = sub i64 %20, %.0564.lcssa1342
  %diff.check1343 = icmp ugt i64 %586, -17
  %587 = sub i64 %.0564.lcssa1342, %.0566.lcssa1344
  %diff.check1345 = icmp ult i64 %587, 16
  %conflict.rdx1346 = or i1 %diff.check1343, %diff.check1345
  %588 = sub i64 %.0564.lcssa1342, %.0562.lcssa1347
  %diff.check1348 = icmp ult i64 %588, 16
  %conflict.rdx1349 = or i1 %conflict.rdx1346, %diff.check1348
  br i1 %conflict.rdx1349, label %.lr.ph856.preheader, label %vector.main.loop.iter.check1356

vector.main.loop.iter.check1356:                  ; preds = %vector.memcheck1341
  %min.iters.check1355 = icmp ult i32 %583, 15
  br i1 %min.iters.check1355, label %vec.epilog.ph1373, label %vector.ph1357

vector.ph1357:                                    ; preds = %vector.main.loop.iter.check1356
  %n.vec1359 = and i64 %585, 8589934576
  br label %vector.body1360

vector.body1360:                                  ; preds = %vector.body1360, %vector.ph1357
  %index1361 = phi i64 [ 0, %vector.ph1357 ], [ %index.next1369, %vector.body1360 ]
  %next.gep1362 = getelementptr i8, ptr %561, i64 %index1361
  %next.gep1363 = getelementptr i8, ptr %.0562.lcssa, i64 %index1361
  %next.gep1364 = getelementptr i8, ptr %.0564.lcssa, i64 %index1361
  %next.gep1365 = getelementptr i8, ptr %.0566.lcssa, i64 %index1361
  %wide.load1366 = load <16 x i8>, ptr %next.gep1365, align 1, !tbaa !24
  %wide.load1367 = load <16 x i8>, ptr %next.gep1363, align 1, !tbaa !24
  %589 = zext <16 x i8> %wide.load1367 to <16 x i16>
  %wide.load1368 = load <16 x i8>, ptr %next.gep1362, align 1, !tbaa !24
  %590 = zext <16 x i8> %wide.load1368 to <16 x i16>
  %591 = add nuw nsw <16 x i16> %590, %589
  %592 = lshr <16 x i16> %591, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %593 = trunc nuw <16 x i16> %592 to <16 x i8>
  %594 = sub <16 x i8> %wide.load1366, %593
  store <16 x i8> %594, ptr %next.gep1364, align 1, !tbaa !24
  %index.next1369 = add nuw i64 %index1361, 16
  %595 = icmp eq i64 %index.next1369, %n.vec1359
  br i1 %595, label %middle.block1350, label %vector.body1360, !llvm.loop !63

middle.block1350:                                 ; preds = %vector.body1360
  %cmp.n1370 = icmp eq i64 %585, %n.vec1359
  br i1 %cmp.n1370, label %.sink.split1088, label %vec.epilog.iter.check1374

vec.epilog.iter.check1374:                        ; preds = %middle.block1350
  %ind.end1395 = getelementptr i8, ptr %.0566.lcssa, i64 %n.vec1359
  %ind.end1392 = getelementptr i8, ptr %.0564.lcssa, i64 %n.vec1359
  %ind.end1389 = getelementptr i8, ptr %.0562.lcssa, i64 %n.vec1359
  %ind.end1386 = getelementptr i8, ptr %561, i64 %n.vec1359
  %.cast1382 = trunc i64 %n.vec1359 to i32
  %ind.end1383 = add i32 %.0559.lcssa, %.cast1382
  %n.vec.remaining1375 = and i64 %585, 8
  %min.epilog.iters.check1376.not.not = icmp eq i64 %n.vec.remaining1375, 0
  br i1 %min.epilog.iters.check1376.not.not, label %.lr.ph856.preheader, label %vec.epilog.ph1373

.lr.ph856.preheader:                              ; preds = %vec.epilog.middle.block1371, %vector.memcheck1341, %iter.check1354, %vec.epilog.iter.check1374
  %.1560855.ph = phi i32 [ %.0559.lcssa, %iter.check1354 ], [ %.0559.lcssa, %vector.memcheck1341 ], [ %ind.end1383, %vec.epilog.iter.check1374 ], [ %ind.end1381, %vec.epilog.middle.block1371 ]
  %.0561854.ph = phi ptr [ %561, %iter.check1354 ], [ %561, %vector.memcheck1341 ], [ %ind.end1386, %vec.epilog.iter.check1374 ], [ %ind.end1385, %vec.epilog.middle.block1371 ]
  %.1563853.ph = phi ptr [ %.0562.lcssa, %iter.check1354 ], [ %.0562.lcssa, %vector.memcheck1341 ], [ %ind.end1389, %vec.epilog.iter.check1374 ], [ %ind.end1388, %vec.epilog.middle.block1371 ]
  %.1565852.ph = phi ptr [ %.0564.lcssa, %iter.check1354 ], [ %.0564.lcssa, %vector.memcheck1341 ], [ %ind.end1392, %vec.epilog.iter.check1374 ], [ %ind.end1391, %vec.epilog.middle.block1371 ]
  %.1567851.ph = phi ptr [ %.0566.lcssa, %iter.check1354 ], [ %.0566.lcssa, %vector.memcheck1341 ], [ %ind.end1395, %vec.epilog.iter.check1374 ], [ %ind.end1394, %vec.epilog.middle.block1371 ]
  %596 = sub i32 %7, %.1560855.ph
  %xtraiter1649 = and i32 %596, 1
  %lcmp.mod1650.not = icmp eq i32 %xtraiter1649, 0
  br i1 %lcmp.mod1650.not, label %.lr.ph856.prol.loopexit, label %.lr.ph856.prol

.lr.ph856.prol:                                   ; preds = %.lr.ph856.preheader
  %597 = getelementptr inbounds i8, ptr %.1567851.ph, i64 1
  %598 = load i8, ptr %.1567851.ph, align 1, !tbaa !24
  %599 = getelementptr inbounds i8, ptr %.1563853.ph, i64 1
  %600 = load i8, ptr %.1563853.ph, align 1, !tbaa !24
  %601 = zext i8 %600 to i16
  %602 = getelementptr inbounds i8, ptr %.0561854.ph, i64 1
  %603 = load i8, ptr %.0561854.ph, align 1, !tbaa !24
  %604 = zext i8 %603 to i16
  %605 = add nuw nsw i16 %604, %601
  %606 = lshr i16 %605, 1
  %.tr674.prol = trunc nuw i16 %606 to i8
  %.narrow675.prol = sub i8 %598, %.tr674.prol
  %607 = getelementptr inbounds i8, ptr %.1565852.ph, i64 1
  store i8 %.narrow675.prol, ptr %.1565852.ph, align 1, !tbaa !24
  %608 = add nuw i32 %.1560855.ph, 1
  br label %.lr.ph856.prol.loopexit

.lr.ph856.prol.loopexit:                          ; preds = %.lr.ph856.prol, %.lr.ph856.preheader
  %.1560855.unr = phi i32 [ %.1560855.ph, %.lr.ph856.preheader ], [ %608, %.lr.ph856.prol ]
  %.0561854.unr = phi ptr [ %.0561854.ph, %.lr.ph856.preheader ], [ %602, %.lr.ph856.prol ]
  %.1563853.unr = phi ptr [ %.1563853.ph, %.lr.ph856.preheader ], [ %599, %.lr.ph856.prol ]
  %.1565852.unr = phi ptr [ %.1565852.ph, %.lr.ph856.preheader ], [ %607, %.lr.ph856.prol ]
  %.1567851.unr = phi ptr [ %.1567851.ph, %.lr.ph856.preheader ], [ %597, %.lr.ph856.prol ]
  %609 = add i32 %7, -1
  %610 = icmp eq i32 %.1560855.ph, %609
  br i1 %610, label %.sink.split1088, label %.lr.ph856

vec.epilog.ph1373:                                ; preds = %vector.main.loop.iter.check1356, %vec.epilog.iter.check1374
  %vec.epilog.resume.val1377 = phi i64 [ %n.vec1359, %vec.epilog.iter.check1374 ], [ 0, %vector.main.loop.iter.check1356 ]
  %n.vec1379 = and i64 %585, 8589934584
  %.cast1380 = trunc i64 %n.vec1379 to i32
  %ind.end1381 = add i32 %.0559.lcssa, %.cast1380
  %ind.end1385 = getelementptr i8, ptr %561, i64 %n.vec1379
  %ind.end1388 = getelementptr i8, ptr %.0562.lcssa, i64 %n.vec1379
  %ind.end1391 = getelementptr i8, ptr %.0564.lcssa, i64 %n.vec1379
  %ind.end1394 = getelementptr i8, ptr %.0566.lcssa, i64 %n.vec1379
  br label %vec.epilog.vector.body1397

vec.epilog.vector.body1397:                       ; preds = %vec.epilog.vector.body1397, %vec.epilog.ph1373
  %index1398 = phi i64 [ %vec.epilog.resume.val1377, %vec.epilog.ph1373 ], [ %index.next1406, %vec.epilog.vector.body1397 ]
  %next.gep1399 = getelementptr i8, ptr %561, i64 %index1398
  %next.gep1400 = getelementptr i8, ptr %.0562.lcssa, i64 %index1398
  %next.gep1401 = getelementptr i8, ptr %.0564.lcssa, i64 %index1398
  %next.gep1402 = getelementptr i8, ptr %.0566.lcssa, i64 %index1398
  %wide.load1403 = load <8 x i8>, ptr %next.gep1402, align 1, !tbaa !24
  %wide.load1404 = load <8 x i8>, ptr %next.gep1400, align 1, !tbaa !24
  %611 = zext <8 x i8> %wide.load1404 to <8 x i16>
  %wide.load1405 = load <8 x i8>, ptr %next.gep1399, align 1, !tbaa !24
  %612 = zext <8 x i8> %wide.load1405 to <8 x i16>
  %613 = add nuw nsw <8 x i16> %612, %611
  %614 = lshr <8 x i16> %613, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %615 = trunc nuw <8 x i16> %614 to <8 x i8>
  %616 = sub <8 x i8> %wide.load1403, %615
  store <8 x i8> %616, ptr %next.gep1401, align 1, !tbaa !24
  %index.next1406 = add nuw i64 %index1398, 8
  %617 = icmp eq i64 %index.next1406, %n.vec1379
  br i1 %617, label %vec.epilog.middle.block1371, label %vec.epilog.vector.body1397, !llvm.loop !64

vec.epilog.middle.block1371:                      ; preds = %vec.epilog.vector.body1397
  %cmp.n1407 = icmp eq i64 %585, %n.vec1379
  br i1 %cmp.n1407, label %.sink.split1088, label %.lr.ph856.preheader

.lr.ph846:                                        ; preds = %.lr.ph846.prol.loopexit, %.lr.ph846
  %.0562844 = phi ptr [ %.0562.3, %.lr.ph846 ], [ %.0562844.unr, %.lr.ph846.prol.loopexit ]
  %.0564843 = phi ptr [ %.0564.3, %.lr.ph846 ], [ %.0564843.unr, %.lr.ph846.prol.loopexit ]
  %.0559842 = phi i32 [ %634, %.lr.ph846 ], [ %.0559842.unr, %.lr.ph846.prol.loopexit ]
  %.0566841 = phi ptr [ %630, %.lr.ph846 ], [ %.0566841.unr, %.lr.ph846.prol.loopexit ]
  %618 = getelementptr inbounds i8, ptr %.0566841, i64 1
  %619 = load i8, ptr %.0566841, align 1, !tbaa !24
  %620 = load i8, ptr %.0562844, align 1, !tbaa !24
  %621 = lshr i8 %620, 1
  %.narrow678 = sub i8 %619, %621
  store i8 %.narrow678, ptr %.0564843, align 1, !tbaa !24
  %.0564 = getelementptr inbounds i8, ptr %.0564843, i64 1
  %.0562 = getelementptr inbounds i8, ptr %.0562844, i64 1
  %622 = getelementptr inbounds i8, ptr %.0566841, i64 2
  %623 = load i8, ptr %618, align 1, !tbaa !24
  %624 = load i8, ptr %.0562, align 1, !tbaa !24
  %625 = lshr i8 %624, 1
  %.narrow678.1 = sub i8 %623, %625
  store i8 %.narrow678.1, ptr %.0564, align 1, !tbaa !24
  %.0564.1 = getelementptr inbounds i8, ptr %.0564843, i64 2
  %.0562.1 = getelementptr inbounds i8, ptr %.0562844, i64 2
  %626 = getelementptr inbounds i8, ptr %.0566841, i64 3
  %627 = load i8, ptr %622, align 1, !tbaa !24
  %628 = load i8, ptr %.0562.1, align 1, !tbaa !24
  %629 = lshr i8 %628, 1
  %.narrow678.2 = sub i8 %627, %629
  store i8 %.narrow678.2, ptr %.0564.1, align 1, !tbaa !24
  %.0564.2 = getelementptr inbounds i8, ptr %.0564843, i64 3
  %.0562.2 = getelementptr inbounds i8, ptr %.0562844, i64 3
  %630 = getelementptr inbounds i8, ptr %.0566841, i64 4
  %631 = load i8, ptr %626, align 1, !tbaa !24
  %632 = load i8, ptr %.0562.2, align 1, !tbaa !24
  %633 = lshr i8 %632, 1
  %.narrow678.3 = sub i8 %631, %633
  store i8 %.narrow678.3, ptr %.0564.2, align 1, !tbaa !24
  %634 = add nuw nsw i32 %.0559842, 4
  %.0564.3 = getelementptr inbounds i8, ptr %.0564843, i64 4
  %.0562.3 = getelementptr inbounds i8, ptr %.0562844, i64 4
  %exitcond1026.not.3 = icmp eq i32 %634, %14
  br i1 %exitcond1026.not.3, label %.preheader693, label %.lr.ph846, !llvm.loop !65

.lr.ph856:                                        ; preds = %.lr.ph856.prol.loopexit, %.lr.ph856
  %.1560855 = phi i32 [ %657, %.lr.ph856 ], [ %.1560855.unr, %.lr.ph856.prol.loopexit ]
  %.0561854 = phi ptr [ %651, %.lr.ph856 ], [ %.0561854.unr, %.lr.ph856.prol.loopexit ]
  %.1563853 = phi ptr [ %648, %.lr.ph856 ], [ %.1563853.unr, %.lr.ph856.prol.loopexit ]
  %.1565852 = phi ptr [ %656, %.lr.ph856 ], [ %.1565852.unr, %.lr.ph856.prol.loopexit ]
  %.1567851 = phi ptr [ %646, %.lr.ph856 ], [ %.1567851.unr, %.lr.ph856.prol.loopexit ]
  %635 = getelementptr inbounds i8, ptr %.1567851, i64 1
  %636 = load i8, ptr %.1567851, align 1, !tbaa !24
  %637 = getelementptr inbounds i8, ptr %.1563853, i64 1
  %638 = load i8, ptr %.1563853, align 1, !tbaa !24
  %639 = zext i8 %638 to i16
  %640 = getelementptr inbounds i8, ptr %.0561854, i64 1
  %641 = load i8, ptr %.0561854, align 1, !tbaa !24
  %642 = zext i8 %641 to i16
  %643 = add nuw nsw i16 %642, %639
  %644 = lshr i16 %643, 1
  %.tr674 = trunc nuw i16 %644 to i8
  %.narrow675 = sub i8 %636, %.tr674
  %645 = getelementptr inbounds i8, ptr %.1565852, i64 1
  store i8 %.narrow675, ptr %.1565852, align 1, !tbaa !24
  %646 = getelementptr inbounds i8, ptr %.1567851, i64 2
  %647 = load i8, ptr %635, align 1, !tbaa !24
  %648 = getelementptr inbounds i8, ptr %.1563853, i64 2
  %649 = load i8, ptr %637, align 1, !tbaa !24
  %650 = zext i8 %649 to i16
  %651 = getelementptr inbounds i8, ptr %.0561854, i64 2
  %652 = load i8, ptr %640, align 1, !tbaa !24
  %653 = zext i8 %652 to i16
  %654 = add nuw nsw i16 %653, %650
  %655 = lshr i16 %654, 1
  %.tr674.1 = trunc nuw i16 %655 to i8
  %.narrow675.1 = sub i8 %647, %.tr674.1
  %656 = getelementptr inbounds i8, ptr %.1565852, i64 2
  store i8 %.narrow675.1, ptr %645, align 1, !tbaa !24
  %657 = add nuw i32 %.1560855, 2
  %exitcond1027.not.1 = icmp eq i32 %657, %7
  br i1 %exitcond1027.not.1, label %.sink.split1088, label %.lr.ph856, !llvm.loop !66

658:                                              ; preds = %._crit_edge797
  %659 = and i32 %21, 64
  %.not650 = icmp eq i32 %659, 0
  br i1 %.not650, label %869, label %660

660:                                              ; preds = %658
  %661 = getelementptr inbounds i8, ptr %0, i64 928
  %662 = load i8, ptr %661, align 8, !tbaa !30
  %663 = icmp eq i8 %662, 2
  br i1 %663, label %664, label %724

664:                                              ; preds = %660
  %665 = and i32 %.4485, 65535
  %666 = lshr i32 %.4485, 10
  %667 = and i32 %666, 4194240
  %.not950 = icmp eq i8 %9, 0
  br i1 %.not950, label %._crit_edge803, label %.lr.ph802

.lr.ph802:                                        ; preds = %664
  %668 = getelementptr inbounds i8, ptr %0, i64 936
  %669 = load ptr, ptr %668, align 8, !tbaa !31
  %670 = getelementptr inbounds i8, ptr %0, i64 952
  %wide.trip.count1018 = zext i8 %9 to i64
  %xtraiter1630 = and i64 %wide.trip.count1018, 1
  %671 = icmp eq i8 %9, 1
  br i1 %671, label %._crit_edge803.loopexit.unr-lcssa, label %.lr.ph802.new

.lr.ph802.new:                                    ; preds = %.lr.ph802
  %unroll_iter1634 = and i64 %wide.trip.count1018, 254
  br label %672

672:                                              ; preds = %698, %.lr.ph802.new
  %indvars.iv1015 = phi i64 [ 0, %.lr.ph802.new ], [ %indvars.iv.next1016.1, %698 ]
  %.0538800 = phi i32 [ %665, %.lr.ph802.new ], [ %.1539.1, %698 ]
  %.0540799 = phi i32 [ %667, %.lr.ph802.new ], [ %.1541.1, %698 ]
  %niter1635 = phi i64 [ 0, %.lr.ph802.new ], [ %niter1635.next.1, %698 ]
  %673 = getelementptr inbounds i8, ptr %669, i64 %indvars.iv1015
  %674 = load i8, ptr %673, align 1, !tbaa !24
  %675 = icmp eq i8 %674, 3
  br i1 %675, label %676, label %685

676:                                              ; preds = %672
  %677 = load ptr, ptr %670, align 8, !tbaa !45
  %678 = getelementptr inbounds i16, ptr %677, i64 %indvars.iv1015
  %679 = load i16, ptr %678, align 2, !tbaa !33
  %680 = zext i16 %679 to i32
  %681 = mul i32 %.0538800, %680
  %682 = lshr i32 %681, 8
  %683 = mul i32 %.0540799, %680
  %684 = lshr i32 %683, 8
  br label %685

685:                                              ; preds = %672, %676
  %.1541 = phi i32 [ %684, %676 ], [ %.0540799, %672 ]
  %.1539 = phi i32 [ %682, %676 ], [ %.0538800, %672 ]
  %indvars.iv.next1016 = or disjoint i64 %indvars.iv1015, 1
  %686 = getelementptr inbounds i8, ptr %669, i64 %indvars.iv.next1016
  %687 = load i8, ptr %686, align 1, !tbaa !24
  %688 = icmp eq i8 %687, 3
  br i1 %688, label %689, label %698

689:                                              ; preds = %685
  %690 = load ptr, ptr %670, align 8, !tbaa !45
  %691 = getelementptr inbounds i16, ptr %690, i64 %indvars.iv.next1016
  %692 = load i16, ptr %691, align 2, !tbaa !33
  %693 = zext i16 %692 to i32
  %694 = mul i32 %.1539, %693
  %695 = lshr i32 %694, 8
  %696 = mul i32 %.1541, %693
  %697 = lshr i32 %696, 8
  br label %698

698:                                              ; preds = %689, %685
  %.1541.1 = phi i32 [ %697, %689 ], [ %.1541, %685 ]
  %.1539.1 = phi i32 [ %695, %689 ], [ %.1539, %685 ]
  %indvars.iv.next1016.1 = add nuw nsw i64 %indvars.iv1015, 2
  %niter1635.next.1 = add i64 %niter1635, 2
  %niter1635.ncmp.1 = icmp eq i64 %niter1635.next.1, %unroll_iter1634
  br i1 %niter1635.ncmp.1, label %._crit_edge803.loopexit.unr-lcssa, label %672, !llvm.loop !67

._crit_edge803.loopexit.unr-lcssa:                ; preds = %698, %.lr.ph802
  %.1541.lcssa.ph = phi i32 [ poison, %.lr.ph802 ], [ %.1541.1, %698 ]
  %.1539.lcssa.ph = phi i32 [ poison, %.lr.ph802 ], [ %.1539.1, %698 ]
  %indvars.iv1015.unr = phi i64 [ 0, %.lr.ph802 ], [ %indvars.iv.next1016.1, %698 ]
  %.0538800.unr = phi i32 [ %665, %.lr.ph802 ], [ %.1539.1, %698 ]
  %.0540799.unr = phi i32 [ %667, %.lr.ph802 ], [ %.1541.1, %698 ]
  %lcmp.mod1631.not = icmp eq i64 %xtraiter1630, 0
  br i1 %lcmp.mod1631.not, label %._crit_edge803, label %.epil.preheader1629

.epil.preheader1629:                              ; preds = %._crit_edge803.loopexit.unr-lcssa
  %699 = getelementptr inbounds i8, ptr %669, i64 %indvars.iv1015.unr
  %700 = load i8, ptr %699, align 1, !tbaa !24
  %701 = icmp eq i8 %700, 3
  br i1 %701, label %702, label %._crit_edge803

702:                                              ; preds = %.epil.preheader1629
  %703 = load ptr, ptr %670, align 8, !tbaa !45
  %704 = getelementptr inbounds i16, ptr %703, i64 %indvars.iv1015.unr
  %705 = load i16, ptr %704, align 2, !tbaa !33
  %706 = zext i16 %705 to i32
  %707 = mul i32 %.0538800.unr, %706
  %708 = lshr i32 %707, 8
  %709 = mul i32 %.0540799.unr, %706
  %710 = lshr i32 %709, 8
  br label %._crit_edge803

._crit_edge803:                                   ; preds = %._crit_edge803.loopexit.unr-lcssa, %702, %.epil.preheader1629, %664
  %.0540.lcssa = phi i32 [ %667, %664 ], [ %.1541.lcssa.ph, %._crit_edge803.loopexit.unr-lcssa ], [ %710, %702 ], [ %.0540799.unr, %.epil.preheader1629 ]
  %.0538.lcssa = phi i32 [ %665, %664 ], [ %.1539.lcssa.ph, %._crit_edge803.loopexit.unr-lcssa ], [ %708, %702 ], [ %.0538800.unr, %.epil.preheader1629 ]
  %711 = getelementptr inbounds i8, ptr %0, i64 968
  %712 = load ptr, ptr %711, align 8, !tbaa !47
  %713 = getelementptr inbounds i8, ptr %712, i64 6
  %714 = load i16, ptr %713, align 2, !tbaa !33
  %715 = zext i16 %714 to i32
  %716 = mul i32 %.0540.lcssa, %715
  %717 = icmp ugt i32 %716, 33553927
  br i1 %717, label %724, label %718

718:                                              ; preds = %._crit_edge803
  %719 = mul i32 %.0538.lcssa, %715
  %720 = lshr i32 %719, 3
  %721 = shl nuw i32 %716, 7
  %722 = and i32 %721, -1024
  %723 = add i32 %722, %720
  br label %724

724:                                              ; preds = %718, %._crit_edge803, %660
  %.1546 = phi i32 [ %.4485, %660 ], [ %723, %718 ], [ 2147483647, %._crit_edge803 ]
  %725 = getelementptr inbounds i8, ptr %19, i64 1
  %726 = getelementptr inbounds i8, ptr %0, i64 520
  %727 = load ptr, ptr %726, align 8, !tbaa !60
  %728 = ptrtoint ptr %727 to i64
  %.0555806 = getelementptr inbounds i8, ptr %727, i64 1
  %.0553807 = getelementptr inbounds i8, ptr %16, i64 1
  %.not951 = icmp eq i8 %11, 0
  br i1 %.not951, label %.preheader694, label %.lr.ph814.preheader

.lr.ph814.preheader:                              ; preds = %724
  %729 = add nsw i32 %14, -1
  %730 = zext i32 %729 to i64
  %731 = add nuw nsw i64 %730, 1
  %min.iters.check1282 = icmp ult i32 %729, 7
  br i1 %min.iters.check1282, label %.lr.ph814.preheader1567, label %vector.memcheck1276

.lr.ph814.preheader1567:                          ; preds = %middle.block1280, %vector.memcheck1276, %.lr.ph814.preheader
  %.0553812.ph = phi ptr [ %.0553807, %vector.memcheck1276 ], [ %.0553807, %.lr.ph814.preheader ], [ %ind.end1286, %middle.block1280 ]
  %.0555811.ph = phi ptr [ %.0555806, %vector.memcheck1276 ], [ %.0555806, %.lr.ph814.preheader ], [ %ind.end1288, %middle.block1280 ]
  %.0543810.ph = phi i32 [ 0, %vector.memcheck1276 ], [ 0, %.lr.ph814.preheader ], [ %ind.end1291, %middle.block1280 ]
  %.0547809.ph = phi i32 [ 0, %vector.memcheck1276 ], [ 0, %.lr.ph814.preheader ], [ %764, %middle.block1280 ]
  %.0557808.ph = phi ptr [ %725, %vector.memcheck1276 ], [ %725, %.lr.ph814.preheader ], [ %ind.end1293, %middle.block1280 ]
  %732 = sub i32 %14, %.0543810.ph
  %.neg1677 = add i32 %.0543810.ph, 1
  %xtraiter1636 = and i32 %732, 1
  %lcmp.mod1637.not = icmp eq i32 %xtraiter1636, 0
  br i1 %lcmp.mod1637.not, label %.lr.ph814.prol.loopexit, label %.lr.ph814.prol

.lr.ph814.prol:                                   ; preds = %.lr.ph814.preheader1567
  %733 = getelementptr inbounds i8, ptr %.0557808.ph, i64 1
  %734 = load i8, ptr %.0557808.ph, align 1, !tbaa !24
  %735 = load i8, ptr %.0553812.ph, align 1, !tbaa !24
  %736 = lshr i8 %735, 1
  %.narrow654.prol = sub i8 %734, %736
  store i8 %.narrow654.prol, ptr %.0555811.ph, align 1, !tbaa !24
  %737 = zext i8 %.narrow654.prol to i32
  %738 = sub nuw nsw i32 256, %737
  %739 = icmp slt i8 %.narrow654.prol, 0
  %740 = select i1 %739, i32 %738, i32 %737
  %741 = add i32 %740, %.0547809.ph
  %742 = add nuw nsw i32 %.0543810.ph, 1
  %.0555.prol = getelementptr inbounds i8, ptr %.0555811.ph, i64 1
  %.0553.prol = getelementptr inbounds i8, ptr %.0553812.ph, i64 1
  br label %.lr.ph814.prol.loopexit

.lr.ph814.prol.loopexit:                          ; preds = %.lr.ph814.prol, %.lr.ph814.preheader1567
  %.lcssa1571.unr = phi ptr [ poison, %.lr.ph814.preheader1567 ], [ %733, %.lr.ph814.prol ]
  %.lcssa1570.unr = phi i32 [ poison, %.lr.ph814.preheader1567 ], [ %741, %.lr.ph814.prol ]
  %.0555.lcssa1569.unr = phi ptr [ poison, %.lr.ph814.preheader1567 ], [ %.0555.prol, %.lr.ph814.prol ]
  %.0553.lcssa1568.unr = phi ptr [ poison, %.lr.ph814.preheader1567 ], [ %.0553.prol, %.lr.ph814.prol ]
  %.0553812.unr = phi ptr [ %.0553812.ph, %.lr.ph814.preheader1567 ], [ %.0553.prol, %.lr.ph814.prol ]
  %.0555811.unr = phi ptr [ %.0555811.ph, %.lr.ph814.preheader1567 ], [ %.0555.prol, %.lr.ph814.prol ]
  %.0543810.unr = phi i32 [ %.0543810.ph, %.lr.ph814.preheader1567 ], [ %742, %.lr.ph814.prol ]
  %.0547809.unr = phi i32 [ %.0547809.ph, %.lr.ph814.preheader1567 ], [ %741, %.lr.ph814.prol ]
  %.0557808.unr = phi ptr [ %.0557808.ph, %.lr.ph814.preheader1567 ], [ %733, %.lr.ph814.prol ]
  %743 = icmp eq i32 %14, %.neg1677
  br i1 %743, label %.preheader694, label %.lr.ph814

vector.memcheck1276:                              ; preds = %.lr.ph814.preheader
  %744 = sub i64 %728, %20
  %diff.check1277 = icmp ult i64 %744, 8
  %745 = sub i64 %728, %17
  %diff.check1278 = icmp ult i64 %745, 8
  %conflict.rdx1279 = or i1 %diff.check1277, %diff.check1278
  br i1 %conflict.rdx1279, label %.lr.ph814.preheader1567, label %vector.ph1283

vector.ph1283:                                    ; preds = %vector.memcheck1276
  %n.vec1285 = and i64 %731, 8589934584
  %ind.end1286 = getelementptr i8, ptr %.0553807, i64 %n.vec1285
  %ind.end1288 = getelementptr i8, ptr %.0555806, i64 %n.vec1285
  %ind.end1291 = trunc i64 %n.vec1285 to i32
  %ind.end1293 = getelementptr i8, ptr %725, i64 %n.vec1285
  br label %vector.body1295

vector.body1295:                                  ; preds = %vector.body1295, %vector.ph1283
  %index1296 = phi i64 [ 0, %vector.ph1283 ], [ %index.next1309, %vector.body1295 ]
  %vec.phi1297 = phi <4 x i32> [ zeroinitializer, %vector.ph1283 ], [ %761, %vector.body1295 ]
  %vec.phi1298 = phi <4 x i32> [ zeroinitializer, %vector.ph1283 ], [ %762, %vector.body1295 ]
  %next.gep1299 = getelementptr i8, ptr %.0553807, i64 %index1296
  %next.gep1301 = getelementptr i8, ptr %.0555806, i64 %index1296
  %next.gep1303 = getelementptr i8, ptr %725, i64 %index1296
  %746 = getelementptr i8, ptr %next.gep1303, i64 4
  %wide.load1305 = load <4 x i8>, ptr %next.gep1303, align 1, !tbaa !24
  %wide.load1306 = load <4 x i8>, ptr %746, align 1, !tbaa !24
  %747 = getelementptr i8, ptr %next.gep1299, i64 4
  %wide.load1307 = load <4 x i8>, ptr %next.gep1299, align 1, !tbaa !24
  %wide.load1308 = load <4 x i8>, ptr %747, align 1, !tbaa !24
  %748 = lshr <4 x i8> %wide.load1307, <i8 1, i8 1, i8 1, i8 1>
  %749 = lshr <4 x i8> %wide.load1308, <i8 1, i8 1, i8 1, i8 1>
  %750 = sub <4 x i8> %wide.load1305, %748
  %751 = sub <4 x i8> %wide.load1306, %749
  %752 = getelementptr i8, ptr %next.gep1301, i64 4
  store <4 x i8> %750, ptr %next.gep1301, align 1, !tbaa !24
  store <4 x i8> %751, ptr %752, align 1, !tbaa !24
  %753 = zext <4 x i8> %750 to <4 x i32>
  %754 = zext <4 x i8> %751 to <4 x i32>
  %755 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %753
  %756 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %754
  %757 = icmp slt <4 x i8> %750, zeroinitializer
  %758 = icmp slt <4 x i8> %751, zeroinitializer
  %759 = select <4 x i1> %757, <4 x i32> %755, <4 x i32> %753
  %760 = select <4 x i1> %758, <4 x i32> %756, <4 x i32> %754
  %761 = add <4 x i32> %759, %vec.phi1297
  %762 = add <4 x i32> %760, %vec.phi1298
  %index.next1309 = add nuw i64 %index1296, 8
  %763 = icmp eq i64 %index.next1309, %n.vec1285
  br i1 %763, label %middle.block1280, label %vector.body1295, !llvm.loop !68

middle.block1280:                                 ; preds = %vector.body1295
  %bin.rdx1310 = add <4 x i32> %762, %761
  %764 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx1310)
  %cmp.n1311 = icmp eq i64 %731, %n.vec1285
  br i1 %cmp.n1311, label %.preheader694, label %.lr.ph814.preheader1567

.preheader694:                                    ; preds = %.lr.ph814.prol.loopexit, %.lr.ph814, %middle.block1280, %724
  %.0557.lcssa = phi ptr [ %725, %724 ], [ %ind.end1293, %middle.block1280 ], [ %.lcssa1571.unr, %.lr.ph814.prol.loopexit ], [ %775, %.lr.ph814 ]
  %.0547.lcssa = phi i32 [ 0, %724 ], [ %764, %middle.block1280 ], [ %.lcssa1570.unr, %.lr.ph814.prol.loopexit ], [ %783, %.lr.ph814 ]
  %.0543.lcssa = phi i32 [ 0, %724 ], [ %14, %middle.block1280 ], [ %14, %.lr.ph814 ], [ %14, %.lr.ph814.prol.loopexit ]
  %.0555.lcssa = phi ptr [ %.0555806, %724 ], [ %ind.end1288, %middle.block1280 ], [ %.0555.lcssa1569.unr, %.lr.ph814.prol.loopexit ], [ %.0555.1, %.lr.ph814 ]
  %.0553.lcssa = phi ptr [ %.0553807, %724 ], [ %ind.end1286, %middle.block1280 ], [ %.0553.lcssa1568.unr, %.lr.ph814.prol.loopexit ], [ %.0553.1, %.lr.ph814 ]
  %765 = icmp ult i32 %.0543.lcssa, %7
  br i1 %765, label %.lr.ph826, label %._crit_edge827

.lr.ph814:                                        ; preds = %.lr.ph814.prol.loopexit, %.lr.ph814
  %.0553812 = phi ptr [ %.0553.1, %.lr.ph814 ], [ %.0553812.unr, %.lr.ph814.prol.loopexit ]
  %.0555811 = phi ptr [ %.0555.1, %.lr.ph814 ], [ %.0555811.unr, %.lr.ph814.prol.loopexit ]
  %.0543810 = phi i32 [ %784, %.lr.ph814 ], [ %.0543810.unr, %.lr.ph814.prol.loopexit ]
  %.0547809 = phi i32 [ %783, %.lr.ph814 ], [ %.0547809.unr, %.lr.ph814.prol.loopexit ]
  %.0557808 = phi ptr [ %775, %.lr.ph814 ], [ %.0557808.unr, %.lr.ph814.prol.loopexit ]
  %766 = getelementptr inbounds i8, ptr %.0557808, i64 1
  %767 = load i8, ptr %.0557808, align 1, !tbaa !24
  %768 = load i8, ptr %.0553812, align 1, !tbaa !24
  %769 = lshr i8 %768, 1
  %.narrow654 = sub i8 %767, %769
  store i8 %.narrow654, ptr %.0555811, align 1, !tbaa !24
  %770 = zext i8 %.narrow654 to i32
  %771 = sub nuw nsw i32 256, %770
  %772 = icmp slt i8 %.narrow654, 0
  %773 = select i1 %772, i32 %771, i32 %770
  %774 = add i32 %773, %.0547809
  %.0555 = getelementptr inbounds i8, ptr %.0555811, i64 1
  %.0553 = getelementptr inbounds i8, ptr %.0553812, i64 1
  %775 = getelementptr inbounds i8, ptr %.0557808, i64 2
  %776 = load i8, ptr %766, align 1, !tbaa !24
  %777 = load i8, ptr %.0553, align 1, !tbaa !24
  %778 = lshr i8 %777, 1
  %.narrow654.1 = sub i8 %776, %778
  store i8 %.narrow654.1, ptr %.0555, align 1, !tbaa !24
  %779 = zext i8 %.narrow654.1 to i32
  %780 = sub nuw nsw i32 256, %779
  %781 = icmp slt i8 %.narrow654.1, 0
  %782 = select i1 %781, i32 %780, i32 %779
  %783 = add i32 %782, %774
  %784 = add nuw nsw i32 %.0543810, 2
  %.0555.1 = getelementptr inbounds i8, ptr %.0555811, i64 2
  %.0553.1 = getelementptr inbounds i8, ptr %.0553812, i64 2
  %exitcond1020.not.1 = icmp eq i32 %784, %14
  br i1 %exitcond1020.not.1, label %.preheader694, label %.lr.ph814, !llvm.loop !69

.lr.ph826:                                        ; preds = %.preheader694, %.lr.ph826
  %.1544825 = phi i32 [ %802, %.lr.ph826 ], [ %.0543.lcssa, %.preheader694 ]
  %.1548824 = phi i32 [ %796, %.lr.ph826 ], [ %.0547.lcssa, %.preheader694 ]
  %.0552823 = phi ptr [ %799, %.lr.ph826 ], [ %725, %.preheader694 ]
  %.1554822 = phi ptr [ %800, %.lr.ph826 ], [ %.0553.lcssa, %.preheader694 ]
  %.1556821 = phi ptr [ %798, %.lr.ph826 ], [ %.0555.lcssa, %.preheader694 ]
  %.1558820 = phi ptr [ %801, %.lr.ph826 ], [ %.0557.lcssa, %.preheader694 ]
  %785 = load i8, ptr %.1558820, align 1, !tbaa !24
  %786 = load i8, ptr %.1554822, align 1, !tbaa !24
  %787 = zext i8 %786 to i16
  %788 = load i8, ptr %.0552823, align 1, !tbaa !24
  %789 = zext i8 %788 to i16
  %790 = add nuw nsw i16 %789, %787
  %791 = lshr i16 %790, 1
  %.tr = trunc nuw i16 %791 to i8
  %.narrow651 = sub i8 %785, %.tr
  store i8 %.narrow651, ptr %.1556821, align 1, !tbaa !24
  %792 = zext i8 %.narrow651 to i32
  %793 = sub nuw nsw i32 256, %792
  %794 = icmp slt i8 %.narrow651, 0
  %795 = select i1 %794, i32 %793, i32 %792
  %796 = add i32 %795, %.1548824
  %797 = icmp ule i32 %796, %.1546
  %798 = getelementptr inbounds i8, ptr %.1556821, i64 1
  %799 = getelementptr inbounds i8, ptr %.0552823, i64 1
  %800 = getelementptr inbounds i8, ptr %.1554822, i64 1
  %801 = getelementptr inbounds i8, ptr %.1558820, i64 1
  %802 = add nuw i32 %.1544825, 1
  %803 = icmp ult i32 %802, %7
  %or.cond932 = select i1 %797, i1 %803, i1 false
  br i1 %or.cond932, label %.lr.ph826, label %._crit_edge827, !llvm.loop !70

._crit_edge827:                                   ; preds = %.lr.ph826, %.preheader694
  %.2549 = phi i32 [ %.0547.lcssa, %.preheader694 ], [ %796, %.lr.ph826 ]
  %804 = load i8, ptr %661, align 8, !tbaa !30
  %805 = icmp eq i8 %804, 2
  br i1 %805, label %806, label %866

806:                                              ; preds = %._crit_edge827
  %807 = and i32 %.2549, 65535
  %808 = lshr i32 %.2549, 10
  %809 = and i32 %808, 4194240
  %.not952 = icmp eq i8 %9, 0
  br i1 %.not952, label %._crit_edge836, label %.lr.ph835

.lr.ph835:                                        ; preds = %806
  %810 = getelementptr inbounds i8, ptr %0, i64 936
  %811 = load ptr, ptr %810, align 8, !tbaa !31
  %812 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count1024 = zext i8 %9 to i64
  %xtraiter1640 = and i64 %wide.trip.count1024, 1
  %813 = icmp eq i8 %9, 1
  br i1 %813, label %._crit_edge836.loopexit.unr-lcssa, label %.lr.ph835.new

.lr.ph835.new:                                    ; preds = %.lr.ph835
  %unroll_iter1644 = and i64 %wide.trip.count1024, 254
  br label %814

814:                                              ; preds = %840, %.lr.ph835.new
  %indvars.iv1021 = phi i64 [ 0, %.lr.ph835.new ], [ %indvars.iv.next1022.1, %840 ]
  %.0533833 = phi i32 [ %807, %.lr.ph835.new ], [ %.1534.1, %840 ]
  %.0535832 = phi i32 [ %809, %.lr.ph835.new ], [ %.1536.1, %840 ]
  %niter1645 = phi i64 [ 0, %.lr.ph835.new ], [ %niter1645.next.1, %840 ]
  %815 = getelementptr inbounds i8, ptr %811, i64 %indvars.iv1021
  %816 = load i8, ptr %815, align 1, !tbaa !24
  %817 = icmp eq i8 %816, 0
  br i1 %817, label %818, label %827

818:                                              ; preds = %814
  %819 = load ptr, ptr %812, align 8, !tbaa !32
  %820 = getelementptr inbounds i16, ptr %819, i64 %indvars.iv1021
  %821 = load i16, ptr %820, align 2, !tbaa !33
  %822 = zext i16 %821 to i32
  %823 = mul i32 %.0533833, %822
  %824 = lshr i32 %823, 8
  %825 = mul i32 %.0535832, %822
  %826 = lshr i32 %825, 8
  br label %827

827:                                              ; preds = %814, %818
  %.1536 = phi i32 [ %826, %818 ], [ %.0535832, %814 ]
  %.1534 = phi i32 [ %824, %818 ], [ %.0533833, %814 ]
  %indvars.iv.next1022 = or disjoint i64 %indvars.iv1021, 1
  %828 = getelementptr inbounds i8, ptr %811, i64 %indvars.iv.next1022
  %829 = load i8, ptr %828, align 1, !tbaa !24
  %830 = icmp eq i8 %829, 0
  br i1 %830, label %831, label %840

831:                                              ; preds = %827
  %832 = load ptr, ptr %812, align 8, !tbaa !32
  %833 = getelementptr inbounds i16, ptr %832, i64 %indvars.iv.next1022
  %834 = load i16, ptr %833, align 2, !tbaa !33
  %835 = zext i16 %834 to i32
  %836 = mul i32 %.1534, %835
  %837 = lshr i32 %836, 8
  %838 = mul i32 %.1536, %835
  %839 = lshr i32 %838, 8
  br label %840

840:                                              ; preds = %831, %827
  %.1536.1 = phi i32 [ %839, %831 ], [ %.1536, %827 ]
  %.1534.1 = phi i32 [ %837, %831 ], [ %.1534, %827 ]
  %indvars.iv.next1022.1 = add nuw nsw i64 %indvars.iv1021, 2
  %niter1645.next.1 = add i64 %niter1645, 2
  %niter1645.ncmp.1 = icmp eq i64 %niter1645.next.1, %unroll_iter1644
  br i1 %niter1645.ncmp.1, label %._crit_edge836.loopexit.unr-lcssa, label %814, !llvm.loop !71

._crit_edge836.loopexit.unr-lcssa:                ; preds = %840, %.lr.ph835
  %.1536.lcssa.ph = phi i32 [ poison, %.lr.ph835 ], [ %.1536.1, %840 ]
  %.1534.lcssa.ph = phi i32 [ poison, %.lr.ph835 ], [ %.1534.1, %840 ]
  %indvars.iv1021.unr = phi i64 [ 0, %.lr.ph835 ], [ %indvars.iv.next1022.1, %840 ]
  %.0533833.unr = phi i32 [ %807, %.lr.ph835 ], [ %.1534.1, %840 ]
  %.0535832.unr = phi i32 [ %809, %.lr.ph835 ], [ %.1536.1, %840 ]
  %lcmp.mod1641.not = icmp eq i64 %xtraiter1640, 0
  br i1 %lcmp.mod1641.not, label %._crit_edge836, label %.epil.preheader1639

.epil.preheader1639:                              ; preds = %._crit_edge836.loopexit.unr-lcssa
  %841 = getelementptr inbounds i8, ptr %811, i64 %indvars.iv1021.unr
  %842 = load i8, ptr %841, align 1, !tbaa !24
  %843 = icmp eq i8 %842, 0
  br i1 %843, label %844, label %._crit_edge836

844:                                              ; preds = %.epil.preheader1639
  %845 = load ptr, ptr %812, align 8, !tbaa !32
  %846 = getelementptr inbounds i16, ptr %845, i64 %indvars.iv1021.unr
  %847 = load i16, ptr %846, align 2, !tbaa !33
  %848 = zext i16 %847 to i32
  %849 = mul i32 %.0533833.unr, %848
  %850 = lshr i32 %849, 8
  %851 = mul i32 %.0535832.unr, %848
  %852 = lshr i32 %851, 8
  br label %._crit_edge836

._crit_edge836:                                   ; preds = %._crit_edge836.loopexit.unr-lcssa, %844, %.epil.preheader1639, %806
  %.0535.lcssa = phi i32 [ %809, %806 ], [ %.1536.lcssa.ph, %._crit_edge836.loopexit.unr-lcssa ], [ %852, %844 ], [ %.0535832.unr, %.epil.preheader1639 ]
  %.0533.lcssa = phi i32 [ %807, %806 ], [ %.1534.lcssa.ph, %._crit_edge836.loopexit.unr-lcssa ], [ %850, %844 ], [ %.0533833.unr, %.epil.preheader1639 ]
  %853 = getelementptr inbounds i8, ptr %0, i64 960
  %854 = load ptr, ptr %853, align 8, !tbaa !35
  %855 = getelementptr inbounds i8, ptr %854, i64 6
  %856 = load i16, ptr %855, align 2, !tbaa !33
  %857 = zext i16 %856 to i32
  %858 = mul i32 %.0535.lcssa, %857
  %859 = icmp ugt i32 %858, 33553927
  br i1 %859, label %866, label %860

860:                                              ; preds = %._crit_edge836
  %861 = mul i32 %.0533.lcssa, %857
  %862 = lshr i32 %861, 3
  %863 = shl nuw i32 %858, 7
  %864 = and i32 %863, -1024
  %865 = add i32 %864, %862
  br label %866

866:                                              ; preds = %860, %._crit_edge836, %._crit_edge827
  %.4551 = phi i32 [ %.2549, %._crit_edge827 ], [ %865, %860 ], [ 2147483647, %._crit_edge836 ]
  %867 = icmp ult i32 %.4551, %.4485
  br i1 %867, label %.sink.split1088, label %869

.sink.split1088:                                  ; preds = %.lr.ph856.prol.loopexit, %.lr.ph856, %middle.block1350, %vec.epilog.middle.block1371, %866, %.preheader693
  %.sink1089 = phi ptr [ %562, %.preheader693 ], [ %726, %866 ], [ %562, %vec.epilog.middle.block1371 ], [ %562, %middle.block1350 ], [ %562, %.lr.ph856 ], [ %562, %.lr.ph856.prol.loopexit ]
  %.6487.ph = phi i32 [ %.4485, %.preheader693 ], [ %.4551, %866 ], [ %.4485, %vec.epilog.middle.block1371 ], [ %.4485, %middle.block1350 ], [ %.4485, %.lr.ph856 ], [ %.4485, %.lr.ph856.prol.loopexit ]
  %868 = load ptr, ptr %.sink1089, align 8, !tbaa !60
  br label %869

869:                                              ; preds = %.sink.split1088, %866, %658
  %.6487 = phi i32 [ %.4485, %658 ], [ %.4485, %866 ], [ %.6487.ph, %.sink.split1088 ]
  %.5 = phi ptr [ %.3, %658 ], [ %.3, %866 ], [ %868, %.sink.split1088 ]
  %870 = icmp eq i8 %4, -128
  br i1 %870, label %871, label %972

871:                                              ; preds = %869
  %872 = getelementptr inbounds i8, ptr %19, i64 1
  %873 = getelementptr inbounds i8, ptr %0, i64 528
  %874 = load ptr, ptr %873, align 8, !tbaa !72
  %875 = ptrtoint ptr %874 to i64
  %876 = getelementptr inbounds i8, ptr %16, i64 1
  %.0529899 = getelementptr inbounds i8, ptr %874, i64 1
  %.not957 = icmp eq i8 %11, 0
  br i1 %.not957, label %.preheader691, label %.lr.ph905.preheader

.lr.ph905.preheader:                              ; preds = %871
  %877 = add nsw i32 %14, -1
  %878 = zext i32 %877 to i64
  %879 = add nuw nsw i64 %878, 1
  %min.iters.check1451 = icmp ult i32 %877, 15
  br i1 %min.iters.check1451, label %.lr.ph905.preheader1551, label %vector.memcheck1445

.lr.ph905.preheader1551:                          ; preds = %middle.block1449, %vector.memcheck1445, %.lr.ph905.preheader
  %.0529903.ph = phi ptr [ %.0529899, %vector.memcheck1445 ], [ %.0529899, %.lr.ph905.preheader ], [ %ind.end1455, %middle.block1449 ]
  %.0523902.ph = phi i32 [ 0, %vector.memcheck1445 ], [ 0, %.lr.ph905.preheader ], [ %ind.end1458, %middle.block1449 ]
  %.0527901.ph = phi ptr [ %876, %vector.memcheck1445 ], [ %876, %.lr.ph905.preheader ], [ %ind.end1460, %middle.block1449 ]
  %.0531900.ph = phi ptr [ %872, %vector.memcheck1445 ], [ %872, %.lr.ph905.preheader ], [ %ind.end1462, %middle.block1449 ]
  %880 = sub i32 %14, %.0523902.ph
  %xtraiter1669 = and i32 %880, 3
  %lcmp.mod1670.not = icmp eq i32 %xtraiter1669, 0
  br i1 %lcmp.mod1670.not, label %.lr.ph905.prol.loopexit, label %.lr.ph905.prol

.lr.ph905.prol:                                   ; preds = %.lr.ph905.preheader1551, %.lr.ph905.prol
  %.0529903.prol = phi ptr [ %.0529.prol, %.lr.ph905.prol ], [ %.0529903.ph, %.lr.ph905.preheader1551 ]
  %.0523902.prol = phi i32 [ %885, %.lr.ph905.prol ], [ %.0523902.ph, %.lr.ph905.preheader1551 ]
  %.0527901.prol = phi ptr [ %883, %.lr.ph905.prol ], [ %.0527901.ph, %.lr.ph905.preheader1551 ]
  %.0531900.prol = phi ptr [ %881, %.lr.ph905.prol ], [ %.0531900.ph, %.lr.ph905.preheader1551 ]
  %prol.iter1671 = phi i32 [ %prol.iter1671.next, %.lr.ph905.prol ], [ 0, %.lr.ph905.preheader1551 ]
  %881 = getelementptr inbounds i8, ptr %.0531900.prol, i64 1
  %882 = load i8, ptr %.0531900.prol, align 1, !tbaa !24
  %883 = getelementptr inbounds i8, ptr %.0527901.prol, i64 1
  %884 = load i8, ptr %.0527901.prol, align 1, !tbaa !24
  %.narrow672.prol = sub i8 %882, %884
  store i8 %.narrow672.prol, ptr %.0529903.prol, align 1, !tbaa !24
  %885 = add nuw nsw i32 %.0523902.prol, 1
  %.0529.prol = getelementptr inbounds i8, ptr %.0529903.prol, i64 1
  %prol.iter1671.next = add i32 %prol.iter1671, 1
  %prol.iter1671.cmp.not = icmp eq i32 %prol.iter1671.next, %xtraiter1669
  br i1 %prol.iter1671.cmp.not, label %.lr.ph905.prol.loopexit, label %.lr.ph905.prol, !llvm.loop !73

.lr.ph905.prol.loopexit:                          ; preds = %.lr.ph905.prol, %.lr.ph905.preheader1551
  %.lcssa1553.unr = phi ptr [ poison, %.lr.ph905.preheader1551 ], [ %881, %.lr.ph905.prol ]
  %.lcssa.unr = phi ptr [ poison, %.lr.ph905.preheader1551 ], [ %883, %.lr.ph905.prol ]
  %.0529.lcssa1552.unr = phi ptr [ poison, %.lr.ph905.preheader1551 ], [ %.0529.prol, %.lr.ph905.prol ]
  %.0529903.unr = phi ptr [ %.0529903.ph, %.lr.ph905.preheader1551 ], [ %.0529.prol, %.lr.ph905.prol ]
  %.0523902.unr = phi i32 [ %.0523902.ph, %.lr.ph905.preheader1551 ], [ %885, %.lr.ph905.prol ]
  %.0527901.unr = phi ptr [ %.0527901.ph, %.lr.ph905.preheader1551 ], [ %883, %.lr.ph905.prol ]
  %.0531900.unr = phi ptr [ %.0531900.ph, %.lr.ph905.preheader1551 ], [ %881, %.lr.ph905.prol ]
  %886 = sub i32 %.0523902.ph, %14
  %887 = icmp ugt i32 %886, -4
  br i1 %887, label %.preheader691, label %.lr.ph905

vector.memcheck1445:                              ; preds = %.lr.ph905.preheader
  %888 = sub i64 %875, %20
  %diff.check1446 = icmp ult i64 %888, 16
  %889 = sub i64 %875, %17
  %diff.check1447 = icmp ult i64 %889, 16
  %conflict.rdx1448 = or i1 %diff.check1446, %diff.check1447
  br i1 %conflict.rdx1448, label %.lr.ph905.preheader1551, label %vector.ph1452

vector.ph1452:                                    ; preds = %vector.memcheck1445
  %n.vec1454 = and i64 %879, 8589934576
  %ind.end1455 = getelementptr i8, ptr %.0529899, i64 %n.vec1454
  %ind.end1458 = trunc i64 %n.vec1454 to i32
  %ind.end1460 = getelementptr i8, ptr %876, i64 %n.vec1454
  %ind.end1462 = getelementptr i8, ptr %872, i64 %n.vec1454
  br label %vector.body1464

vector.body1464:                                  ; preds = %vector.body1464, %vector.ph1452
  %index1465 = phi i64 [ 0, %vector.ph1452 ], [ %index.next1471, %vector.body1464 ]
  %next.gep1466 = getelementptr i8, ptr %.0529899, i64 %index1465
  %next.gep1467 = getelementptr i8, ptr %876, i64 %index1465
  %next.gep1468 = getelementptr i8, ptr %872, i64 %index1465
  %wide.load1469 = load <16 x i8>, ptr %next.gep1468, align 1, !tbaa !24
  %wide.load1470 = load <16 x i8>, ptr %next.gep1467, align 1, !tbaa !24
  %890 = sub <16 x i8> %wide.load1469, %wide.load1470
  store <16 x i8> %890, ptr %next.gep1466, align 1, !tbaa !24
  %index.next1471 = add nuw i64 %index1465, 16
  %891 = icmp eq i64 %index.next1471, %n.vec1454
  br i1 %891, label %middle.block1449, label %vector.body1464, !llvm.loop !74

middle.block1449:                                 ; preds = %vector.body1464
  %cmp.n1472 = icmp eq i64 %879, %n.vec1454
  br i1 %cmp.n1472, label %.preheader691, label %.lr.ph905.preheader1551

.preheader691:                                    ; preds = %.lr.ph905.prol.loopexit, %.lr.ph905, %middle.block1449, %871
  %.0531.lcssa = phi ptr [ %872, %871 ], [ %ind.end1462, %middle.block1449 ], [ %.lcssa1553.unr, %.lr.ph905.prol.loopexit ], [ %947, %.lr.ph905 ]
  %.0527.lcssa = phi ptr [ %876, %871 ], [ %ind.end1460, %middle.block1449 ], [ %.lcssa.unr, %.lr.ph905.prol.loopexit ], [ %949, %.lr.ph905 ]
  %.0523.lcssa = phi i32 [ 0, %871 ], [ %14, %middle.block1449 ], [ %14, %.lr.ph905 ], [ %14, %.lr.ph905.prol.loopexit ]
  %.0529.lcssa = phi ptr [ %.0529899, %871 ], [ %ind.end1455, %middle.block1449 ], [ %.0529.lcssa1552.unr, %.lr.ph905.prol.loopexit ], [ %.0529.3, %.lr.ph905 ]
  %.0529.lcssa1474 = ptrtoint ptr %.0529.lcssa to i64
  %.0527.lcssa1476 = ptrtoint ptr %.0527.lcssa to i64
  %.0531.lcssa1479 = ptrtoint ptr %.0531.lcssa to i64
  %892 = icmp ult i32 %.0523.lcssa, %7
  br i1 %892, label %iter.check1488, label %.thread1059.sink.split

iter.check1488:                                   ; preds = %.preheader691
  %893 = xor i32 %.0523.lcssa, -1
  %894 = add i32 %893, %7
  %895 = zext i32 %894 to i64
  %896 = add nuw nsw i64 %895, 1
  %min.iters.check1486 = icmp ult i32 %894, 7
  br i1 %min.iters.check1486, label %.lr.ph916.preheader, label %vector.memcheck1473

vector.memcheck1473:                              ; preds = %iter.check1488
  %897 = sub i64 %17, %.0529.lcssa1474
  %diff.check1475 = icmp ugt i64 %897, -17
  %898 = sub i64 %.0529.lcssa1474, %.0527.lcssa1476
  %diff.check1477 = icmp ult i64 %898, 16
  %conflict.rdx1478 = or i1 %diff.check1475, %diff.check1477
  %899 = sub i64 %.0529.lcssa1474, %.0531.lcssa1479
  %diff.check1480 = icmp ult i64 %899, 16
  %conflict.rdx1481 = or i1 %conflict.rdx1478, %diff.check1480
  %900 = sub i64 %20, %.0529.lcssa1474
  %diff.check1482 = icmp ugt i64 %900, -17
  %conflict.rdx1483 = or i1 %conflict.rdx1481, %diff.check1482
  br i1 %conflict.rdx1483, label %.lr.ph916.preheader, label %vector.main.loop.iter.check1490

vector.main.loop.iter.check1490:                  ; preds = %vector.memcheck1473
  %min.iters.check1489 = icmp ult i32 %894, 15
  br i1 %min.iters.check1489, label %vec.epilog.ph1509, label %vector.ph1491

vector.ph1491:                                    ; preds = %vector.main.loop.iter.check1490
  %n.vec1493 = and i64 %896, 8589934576
  br label %vector.body1494

vector.body1494:                                  ; preds = %vector.body1494, %vector.ph1491
  %index1495 = phi i64 [ 0, %vector.ph1491 ], [ %index.next1505, %vector.body1494 ]
  %next.gep1496 = getelementptr i8, ptr %872, i64 %index1495
  %next.gep1497 = getelementptr i8, ptr %876, i64 %index1495
  %next.gep1498 = getelementptr i8, ptr %.0527.lcssa, i64 %index1495
  %next.gep1499 = getelementptr i8, ptr %.0529.lcssa, i64 %index1495
  %next.gep1500 = getelementptr i8, ptr %.0531.lcssa, i64 %index1495
  %wide.load1501 = load <16 x i8>, ptr %next.gep1498, align 1, !tbaa !24
  %901 = zext <16 x i8> %wide.load1501 to <16 x i32>
  %wide.load1502 = load <16 x i8>, ptr %next.gep1497, align 1, !tbaa !24
  %902 = zext <16 x i8> %wide.load1502 to <16 x i32>
  %wide.load1503 = load <16 x i8>, ptr %next.gep1496, align 1, !tbaa !24
  %903 = zext <16 x i8> %wide.load1503 to <16 x i32>
  %904 = sub nsw <16 x i32> %901, %902
  %905 = sub nsw <16 x i32> %903, %902
  %906 = tail call <16 x i32> @llvm.abs.v16i32(<16 x i32> %904, i1 true)
  %907 = tail call <16 x i32> @llvm.abs.v16i32(<16 x i32> %905, i1 true)
  %908 = add nsw <16 x i32> %905, %904
  %909 = tail call <16 x i32> @llvm.abs.v16i32(<16 x i32> %908, i1 true)
  %910 = icmp ugt <16 x i32> %906, %907
  %911 = icmp ugt <16 x i32> %906, %909
  %912 = select <16 x i1> %910, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <16 x i1> %911
  %913 = icmp ugt <16 x i32> %907, %909
  %914 = select <16 x i1> %913, <16 x i8> %wide.load1502, <16 x i8> %wide.load1501
  %915 = select <16 x i1> %912, <16 x i8> %914, <16 x i8> %wide.load1503
  %wide.load1504 = load <16 x i8>, ptr %next.gep1500, align 1, !tbaa !24
  %916 = sub <16 x i8> %wide.load1504, %915
  store <16 x i8> %916, ptr %next.gep1499, align 1, !tbaa !24
  %index.next1505 = add nuw i64 %index1495, 16
  %917 = icmp eq i64 %index.next1505, %n.vec1493
  br i1 %917, label %middle.block1484, label %vector.body1494, !llvm.loop !75

middle.block1484:                                 ; preds = %vector.body1494
  %cmp.n1506 = icmp eq i64 %896, %n.vec1493
  br i1 %cmp.n1506, label %.thread1059.sink.split, label %vec.epilog.iter.check1510

vec.epilog.iter.check1510:                        ; preds = %middle.block1484
  %ind.end1534 = getelementptr i8, ptr %.0531.lcssa, i64 %n.vec1493
  %ind.end1531 = getelementptr i8, ptr %.0529.lcssa, i64 %n.vec1493
  %ind.end1528 = getelementptr i8, ptr %.0527.lcssa, i64 %n.vec1493
  %ind.end1525 = getelementptr i8, ptr %876, i64 %n.vec1493
  %ind.end1522 = getelementptr i8, ptr %872, i64 %n.vec1493
  %.cast1518 = trunc i64 %n.vec1493 to i32
  %ind.end1519 = add i32 %.0523.lcssa, %.cast1518
  %n.vec.remaining1511 = and i64 %896, 8
  %min.epilog.iters.check1512.not.not = icmp eq i64 %n.vec.remaining1511, 0
  br i1 %min.epilog.iters.check1512.not.not, label %.lr.ph916.preheader, label %vec.epilog.ph1509

.lr.ph916.preheader:                              ; preds = %vec.epilog.middle.block1507, %vector.memcheck1473, %iter.check1488, %vec.epilog.iter.check1510
  %.1524915.ph = phi i32 [ %.0523.lcssa, %iter.check1488 ], [ %.0523.lcssa, %vector.memcheck1473 ], [ %ind.end1519, %vec.epilog.iter.check1510 ], [ %ind.end1517, %vec.epilog.middle.block1507 ]
  %.0525914.ph = phi ptr [ %872, %iter.check1488 ], [ %872, %vector.memcheck1473 ], [ %ind.end1522, %vec.epilog.iter.check1510 ], [ %ind.end1521, %vec.epilog.middle.block1507 ]
  %.0526913.ph = phi ptr [ %876, %iter.check1488 ], [ %876, %vector.memcheck1473 ], [ %ind.end1525, %vec.epilog.iter.check1510 ], [ %ind.end1524, %vec.epilog.middle.block1507 ]
  %.1528912.ph = phi ptr [ %.0527.lcssa, %iter.check1488 ], [ %.0527.lcssa, %vector.memcheck1473 ], [ %ind.end1528, %vec.epilog.iter.check1510 ], [ %ind.end1527, %vec.epilog.middle.block1507 ]
  %.1530911.ph = phi ptr [ %.0529.lcssa, %iter.check1488 ], [ %.0529.lcssa, %vector.memcheck1473 ], [ %ind.end1531, %vec.epilog.iter.check1510 ], [ %ind.end1530, %vec.epilog.middle.block1507 ]
  %.1532910.ph = phi ptr [ %.0531.lcssa, %iter.check1488 ], [ %.0531.lcssa, %vector.memcheck1473 ], [ %ind.end1534, %vec.epilog.iter.check1510 ], [ %ind.end1533, %vec.epilog.middle.block1507 ]
  br label %.lr.ph916

vec.epilog.ph1509:                                ; preds = %vector.main.loop.iter.check1490, %vec.epilog.iter.check1510
  %vec.epilog.resume.val1513 = phi i64 [ %n.vec1493, %vec.epilog.iter.check1510 ], [ 0, %vector.main.loop.iter.check1490 ]
  %n.vec1515 = and i64 %896, 8589934584
  %.cast1516 = trunc i64 %n.vec1515 to i32
  %ind.end1517 = add i32 %.0523.lcssa, %.cast1516
  %ind.end1521 = getelementptr i8, ptr %872, i64 %n.vec1515
  %ind.end1524 = getelementptr i8, ptr %876, i64 %n.vec1515
  %ind.end1527 = getelementptr i8, ptr %.0527.lcssa, i64 %n.vec1515
  %ind.end1530 = getelementptr i8, ptr %.0529.lcssa, i64 %n.vec1515
  %ind.end1533 = getelementptr i8, ptr %.0531.lcssa, i64 %n.vec1515
  br label %vec.epilog.vector.body1536

vec.epilog.vector.body1536:                       ; preds = %vec.epilog.vector.body1536, %vec.epilog.ph1509
  %index1537 = phi i64 [ %vec.epilog.resume.val1513, %vec.epilog.ph1509 ], [ %index.next1547, %vec.epilog.vector.body1536 ]
  %next.gep1538 = getelementptr i8, ptr %872, i64 %index1537
  %next.gep1539 = getelementptr i8, ptr %876, i64 %index1537
  %next.gep1540 = getelementptr i8, ptr %.0527.lcssa, i64 %index1537
  %next.gep1541 = getelementptr i8, ptr %.0529.lcssa, i64 %index1537
  %next.gep1542 = getelementptr i8, ptr %.0531.lcssa, i64 %index1537
  %wide.load1543 = load <8 x i8>, ptr %next.gep1540, align 1, !tbaa !24
  %918 = zext <8 x i8> %wide.load1543 to <8 x i32>
  %wide.load1544 = load <8 x i8>, ptr %next.gep1539, align 1, !tbaa !24
  %919 = zext <8 x i8> %wide.load1544 to <8 x i32>
  %wide.load1545 = load <8 x i8>, ptr %next.gep1538, align 1, !tbaa !24
  %920 = zext <8 x i8> %wide.load1545 to <8 x i32>
  %921 = sub nsw <8 x i32> %918, %919
  %922 = sub nsw <8 x i32> %920, %919
  %923 = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> %921, i1 true)
  %924 = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> %922, i1 true)
  %925 = add nsw <8 x i32> %922, %921
  %926 = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> %925, i1 true)
  %927 = icmp ugt <8 x i32> %923, %924
  %928 = icmp ugt <8 x i32> %923, %926
  %929 = select <8 x i1> %927, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i1> %928
  %930 = icmp ugt <8 x i32> %924, %926
  %931 = select <8 x i1> %930, <8 x i8> %wide.load1544, <8 x i8> %wide.load1543
  %932 = select <8 x i1> %929, <8 x i8> %931, <8 x i8> %wide.load1545
  %wide.load1546 = load <8 x i8>, ptr %next.gep1542, align 1, !tbaa !24
  %933 = sub <8 x i8> %wide.load1546, %932
  store <8 x i8> %933, ptr %next.gep1541, align 1, !tbaa !24
  %index.next1547 = add nuw i64 %index1537, 8
  %934 = icmp eq i64 %index.next1547, %n.vec1515
  br i1 %934, label %vec.epilog.middle.block1507, label %vec.epilog.vector.body1536, !llvm.loop !76

vec.epilog.middle.block1507:                      ; preds = %vec.epilog.vector.body1536
  %cmp.n1548 = icmp eq i64 %896, %n.vec1515
  br i1 %cmp.n1548, label %.thread1059.sink.split, label %.lr.ph916.preheader

.lr.ph905:                                        ; preds = %.lr.ph905.prol.loopexit, %.lr.ph905
  %.0529903 = phi ptr [ %.0529.3, %.lr.ph905 ], [ %.0529903.unr, %.lr.ph905.prol.loopexit ]
  %.0523902 = phi i32 [ %951, %.lr.ph905 ], [ %.0523902.unr, %.lr.ph905.prol.loopexit ]
  %.0527901 = phi ptr [ %949, %.lr.ph905 ], [ %.0527901.unr, %.lr.ph905.prol.loopexit ]
  %.0531900 = phi ptr [ %947, %.lr.ph905 ], [ %.0531900.unr, %.lr.ph905.prol.loopexit ]
  %935 = getelementptr inbounds i8, ptr %.0531900, i64 1
  %936 = load i8, ptr %.0531900, align 1, !tbaa !24
  %937 = getelementptr inbounds i8, ptr %.0527901, i64 1
  %938 = load i8, ptr %.0527901, align 1, !tbaa !24
  %.narrow672 = sub i8 %936, %938
  store i8 %.narrow672, ptr %.0529903, align 1, !tbaa !24
  %.0529 = getelementptr inbounds i8, ptr %.0529903, i64 1
  %939 = getelementptr inbounds i8, ptr %.0531900, i64 2
  %940 = load i8, ptr %935, align 1, !tbaa !24
  %941 = getelementptr inbounds i8, ptr %.0527901, i64 2
  %942 = load i8, ptr %937, align 1, !tbaa !24
  %.narrow672.1 = sub i8 %940, %942
  store i8 %.narrow672.1, ptr %.0529, align 1, !tbaa !24
  %.0529.1 = getelementptr inbounds i8, ptr %.0529903, i64 2
  %943 = getelementptr inbounds i8, ptr %.0531900, i64 3
  %944 = load i8, ptr %939, align 1, !tbaa !24
  %945 = getelementptr inbounds i8, ptr %.0527901, i64 3
  %946 = load i8, ptr %941, align 1, !tbaa !24
  %.narrow672.2 = sub i8 %944, %946
  store i8 %.narrow672.2, ptr %.0529.1, align 1, !tbaa !24
  %.0529.2 = getelementptr inbounds i8, ptr %.0529903, i64 3
  %947 = getelementptr inbounds i8, ptr %.0531900, i64 4
  %948 = load i8, ptr %943, align 1, !tbaa !24
  %949 = getelementptr inbounds i8, ptr %.0527901, i64 4
  %950 = load i8, ptr %945, align 1, !tbaa !24
  %.narrow672.3 = sub i8 %948, %950
  store i8 %.narrow672.3, ptr %.0529.2, align 1, !tbaa !24
  %951 = add nuw nsw i32 %.0523902, 4
  %.0529.3 = getelementptr inbounds i8, ptr %.0529903, i64 4
  %exitcond1039.not.3 = icmp eq i32 %951, %14
  br i1 %exitcond1039.not.3, label %.preheader691, label %.lr.ph905, !llvm.loop !77

.lr.ph916:                                        ; preds = %.lr.ph916.preheader, %.lr.ph916
  %.1524915 = phi i32 [ %971, %.lr.ph916 ], [ %.1524915.ph, %.lr.ph916.preheader ]
  %.0525914 = phi ptr [ %958, %.lr.ph916 ], [ %.0525914.ph, %.lr.ph916.preheader ]
  %.0526913 = phi ptr [ %955, %.lr.ph916 ], [ %.0526913.ph, %.lr.ph916.preheader ]
  %.1528912 = phi ptr [ %952, %.lr.ph916 ], [ %.1528912.ph, %.lr.ph916.preheader ]
  %.1530911 = phi ptr [ %970, %.lr.ph916 ], [ %.1530911.ph, %.lr.ph916.preheader ]
  %.1532910 = phi ptr [ %968, %.lr.ph916 ], [ %.1532910.ph, %.lr.ph916.preheader ]
  %952 = getelementptr inbounds i8, ptr %.1528912, i64 1
  %953 = load i8, ptr %.1528912, align 1, !tbaa !24
  %954 = zext i8 %953 to i32
  %955 = getelementptr inbounds i8, ptr %.0526913, i64 1
  %956 = load i8, ptr %.0526913, align 1, !tbaa !24
  %957 = zext i8 %956 to i32
  %958 = getelementptr inbounds i8, ptr %.0525914, i64 1
  %959 = load i8, ptr %.0525914, align 1, !tbaa !24
  %960 = zext i8 %959 to i32
  %961 = sub nsw i32 %954, %957
  %962 = sub nsw i32 %960, %957
  %963 = tail call i32 @llvm.abs.i32(i32 %961, i1 true)
  %964 = tail call i32 @llvm.abs.i32(i32 %962, i1 true)
  %965 = add nsw i32 %962, %961
  %966 = tail call i32 @llvm.abs.i32(i32 %965, i1 true)
  %.not666 = icmp ugt i32 %963, %964
  %.not667 = icmp ugt i32 %963, %966
  %or.cond689 = select i1 %.not666, i1 true, i1 %.not667
  %.not668 = icmp ugt i32 %964, %966
  %967 = select i1 %.not668, i8 %956, i8 %953
  %.tr669 = select i1 %or.cond689, i8 %967, i8 %959
  %968 = getelementptr inbounds i8, ptr %.1532910, i64 1
  %969 = load i8, ptr %.1532910, align 1, !tbaa !24
  %.narrow670 = sub i8 %969, %.tr669
  %970 = getelementptr inbounds i8, ptr %.1530911, i64 1
  store i8 %.narrow670, ptr %.1530911, align 1, !tbaa !24
  %971 = add nuw i32 %.1524915, 1
  %exitcond1040.not = icmp eq i32 %971, %7
  br i1 %exitcond1040.not, label %.thread1059.sink.split, label %.lr.ph916, !llvm.loop !78

972:                                              ; preds = %869
  %.not656 = icmp sgt i8 %4, -1
  br i1 %.not656, label %.thread1059, label %973

973:                                              ; preds = %972
  %974 = getelementptr inbounds i8, ptr %0, i64 928
  %975 = load i8, ptr %974, align 8, !tbaa !30
  %976 = icmp eq i8 %975, 2
  br i1 %976, label %977, label %1037

977:                                              ; preds = %973
  %978 = and i32 %.6487, 65535
  %979 = lshr i32 %.6487, 10
  %980 = and i32 %979, 4194240
  %.not954 = icmp eq i8 %9, 0
  br i1 %.not954, label %._crit_edge863, label %.lr.ph862

.lr.ph862:                                        ; preds = %977
  %981 = getelementptr inbounds i8, ptr %0, i64 936
  %982 = load ptr, ptr %981, align 8, !tbaa !31
  %983 = getelementptr inbounds i8, ptr %0, i64 952
  %wide.trip.count1031 = zext i8 %9 to i64
  %xtraiter1653 = and i64 %wide.trip.count1031, 1
  %984 = icmp eq i8 %9, 1
  br i1 %984, label %._crit_edge863.loopexit.unr-lcssa, label %.lr.ph862.new

.lr.ph862.new:                                    ; preds = %.lr.ph862
  %unroll_iter1657 = and i64 %wide.trip.count1031, 254
  br label %985

985:                                              ; preds = %1011, %.lr.ph862.new
  %indvars.iv1028 = phi i64 [ 0, %.lr.ph862.new ], [ %indvars.iv.next1029.1, %1011 ]
  %.0493860 = phi i32 [ %978, %.lr.ph862.new ], [ %.1494.1, %1011 ]
  %.0495859 = phi i32 [ %980, %.lr.ph862.new ], [ %.1496.1, %1011 ]
  %niter1658 = phi i64 [ 0, %.lr.ph862.new ], [ %niter1658.next.1, %1011 ]
  %986 = getelementptr inbounds i8, ptr %982, i64 %indvars.iv1028
  %987 = load i8, ptr %986, align 1, !tbaa !24
  %988 = icmp eq i8 %987, 4
  br i1 %988, label %989, label %998

989:                                              ; preds = %985
  %990 = load ptr, ptr %983, align 8, !tbaa !45
  %991 = getelementptr inbounds i16, ptr %990, i64 %indvars.iv1028
  %992 = load i16, ptr %991, align 2, !tbaa !33
  %993 = zext i16 %992 to i32
  %994 = mul i32 %.0493860, %993
  %995 = lshr i32 %994, 8
  %996 = mul i32 %.0495859, %993
  %997 = lshr i32 %996, 8
  br label %998

998:                                              ; preds = %985, %989
  %.1496 = phi i32 [ %997, %989 ], [ %.0495859, %985 ]
  %.1494 = phi i32 [ %995, %989 ], [ %.0493860, %985 ]
  %indvars.iv.next1029 = or disjoint i64 %indvars.iv1028, 1
  %999 = getelementptr inbounds i8, ptr %982, i64 %indvars.iv.next1029
  %1000 = load i8, ptr %999, align 1, !tbaa !24
  %1001 = icmp eq i8 %1000, 4
  br i1 %1001, label %1002, label %1011

1002:                                             ; preds = %998
  %1003 = load ptr, ptr %983, align 8, !tbaa !45
  %1004 = getelementptr inbounds i16, ptr %1003, i64 %indvars.iv.next1029
  %1005 = load i16, ptr %1004, align 2, !tbaa !33
  %1006 = zext i16 %1005 to i32
  %1007 = mul i32 %.1494, %1006
  %1008 = lshr i32 %1007, 8
  %1009 = mul i32 %.1496, %1006
  %1010 = lshr i32 %1009, 8
  br label %1011

1011:                                             ; preds = %1002, %998
  %.1496.1 = phi i32 [ %1010, %1002 ], [ %.1496, %998 ]
  %.1494.1 = phi i32 [ %1008, %1002 ], [ %.1494, %998 ]
  %indvars.iv.next1029.1 = add nuw nsw i64 %indvars.iv1028, 2
  %niter1658.next.1 = add i64 %niter1658, 2
  %niter1658.ncmp.1 = icmp eq i64 %niter1658.next.1, %unroll_iter1657
  br i1 %niter1658.ncmp.1, label %._crit_edge863.loopexit.unr-lcssa, label %985, !llvm.loop !79

._crit_edge863.loopexit.unr-lcssa:                ; preds = %1011, %.lr.ph862
  %.1496.lcssa.ph = phi i32 [ poison, %.lr.ph862 ], [ %.1496.1, %1011 ]
  %.1494.lcssa.ph = phi i32 [ poison, %.lr.ph862 ], [ %.1494.1, %1011 ]
  %indvars.iv1028.unr = phi i64 [ 0, %.lr.ph862 ], [ %indvars.iv.next1029.1, %1011 ]
  %.0493860.unr = phi i32 [ %978, %.lr.ph862 ], [ %.1494.1, %1011 ]
  %.0495859.unr = phi i32 [ %980, %.lr.ph862 ], [ %.1496.1, %1011 ]
  %lcmp.mod1654.not = icmp eq i64 %xtraiter1653, 0
  br i1 %lcmp.mod1654.not, label %._crit_edge863, label %.epil.preheader1652

.epil.preheader1652:                              ; preds = %._crit_edge863.loopexit.unr-lcssa
  %1012 = getelementptr inbounds i8, ptr %982, i64 %indvars.iv1028.unr
  %1013 = load i8, ptr %1012, align 1, !tbaa !24
  %1014 = icmp eq i8 %1013, 4
  br i1 %1014, label %1015, label %._crit_edge863

1015:                                             ; preds = %.epil.preheader1652
  %1016 = load ptr, ptr %983, align 8, !tbaa !45
  %1017 = getelementptr inbounds i16, ptr %1016, i64 %indvars.iv1028.unr
  %1018 = load i16, ptr %1017, align 2, !tbaa !33
  %1019 = zext i16 %1018 to i32
  %1020 = mul i32 %.0493860.unr, %1019
  %1021 = lshr i32 %1020, 8
  %1022 = mul i32 %.0495859.unr, %1019
  %1023 = lshr i32 %1022, 8
  br label %._crit_edge863

._crit_edge863:                                   ; preds = %._crit_edge863.loopexit.unr-lcssa, %1015, %.epil.preheader1652, %977
  %.0495.lcssa = phi i32 [ %980, %977 ], [ %.1496.lcssa.ph, %._crit_edge863.loopexit.unr-lcssa ], [ %1023, %1015 ], [ %.0495859.unr, %.epil.preheader1652 ]
  %.0493.lcssa = phi i32 [ %978, %977 ], [ %.1494.lcssa.ph, %._crit_edge863.loopexit.unr-lcssa ], [ %1021, %1015 ], [ %.0493860.unr, %.epil.preheader1652 ]
  %1024 = getelementptr inbounds i8, ptr %0, i64 968
  %1025 = load ptr, ptr %1024, align 8, !tbaa !47
  %1026 = getelementptr inbounds i8, ptr %1025, i64 8
  %1027 = load i16, ptr %1026, align 2, !tbaa !33
  %1028 = zext i16 %1027 to i32
  %1029 = mul i32 %.0495.lcssa, %1028
  %1030 = icmp ugt i32 %1029, 33553927
  br i1 %1030, label %1037, label %1031

1031:                                             ; preds = %._crit_edge863
  %1032 = mul i32 %.0493.lcssa, %1028
  %1033 = lshr i32 %1032, 3
  %1034 = shl nuw i32 %1029, 7
  %1035 = and i32 %1034, -1024
  %1036 = add i32 %1035, %1033
  br label %1037

1037:                                             ; preds = %1031, %._crit_edge863, %973
  %.1501 = phi i32 [ %.6487, %973 ], [ %1036, %1031 ], [ 2147483647, %._crit_edge863 ]
  %1038 = getelementptr inbounds i8, ptr %19, i64 1
  %1039 = getelementptr inbounds i8, ptr %0, i64 528
  %1040 = load ptr, ptr %1039, align 8, !tbaa !72
  %1041 = ptrtoint ptr %1040 to i64
  %1042 = getelementptr inbounds i8, ptr %16, i64 1
  %.0511866 = getelementptr inbounds i8, ptr %1040, i64 1
  %.not955 = icmp eq i8 %11, 0
  br i1 %.not955, label %.preheader692, label %.lr.ph873.preheader

.lr.ph873.preheader:                              ; preds = %1037
  %1043 = add nsw i32 %14, -1
  %1044 = zext i32 %1043 to i64
  %1045 = add nuw nsw i64 %1044, 1
  %min.iters.check1414 = icmp ult i32 %1043, 7
  br i1 %min.iters.check1414, label %.lr.ph873.preheader1555, label %vector.memcheck1408

.lr.ph873.preheader1555:                          ; preds = %middle.block1412, %vector.memcheck1408, %.lr.ph873.preheader
  %.0511871.ph = phi ptr [ %.0511866, %vector.memcheck1408 ], [ %.0511866, %.lr.ph873.preheader ], [ %ind.end1418, %middle.block1412 ]
  %.0498870.ph = phi i32 [ 0, %vector.memcheck1408 ], [ 0, %.lr.ph873.preheader ], [ %ind.end1421, %middle.block1412 ]
  %.0502869.ph = phi i32 [ 0, %vector.memcheck1408 ], [ 0, %.lr.ph873.preheader ], [ %1076, %middle.block1412 ]
  %.0509868.ph = phi ptr [ %1042, %vector.memcheck1408 ], [ %1042, %.lr.ph873.preheader ], [ %ind.end1423, %middle.block1412 ]
  %.0513867.ph = phi ptr [ %1038, %vector.memcheck1408 ], [ %1038, %.lr.ph873.preheader ], [ %ind.end1425, %middle.block1412 ]
  %1046 = sub i32 %14, %.0498870.ph
  %.neg1678 = add i32 %.0498870.ph, 1
  %xtraiter1659 = and i32 %1046, 1
  %lcmp.mod1660.not = icmp eq i32 %xtraiter1659, 0
  br i1 %lcmp.mod1660.not, label %.lr.ph873.prol.loopexit, label %.lr.ph873.prol

.lr.ph873.prol:                                   ; preds = %.lr.ph873.preheader1555
  %1047 = getelementptr inbounds i8, ptr %.0513867.ph, i64 1
  %1048 = load i8, ptr %.0513867.ph, align 1, !tbaa !24
  %1049 = getelementptr inbounds i8, ptr %.0509868.ph, i64 1
  %1050 = load i8, ptr %.0509868.ph, align 1, !tbaa !24
  %.narrow663.prol = sub i8 %1048, %1050
  store i8 %.narrow663.prol, ptr %.0511871.ph, align 1, !tbaa !24
  %1051 = zext i8 %.narrow663.prol to i32
  %1052 = sub nuw nsw i32 256, %1051
  %1053 = icmp slt i8 %.narrow663.prol, 0
  %1054 = select i1 %1053, i32 %1052, i32 %1051
  %1055 = add i32 %1054, %.0502869.ph
  %1056 = add nuw nsw i32 %.0498870.ph, 1
  %.0511.prol = getelementptr inbounds i8, ptr %.0511871.ph, i64 1
  br label %.lr.ph873.prol.loopexit

.lr.ph873.prol.loopexit:                          ; preds = %.lr.ph873.prol, %.lr.ph873.preheader1555
  %.lcssa1559.unr = phi ptr [ poison, %.lr.ph873.preheader1555 ], [ %1047, %.lr.ph873.prol ]
  %.lcssa1558.unr = phi ptr [ poison, %.lr.ph873.preheader1555 ], [ %1049, %.lr.ph873.prol ]
  %.lcssa1557.unr = phi i32 [ poison, %.lr.ph873.preheader1555 ], [ %1055, %.lr.ph873.prol ]
  %.0511.lcssa1556.unr = phi ptr [ poison, %.lr.ph873.preheader1555 ], [ %.0511.prol, %.lr.ph873.prol ]
  %.0511871.unr = phi ptr [ %.0511871.ph, %.lr.ph873.preheader1555 ], [ %.0511.prol, %.lr.ph873.prol ]
  %.0498870.unr = phi i32 [ %.0498870.ph, %.lr.ph873.preheader1555 ], [ %1056, %.lr.ph873.prol ]
  %.0502869.unr = phi i32 [ %.0502869.ph, %.lr.ph873.preheader1555 ], [ %1055, %.lr.ph873.prol ]
  %.0509868.unr = phi ptr [ %.0509868.ph, %.lr.ph873.preheader1555 ], [ %1049, %.lr.ph873.prol ]
  %.0513867.unr = phi ptr [ %.0513867.ph, %.lr.ph873.preheader1555 ], [ %1047, %.lr.ph873.prol ]
  %1057 = icmp eq i32 %14, %.neg1678
  br i1 %1057, label %.preheader692, label %.lr.ph873

vector.memcheck1408:                              ; preds = %.lr.ph873.preheader
  %1058 = sub i64 %1041, %20
  %diff.check1409 = icmp ult i64 %1058, 8
  %1059 = sub i64 %1041, %17
  %diff.check1410 = icmp ult i64 %1059, 8
  %conflict.rdx1411 = or i1 %diff.check1409, %diff.check1410
  br i1 %conflict.rdx1411, label %.lr.ph873.preheader1555, label %vector.ph1415

vector.ph1415:                                    ; preds = %vector.memcheck1408
  %n.vec1417 = and i64 %1045, 8589934584
  %ind.end1418 = getelementptr i8, ptr %.0511866, i64 %n.vec1417
  %ind.end1421 = trunc i64 %n.vec1417 to i32
  %ind.end1423 = getelementptr i8, ptr %1042, i64 %n.vec1417
  %ind.end1425 = getelementptr i8, ptr %1038, i64 %n.vec1417
  br label %vector.body1427

vector.body1427:                                  ; preds = %vector.body1427, %vector.ph1415
  %index1428 = phi i64 [ 0, %vector.ph1415 ], [ %index.next1441, %vector.body1427 ]
  %vec.phi1429 = phi <4 x i32> [ zeroinitializer, %vector.ph1415 ], [ %1073, %vector.body1427 ]
  %vec.phi1430 = phi <4 x i32> [ zeroinitializer, %vector.ph1415 ], [ %1074, %vector.body1427 ]
  %next.gep1431 = getelementptr i8, ptr %.0511866, i64 %index1428
  %next.gep1433 = getelementptr i8, ptr %1042, i64 %index1428
  %next.gep1435 = getelementptr i8, ptr %1038, i64 %index1428
  %1060 = getelementptr i8, ptr %next.gep1435, i64 4
  %wide.load1437 = load <4 x i8>, ptr %next.gep1435, align 1, !tbaa !24
  %wide.load1438 = load <4 x i8>, ptr %1060, align 1, !tbaa !24
  %1061 = getelementptr i8, ptr %next.gep1433, i64 4
  %wide.load1439 = load <4 x i8>, ptr %next.gep1433, align 1, !tbaa !24
  %wide.load1440 = load <4 x i8>, ptr %1061, align 1, !tbaa !24
  %1062 = sub <4 x i8> %wide.load1437, %wide.load1439
  %1063 = sub <4 x i8> %wide.load1438, %wide.load1440
  %1064 = getelementptr i8, ptr %next.gep1431, i64 4
  store <4 x i8> %1062, ptr %next.gep1431, align 1, !tbaa !24
  store <4 x i8> %1063, ptr %1064, align 1, !tbaa !24
  %1065 = zext <4 x i8> %1062 to <4 x i32>
  %1066 = zext <4 x i8> %1063 to <4 x i32>
  %1067 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1065
  %1068 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1066
  %1069 = icmp slt <4 x i8> %1062, zeroinitializer
  %1070 = icmp slt <4 x i8> %1063, zeroinitializer
  %1071 = select <4 x i1> %1069, <4 x i32> %1067, <4 x i32> %1065
  %1072 = select <4 x i1> %1070, <4 x i32> %1068, <4 x i32> %1066
  %1073 = add <4 x i32> %1071, %vec.phi1429
  %1074 = add <4 x i32> %1072, %vec.phi1430
  %index.next1441 = add nuw i64 %index1428, 8
  %1075 = icmp eq i64 %index.next1441, %n.vec1417
  br i1 %1075, label %middle.block1412, label %vector.body1427, !llvm.loop !80

middle.block1412:                                 ; preds = %vector.body1427
  %bin.rdx1442 = add <4 x i32> %1074, %1073
  %1076 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx1442)
  %cmp.n1443 = icmp eq i64 %1045, %n.vec1417
  br i1 %cmp.n1443, label %.preheader692, label %.lr.ph873.preheader1555

.preheader692:                                    ; preds = %.lr.ph873.prol.loopexit, %.lr.ph873, %middle.block1412, %1037
  %.0513.lcssa = phi ptr [ %1038, %1037 ], [ %ind.end1425, %middle.block1412 ], [ %.lcssa1559.unr, %.lr.ph873.prol.loopexit ], [ %1087, %.lr.ph873 ]
  %.0509.lcssa = phi ptr [ %1042, %1037 ], [ %ind.end1423, %middle.block1412 ], [ %.lcssa1558.unr, %.lr.ph873.prol.loopexit ], [ %1089, %.lr.ph873 ]
  %.0502.lcssa = phi i32 [ 0, %1037 ], [ %1076, %middle.block1412 ], [ %.lcssa1557.unr, %.lr.ph873.prol.loopexit ], [ %1095, %.lr.ph873 ]
  %.0498.lcssa = phi i32 [ 0, %1037 ], [ %14, %middle.block1412 ], [ %14, %.lr.ph873 ], [ %14, %.lr.ph873.prol.loopexit ]
  %.0511.lcssa = phi ptr [ %.0511866, %1037 ], [ %ind.end1418, %middle.block1412 ], [ %.0511.lcssa1556.unr, %.lr.ph873.prol.loopexit ], [ %.0511.1, %.lr.ph873 ]
  %1077 = icmp ult i32 %.0498.lcssa, %7
  br i1 %1077, label %.lr.ph886, label %._crit_edge887

.lr.ph873:                                        ; preds = %.lr.ph873.prol.loopexit, %.lr.ph873
  %.0511871 = phi ptr [ %.0511.1, %.lr.ph873 ], [ %.0511871.unr, %.lr.ph873.prol.loopexit ]
  %.0498870 = phi i32 [ %1096, %.lr.ph873 ], [ %.0498870.unr, %.lr.ph873.prol.loopexit ]
  %.0502869 = phi i32 [ %1095, %.lr.ph873 ], [ %.0502869.unr, %.lr.ph873.prol.loopexit ]
  %.0509868 = phi ptr [ %1089, %.lr.ph873 ], [ %.0509868.unr, %.lr.ph873.prol.loopexit ]
  %.0513867 = phi ptr [ %1087, %.lr.ph873 ], [ %.0513867.unr, %.lr.ph873.prol.loopexit ]
  %1078 = getelementptr inbounds i8, ptr %.0513867, i64 1
  %1079 = load i8, ptr %.0513867, align 1, !tbaa !24
  %1080 = getelementptr inbounds i8, ptr %.0509868, i64 1
  %1081 = load i8, ptr %.0509868, align 1, !tbaa !24
  %.narrow663 = sub i8 %1079, %1081
  store i8 %.narrow663, ptr %.0511871, align 1, !tbaa !24
  %1082 = zext i8 %.narrow663 to i32
  %1083 = sub nuw nsw i32 256, %1082
  %1084 = icmp slt i8 %.narrow663, 0
  %1085 = select i1 %1084, i32 %1083, i32 %1082
  %1086 = add i32 %1085, %.0502869
  %.0511 = getelementptr inbounds i8, ptr %.0511871, i64 1
  %1087 = getelementptr inbounds i8, ptr %.0513867, i64 2
  %1088 = load i8, ptr %1078, align 1, !tbaa !24
  %1089 = getelementptr inbounds i8, ptr %.0509868, i64 2
  %1090 = load i8, ptr %1080, align 1, !tbaa !24
  %.narrow663.1 = sub i8 %1088, %1090
  store i8 %.narrow663.1, ptr %.0511, align 1, !tbaa !24
  %1091 = zext i8 %.narrow663.1 to i32
  %1092 = sub nuw nsw i32 256, %1091
  %1093 = icmp slt i8 %.narrow663.1, 0
  %1094 = select i1 %1093, i32 %1092, i32 %1091
  %1095 = add i32 %1094, %1086
  %1096 = add nuw nsw i32 %.0498870, 2
  %.0511.1 = getelementptr inbounds i8, ptr %.0511871, i64 2
  %exitcond1033.not.1 = icmp eq i32 %1096, %14
  br i1 %exitcond1033.not.1, label %.preheader692, label %.lr.ph873, !llvm.loop !81

.lr.ph886:                                        ; preds = %.preheader692, %.lr.ph886
  %.1499885 = phi i32 [ %1122, %.lr.ph886 ], [ %.0498.lcssa, %.preheader692 ]
  %.1503884 = phi i32 [ %1115, %.lr.ph886 ], [ %.0502.lcssa, %.preheader692 ]
  %.0507883 = phi ptr [ %1119, %.lr.ph886 ], [ %1038, %.preheader692 ]
  %.0508882 = phi ptr [ %1120, %.lr.ph886 ], [ %1042, %.preheader692 ]
  %.1510881 = phi ptr [ %1121, %.lr.ph886 ], [ %.0509.lcssa, %.preheader692 ]
  %.1512880 = phi ptr [ %1117, %.lr.ph886 ], [ %.0511.lcssa, %.preheader692 ]
  %.1514879 = phi ptr [ %1118, %.lr.ph886 ], [ %.0513.lcssa, %.preheader692 ]
  %1097 = load i8, ptr %.1510881, align 1, !tbaa !24
  %1098 = zext i8 %1097 to i32
  %1099 = load i8, ptr %.0508882, align 1, !tbaa !24
  %1100 = zext i8 %1099 to i32
  %1101 = load i8, ptr %.0507883, align 1, !tbaa !24
  %1102 = zext i8 %1101 to i32
  %1103 = sub nsw i32 %1098, %1100
  %1104 = sub nsw i32 %1102, %1100
  %1105 = tail call i32 @llvm.abs.i32(i32 %1103, i1 true)
  %1106 = tail call i32 @llvm.abs.i32(i32 %1104, i1 true)
  %1107 = add nsw i32 %1104, %1103
  %1108 = tail call i32 @llvm.abs.i32(i32 %1107, i1 true)
  %.not657 = icmp ugt i32 %1105, %1106
  %.not658 = icmp ugt i32 %1105, %1108
  %or.cond690 = select i1 %.not657, i1 true, i1 %.not658
  %.not659 = icmp ugt i32 %1106, %1108
  %1109 = select i1 %.not659, i8 %1099, i8 %1097
  %.tr660 = select i1 %or.cond690, i8 %1109, i8 %1101
  %1110 = load i8, ptr %.1514879, align 1, !tbaa !24
  %.narrow661 = sub i8 %1110, %.tr660
  store i8 %.narrow661, ptr %.1512880, align 1, !tbaa !24
  %1111 = zext i8 %.narrow661 to i32
  %1112 = sub nuw nsw i32 256, %1111
  %1113 = icmp slt i8 %.narrow661, 0
  %1114 = select i1 %1113, i32 %1112, i32 %1111
  %1115 = add i32 %1114, %.1503884
  %1116 = icmp ule i32 %1115, %.1501
  %1117 = getelementptr inbounds i8, ptr %.1512880, i64 1
  %1118 = getelementptr inbounds i8, ptr %.1514879, i64 1
  %1119 = getelementptr inbounds i8, ptr %.0507883, i64 1
  %1120 = getelementptr inbounds i8, ptr %.0508882, i64 1
  %1121 = getelementptr inbounds i8, ptr %.1510881, i64 1
  %1122 = add nuw i32 %.1499885, 1
  %1123 = icmp ult i32 %1122, %7
  %or.cond939 = select i1 %1116, i1 %1123, i1 false
  br i1 %or.cond939, label %.lr.ph886, label %._crit_edge887, !llvm.loop !82

._crit_edge887:                                   ; preds = %.lr.ph886, %.preheader692
  %.2504 = phi i32 [ %.0502.lcssa, %.preheader692 ], [ %1115, %.lr.ph886 ]
  %1124 = load i8, ptr %974, align 8, !tbaa !30
  %1125 = icmp eq i8 %1124, 2
  br i1 %1125, label %1126, label %1186

1126:                                             ; preds = %._crit_edge887
  %1127 = and i32 %.2504, 65535
  %1128 = lshr i32 %.2504, 10
  %1129 = and i32 %1128, 4194240
  %.not956 = icmp eq i8 %9, 0
  br i1 %.not956, label %._crit_edge896, label %.lr.ph895

.lr.ph895:                                        ; preds = %1126
  %1130 = getelementptr inbounds i8, ptr %0, i64 936
  %1131 = load ptr, ptr %1130, align 8, !tbaa !31
  %1132 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count1037 = zext i8 %9 to i64
  %xtraiter1663 = and i64 %wide.trip.count1037, 1
  %1133 = icmp eq i8 %9, 1
  br i1 %1133, label %._crit_edge896.loopexit.unr-lcssa, label %.lr.ph895.new

.lr.ph895.new:                                    ; preds = %.lr.ph895
  %unroll_iter1667 = and i64 %wide.trip.count1037, 254
  br label %1134

1134:                                             ; preds = %1160, %.lr.ph895.new
  %indvars.iv1034 = phi i64 [ 0, %.lr.ph895.new ], [ %indvars.iv.next1035.1, %1160 ]
  %.0474893 = phi i32 [ %1127, %.lr.ph895.new ], [ %.1.1, %1160 ]
  %.0475892 = phi i32 [ %1129, %.lr.ph895.new ], [ %.1476.1, %1160 ]
  %niter1668 = phi i64 [ 0, %.lr.ph895.new ], [ %niter1668.next.1, %1160 ]
  %1135 = getelementptr inbounds i8, ptr %1131, i64 %indvars.iv1034
  %1136 = load i8, ptr %1135, align 1, !tbaa !24
  %1137 = icmp eq i8 %1136, 4
  br i1 %1137, label %1138, label %1147

1138:                                             ; preds = %1134
  %1139 = load ptr, ptr %1132, align 8, !tbaa !32
  %1140 = getelementptr inbounds i16, ptr %1139, i64 %indvars.iv1034
  %1141 = load i16, ptr %1140, align 2, !tbaa !33
  %1142 = zext i16 %1141 to i32
  %1143 = mul i32 %.0474893, %1142
  %1144 = lshr i32 %1143, 8
  %1145 = mul i32 %.0475892, %1142
  %1146 = lshr i32 %1145, 8
  br label %1147

1147:                                             ; preds = %1134, %1138
  %.1476 = phi i32 [ %1146, %1138 ], [ %.0475892, %1134 ]
  %.1 = phi i32 [ %1144, %1138 ], [ %.0474893, %1134 ]
  %indvars.iv.next1035 = or disjoint i64 %indvars.iv1034, 1
  %1148 = getelementptr inbounds i8, ptr %1131, i64 %indvars.iv.next1035
  %1149 = load i8, ptr %1148, align 1, !tbaa !24
  %1150 = icmp eq i8 %1149, 4
  br i1 %1150, label %1151, label %1160

1151:                                             ; preds = %1147
  %1152 = load ptr, ptr %1132, align 8, !tbaa !32
  %1153 = getelementptr inbounds i16, ptr %1152, i64 %indvars.iv.next1035
  %1154 = load i16, ptr %1153, align 2, !tbaa !33
  %1155 = zext i16 %1154 to i32
  %1156 = mul i32 %.1, %1155
  %1157 = lshr i32 %1156, 8
  %1158 = mul i32 %.1476, %1155
  %1159 = lshr i32 %1158, 8
  br label %1160

1160:                                             ; preds = %1151, %1147
  %.1476.1 = phi i32 [ %1159, %1151 ], [ %.1476, %1147 ]
  %.1.1 = phi i32 [ %1157, %1151 ], [ %.1, %1147 ]
  %indvars.iv.next1035.1 = add nuw nsw i64 %indvars.iv1034, 2
  %niter1668.next.1 = add i64 %niter1668, 2
  %niter1668.ncmp.1 = icmp eq i64 %niter1668.next.1, %unroll_iter1667
  br i1 %niter1668.ncmp.1, label %._crit_edge896.loopexit.unr-lcssa, label %1134, !llvm.loop !83

._crit_edge896.loopexit.unr-lcssa:                ; preds = %1160, %.lr.ph895
  %.1476.lcssa.ph = phi i32 [ poison, %.lr.ph895 ], [ %.1476.1, %1160 ]
  %.1.lcssa.ph = phi i32 [ poison, %.lr.ph895 ], [ %.1.1, %1160 ]
  %indvars.iv1034.unr = phi i64 [ 0, %.lr.ph895 ], [ %indvars.iv.next1035.1, %1160 ]
  %.0474893.unr = phi i32 [ %1127, %.lr.ph895 ], [ %.1.1, %1160 ]
  %.0475892.unr = phi i32 [ %1129, %.lr.ph895 ], [ %.1476.1, %1160 ]
  %lcmp.mod1664.not = icmp eq i64 %xtraiter1663, 0
  br i1 %lcmp.mod1664.not, label %._crit_edge896, label %.epil.preheader1662

.epil.preheader1662:                              ; preds = %._crit_edge896.loopexit.unr-lcssa
  %1161 = getelementptr inbounds i8, ptr %1131, i64 %indvars.iv1034.unr
  %1162 = load i8, ptr %1161, align 1, !tbaa !24
  %1163 = icmp eq i8 %1162, 4
  br i1 %1163, label %1164, label %._crit_edge896

1164:                                             ; preds = %.epil.preheader1662
  %1165 = load ptr, ptr %1132, align 8, !tbaa !32
  %1166 = getelementptr inbounds i16, ptr %1165, i64 %indvars.iv1034.unr
  %1167 = load i16, ptr %1166, align 2, !tbaa !33
  %1168 = zext i16 %1167 to i32
  %1169 = mul i32 %.0474893.unr, %1168
  %1170 = lshr i32 %1169, 8
  %1171 = mul i32 %.0475892.unr, %1168
  %1172 = lshr i32 %1171, 8
  br label %._crit_edge896

._crit_edge896:                                   ; preds = %._crit_edge896.loopexit.unr-lcssa, %1164, %.epil.preheader1662, %1126
  %.0475.lcssa = phi i32 [ %1129, %1126 ], [ %.1476.lcssa.ph, %._crit_edge896.loopexit.unr-lcssa ], [ %1172, %1164 ], [ %.0475892.unr, %.epil.preheader1662 ]
  %.0474.lcssa = phi i32 [ %1127, %1126 ], [ %.1.lcssa.ph, %._crit_edge896.loopexit.unr-lcssa ], [ %1170, %1164 ], [ %.0474893.unr, %.epil.preheader1662 ]
  %1173 = getelementptr inbounds i8, ptr %0, i64 960
  %1174 = load ptr, ptr %1173, align 8, !tbaa !35
  %1175 = getelementptr inbounds i8, ptr %1174, i64 8
  %1176 = load i16, ptr %1175, align 2, !tbaa !33
  %1177 = zext i16 %1176 to i32
  %1178 = mul i32 %.0475.lcssa, %1177
  %1179 = icmp ugt i32 %1178, 33553927
  br i1 %1179, label %1186, label %1180

1180:                                             ; preds = %._crit_edge896
  %1181 = mul i32 %.0474.lcssa, %1177
  %1182 = lshr i32 %1181, 3
  %1183 = shl nuw i32 %1178, 7
  %1184 = and i32 %1183, -1024
  %1185 = add i32 %1184, %1182
  br label %1186

1186:                                             ; preds = %1180, %._crit_edge896, %._crit_edge887
  %.4506 = phi i32 [ %.2504, %._crit_edge887 ], [ %1185, %1180 ], [ 2147483647, %._crit_edge896 ]
  %1187 = icmp ult i32 %.4506, %.6487
  br i1 %1187, label %.thread1059.sink.split, label %.thread1059

.thread1059.sink.split:                           ; preds = %.lr.ph916, %middle.block1484, %vec.epilog.middle.block1507, %1186, %.preheader691
  %.sink1090 = phi ptr [ %873, %.preheader691 ], [ %1039, %1186 ], [ %873, %vec.epilog.middle.block1507 ], [ %873, %middle.block1484 ], [ %873, %.lr.ph916 ]
  %1188 = load ptr, ptr %.sink1090, align 8, !tbaa !72
  br label %.thread1059

.thread1059:                                      ; preds = %.thread1059.sink.split, %384, %1186, %972
  %.7 = phi ptr [ %.5, %972 ], [ %.5, %1186 ], [ %386, %384 ], [ %1188, %.thread1059.sink.split ]
  tail call void @png_write_filtered_row(ptr noundef nonnull %0, ptr noundef %.7)
  %1189 = load i8, ptr %8, align 1, !tbaa !20
  %.not665 = icmp eq i8 %1189, 0
  br i1 %.not665, label %1223, label %.preheader

.preheader:                                       ; preds = %.thread1059
  %1190 = icmp ugt i8 %9, 1
  br i1 %1190, label %.lr.ph919, label %._crit_edge920

.lr.ph919:                                        ; preds = %.preheader
  %1191 = getelementptr inbounds i8, ptr %0, i64 936
  %wide.trip.count1044 = zext i8 %9 to i64
  %1192 = add nsw i64 %wide.trip.count1044, -1
  %1193 = add nsw i64 %wide.trip.count1044, -2
  %xtraiter1673 = and i64 %1192, 3
  %1194 = icmp ult i64 %1193, 3
  br i1 %1194, label %._crit_edge920.loopexit.unr-lcssa, label %.lr.ph919.new

.lr.ph919.new:                                    ; preds = %.lr.ph919
  %unroll_iter1675 = and i64 %1192, -4
  br label %1195

1195:                                             ; preds = %1195, %.lr.ph919.new
  %indvars.iv1041 = phi i64 [ 1, %.lr.ph919.new ], [ %indvars.iv.next1042.3, %1195 ]
  %niter1676 = phi i64 [ 0, %.lr.ph919.new ], [ %niter1676.next.3, %1195 ]
  %1196 = load ptr, ptr %1191, align 8, !tbaa !31
  %1197 = getelementptr i8, ptr %1196, i64 %indvars.iv1041
  %1198 = getelementptr i8, ptr %1197, i64 -1
  %1199 = load i8, ptr %1198, align 1, !tbaa !24
  store i8 %1199, ptr %1197, align 1, !tbaa !24
  %1200 = load ptr, ptr %1191, align 8, !tbaa !31
  %1201 = getelementptr i8, ptr %1200, i64 %indvars.iv1041
  %1202 = getelementptr i8, ptr %1201, i64 1
  %1203 = load i8, ptr %1201, align 1, !tbaa !24
  store i8 %1203, ptr %1202, align 1, !tbaa !24
  %1204 = load ptr, ptr %1191, align 8, !tbaa !31
  %1205 = getelementptr i8, ptr %1204, i64 %indvars.iv1041
  %1206 = getelementptr i8, ptr %1205, i64 2
  %1207 = getelementptr i8, ptr %1205, i64 1
  %1208 = load i8, ptr %1207, align 1, !tbaa !24
  store i8 %1208, ptr %1206, align 1, !tbaa !24
  %1209 = load ptr, ptr %1191, align 8, !tbaa !31
  %1210 = getelementptr i8, ptr %1209, i64 %indvars.iv1041
  %1211 = getelementptr i8, ptr %1210, i64 3
  %1212 = getelementptr i8, ptr %1210, i64 2
  %1213 = load i8, ptr %1212, align 1, !tbaa !24
  store i8 %1213, ptr %1211, align 1, !tbaa !24
  %indvars.iv.next1042.3 = add nuw nsw i64 %indvars.iv1041, 4
  %niter1676.next.3 = add i64 %niter1676, 4
  %niter1676.ncmp.3 = icmp eq i64 %niter1676.next.3, %unroll_iter1675
  br i1 %niter1676.ncmp.3, label %._crit_edge920.loopexit.unr-lcssa, label %1195, !llvm.loop !84

._crit_edge920.loopexit.unr-lcssa:                ; preds = %1195, %.lr.ph919
  %indvars.iv1041.unr = phi i64 [ 1, %.lr.ph919 ], [ %indvars.iv.next1042.3, %1195 ]
  %lcmp.mod1674.not = icmp eq i64 %xtraiter1673, 0
  br i1 %lcmp.mod1674.not, label %._crit_edge920.loopexit, label %.epil.preheader1672

.epil.preheader1672:                              ; preds = %._crit_edge920.loopexit.unr-lcssa, %.epil.preheader1672
  %indvars.iv1041.epil = phi i64 [ %indvars.iv.next1042.epil, %.epil.preheader1672 ], [ %indvars.iv1041.unr, %._crit_edge920.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader1672 ], [ 0, %._crit_edge920.loopexit.unr-lcssa ]
  %1214 = load ptr, ptr %1191, align 8, !tbaa !31
  %1215 = getelementptr i8, ptr %1214, i64 %indvars.iv1041.epil
  %1216 = getelementptr i8, ptr %1215, i64 -1
  %1217 = load i8, ptr %1216, align 1, !tbaa !24
  store i8 %1217, ptr %1215, align 1, !tbaa !24
  %indvars.iv.next1042.epil = add nuw nsw i64 %indvars.iv1041.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1673
  br i1 %epil.iter.cmp.not, label %._crit_edge920.loopexit, label %.epil.preheader1672, !llvm.loop !85

._crit_edge920.loopexit:                          ; preds = %.epil.preheader1672, %._crit_edge920.loopexit.unr-lcssa
  %1218 = zext i8 %9 to i64
  br label %._crit_edge920

._crit_edge920:                                   ; preds = %.preheader, %._crit_edge920.loopexit
  %.0.lcssa = phi i64 [ %1218, %._crit_edge920.loopexit ], [ 1, %.preheader ]
  %1219 = load i8, ptr %.7, align 1, !tbaa !24
  %1220 = getelementptr inbounds i8, ptr %0, i64 936
  %1221 = load ptr, ptr %1220, align 8, !tbaa !31
  %1222 = getelementptr inbounds i8, ptr %1221, i64 %.0.lcssa
  store i8 %1219, ptr %1222, align 1, !tbaa !24
  br label %1223

1223:                                             ; preds = %._crit_edge920, %.thread1059
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @png_write_filtered_row(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <16 x i32> @llvm.abs.v16i32(<16 x i32>, i1 immarg) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <8 x i32> @llvm.abs.v8i32(<8 x i32>, i1 immarg) #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 speculatable willreturn memory(none) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 589}
!6 = !{!"png_struct_def", !7, i64 0, !9, i64 200, !9, i64 208, !9, i64 216, !9, i64 224, !9, i64 232, !9, i64 240, !9, i64 248, !9, i64 256, !9, i64 264, !9, i64 272, !7, i64 280, !7, i64 281, !10, i64 284, !10, i64 288, !10, i64 292, !11, i64 296, !9, i64 408, !12, i64 416, !10, i64 424, !10, i64 428, !10, i64 432, !10, i64 436, !10, i64 440, !10, i64 444, !10, i64 448, !10, i64 452, !10, i64 456, !12, i64 464, !12, i64 472, !10, i64 480, !10, i64 484, !9, i64 488, !9, i64 496, !9, i64 504, !9, i64 512, !9, i64 520, !9, i64 528, !13, i64 536, !10, i64 560, !10, i64 564, !9, i64 568, !14, i64 576, !14, i64 578, !7, i64 580, !7, i64 585, !7, i64 586, !7, i64 587, !7, i64 588, !7, i64 589, !7, i64 590, !7, i64 591, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !14, i64 598, !7, i64 600, !15, i64 604, !16, i64 608, !16, i64 618, !9, i64 632, !10, i64 640, !10, i64 644, !10, i64 648, !15, i64 652, !15, i64 656, !9, i64 664, !9, i64 672, !9, i64 680, !9, i64 688, !9, i64 696, !9, i64 704, !17, i64 712, !17, i64 717, !9, i64 728, !16, i64 736, !9, i64 752, !9, i64 760, !9, i64 768, !9, i64 776, !9, i64 784, !9, i64 792, !9, i64 800, !9, i64 808, !9, i64 816, !10, i64 824, !10, i64 828, !12, i64 832, !12, i64 840, !12, i64 848, !12, i64 856, !10, i64 864, !10, i64 868, !12, i64 872, !12, i64 880, !9, i64 888, !9, i64 896, !9, i64 904, !9, i64 912, !9, i64 920, !7, i64 928, !7, i64 929, !9, i64 936, !9, i64 944, !9, i64 952, !9, i64 960, !9, i64 968, !9, i64 976, !10, i64 984, !9, i64 992, !9, i64 1000, !10, i64 1008, !9, i64 1016, !7, i64 1024, !14, i64 1026, !14, i64 1028, !14, i64 1030, !10, i64 1032, !10, i64 1036, !7, i64 1040, !9, i64 1048, !9, i64 1056, !9, i64 1064, !9, i64 1072, !9, i64 1080, !9, i64 1088, !9, i64 1096, !7, i64 1104, !10, i64 1108, !10, i64 1112, !10, i64 1116, !18, i64 1120, !10, i64 1152, !10, i64 1156, !9, i64 1160, !10, i64 1168}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!"z_stream_s", !9, i64 0, !10, i64 8, !12, i64 16, !9, i64 24, !10, i64 32, !12, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !10, i64 88, !12, i64 96, !12, i64 104}
!12 = !{!"long", !7, i64 0}
!13 = !{!"png_row_info_struct", !10, i64 0, !12, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!14 = !{!"short", !7, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = !{!"png_color_16_struct", !7, i64 0, !14, i64 2, !14, i64 4, !14, i64 6, !14, i64 8}
!17 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!18 = !{!"png_unknown_chunk_t", !7, i64 0, !9, i64 8, !12, i64 16, !7, i64 24}
!19 = !{!13, !12, i64 8}
!20 = !{!6, !7, i64 929}
!21 = !{!13, !7, i64 19}
!22 = !{!6, !9, i64 488}
!23 = !{!6, !9, i64 496}
!24 = !{!7, !7, i64 0}
!25 = distinct !{!25, !26, !27, !28}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !26, !28, !27}
!30 = !{!6, !7, i64 928}
!31 = !{!6, !9, i64 936}
!32 = !{!6, !9, i64 944}
!33 = !{!14, !14, i64 0}
!34 = distinct !{!34, !26}
!35 = !{!6, !9, i64 960}
!36 = !{!6, !9, i64 504}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.unroll.disable"}
!39 = distinct !{!39, !26, !27, !28}
!40 = distinct !{!40, !26, !27, !28}
!41 = distinct !{!41, !38}
!42 = distinct !{!42, !26, !27, !28}
!43 = distinct !{!43, !26, !27}
!44 = distinct !{!44, !26, !27}
!45 = !{!6, !9, i64 952}
!46 = distinct !{!46, !26}
!47 = !{!6, !9, i64 968}
!48 = distinct !{!48, !26, !27, !28}
!49 = distinct !{!49, !26, !27}
!50 = distinct !{!50, !26}
!51 = distinct !{!51, !26}
!52 = !{!6, !9, i64 512}
!53 = distinct !{!53, !26, !27, !28}
!54 = distinct !{!54, !26, !27, !28}
!55 = distinct !{!55, !38}
!56 = distinct !{!56, !26, !27}
!57 = distinct !{!57, !26}
!58 = distinct !{!58, !26}
!59 = distinct !{!59, !26}
!60 = !{!6, !9, i64 520}
!61 = distinct !{!61, !38}
!62 = distinct !{!62, !26, !27, !28}
!63 = distinct !{!63, !26, !27, !28}
!64 = distinct !{!64, !26, !27, !28}
!65 = distinct !{!65, !26, !27}
!66 = distinct !{!66, !26, !27}
!67 = distinct !{!67, !26}
!68 = distinct !{!68, !26, !27, !28}
!69 = distinct !{!69, !26, !27}
!70 = distinct !{!70, !26}
!71 = distinct !{!71, !26}
!72 = !{!6, !9, i64 528}
!73 = distinct !{!73, !38}
!74 = distinct !{!74, !26, !27, !28}
!75 = distinct !{!75, !26, !27, !28}
!76 = distinct !{!76, !26, !27, !28}
!77 = distinct !{!77, !26, !27}
!78 = distinct !{!78, !26, !27}
!79 = distinct !{!79, !26}
!80 = distinct !{!80, !26, !27, !28}
!81 = distinct !{!81, !26, !27}
!82 = distinct !{!82, !26}
!83 = distinct !{!83, !26}
!84 = distinct !{!84, !26}
!85 = distinct !{!85, !38}


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