; LLVM IR from corentinartaud/graphics :: ThirdParty/FreeImage-3170/Source/LibPNG (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, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i32, i32, i32, i32, %struct.z_stream_s, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, i64, i32, i32, ptr, i16, i32, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i8, i32, %struct.png_color_16_struct, %struct.png_color_16_struct, ptr, i32, i32, i32, i32, 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, ptr, ptr, i8, i8, ptr, ptr, ptr, ptr, ptr, i8, [29 x i8], i32, ptr, ptr, i32, i32, ptr, i8, i8, i16, i16, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i32, i32, i32, i64, %struct.png_unknown_chunk_t, i64, ptr, i64, i32, i32, ptr, [4 x ptr], %struct.png_colorspace }
%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_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 }
%struct.png_colorspace = type { i32, %struct.png_xy, %struct.png_XYZ, i16, i16 }
%struct.png_xy = type { i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.png_XYZ = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.png_row_info_struct = type { i32, i64, i8, i8, i8, 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 noalias 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 i64, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i64, align 8
  %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 i64, align 8
  %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 i64, align 8
  %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 i64, align 8
  %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 i64, align 8
  %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 i64, align 8
  %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 i64, align 8
  %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 i64, align 8
  %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 62
  %112 = load i8, ptr %111, align 2, !tbaa !9
  store i8 %112, ptr %10, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, 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 !22
  store i64 %115, ptr %11, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.png_struct_def, ptr %116, i32 0, i32 112
  %118 = load i8, ptr %117, align 1, !tbaa !25
  %119 = zext i8 %118 to i32
  store i32 %119, ptr %12, align 4, !tbaa !26
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.png_row_info_struct, ptr %120, i32 0, i32 5
  %122 = load i8, ptr %121, align 1, !tbaa !27
  %123 = zext i8 %122 to i32
  %124 = add nsw i32 %123, 7
  %125 = ashr i32 %124, 3
  store i32 %125, ptr %9, align 4, !tbaa !26
  %126 = load ptr, ptr %3, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.png_struct_def, ptr %126, i32 0, i32 45
  %128 = load ptr, ptr %127, align 8, !tbaa !28
  store ptr %128, ptr %6, align 8, !tbaa !5
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.png_struct_def, ptr %129, i32 0, i32 46
  %131 = load ptr, ptr %130, align 8, !tbaa !29
  store ptr %131, ptr %5, align 8, !tbaa !5
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %132, ptr %7, align 8, !tbaa !5
  store i32 2147483647, ptr %8, align 4, !tbaa !26
  %133 = load i8, ptr %10, align 1, !tbaa !21
  %134 = zext i8 %133 to i32
  %135 = and i32 %134, 8
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %137, label %251

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

141:                                              ; preds = %137
  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 !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #2
  store i64 0, ptr %15, align 8, !tbaa !24
  %142 = load ptr, ptr %7, align 8, !tbaa !5
  %143 = getelementptr inbounds i8, ptr %142, i64 1
  store ptr %143, ptr %13, align 8, !tbaa !5
  br label %144

144:                                              ; preds = %163, %141
  %145 = load i64, ptr %15, align 8, !tbaa !24
  %146 = load i64, ptr %11, align 8, !tbaa !24
  %147 = icmp ult i64 %145, %146
  br i1 %147, label %148, label %168

148:                                              ; preds = %144
  %149 = load ptr, ptr %13, align 8, !tbaa !5
  %150 = load i8, ptr %149, align 1, !tbaa !21
  %151 = zext i8 %150 to i32
  store i32 %151, ptr %16, align 4, !tbaa !26
  %152 = load i32, ptr %16, align 4, !tbaa !26
  %153 = icmp slt i32 %152, 128
  br i1 %153, label %154, label %156

154:                                              ; preds = %148
  %155 = load i32, ptr %16, align 4, !tbaa !26
  br label %159

156:                                              ; preds = %148
  %157 = load i32, ptr %16, align 4, !tbaa !26
  %158 = sub nsw i32 256, %157
  br label %159

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

163:                                              ; preds = %159
  %164 = load i64, ptr %15, align 8, !tbaa !24
  %165 = add i64 %164, 1
  store i64 %165, ptr %15, align 8, !tbaa !24
  %166 = load ptr, ptr %13, align 8, !tbaa !5
  %167 = getelementptr inbounds i8, ptr %166, i32 1
  store ptr %167, ptr %13, align 8, !tbaa !5
  br label %144, !llvm.loop !30

168:                                              ; preds = %144
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.png_struct_def, ptr %169, i32 0, i32 111
  %171 = load i8, ptr %170, align 8, !tbaa !32
  %172 = zext i8 %171 to i32
  %173 = icmp eq i32 %172, 2
  br i1 %173, label %174, label %249

174:                                              ; preds = %168
  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
  %175 = load i32, ptr %14, align 4, !tbaa !26
  %176 = and i32 %175, 65535
  store i32 %176, ptr %18, align 4, !tbaa !26
  %177 = load i32, ptr %14, align 4, !tbaa !26
  %178 = lshr i32 %177, 10
  %179 = and i32 %178, 4194240
  store i32 %179, ptr %17, align 4, !tbaa !26
  store i32 0, ptr %19, align 4, !tbaa !26
  br label %180

180:                                              ; preds = %218, %174
  %181 = load i32, ptr %19, align 4, !tbaa !26
  %182 = load i32, ptr %12, align 4, !tbaa !26
  %183 = icmp slt i32 %181, %182
  br i1 %183, label %184, label %221

184:                                              ; preds = %180
  %185 = load ptr, ptr %3, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.png_struct_def, ptr %185, i32 0, i32 113
  %187 = load ptr, ptr %186, align 8, !tbaa !33
  %188 = load i32, ptr %19, align 4, !tbaa !26
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds i8, ptr %187, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !21
  %192 = zext i8 %191 to i32
  %193 = icmp eq i32 %192, 0
  br i1 %193, label %194, label %217

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

217:                                              ; preds = %194, %184
  br label %218

218:                                              ; preds = %217
  %219 = load i32, ptr %19, align 4, !tbaa !26
  %220 = add nsw i32 %219, 1
  store i32 %220, ptr %19, align 4, !tbaa !26
  br label %180, !llvm.loop !36

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

242:                                              ; preds = %221
  store i32 2147483647, ptr %14, align 4, !tbaa !26
  br label %248

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

248:                                              ; preds = %243, %242
  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 %249

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

251:                                              ; preds = %249, %137, %2
  %252 = load i8, ptr %10, align 1, !tbaa !21
  %253 = zext i8 %252 to i32
  %254 = icmp eq i32 %253, 16
  br i1 %254, label %255, label %309

255:                                              ; preds = %251
  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 8, ptr %23) #2
  store i64 0, ptr %23, align 8, !tbaa !24
  %256 = load ptr, ptr %7, align 8, !tbaa !5
  %257 = getelementptr inbounds i8, ptr %256, i64 1
  store ptr %257, ptr %20, align 8, !tbaa !5
  %258 = load ptr, ptr %3, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.png_struct_def, ptr %258, i32 0, i32 47
  %260 = load ptr, ptr %259, align 8, !tbaa !38
  %261 = getelementptr inbounds i8, ptr %260, i64 1
  store ptr %261, ptr %22, align 8, !tbaa !5
  br label %262

262:                                              ; preds = %271, %255
  %263 = load i64, ptr %23, align 8, !tbaa !24
  %264 = load i32, ptr %9, align 4, !tbaa !26
  %265 = zext i32 %264 to i64
  %266 = icmp ult i64 %263, %265
  br i1 %266, label %267, label %278

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

271:                                              ; preds = %267
  %272 = load i64, ptr %23, align 8, !tbaa !24
  %273 = add i64 %272, 1
  store i64 %273, ptr %23, align 8, !tbaa !24
  %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 %262, !llvm.loop !39

278:                                              ; preds = %262
  %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 i64, ptr %23, align 8, !tbaa !24
  %283 = load i64, ptr %11, align 8, !tbaa !24
  %284 = icmp ult i64 %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 !21
  %288 = zext i8 %287 to i32
  %289 = load ptr, ptr %21, align 8, !tbaa !5
  %290 = load i8, ptr %289, align 1, !tbaa !21
  %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 !21
  br label %296

296:                                              ; preds = %285
  %297 = load i64, ptr %23, align 8, !tbaa !24
  %298 = add i64 %297, 1
  store i64 %298, ptr %23, align 8, !tbaa !24
  %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 !40

305:                                              ; preds = %281
  %306 = load ptr, ptr %3, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.png_struct_def, ptr %306, i32 0, i32 47
  %308 = load ptr, ptr %307, align 8, !tbaa !38
  store ptr %308, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, 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 %567

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

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 !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #2
  %315 = load i32, ptr %8, align 4, !tbaa !26
  store i32 %315, ptr %28, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, 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 111
  %318 = load i8, ptr %317, align 8, !tbaa !32
  %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 !26
  %323 = and i32 %322, 65535
  store i32 %323, ptr %33, align 4, !tbaa !26
  %324 = load i32, ptr %28, align 4, !tbaa !26
  %325 = lshr i32 %324, 10
  %326 = and i32 %325, 4194240
  store i32 %326, ptr %32, align 4, !tbaa !26
  store i32 0, ptr %31, align 4, !tbaa !26
  br label %327

327:                                              ; preds = %365, %321
  %328 = load i32, ptr %31, align 4, !tbaa !26
  %329 = load i32, ptr %12, align 4, !tbaa !26
  %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 113
  %334 = load ptr, ptr %333, align 8, !tbaa !33
  %335 = load i32, ptr %31, align 4, !tbaa !26
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i8, ptr %334, i64 %336
  %338 = load i8, ptr %337, align 1, !tbaa !21
  %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 !26
  %343 = load ptr, ptr %3, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.png_struct_def, ptr %343, i32 0, i32 115
  %345 = load ptr, ptr %344, align 8, !tbaa !41
  %346 = load i32, ptr %31, align 4, !tbaa !26
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i16, ptr %345, i64 %347
  %349 = load i16, ptr %348, align 2, !tbaa !35
  %350 = zext i16 %349 to i32
  %351 = mul i32 %342, %350
  %352 = lshr i32 %351, 8
  store i32 %352, ptr %33, align 4, !tbaa !26
  %353 = load i32, ptr %32, align 4, !tbaa !26
  %354 = load ptr, ptr %3, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.png_struct_def, ptr %354, i32 0, i32 115
  %356 = load ptr, ptr %355, align 8, !tbaa !41
  %357 = load i32, ptr %31, align 4, !tbaa !26
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds i16, ptr %356, i64 %358
  %360 = load i16, ptr %359, align 2, !tbaa !35
  %361 = zext i16 %360 to i32
  %362 = mul i32 %353, %361
  %363 = lshr i32 %362, 8
  store i32 %363, ptr %32, align 4, !tbaa !26
  br label %364

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

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

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

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

390:                                              ; preds = %368
  %391 = load i32, ptr %32, align 4, !tbaa !26
  %392 = shl i32 %391, 10
  %393 = load i32, ptr %33, align 4, !tbaa !26
  %394 = add i32 %392, %393
  store i32 %394, ptr %28, align 4, !tbaa !26
  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 i64 0, ptr %29, align 8, !tbaa !24
  %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 47
  %401 = load ptr, ptr %400, align 8, !tbaa !38
  %402 = getelementptr inbounds i8, ptr %401, i64 1
  store ptr %402, ptr %25, align 8, !tbaa !5
  br label %403

403:                                              ; preds = %424, %396
  %404 = load i64, ptr %29, align 8, !tbaa !24
  %405 = load i32, ptr %9, align 4, !tbaa !26
  %406 = zext i32 %405 to i64
  %407 = icmp ult i64 %404, %406
  br i1 %407, label %408, label %431

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

415:                                              ; preds = %408
  %416 = load i32, ptr %30, align 4, !tbaa !26
  br label %420

417:                                              ; preds = %408
  %418 = load i32, ptr %30, align 4, !tbaa !26
  %419 = sub nsw i32 256, %418
  br label %420

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

424:                                              ; preds = %420
  %425 = load i64, ptr %29, align 8, !tbaa !24
  %426 = add i64 %425, 1
  store i64 %426, ptr %29, align 8, !tbaa !24
  %427 = load ptr, ptr %24, align 8, !tbaa !5
  %428 = getelementptr inbounds i8, ptr %427, i32 1
  store ptr %428, ptr %24, align 8, !tbaa !5
  %429 = load ptr, ptr %25, align 8, !tbaa !5
  %430 = getelementptr inbounds i8, ptr %429, i32 1
  store ptr %430, ptr %25, align 8, !tbaa !5
  br label %403, !llvm.loop !44

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

434:                                              ; preds = %466, %431
  %435 = load i64, ptr %29, align 8, !tbaa !24
  %436 = load i64, ptr %11, align 8, !tbaa !24
  %437 = icmp ult i64 %435, %436
  br i1 %437, label %438, label %475

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

452:                                              ; preds = %438
  %453 = load i32, ptr %30, align 4, !tbaa !26
  br label %457

454:                                              ; preds = %438
  %455 = load i32, ptr %30, align 4, !tbaa !26
  %456 = sub nsw i32 256, %455
  br label %457

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

464:                                              ; preds = %457
  br label %475

465:                                              ; preds = %457
  br label %466

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

475:                                              ; preds = %464, %434
  %476 = load ptr, ptr %3, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.png_struct_def, ptr %476, i32 0, i32 111
  %478 = load i8, ptr %477, align 8, !tbaa !32
  %479 = zext i8 %478 to i32
  %480 = icmp eq i32 %479, 2
  br i1 %480, label %481, label %556

481:                                              ; preds = %475
  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
  %482 = load i32, ptr %27, align 4, !tbaa !26
  %483 = and i32 %482, 65535
  store i32 %483, ptr %36, align 4, !tbaa !26
  %484 = load i32, ptr %27, align 4, !tbaa !26
  %485 = lshr i32 %484, 10
  %486 = and i32 %485, 4194240
  store i32 %486, ptr %35, align 4, !tbaa !26
  store i32 0, ptr %34, align 4, !tbaa !26
  br label %487

487:                                              ; preds = %525, %481
  %488 = load i32, ptr %34, align 4, !tbaa !26
  %489 = load i32, ptr %12, align 4, !tbaa !26
  %490 = icmp slt i32 %488, %489
  br i1 %490, label %491, label %528

491:                                              ; preds = %487
  %492 = load ptr, ptr %3, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.png_struct_def, ptr %492, i32 0, i32 113
  %494 = load ptr, ptr %493, align 8, !tbaa !33
  %495 = load i32, ptr %34, align 4, !tbaa !26
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds i8, ptr %494, i64 %496
  %498 = load i8, ptr %497, align 1, !tbaa !21
  %499 = zext i8 %498 to i32
  %500 = icmp eq i32 %499, 1
  br i1 %500, label %501, label %524

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

524:                                              ; preds = %501, %491
  br label %525

525:                                              ; preds = %524
  %526 = load i32, ptr %34, align 4, !tbaa !26
  %527 = add nsw i32 %526, 1
  store i32 %527, ptr %34, align 4, !tbaa !26
  br label %487, !llvm.loop !46

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

549:                                              ; preds = %528
  store i32 2147483647, ptr %27, align 4, !tbaa !26
  br label %555

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

555:                                              ; preds = %550, %549
  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 %556

556:                                              ; preds = %555, %475
  %557 = load i32, ptr %27, align 4, !tbaa !26
  %558 = load i32, ptr %8, align 4, !tbaa !26
  %559 = icmp ult i32 %557, %558
  br i1 %559, label %560, label %565

560:                                              ; preds = %556
  %561 = load i32, ptr %27, align 4, !tbaa !26
  store i32 %561, ptr %8, align 4, !tbaa !26
  %562 = load ptr, ptr %3, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.png_struct_def, ptr %562, i32 0, i32 47
  %564 = load ptr, ptr %563, align 8, !tbaa !38
  store ptr %564, ptr %5, align 8, !tbaa !5
  br label %565

565:                                              ; preds = %560, %556
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 8, 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 %566

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

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

571:                                              ; preds = %567
  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 8, ptr %40) #2
  store i64 0, ptr %40, align 8, !tbaa !24
  %572 = load ptr, ptr %7, align 8, !tbaa !5
  %573 = getelementptr inbounds i8, ptr %572, i64 1
  store ptr %573, ptr %37, align 8, !tbaa !5
  %574 = load ptr, ptr %3, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.png_struct_def, ptr %574, i32 0, i32 48
  %576 = load ptr, ptr %575, align 8, !tbaa !47
  %577 = getelementptr inbounds i8, ptr %576, i64 1
  store ptr %577, ptr %38, align 8, !tbaa !5
  %578 = load ptr, ptr %6, align 8, !tbaa !5
  %579 = getelementptr inbounds i8, ptr %578, i64 1
  store ptr %579, ptr %39, align 8, !tbaa !5
  br label %580

580:                                              ; preds = %595, %571
  %581 = load i64, ptr %40, align 8, !tbaa !24
  %582 = load i64, ptr %11, align 8, !tbaa !24
  %583 = icmp ult i64 %581, %582
  br i1 %583, label %584, label %604

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

595:                                              ; preds = %584
  %596 = load i64, ptr %40, align 8, !tbaa !24
  %597 = add i64 %596, 1
  store i64 %597, ptr %40, align 8, !tbaa !24
  %598 = load ptr, ptr %37, align 8, !tbaa !5
  %599 = getelementptr inbounds i8, ptr %598, i32 1
  store ptr %599, ptr %37, align 8, !tbaa !5
  %600 = load ptr, ptr %39, align 8, !tbaa !5
  %601 = getelementptr inbounds i8, ptr %600, i32 1
  store ptr %601, ptr %39, align 8, !tbaa !5
  %602 = load ptr, ptr %38, align 8, !tbaa !5
  %603 = getelementptr inbounds i8, ptr %602, i32 1
  store ptr %603, ptr %38, align 8, !tbaa !5
  br label %580, !llvm.loop !48

604:                                              ; preds = %580
  %605 = load ptr, ptr %3, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.png_struct_def, ptr %605, i32 0, i32 48
  %607 = load ptr, ptr %606, align 8, !tbaa !47
  store ptr %607, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, 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 %834

608:                                              ; preds = %567
  %609 = load i8, ptr %10, align 1, !tbaa !21
  %610 = zext i8 %609 to i32
  %611 = and i32 %610, 32
  %612 = icmp ne i32 %611, 0
  br i1 %612, label %613, label %833

613:                                              ; preds = %608
  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 !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #2
  %614 = load i32, ptr %8, align 4, !tbaa !26
  store i32 %614, ptr %45, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #2
  %615 = load ptr, ptr %3, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.png_struct_def, ptr %615, i32 0, i32 111
  %617 = load i8, ptr %616, align 8, !tbaa !32
  %618 = zext i8 %617 to i32
  %619 = icmp eq i32 %618, 2
  br i1 %619, label %620, label %695

620:                                              ; preds = %613
  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
  %621 = load i32, ptr %45, align 4, !tbaa !26
  %622 = and i32 %621, 65535
  store i32 %622, ptr %50, align 4, !tbaa !26
  %623 = load i32, ptr %45, align 4, !tbaa !26
  %624 = lshr i32 %623, 10
  %625 = and i32 %624, 4194240
  store i32 %625, ptr %49, align 4, !tbaa !26
  store i32 0, ptr %48, align 4, !tbaa !26
  br label %626

626:                                              ; preds = %664, %620
  %627 = load i32, ptr %48, align 4, !tbaa !26
  %628 = load i32, ptr %12, align 4, !tbaa !26
  %629 = icmp slt i32 %627, %628
  br i1 %629, label %630, label %667

630:                                              ; preds = %626
  %631 = load ptr, ptr %3, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.png_struct_def, ptr %631, i32 0, i32 113
  %633 = load ptr, ptr %632, align 8, !tbaa !33
  %634 = load i32, ptr %48, align 4, !tbaa !26
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds i8, ptr %633, i64 %635
  %637 = load i8, ptr %636, align 1, !tbaa !21
  %638 = zext i8 %637 to i32
  %639 = icmp eq i32 %638, 2
  br i1 %639, label %640, label %663

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

663:                                              ; preds = %640, %630
  br label %664

664:                                              ; preds = %663
  %665 = load i32, ptr %48, align 4, !tbaa !26
  %666 = add nsw i32 %665, 1
  store i32 %666, ptr %48, align 4, !tbaa !26
  br label %626, !llvm.loop !49

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

688:                                              ; preds = %667
  store i32 2147483647, ptr %45, align 4, !tbaa !26
  br label %694

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

694:                                              ; preds = %689, %688
  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 %695

695:                                              ; preds = %694, %613
  store i64 0, ptr %46, align 8, !tbaa !24
  %696 = load ptr, ptr %7, align 8, !tbaa !5
  %697 = getelementptr inbounds i8, ptr %696, i64 1
  store ptr %697, ptr %41, align 8, !tbaa !5
  %698 = load ptr, ptr %3, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.png_struct_def, ptr %698, i32 0, i32 48
  %700 = load ptr, ptr %699, align 8, !tbaa !47
  %701 = getelementptr inbounds i8, ptr %700, i64 1
  store ptr %701, ptr %42, align 8, !tbaa !5
  %702 = load ptr, ptr %6, align 8, !tbaa !5
  %703 = getelementptr inbounds i8, ptr %702, i64 1
  store ptr %703, ptr %43, align 8, !tbaa !5
  br label %704

704:                                              ; preds = %739, %695
  %705 = load i64, ptr %46, align 8, !tbaa !24
  %706 = load i64, ptr %11, align 8, !tbaa !24
  %707 = icmp ult i64 %705, %706
  br i1 %707, label %708, label %742

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

725:                                              ; preds = %708
  %726 = load i32, ptr %47, align 4, !tbaa !26
  br label %730

727:                                              ; preds = %708
  %728 = load i32, ptr %47, align 4, !tbaa !26
  %729 = sub nsw i32 256, %728
  br label %730

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

737:                                              ; preds = %730
  br label %742

738:                                              ; preds = %730
  br label %739

739:                                              ; preds = %738
  %740 = load i64, ptr %46, align 8, !tbaa !24
  %741 = add i64 %740, 1
  store i64 %741, ptr %46, align 8, !tbaa !24
  br label %704, !llvm.loop !50

742:                                              ; preds = %737, %704
  %743 = load ptr, ptr %3, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.png_struct_def, ptr %743, i32 0, i32 111
  %745 = load i8, ptr %744, align 8, !tbaa !32
  %746 = zext i8 %745 to i32
  %747 = icmp eq i32 %746, 2
  br i1 %747, label %748, label %823

748:                                              ; preds = %742
  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
  %749 = load i32, ptr %44, align 4, !tbaa !26
  %750 = and i32 %749, 65535
  store i32 %750, ptr %53, align 4, !tbaa !26
  %751 = load i32, ptr %44, align 4, !tbaa !26
  %752 = lshr i32 %751, 10
  %753 = and i32 %752, 4194240
  store i32 %753, ptr %52, align 4, !tbaa !26
  store i32 0, ptr %51, align 4, !tbaa !26
  br label %754

754:                                              ; preds = %792, %748
  %755 = load i32, ptr %51, align 4, !tbaa !26
  %756 = load i32, ptr %12, align 4, !tbaa !26
  %757 = icmp slt i32 %755, %756
  br i1 %757, label %758, label %795

758:                                              ; preds = %754
  %759 = load ptr, ptr %3, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.png_struct_def, ptr %759, i32 0, i32 113
  %761 = load ptr, ptr %760, align 8, !tbaa !33
  %762 = load i32, ptr %51, align 4, !tbaa !26
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds i8, ptr %761, i64 %763
  %765 = load i8, ptr %764, align 1, !tbaa !21
  %766 = zext i8 %765 to i32
  %767 = icmp eq i32 %766, 2
  br i1 %767, label %768, label %791

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

791:                                              ; preds = %768, %758
  br label %792

792:                                              ; preds = %791
  %793 = load i32, ptr %51, align 4, !tbaa !26
  %794 = add nsw i32 %793, 1
  store i32 %794, ptr %51, align 4, !tbaa !26
  br label %754, !llvm.loop !51

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

816:                                              ; preds = %795
  store i32 2147483647, ptr %44, align 4, !tbaa !26
  br label %822

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

822:                                              ; preds = %817, %816
  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 %823

823:                                              ; preds = %822, %742
  %824 = load i32, ptr %44, align 4, !tbaa !26
  %825 = load i32, ptr %8, align 4, !tbaa !26
  %826 = icmp ult i32 %824, %825
  br i1 %826, label %827, label %832

827:                                              ; preds = %823
  %828 = load i32, ptr %44, align 4, !tbaa !26
  store i32 %828, ptr %8, align 4, !tbaa !26
  %829 = load ptr, ptr %3, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.png_struct_def, ptr %829, i32 0, i32 48
  %831 = load ptr, ptr %830, align 8, !tbaa !47
  store ptr %831, ptr %5, align 8, !tbaa !5
  br label %832

832:                                              ; preds = %827, %823
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #2
  call void @llvm.lifetime.end.p0(i64 8, 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 %833

833:                                              ; preds = %832, %608
  br label %834

834:                                              ; preds = %833, %604
  %835 = load i8, ptr %10, align 1, !tbaa !21
  %836 = zext i8 %835 to i32
  %837 = icmp eq i32 %836, 64
  br i1 %837, label %838, label %904

838:                                              ; preds = %834
  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 !26
  %839 = load ptr, ptr %7, align 8, !tbaa !5
  %840 = getelementptr inbounds i8, ptr %839, i64 1
  store ptr %840, ptr %54, align 8, !tbaa !5
  %841 = load ptr, ptr %3, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.png_struct_def, ptr %841, i32 0, i32 49
  %843 = load ptr, ptr %842, align 8, !tbaa !52
  %844 = getelementptr inbounds i8, ptr %843, i64 1
  store ptr %844, ptr %55, align 8, !tbaa !5
  %845 = load ptr, ptr %6, align 8, !tbaa !5
  %846 = getelementptr inbounds i8, ptr %845, i64 1
  store ptr %846, ptr %56, align 8, !tbaa !5
  br label %847

847:                                              ; preds = %866, %838
  %848 = load i32, ptr %58, align 4, !tbaa !26
  %849 = load i32, ptr %9, align 4, !tbaa !26
  %850 = icmp ult i32 %848, %849
  br i1 %850, label %851, label %869

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

866:                                              ; preds = %851
  %867 = load i32, ptr %58, align 4, !tbaa !26
  %868 = add i32 %867, 1
  store i32 %868, ptr %58, align 4, !tbaa !26
  br label %847, !llvm.loop !53

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

872:                                              ; preds = %897, %869
  %873 = load i32, ptr %58, align 4, !tbaa !26
  %874 = zext i32 %873 to i64
  %875 = load i64, ptr %11, align 8, !tbaa !24
  %876 = icmp ult i64 %874, %875
  br i1 %876, label %877, label %900

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

897:                                              ; preds = %877
  %898 = load i32, ptr %58, align 4, !tbaa !26
  %899 = add i32 %898, 1
  store i32 %899, ptr %58, align 4, !tbaa !26
  br label %872, !llvm.loop !54

900:                                              ; preds = %872
  %901 = load ptr, ptr %3, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.png_struct_def, ptr %901, i32 0, i32 49
  %903 = load ptr, ptr %902, align 8, !tbaa !52
  store ptr %903, 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 %1174

904:                                              ; preds = %834
  %905 = load i8, ptr %10, align 1, !tbaa !21
  %906 = zext i8 %905 to i32
  %907 = and i32 %906, 64
  %908 = icmp ne i32 %907, 0
  br i1 %908, label %909, label %1173

909:                                              ; preds = %904
  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 !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #2
  %910 = load i32, ptr %8, align 4, !tbaa !26
  store i32 %910, ptr %64, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #2
  %911 = load ptr, ptr %3, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.png_struct_def, ptr %911, i32 0, i32 111
  %913 = load i8, ptr %912, align 8, !tbaa !32
  %914 = zext i8 %913 to i32
  %915 = icmp eq i32 %914, 2
  br i1 %915, label %916, label %991

916:                                              ; preds = %909
  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
  %917 = load i32, ptr %64, align 4, !tbaa !26
  %918 = and i32 %917, 65535
  store i32 %918, ptr %69, align 4, !tbaa !26
  %919 = load i32, ptr %64, align 4, !tbaa !26
  %920 = lshr i32 %919, 10
  %921 = and i32 %920, 4194240
  store i32 %921, ptr %68, align 4, !tbaa !26
  store i32 0, ptr %67, align 4, !tbaa !26
  br label %922

922:                                              ; preds = %960, %916
  %923 = load i32, ptr %67, align 4, !tbaa !26
  %924 = load i32, ptr %12, align 4, !tbaa !26
  %925 = icmp slt i32 %923, %924
  br i1 %925, label %926, label %963

926:                                              ; preds = %922
  %927 = load ptr, ptr %3, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.png_struct_def, ptr %927, i32 0, i32 113
  %929 = load ptr, ptr %928, align 8, !tbaa !33
  %930 = load i32, ptr %67, align 4, !tbaa !26
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds i8, ptr %929, i64 %931
  %933 = load i8, ptr %932, align 1, !tbaa !21
  %934 = zext i8 %933 to i32
  %935 = icmp eq i32 %934, 3
  br i1 %935, label %936, label %959

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

959:                                              ; preds = %936, %926
  br label %960

960:                                              ; preds = %959
  %961 = load i32, ptr %67, align 4, !tbaa !26
  %962 = add nsw i32 %961, 1
  store i32 %962, ptr %67, align 4, !tbaa !26
  br label %922, !llvm.loop !55

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

984:                                              ; preds = %963
  store i32 2147483647, ptr %64, align 4, !tbaa !26
  br label %990

985:                                              ; preds = %963
  %986 = load i32, ptr %68, align 4, !tbaa !26
  %987 = shl i32 %986, 10
  %988 = load i32, ptr %69, align 4, !tbaa !26
  %989 = add i32 %987, %988
  store i32 %989, ptr %64, align 4, !tbaa !26
  br label %990

990:                                              ; preds = %985, %984
  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 %991

991:                                              ; preds = %990, %909
  store i64 0, ptr %65, align 8, !tbaa !24
  %992 = load ptr, ptr %7, align 8, !tbaa !5
  %993 = getelementptr inbounds i8, ptr %992, i64 1
  store ptr %993, ptr %59, align 8, !tbaa !5
  %994 = load ptr, ptr %3, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.png_struct_def, ptr %994, i32 0, i32 49
  %996 = load ptr, ptr %995, align 8, !tbaa !52
  %997 = getelementptr inbounds i8, ptr %996, i64 1
  store ptr %997, ptr %60, align 8, !tbaa !5
  %998 = load ptr, ptr %6, align 8, !tbaa !5
  %999 = getelementptr inbounds i8, ptr %998, i64 1
  store ptr %999, ptr %61, align 8, !tbaa !5
  br label %1000

1000:                                             ; preds = %1032, %991
  %1001 = load i64, ptr %65, align 8, !tbaa !24
  %1002 = load i32, ptr %9, align 4, !tbaa !26
  %1003 = zext i32 %1002 to i64
  %1004 = icmp ult i64 %1001, %1003
  br i1 %1004, label %1005, label %1035

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

1023:                                             ; preds = %1005
  %1024 = load i32, ptr %66, align 4, !tbaa !26
  br label %1028

1025:                                             ; preds = %1005
  %1026 = load i32, ptr %66, align 4, !tbaa !26
  %1027 = sub nsw i32 256, %1026
  br label %1028

1028:                                             ; preds = %1025, %1023
  %1029 = phi i32 [ %1024, %1023 ], [ %1027, %1025 ]
  %1030 = load i32, ptr %63, align 4, !tbaa !26
  %1031 = add i32 %1030, %1029
  store i32 %1031, ptr %63, align 4, !tbaa !26
  br label %1032

1032:                                             ; preds = %1028
  %1033 = load i64, ptr %65, align 8, !tbaa !24
  %1034 = add i64 %1033, 1
  store i64 %1034, ptr %65, align 8, !tbaa !24
  br label %1000, !llvm.loop !56

1035:                                             ; preds = %1000
  %1036 = load ptr, ptr %7, align 8, !tbaa !5
  %1037 = getelementptr inbounds i8, ptr %1036, i64 1
  store ptr %1037, ptr %62, align 8, !tbaa !5
  br label %1038

1038:                                             ; preds = %1079, %1035
  %1039 = load i64, ptr %65, align 8, !tbaa !24
  %1040 = load i64, ptr %11, align 8, !tbaa !24
  %1041 = icmp ult i64 %1039, %1040
  br i1 %1041, label %1042, label %1082

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

1065:                                             ; preds = %1042
  %1066 = load i32, ptr %66, align 4, !tbaa !26
  br label %1070

1067:                                             ; preds = %1042
  %1068 = load i32, ptr %66, align 4, !tbaa !26
  %1069 = sub nsw i32 256, %1068
  br label %1070

1070:                                             ; preds = %1067, %1065
  %1071 = phi i32 [ %1066, %1065 ], [ %1069, %1067 ]
  %1072 = load i32, ptr %63, align 4, !tbaa !26
  %1073 = add i32 %1072, %1071
  store i32 %1073, ptr %63, align 4, !tbaa !26
  %1074 = load i32, ptr %63, align 4, !tbaa !26
  %1075 = load i32, ptr %64, align 4, !tbaa !26
  %1076 = icmp ugt i32 %1074, %1075
  br i1 %1076, label %1077, label %1078

1077:                                             ; preds = %1070
  br label %1082

1078:                                             ; preds = %1070
  br label %1079

1079:                                             ; preds = %1078
  %1080 = load i64, ptr %65, align 8, !tbaa !24
  %1081 = add i64 %1080, 1
  store i64 %1081, ptr %65, align 8, !tbaa !24
  br label %1038, !llvm.loop !57

1082:                                             ; preds = %1077, %1038
  %1083 = load ptr, ptr %3, align 8, !tbaa !5
  %1084 = getelementptr inbounds %struct.png_struct_def, ptr %1083, i32 0, i32 111
  %1085 = load i8, ptr %1084, align 8, !tbaa !32
  %1086 = zext i8 %1085 to i32
  %1087 = icmp eq i32 %1086, 2
  br i1 %1087, label %1088, label %1163

1088:                                             ; preds = %1082
  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
  %1089 = load i32, ptr %63, align 4, !tbaa !26
  %1090 = and i32 %1089, 65535
  store i32 %1090, ptr %72, align 4, !tbaa !26
  %1091 = load i32, ptr %63, align 4, !tbaa !26
  %1092 = lshr i32 %1091, 10
  %1093 = and i32 %1092, 4194240
  store i32 %1093, ptr %71, align 4, !tbaa !26
  store i32 0, ptr %70, align 4, !tbaa !26
  br label %1094

1094:                                             ; preds = %1132, %1088
  %1095 = load i32, ptr %70, align 4, !tbaa !26
  %1096 = load i32, ptr %12, align 4, !tbaa !26
  %1097 = icmp slt i32 %1095, %1096
  br i1 %1097, label %1098, label %1135

1098:                                             ; preds = %1094
  %1099 = load ptr, ptr %3, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.png_struct_def, ptr %1099, i32 0, i32 113
  %1101 = load ptr, ptr %1100, align 8, !tbaa !33
  %1102 = load i32, ptr %70, align 4, !tbaa !26
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds i8, ptr %1101, i64 %1103
  %1105 = load i8, ptr %1104, align 1, !tbaa !21
  %1106 = zext i8 %1105 to i32
  %1107 = icmp eq i32 %1106, 0
  br i1 %1107, label %1108, label %1131

1108:                                             ; preds = %1098
  %1109 = load i32, ptr %72, align 4, !tbaa !26
  %1110 = load ptr, ptr %3, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.png_struct_def, ptr %1110, i32 0, i32 114
  %1112 = load ptr, ptr %1111, align 8, !tbaa !34
  %1113 = load i32, ptr %70, align 4, !tbaa !26
  %1114 = sext i32 %1113 to i64
  %1115 = getelementptr inbounds i16, ptr %1112, i64 %1114
  %1116 = load i16, ptr %1115, align 2, !tbaa !35
  %1117 = zext i16 %1116 to i32
  %1118 = mul i32 %1109, %1117
  %1119 = lshr i32 %1118, 8
  store i32 %1119, ptr %72, align 4, !tbaa !26
  %1120 = load i32, ptr %71, align 4, !tbaa !26
  %1121 = load ptr, ptr %3, align 8, !tbaa !5
  %1122 = getelementptr inbounds %struct.png_struct_def, ptr %1121, i32 0, i32 114
  %1123 = load ptr, ptr %1122, align 8, !tbaa !34
  %1124 = load i32, ptr %70, align 4, !tbaa !26
  %1125 = sext i32 %1124 to i64
  %1126 = getelementptr inbounds i16, ptr %1123, i64 %1125
  %1127 = load i16, ptr %1126, align 2, !tbaa !35
  %1128 = zext i16 %1127 to i32
  %1129 = mul i32 %1120, %1128
  %1130 = lshr i32 %1129, 8
  store i32 %1130, ptr %71, align 4, !tbaa !26
  br label %1131

1131:                                             ; preds = %1108, %1098
  br label %1132

1132:                                             ; preds = %1131
  %1133 = load i32, ptr %70, align 4, !tbaa !26
  %1134 = add nsw i32 %1133, 1
  store i32 %1134, ptr %70, align 4, !tbaa !26
  br label %1094, !llvm.loop !58

1135:                                             ; preds = %1094
  %1136 = load i32, ptr %72, align 4, !tbaa !26
  %1137 = load ptr, ptr %3, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.png_struct_def, ptr %1137, i32 0, i32 116
  %1139 = load ptr, ptr %1138, align 8, !tbaa !37
  %1140 = getelementptr inbounds i16, ptr %1139, i64 3
  %1141 = load i16, ptr %1140, align 2, !tbaa !35
  %1142 = zext i16 %1141 to i32
  %1143 = mul i32 %1136, %1142
  %1144 = lshr i32 %1143, 3
  store i32 %1144, ptr %72, align 4, !tbaa !26
  %1145 = load i32, ptr %71, align 4, !tbaa !26
  %1146 = load ptr, ptr %3, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.png_struct_def, ptr %1146, i32 0, i32 116
  %1148 = load ptr, ptr %1147, align 8, !tbaa !37
  %1149 = getelementptr inbounds i16, ptr %1148, i64 3
  %1150 = load i16, ptr %1149, align 2, !tbaa !35
  %1151 = zext i16 %1150 to i32
  %1152 = mul i32 %1145, %1151
  %1153 = lshr i32 %1152, 3
  store i32 %1153, ptr %71, align 4, !tbaa !26
  %1154 = load i32, ptr %71, align 4, !tbaa !26
  %1155 = icmp ugt i32 %1154, 4194240
  br i1 %1155, label %1156, label %1157

1156:                                             ; preds = %1135
  store i32 2147483647, ptr %63, align 4, !tbaa !26
  br label %1162

1157:                                             ; preds = %1135
  %1158 = load i32, ptr %71, align 4, !tbaa !26
  %1159 = shl i32 %1158, 10
  %1160 = load i32, ptr %72, align 4, !tbaa !26
  %1161 = add i32 %1159, %1160
  store i32 %1161, ptr %63, align 4, !tbaa !26
  br label %1162

1162:                                             ; preds = %1157, %1156
  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 %1163

1163:                                             ; preds = %1162, %1082
  %1164 = load i32, ptr %63, align 4, !tbaa !26
  %1165 = load i32, ptr %8, align 4, !tbaa !26
  %1166 = icmp ult i32 %1164, %1165
  br i1 %1166, label %1167, label %1172

1167:                                             ; preds = %1163
  %1168 = load i32, ptr %63, align 4, !tbaa !26
  store i32 %1168, ptr %8, align 4, !tbaa !26
  %1169 = load ptr, ptr %3, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct.png_struct_def, ptr %1169, i32 0, i32 49
  %1171 = load ptr, ptr %1170, align 8, !tbaa !52
  store ptr %1171, ptr %5, align 8, !tbaa !5
  br label %1172

1172:                                             ; preds = %1167, %1163
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #2
  call void @llvm.lifetime.end.p0(i64 8, 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 %1173

1173:                                             ; preds = %1172, %904
  br label %1174

1174:                                             ; preds = %1173, %900
  %1175 = load i8, ptr %10, align 1, !tbaa !21
  %1176 = zext i8 %1175 to i32
  %1177 = icmp eq i32 %1176, 128
  %1178 = zext i1 %1177 to i32
  %1179 = icmp ne i32 %1178, 0
  br i1 %1179, label %1180, label %1310

1180:                                             ; preds = %1174
  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 8, ptr %78) #2
  store i64 0, ptr %78, align 8, !tbaa !24
  %1181 = load ptr, ptr %7, align 8, !tbaa !5
  %1182 = getelementptr inbounds i8, ptr %1181, i64 1
  store ptr %1182, ptr %73, align 8, !tbaa !5
  %1183 = load ptr, ptr %3, align 8, !tbaa !5
  %1184 = getelementptr inbounds %struct.png_struct_def, ptr %1183, i32 0, i32 50
  %1185 = load ptr, ptr %1184, align 8, !tbaa !59
  %1186 = getelementptr inbounds i8, ptr %1185, i64 1
  store ptr %1186, ptr %74, align 8, !tbaa !5
  %1187 = load ptr, ptr %6, align 8, !tbaa !5
  %1188 = getelementptr inbounds i8, ptr %1187, i64 1
  store ptr %1188, ptr %75, align 8, !tbaa !5
  br label %1189

1189:                                             ; preds = %1208, %1180
  %1190 = load i64, ptr %78, align 8, !tbaa !24
  %1191 = load i32, ptr %9, align 4, !tbaa !26
  %1192 = zext i32 %1191 to i64
  %1193 = icmp ult i64 %1190, %1192
  br i1 %1193, label %1194, label %1211

1194:                                             ; preds = %1189
  %1195 = load ptr, ptr %73, align 8, !tbaa !5
  %1196 = getelementptr inbounds i8, ptr %1195, i32 1
  store ptr %1196, ptr %73, align 8, !tbaa !5
  %1197 = load i8, ptr %1195, align 1, !tbaa !21
  %1198 = zext i8 %1197 to i32
  %1199 = load ptr, ptr %75, align 8, !tbaa !5
  %1200 = getelementptr inbounds i8, ptr %1199, i32 1
  store ptr %1200, ptr %75, align 8, !tbaa !5
  %1201 = load i8, ptr %1199, align 1, !tbaa !21
  %1202 = zext i8 %1201 to i32
  %1203 = sub nsw i32 %1198, %1202
  %1204 = and i32 %1203, 255
  %1205 = trunc i32 %1204 to i8
  %1206 = load ptr, ptr %74, align 8, !tbaa !5
  %1207 = getelementptr inbounds i8, ptr %1206, i32 1
  store ptr %1207, ptr %74, align 8, !tbaa !5
  store i8 %1205, ptr %1206, align 1, !tbaa !21
  br label %1208

1208:                                             ; preds = %1194
  %1209 = load i64, ptr %78, align 8, !tbaa !24
  %1210 = add i64 %1209, 1
  store i64 %1210, ptr %78, align 8, !tbaa !24
  br label %1189, !llvm.loop !60

1211:                                             ; preds = %1189
  %1212 = load ptr, ptr %7, align 8, !tbaa !5
  %1213 = getelementptr inbounds i8, ptr %1212, i64 1
  store ptr %1213, ptr %77, align 8, !tbaa !5
  %1214 = load ptr, ptr %6, align 8, !tbaa !5
  %1215 = getelementptr inbounds i8, ptr %1214, i64 1
  store ptr %1215, ptr %76, align 8, !tbaa !5
  br label %1216

1216:                                             ; preds = %1303, %1211
  %1217 = load i64, ptr %78, align 8, !tbaa !24
  %1218 = load i64, ptr %11, align 8, !tbaa !24
  %1219 = icmp ult i64 %1217, %1218
  br i1 %1219, label %1220, label %1306

1220:                                             ; preds = %1216
  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
  %1221 = load ptr, ptr %75, align 8, !tbaa !5
  %1222 = getelementptr inbounds i8, ptr %1221, i32 1
  store ptr %1222, ptr %75, align 8, !tbaa !5
  %1223 = load i8, ptr %1221, align 1, !tbaa !21
  %1224 = zext i8 %1223 to i32
  store i32 %1224, ptr %80, align 4, !tbaa !26
  %1225 = load ptr, ptr %76, align 8, !tbaa !5
  %1226 = getelementptr inbounds i8, ptr %1225, i32 1
  store ptr %1226, ptr %76, align 8, !tbaa !5
  %1227 = load i8, ptr %1225, align 1, !tbaa !21
  %1228 = zext i8 %1227 to i32
  store i32 %1228, ptr %81, align 4, !tbaa !26
  %1229 = load ptr, ptr %77, align 8, !tbaa !5
  %1230 = getelementptr inbounds i8, ptr %1229, i32 1
  store ptr %1230, ptr %77, align 8, !tbaa !5
  %1231 = load i8, ptr %1229, align 1, !tbaa !21
  %1232 = zext i8 %1231 to i32
  store i32 %1232, ptr %79, align 4, !tbaa !26
  %1233 = load i32, ptr %80, align 4, !tbaa !26
  %1234 = load i32, ptr %81, align 4, !tbaa !26
  %1235 = sub nsw i32 %1233, %1234
  store i32 %1235, ptr %85, align 4, !tbaa !26
  %1236 = load i32, ptr %79, align 4, !tbaa !26
  %1237 = load i32, ptr %81, align 4, !tbaa !26
  %1238 = sub nsw i32 %1236, %1237
  store i32 %1238, ptr %84, align 4, !tbaa !26
  %1239 = load i32, ptr %85, align 4, !tbaa !26
  %1240 = icmp slt i32 %1239, 0
  br i1 %1240, label %1241, label %1244

1241:                                             ; preds = %1220
  %1242 = load i32, ptr %85, align 4, !tbaa !26
  %1243 = sub nsw i32 0, %1242
  br label %1246

1244:                                             ; preds = %1220
  %1245 = load i32, ptr %85, align 4, !tbaa !26
  br label %1246

1246:                                             ; preds = %1244, %1241
  %1247 = phi i32 [ %1243, %1241 ], [ %1245, %1244 ]
  store i32 %1247, ptr %82, align 4, !tbaa !26
  %1248 = load i32, ptr %84, align 4, !tbaa !26
  %1249 = icmp slt i32 %1248, 0
  br i1 %1249, label %1250, label %1253

1250:                                             ; preds = %1246
  %1251 = load i32, ptr %84, align 4, !tbaa !26
  %1252 = sub nsw i32 0, %1251
  br label %1255

1253:                                             ; preds = %1246
  %1254 = load i32, ptr %84, align 4, !tbaa !26
  br label %1255

1255:                                             ; preds = %1253, %1250
  %1256 = phi i32 [ %1252, %1250 ], [ %1254, %1253 ]
  store i32 %1256, ptr %83, align 4, !tbaa !26
  %1257 = load i32, ptr %85, align 4, !tbaa !26
  %1258 = load i32, ptr %84, align 4, !tbaa !26
  %1259 = add nsw i32 %1257, %1258
  %1260 = icmp slt i32 %1259, 0
  br i1 %1260, label %1261, label %1266

1261:                                             ; preds = %1255
  %1262 = load i32, ptr %85, align 4, !tbaa !26
  %1263 = load i32, ptr %84, align 4, !tbaa !26
  %1264 = add nsw i32 %1262, %1263
  %1265 = sub nsw i32 0, %1264
  br label %1270

1266:                                             ; preds = %1255
  %1267 = load i32, ptr %85, align 4, !tbaa !26
  %1268 = load i32, ptr %84, align 4, !tbaa !26
  %1269 = add nsw i32 %1267, %1268
  br label %1270

1270:                                             ; preds = %1266, %1261
  %1271 = phi i32 [ %1265, %1261 ], [ %1269, %1266 ]
  store i32 %1271, ptr %84, align 4, !tbaa !26
  %1272 = load i32, ptr %82, align 4, !tbaa !26
  %1273 = load i32, ptr %83, align 4, !tbaa !26
  %1274 = icmp sle i32 %1272, %1273
  br i1 %1274, label %1275, label %1281

1275:                                             ; preds = %1270
  %1276 = load i32, ptr %82, align 4, !tbaa !26
  %1277 = load i32, ptr %84, align 4, !tbaa !26
  %1278 = icmp sle i32 %1276, %1277
  br i1 %1278, label %1279, label %1281

1279:                                             ; preds = %1275
  %1280 = load i32, ptr %79, align 4, !tbaa !26
  br label %1291

1281:                                             ; preds = %1275, %1270
  %1282 = load i32, ptr %83, align 4, !tbaa !26
  %1283 = load i32, ptr %84, align 4, !tbaa !26
  %1284 = icmp sle i32 %1282, %1283
  br i1 %1284, label %1285, label %1287

1285:                                             ; preds = %1281
  %1286 = load i32, ptr %80, align 4, !tbaa !26
  br label %1289

1287:                                             ; preds = %1281
  %1288 = load i32, ptr %81, align 4, !tbaa !26
  br label %1289

1289:                                             ; preds = %1287, %1285
  %1290 = phi i32 [ %1286, %1285 ], [ %1288, %1287 ]
  br label %1291

1291:                                             ; preds = %1289, %1279
  %1292 = phi i32 [ %1280, %1279 ], [ %1290, %1289 ]
  store i32 %1292, ptr %85, align 4, !tbaa !26
  %1293 = load ptr, ptr %73, align 8, !tbaa !5
  %1294 = getelementptr inbounds i8, ptr %1293, i32 1
  store ptr %1294, ptr %73, align 8, !tbaa !5
  %1295 = load i8, ptr %1293, align 1, !tbaa !21
  %1296 = zext i8 %1295 to i32
  %1297 = load i32, ptr %85, align 4, !tbaa !26
  %1298 = sub nsw i32 %1296, %1297
  %1299 = and i32 %1298, 255
  %1300 = trunc i32 %1299 to i8
  %1301 = load ptr, ptr %74, align 8, !tbaa !5
  %1302 = getelementptr inbounds i8, ptr %1301, i32 1
  store ptr %1302, ptr %74, align 8, !tbaa !5
  store i8 %1300, ptr %1301, align 1, !tbaa !21
  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 %1303

1303:                                             ; preds = %1291
  %1304 = load i64, ptr %78, align 8, !tbaa !24
  %1305 = add i64 %1304, 1
  store i64 %1305, ptr %78, align 8, !tbaa !24
  br label %1216, !llvm.loop !61

1306:                                             ; preds = %1216
  %1307 = load ptr, ptr %3, align 8, !tbaa !5
  %1308 = getelementptr inbounds %struct.png_struct_def, ptr %1307, i32 0, i32 50
  %1309 = load ptr, ptr %1308, align 8, !tbaa !59
  store ptr %1309, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, 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 %1646

1310:                                             ; preds = %1174
  %1311 = load i8, ptr %10, align 1, !tbaa !21
  %1312 = zext i8 %1311 to i32
  %1313 = and i32 %1312, 128
  %1314 = icmp ne i32 %1313, 0
  br i1 %1314, label %1315, label %1645

1315:                                             ; preds = %1310
  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 !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #2
  %1316 = load i32, ptr %8, align 4, !tbaa !26
  store i32 %1316, ptr %92, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #2
  %1317 = load ptr, ptr %3, align 8, !tbaa !5
  %1318 = getelementptr inbounds %struct.png_struct_def, ptr %1317, i32 0, i32 111
  %1319 = load i8, ptr %1318, align 8, !tbaa !32
  %1320 = zext i8 %1319 to i32
  %1321 = icmp eq i32 %1320, 2
  br i1 %1321, label %1322, label %1397

1322:                                             ; preds = %1315
  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
  %1323 = load i32, ptr %92, align 4, !tbaa !26
  %1324 = and i32 %1323, 65535
  store i32 %1324, ptr %97, align 4, !tbaa !26
  %1325 = load i32, ptr %92, align 4, !tbaa !26
  %1326 = lshr i32 %1325, 10
  %1327 = and i32 %1326, 4194240
  store i32 %1327, ptr %96, align 4, !tbaa !26
  store i32 0, ptr %95, align 4, !tbaa !26
  br label %1328

1328:                                             ; preds = %1366, %1322
  %1329 = load i32, ptr %95, align 4, !tbaa !26
  %1330 = load i32, ptr %12, align 4, !tbaa !26
  %1331 = icmp slt i32 %1329, %1330
  br i1 %1331, label %1332, label %1369

1332:                                             ; preds = %1328
  %1333 = load ptr, ptr %3, align 8, !tbaa !5
  %1334 = getelementptr inbounds %struct.png_struct_def, ptr %1333, i32 0, i32 113
  %1335 = load ptr, ptr %1334, align 8, !tbaa !33
  %1336 = load i32, ptr %95, align 4, !tbaa !26
  %1337 = sext i32 %1336 to i64
  %1338 = getelementptr inbounds i8, ptr %1335, i64 %1337
  %1339 = load i8, ptr %1338, align 1, !tbaa !21
  %1340 = zext i8 %1339 to i32
  %1341 = icmp eq i32 %1340, 4
  br i1 %1341, label %1342, label %1365

1342:                                             ; preds = %1332
  %1343 = load i32, ptr %97, align 4, !tbaa !26
  %1344 = load ptr, ptr %3, align 8, !tbaa !5
  %1345 = getelementptr inbounds %struct.png_struct_def, ptr %1344, i32 0, i32 115
  %1346 = load ptr, ptr %1345, align 8, !tbaa !41
  %1347 = load i32, ptr %95, align 4, !tbaa !26
  %1348 = sext i32 %1347 to i64
  %1349 = getelementptr inbounds i16, ptr %1346, i64 %1348
  %1350 = load i16, ptr %1349, align 2, !tbaa !35
  %1351 = zext i16 %1350 to i32
  %1352 = mul i32 %1343, %1351
  %1353 = lshr i32 %1352, 8
  store i32 %1353, ptr %97, align 4, !tbaa !26
  %1354 = load i32, ptr %96, align 4, !tbaa !26
  %1355 = load ptr, ptr %3, align 8, !tbaa !5
  %1356 = getelementptr inbounds %struct.png_struct_def, ptr %1355, i32 0, i32 115
  %1357 = load ptr, ptr %1356, align 8, !tbaa !41
  %1358 = load i32, ptr %95, align 4, !tbaa !26
  %1359 = sext i32 %1358 to i64
  %1360 = getelementptr inbounds i16, ptr %1357, i64 %1359
  %1361 = load i16, ptr %1360, align 2, !tbaa !35
  %1362 = zext i16 %1361 to i32
  %1363 = mul i32 %1354, %1362
  %1364 = lshr i32 %1363, 8
  store i32 %1364, ptr %96, align 4, !tbaa !26
  br label %1365

1365:                                             ; preds = %1342, %1332
  br label %1366

1366:                                             ; preds = %1365
  %1367 = load i32, ptr %95, align 4, !tbaa !26
  %1368 = add nsw i32 %1367, 1
  store i32 %1368, ptr %95, align 4, !tbaa !26
  br label %1328, !llvm.loop !62

1369:                                             ; preds = %1328
  %1370 = load i32, ptr %97, align 4, !tbaa !26
  %1371 = load ptr, ptr %3, align 8, !tbaa !5
  %1372 = getelementptr inbounds %struct.png_struct_def, ptr %1371, i32 0, i32 117
  %1373 = load ptr, ptr %1372, align 8, !tbaa !43
  %1374 = getelementptr inbounds i16, ptr %1373, i64 4
  %1375 = load i16, ptr %1374, align 2, !tbaa !35
  %1376 = zext i16 %1375 to i32
  %1377 = mul i32 %1370, %1376
  %1378 = lshr i32 %1377, 3
  store i32 %1378, ptr %97, align 4, !tbaa !26
  %1379 = load i32, ptr %96, align 4, !tbaa !26
  %1380 = load ptr, ptr %3, align 8, !tbaa !5
  %1381 = getelementptr inbounds %struct.png_struct_def, ptr %1380, i32 0, i32 117
  %1382 = load ptr, ptr %1381, align 8, !tbaa !43
  %1383 = getelementptr inbounds i16, ptr %1382, i64 4
  %1384 = load i16, ptr %1383, align 2, !tbaa !35
  %1385 = zext i16 %1384 to i32
  %1386 = mul i32 %1379, %1385
  %1387 = lshr i32 %1386, 3
  store i32 %1387, ptr %96, align 4, !tbaa !26
  %1388 = load i32, ptr %96, align 4, !tbaa !26
  %1389 = icmp ugt i32 %1388, 4194240
  br i1 %1389, label %1390, label %1391

1390:                                             ; preds = %1369
  store i32 2147483647, ptr %92, align 4, !tbaa !26
  br label %1396

1391:                                             ; preds = %1369
  %1392 = load i32, ptr %96, align 4, !tbaa !26
  %1393 = shl i32 %1392, 10
  %1394 = load i32, ptr %97, align 4, !tbaa !26
  %1395 = add i32 %1393, %1394
  store i32 %1395, ptr %92, align 4, !tbaa !26
  br label %1396

1396:                                             ; preds = %1391, %1390
  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 %1397

1397:                                             ; preds = %1396, %1315
  store i64 0, ptr %93, align 8, !tbaa !24
  %1398 = load ptr, ptr %7, align 8, !tbaa !5
  %1399 = getelementptr inbounds i8, ptr %1398, i64 1
  store ptr %1399, ptr %86, align 8, !tbaa !5
  %1400 = load ptr, ptr %3, align 8, !tbaa !5
  %1401 = getelementptr inbounds %struct.png_struct_def, ptr %1400, i32 0, i32 50
  %1402 = load ptr, ptr %1401, align 8, !tbaa !59
  %1403 = getelementptr inbounds i8, ptr %1402, i64 1
  store ptr %1403, ptr %87, align 8, !tbaa !5
  %1404 = load ptr, ptr %6, align 8, !tbaa !5
  %1405 = getelementptr inbounds i8, ptr %1404, i64 1
  store ptr %1405, ptr %88, align 8, !tbaa !5
  br label %1406

1406:                                             ; preds = %1437, %1397
  %1407 = load i64, ptr %93, align 8, !tbaa !24
  %1408 = load i32, ptr %9, align 4, !tbaa !26
  %1409 = zext i32 %1408 to i64
  %1410 = icmp ult i64 %1407, %1409
  br i1 %1410, label %1411, label %1440

1411:                                             ; preds = %1406
  %1412 = load ptr, ptr %86, align 8, !tbaa !5
  %1413 = getelementptr inbounds i8, ptr %1412, i32 1
  store ptr %1413, ptr %86, align 8, !tbaa !5
  %1414 = load i8, ptr %1412, align 1, !tbaa !21
  %1415 = zext i8 %1414 to i32
  %1416 = load ptr, ptr %88, align 8, !tbaa !5
  %1417 = getelementptr inbounds i8, ptr %1416, i32 1
  store ptr %1417, ptr %88, align 8, !tbaa !5
  %1418 = load i8, ptr %1416, align 1, !tbaa !21
  %1419 = zext i8 %1418 to i32
  %1420 = sub nsw i32 %1415, %1419
  %1421 = and i32 %1420, 255
  %1422 = trunc i32 %1421 to i8
  %1423 = load ptr, ptr %87, align 8, !tbaa !5
  %1424 = getelementptr inbounds i8, ptr %1423, i32 1
  store ptr %1424, ptr %87, align 8, !tbaa !5
  store i8 %1422, ptr %1423, align 1, !tbaa !21
  %1425 = zext i8 %1422 to i32
  store i32 %1425, ptr %94, align 4, !tbaa !26
  %1426 = load i32, ptr %94, align 4, !tbaa !26
  %1427 = icmp slt i32 %1426, 128
  br i1 %1427, label %1428, label %1430

1428:                                             ; preds = %1411
  %1429 = load i32, ptr %94, align 4, !tbaa !26
  br label %1433

1430:                                             ; preds = %1411
  %1431 = load i32, ptr %94, align 4, !tbaa !26
  %1432 = sub nsw i32 256, %1431
  br label %1433

1433:                                             ; preds = %1430, %1428
  %1434 = phi i32 [ %1429, %1428 ], [ %1432, %1430 ]
  %1435 = load i32, ptr %91, align 4, !tbaa !26
  %1436 = add i32 %1435, %1434
  store i32 %1436, ptr %91, align 4, !tbaa !26
  br label %1437

1437:                                             ; preds = %1433
  %1438 = load i64, ptr %93, align 8, !tbaa !24
  %1439 = add i64 %1438, 1
  store i64 %1439, ptr %93, align 8, !tbaa !24
  br label %1406, !llvm.loop !63

1440:                                             ; preds = %1406
  %1441 = load ptr, ptr %7, align 8, !tbaa !5
  %1442 = getelementptr inbounds i8, ptr %1441, i64 1
  store ptr %1442, ptr %90, align 8, !tbaa !5
  %1443 = load ptr, ptr %6, align 8, !tbaa !5
  %1444 = getelementptr inbounds i8, ptr %1443, i64 1
  store ptr %1444, ptr %89, align 8, !tbaa !5
  br label %1445

1445:                                             ; preds = %1552, %1440
  %1446 = load i64, ptr %93, align 8, !tbaa !24
  %1447 = load i64, ptr %11, align 8, !tbaa !24
  %1448 = icmp ult i64 %1446, %1447
  br i1 %1448, label %1449, label %1555

1449:                                             ; preds = %1445
  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
  %1450 = load ptr, ptr %88, align 8, !tbaa !5
  %1451 = getelementptr inbounds i8, ptr %1450, i32 1
  store ptr %1451, ptr %88, align 8, !tbaa !5
  %1452 = load i8, ptr %1450, align 1, !tbaa !21
  %1453 = zext i8 %1452 to i32
  store i32 %1453, ptr %99, align 4, !tbaa !26
  %1454 = load ptr, ptr %89, align 8, !tbaa !5
  %1455 = getelementptr inbounds i8, ptr %1454, i32 1
  store ptr %1455, ptr %89, align 8, !tbaa !5
  %1456 = load i8, ptr %1454, align 1, !tbaa !21
  %1457 = zext i8 %1456 to i32
  store i32 %1457, ptr %100, align 4, !tbaa !26
  %1458 = load ptr, ptr %90, align 8, !tbaa !5
  %1459 = getelementptr inbounds i8, ptr %1458, i32 1
  store ptr %1459, ptr %90, align 8, !tbaa !5
  %1460 = load i8, ptr %1458, align 1, !tbaa !21
  %1461 = zext i8 %1460 to i32
  store i32 %1461, ptr %98, align 4, !tbaa !26
  %1462 = load i32, ptr %99, align 4, !tbaa !26
  %1463 = load i32, ptr %100, align 4, !tbaa !26
  %1464 = sub nsw i32 %1462, %1463
  store i32 %1464, ptr %104, align 4, !tbaa !26
  %1465 = load i32, ptr %98, align 4, !tbaa !26
  %1466 = load i32, ptr %100, align 4, !tbaa !26
  %1467 = sub nsw i32 %1465, %1466
  store i32 %1467, ptr %103, align 4, !tbaa !26
  %1468 = load i32, ptr %104, align 4, !tbaa !26
  %1469 = icmp slt i32 %1468, 0
  br i1 %1469, label %1470, label %1473

1470:                                             ; preds = %1449
  %1471 = load i32, ptr %104, align 4, !tbaa !26
  %1472 = sub nsw i32 0, %1471
  br label %1475

1473:                                             ; preds = %1449
  %1474 = load i32, ptr %104, align 4, !tbaa !26
  br label %1475

1475:                                             ; preds = %1473, %1470
  %1476 = phi i32 [ %1472, %1470 ], [ %1474, %1473 ]
  store i32 %1476, ptr %101, align 4, !tbaa !26
  %1477 = load i32, ptr %103, align 4, !tbaa !26
  %1478 = icmp slt i32 %1477, 0
  br i1 %1478, label %1479, label %1482

1479:                                             ; preds = %1475
  %1480 = load i32, ptr %103, align 4, !tbaa !26
  %1481 = sub nsw i32 0, %1480
  br label %1484

1482:                                             ; preds = %1475
  %1483 = load i32, ptr %103, align 4, !tbaa !26
  br label %1484

1484:                                             ; preds = %1482, %1479
  %1485 = phi i32 [ %1481, %1479 ], [ %1483, %1482 ]
  store i32 %1485, ptr %102, align 4, !tbaa !26
  %1486 = load i32, ptr %104, align 4, !tbaa !26
  %1487 = load i32, ptr %103, align 4, !tbaa !26
  %1488 = add nsw i32 %1486, %1487
  %1489 = icmp slt i32 %1488, 0
  br i1 %1489, label %1490, label %1495

1490:                                             ; preds = %1484
  %1491 = load i32, ptr %104, align 4, !tbaa !26
  %1492 = load i32, ptr %103, align 4, !tbaa !26
  %1493 = add nsw i32 %1491, %1492
  %1494 = sub nsw i32 0, %1493
  br label %1499

1495:                                             ; preds = %1484
  %1496 = load i32, ptr %104, align 4, !tbaa !26
  %1497 = load i32, ptr %103, align 4, !tbaa !26
  %1498 = add nsw i32 %1496, %1497
  br label %1499

1499:                                             ; preds = %1495, %1490
  %1500 = phi i32 [ %1494, %1490 ], [ %1498, %1495 ]
  store i32 %1500, ptr %103, align 4, !tbaa !26
  %1501 = load i32, ptr %101, align 4, !tbaa !26
  %1502 = load i32, ptr %102, align 4, !tbaa !26
  %1503 = icmp sle i32 %1501, %1502
  br i1 %1503, label %1504, label %1510

1504:                                             ; preds = %1499
  %1505 = load i32, ptr %101, align 4, !tbaa !26
  %1506 = load i32, ptr %103, align 4, !tbaa !26
  %1507 = icmp sle i32 %1505, %1506
  br i1 %1507, label %1508, label %1510

1508:                                             ; preds = %1504
  %1509 = load i32, ptr %98, align 4, !tbaa !26
  br label %1520

1510:                                             ; preds = %1504, %1499
  %1511 = load i32, ptr %102, align 4, !tbaa !26
  %1512 = load i32, ptr %103, align 4, !tbaa !26
  %1513 = icmp sle i32 %1511, %1512
  br i1 %1513, label %1514, label %1516

1514:                                             ; preds = %1510
  %1515 = load i32, ptr %99, align 4, !tbaa !26
  br label %1518

1516:                                             ; preds = %1510
  %1517 = load i32, ptr %100, align 4, !tbaa !26
  br label %1518

1518:                                             ; preds = %1516, %1514
  %1519 = phi i32 [ %1515, %1514 ], [ %1517, %1516 ]
  br label %1520

1520:                                             ; preds = %1518, %1508
  %1521 = phi i32 [ %1509, %1508 ], [ %1519, %1518 ]
  store i32 %1521, ptr %104, align 4, !tbaa !26
  %1522 = load ptr, ptr %86, align 8, !tbaa !5
  %1523 = getelementptr inbounds i8, ptr %1522, i32 1
  store ptr %1523, ptr %86, align 8, !tbaa !5
  %1524 = load i8, ptr %1522, align 1, !tbaa !21
  %1525 = zext i8 %1524 to i32
  %1526 = load i32, ptr %104, align 4, !tbaa !26
  %1527 = sub nsw i32 %1525, %1526
  %1528 = and i32 %1527, 255
  %1529 = trunc i32 %1528 to i8
  %1530 = load ptr, ptr %87, align 8, !tbaa !5
  %1531 = getelementptr inbounds i8, ptr %1530, i32 1
  store ptr %1531, ptr %87, align 8, !tbaa !5
  store i8 %1529, ptr %1530, align 1, !tbaa !21
  %1532 = zext i8 %1529 to i32
  store i32 %1532, ptr %94, align 4, !tbaa !26
  %1533 = load i32, ptr %94, align 4, !tbaa !26
  %1534 = icmp slt i32 %1533, 128
  br i1 %1534, label %1535, label %1537

1535:                                             ; preds = %1520
  %1536 = load i32, ptr %94, align 4, !tbaa !26
  br label %1540

1537:                                             ; preds = %1520
  %1538 = load i32, ptr %94, align 4, !tbaa !26
  %1539 = sub nsw i32 256, %1538
  br label %1540

1540:                                             ; preds = %1537, %1535
  %1541 = phi i32 [ %1536, %1535 ], [ %1539, %1537 ]
  %1542 = load i32, ptr %91, align 4, !tbaa !26
  %1543 = add i32 %1542, %1541
  store i32 %1543, ptr %91, align 4, !tbaa !26
  %1544 = load i32, ptr %91, align 4, !tbaa !26
  %1545 = load i32, ptr %92, align 4, !tbaa !26
  %1546 = icmp ugt i32 %1544, %1545
  br i1 %1546, label %1547, label %1548

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

1548:                                             ; preds = %1540
  store i32 0, ptr %105, align 4
  br label %1549

1549:                                             ; preds = %1548, %1547
  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
  %1550 = load i32, ptr %105, align 4
  switch i32 %1550, label %1692 [
    i32 0, label %1551
    i32 68, label %1555
  ]

1551:                                             ; preds = %1549
  br label %1552

1552:                                             ; preds = %1551
  %1553 = load i64, ptr %93, align 8, !tbaa !24
  %1554 = add i64 %1553, 1
  store i64 %1554, ptr %93, align 8, !tbaa !24
  br label %1445, !llvm.loop !64

1555:                                             ; preds = %1549, %1445
  %1556 = load ptr, ptr %3, align 8, !tbaa !5
  %1557 = getelementptr inbounds %struct.png_struct_def, ptr %1556, i32 0, i32 111
  %1558 = load i8, ptr %1557, align 8, !tbaa !32
  %1559 = zext i8 %1558 to i32
  %1560 = icmp eq i32 %1559, 2
  br i1 %1560, label %1561, label %1636

1561:                                             ; preds = %1555
  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
  %1562 = load i32, ptr %91, align 4, !tbaa !26
  %1563 = and i32 %1562, 65535
  store i32 %1563, ptr %108, align 4, !tbaa !26
  %1564 = load i32, ptr %91, align 4, !tbaa !26
  %1565 = lshr i32 %1564, 10
  %1566 = and i32 %1565, 4194240
  store i32 %1566, ptr %107, align 4, !tbaa !26
  store i32 0, ptr %106, align 4, !tbaa !26
  br label %1567

1567:                                             ; preds = %1605, %1561
  %1568 = load i32, ptr %106, align 4, !tbaa !26
  %1569 = load i32, ptr %12, align 4, !tbaa !26
  %1570 = icmp slt i32 %1568, %1569
  br i1 %1570, label %1571, label %1608

1571:                                             ; preds = %1567
  %1572 = load ptr, ptr %3, align 8, !tbaa !5
  %1573 = getelementptr inbounds %struct.png_struct_def, ptr %1572, i32 0, i32 113
  %1574 = load ptr, ptr %1573, align 8, !tbaa !33
  %1575 = load i32, ptr %106, align 4, !tbaa !26
  %1576 = sext i32 %1575 to i64
  %1577 = getelementptr inbounds i8, ptr %1574, i64 %1576
  %1578 = load i8, ptr %1577, align 1, !tbaa !21
  %1579 = zext i8 %1578 to i32
  %1580 = icmp eq i32 %1579, 4
  br i1 %1580, label %1581, label %1604

1581:                                             ; preds = %1571
  %1582 = load i32, ptr %108, align 4, !tbaa !26
  %1583 = load ptr, ptr %3, align 8, !tbaa !5
  %1584 = getelementptr inbounds %struct.png_struct_def, ptr %1583, i32 0, i32 114
  %1585 = load ptr, ptr %1584, align 8, !tbaa !34
  %1586 = load i32, ptr %106, align 4, !tbaa !26
  %1587 = sext i32 %1586 to i64
  %1588 = getelementptr inbounds i16, ptr %1585, i64 %1587
  %1589 = load i16, ptr %1588, align 2, !tbaa !35
  %1590 = zext i16 %1589 to i32
  %1591 = mul i32 %1582, %1590
  %1592 = lshr i32 %1591, 8
  store i32 %1592, ptr %108, align 4, !tbaa !26
  %1593 = load i32, ptr %107, align 4, !tbaa !26
  %1594 = load ptr, ptr %3, align 8, !tbaa !5
  %1595 = getelementptr inbounds %struct.png_struct_def, ptr %1594, i32 0, i32 114
  %1596 = load ptr, ptr %1595, align 8, !tbaa !34
  %1597 = load i32, ptr %106, align 4, !tbaa !26
  %1598 = sext i32 %1597 to i64
  %1599 = getelementptr inbounds i16, ptr %1596, i64 %1598
  %1600 = load i16, ptr %1599, align 2, !tbaa !35
  %1601 = zext i16 %1600 to i32
  %1602 = mul i32 %1593, %1601
  %1603 = lshr i32 %1602, 8
  store i32 %1603, ptr %107, align 4, !tbaa !26
  br label %1604

1604:                                             ; preds = %1581, %1571
  br label %1605

1605:                                             ; preds = %1604
  %1606 = load i32, ptr %106, align 4, !tbaa !26
  %1607 = add nsw i32 %1606, 1
  store i32 %1607, ptr %106, align 4, !tbaa !26
  br label %1567, !llvm.loop !65

1608:                                             ; preds = %1567
  %1609 = load i32, ptr %108, align 4, !tbaa !26
  %1610 = load ptr, ptr %3, align 8, !tbaa !5
  %1611 = getelementptr inbounds %struct.png_struct_def, ptr %1610, i32 0, i32 116
  %1612 = load ptr, ptr %1611, align 8, !tbaa !37
  %1613 = getelementptr inbounds i16, ptr %1612, i64 4
  %1614 = load i16, ptr %1613, align 2, !tbaa !35
  %1615 = zext i16 %1614 to i32
  %1616 = mul i32 %1609, %1615
  %1617 = lshr i32 %1616, 3
  store i32 %1617, ptr %108, align 4, !tbaa !26
  %1618 = load i32, ptr %107, align 4, !tbaa !26
  %1619 = load ptr, ptr %3, align 8, !tbaa !5
  %1620 = getelementptr inbounds %struct.png_struct_def, ptr %1619, i32 0, i32 116
  %1621 = load ptr, ptr %1620, align 8, !tbaa !37
  %1622 = getelementptr inbounds i16, ptr %1621, i64 4
  %1623 = load i16, ptr %1622, align 2, !tbaa !35
  %1624 = zext i16 %1623 to i32
  %1625 = mul i32 %1618, %1624
  %1626 = lshr i32 %1625, 3
  store i32 %1626, ptr %107, align 4, !tbaa !26
  %1627 = load i32, ptr %107, align 4, !tbaa !26
  %1628 = icmp ugt i32 %1627, 4194240
  br i1 %1628, label %1629, label %1630

1629:                                             ; preds = %1608
  store i32 2147483647, ptr %91, align 4, !tbaa !26
  br label %1635

1630:                                             ; preds = %1608
  %1631 = load i32, ptr %107, align 4, !tbaa !26
  %1632 = shl i32 %1631, 10
  %1633 = load i32, ptr %108, align 4, !tbaa !26
  %1634 = add i32 %1632, %1633
  store i32 %1634, ptr %91, align 4, !tbaa !26
  br label %1635

1635:                                             ; preds = %1630, %1629
  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 %1636

1636:                                             ; preds = %1635, %1555
  %1637 = load i32, ptr %91, align 4, !tbaa !26
  %1638 = load i32, ptr %8, align 4, !tbaa !26
  %1639 = icmp ult i32 %1637, %1638
  br i1 %1639, label %1640, label %1644

1640:                                             ; preds = %1636
  %1641 = load ptr, ptr %3, align 8, !tbaa !5
  %1642 = getelementptr inbounds %struct.png_struct_def, ptr %1641, i32 0, i32 50
  %1643 = load ptr, ptr %1642, align 8, !tbaa !59
  store ptr %1643, ptr %5, align 8, !tbaa !5
  br label %1644

1644:                                             ; preds = %1640, %1636
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #2
  call void @llvm.lifetime.end.p0(i64 8, 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 %1645

1645:                                             ; preds = %1644, %1310
  br label %1646

1646:                                             ; preds = %1645, %1306
  %1647 = load ptr, ptr %3, align 8, !tbaa !5
  %1648 = load ptr, ptr %5, align 8, !tbaa !5
  %1649 = load ptr, ptr %4, align 8, !tbaa !5
  %1650 = getelementptr inbounds %struct.png_row_info_struct, ptr %1649, i32 0, i32 1
  %1651 = load i64, ptr %1650, align 8, !tbaa !22
  %1652 = add i64 %1651, 1
  call void @png_write_filtered_row(ptr noundef %1647, ptr noundef %1648, i64 noundef %1652)
  %1653 = load ptr, ptr %3, align 8, !tbaa !5
  %1654 = getelementptr inbounds %struct.png_struct_def, ptr %1653, i32 0, i32 112
  %1655 = load i8, ptr %1654, align 1, !tbaa !25
  %1656 = zext i8 %1655 to i32
  %1657 = icmp sgt i32 %1656, 0
  br i1 %1657, label %1658, label %1691

1658:                                             ; preds = %1646
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #2
  store i32 1, ptr %109, align 4, !tbaa !26
  br label %1659

1659:                                             ; preds = %1678, %1658
  %1660 = load i32, ptr %109, align 4, !tbaa !26
  %1661 = load i32, ptr %12, align 4, !tbaa !26
  %1662 = icmp slt i32 %1660, %1661
  br i1 %1662, label %1663, label %1681

1663:                                             ; preds = %1659
  %1664 = load ptr, ptr %3, align 8, !tbaa !5
  %1665 = getelementptr inbounds %struct.png_struct_def, ptr %1664, i32 0, i32 113
  %1666 = load ptr, ptr %1665, align 8, !tbaa !33
  %1667 = load i32, ptr %109, align 4, !tbaa !26
  %1668 = sub nsw i32 %1667, 1
  %1669 = sext i32 %1668 to i64
  %1670 = getelementptr inbounds i8, ptr %1666, i64 %1669
  %1671 = load i8, ptr %1670, align 1, !tbaa !21
  %1672 = load ptr, ptr %3, align 8, !tbaa !5
  %1673 = getelementptr inbounds %struct.png_struct_def, ptr %1672, i32 0, i32 113
  %1674 = load ptr, ptr %1673, align 8, !tbaa !33
  %1675 = load i32, ptr %109, align 4, !tbaa !26
  %1676 = sext i32 %1675 to i64
  %1677 = getelementptr inbounds i8, ptr %1674, i64 %1676
  store i8 %1671, ptr %1677, align 1, !tbaa !21
  br label %1678

1678:                                             ; preds = %1663
  %1679 = load i32, ptr %109, align 4, !tbaa !26
  %1680 = add nsw i32 %1679, 1
  store i32 %1680, ptr %109, align 4, !tbaa !26
  br label %1659, !llvm.loop !66

1681:                                             ; preds = %1659
  %1682 = load ptr, ptr %5, align 8, !tbaa !5
  %1683 = getelementptr inbounds i8, ptr %1682, i64 0
  %1684 = load i8, ptr %1683, align 1, !tbaa !21
  %1685 = load ptr, ptr %3, align 8, !tbaa !5
  %1686 = getelementptr inbounds %struct.png_struct_def, ptr %1685, i32 0, i32 113
  %1687 = load ptr, ptr %1686, align 8, !tbaa !33
  %1688 = load i32, ptr %109, align 4, !tbaa !26
  %1689 = sext i32 %1688 to i64
  %1690 = getelementptr inbounds i8, ptr %1687, i64 %1689
  store i8 %1684, ptr %1690, align 1, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #2
  br label %1691

1691:                                             ; preds = %1681, %1646
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 8, 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

1692:                                             ; preds = %1549
  unreachable
}

; Function Attrs: nounwind uwtable
declare hidden void @png_write_filtered_row(ptr noalias noundef, ptr noundef, i64 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 630}
!10 = !{!"png_struct_def", !7, i64 0, !6, i64 200, !6, i64 208, !11, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !7, i64 296, !7, i64 297, !12, i64 300, !12, i64 304, !12, i64 308, !12, i64 312, !13, i64 320, !6, i64 432, !12, i64 440, !12, i64 444, !12, i64 448, !12, i64 452, !12, i64 456, !12, i64 460, !12, i64 464, !12, i64 468, !12, i64 472, !12, i64 476, !12, i64 480, !12, i64 484, !12, i64 488, !12, i64 492, !12, i64 496, !12, i64 500, !12, i64 504, !12, i64 508, !12, i64 512, !12, i64 516, !11, i64 520, !12, i64 528, !12, i64 532, !12, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584, !11, i64 592, !12, i64 600, !12, i64 604, !6, i64 608, !14, i64 616, !12, i64 620, !14, i64 624, !7, i64 626, !7, i64 627, !7, i64 628, !7, i64 629, !7, i64 630, !7, i64 631, !7, i64 632, !7, i64 633, !7, i64 634, !7, i64 635, !7, i64 636, !7, i64 637, !7, i64 638, !7, i64 639, !14, i64 640, !7, i64 642, !12, i64 644, !15, i64 648, !15, i64 658, !6, i64 672, !12, i64 680, !12, i64 684, !12, i64 688, !12, i64 692, !6, i64 696, !6, i64 704, !6, i64 712, !6, i64 720, !6, i64 728, !6, i64 736, !16, i64 744, !16, i64 749, !6, i64 760, !15, i64 768, !6, i64 784, !6, i64 792, !6, i64 800, !6, i64 808, !6, i64 816, !6, i64 824, !6, i64 832, !6, i64 840, !6, i64 848, !12, i64 856, !12, i64 860, !11, i64 864, !11, i64 872, !11, i64 880, !11, i64 888, !12, i64 896, !12, i64 900, !6, i64 904, !6, i64 912, !7, i64 920, !7, i64 921, !6, i64 928, !6, i64 936, !6, i64 944, !6, i64 952, !6, i64 960, !7, i64 968, !7, i64 969, !12, i64 1000, !6, i64 1008, !6, i64 1016, !12, i64 1024, !12, i64 1028, !6, i64 1032, !7, i64 1040, !7, i64 1041, !14, i64 1042, !14, i64 1044, !12, i64 1048, !7, i64 1052, !6, i64 1056, !6, i64 1064, !6, i64 1072, !6, i64 1080, !6, i64 1088, !6, i64 1096, !6, i64 1104, !7, i64 1112, !12, i64 1116, !12, i64 1120, !12, i64 1124, !11, i64 1128, !17, i64 1136, !11, i64 1168, !6, i64 1176, !11, i64 1184, !12, i64 1192, !12, i64 1196, !6, i64 1200, !7, i64 1208, !18, i64 1240}
!11 = !{!"long", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"z_stream_s", !6, i64 0, !12, i64 8, !11, i64 16, !6, i64 24, !12, i64 32, !11, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !12, i64 88, !11, i64 96, !11, i64 104}
!14 = !{!"short", !7, i64 0}
!15 = !{!"png_color_16_struct", !7, i64 0, !14, i64 2, !14, i64 4, !14, i64 6, !14, i64 8}
!16 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!17 = !{!"png_unknown_chunk_t", !7, i64 0, !6, i64 8, !11, i64 16, !7, i64 24}
!18 = !{!"png_colorspace", !12, i64 0, !19, i64 4, !20, i64 36, !14, i64 72, !14, i64 74}
!19 = !{!"png_xy", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28}
!20 = !{!"png_XYZ", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32}
!21 = !{!7, !7, i64 0}
!22 = !{!23, !11, i64 8}
!23 = !{!"png_row_info_struct", !12, i64 0, !11, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!24 = !{!11, !11, i64 0}
!25 = !{!10, !7, i64 921}
!26 = !{!12, !12, i64 0}
!27 = !{!23, !7, i64 19}
!28 = !{!10, !6, i64 544}
!29 = !{!10, !6, i64 552}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!10, !7, i64 920}
!33 = !{!10, !6, i64 928}
!34 = !{!10, !6, i64 936}
!35 = !{!14, !14, i64 0}
!36 = distinct !{!36, !31}
!37 = !{!10, !6, i64 952}
!38 = !{!10, !6, i64 560}
!39 = distinct !{!39, !31}
!40 = distinct !{!40, !31}
!41 = !{!10, !6, i64 944}
!42 = distinct !{!42, !31}
!43 = !{!10, !6, i64 960}
!44 = distinct !{!44, !31}
!45 = distinct !{!45, !31}
!46 = distinct !{!46, !31}
!47 = !{!10, !6, i64 568}
!48 = distinct !{!48, !31}
!49 = distinct !{!49, !31}
!50 = distinct !{!50, !31}
!51 = distinct !{!51, !31}
!52 = !{!10, !6, i64 576}
!53 = distinct !{!53, !31}
!54 = distinct !{!54, !31}
!55 = distinct !{!55, !31}
!56 = distinct !{!56, !31}
!57 = distinct !{!57, !31}
!58 = distinct !{!58, !31}
!59 = !{!10, !6, i64 584}
!60 = distinct !{!60, !31}
!61 = distinct !{!61, !31}
!62 = distinct !{!62, !31}
!63 = distinct !{!63, !31}
!64 = distinct !{!64, !31}
!65 = distinct !{!65, !31}
!66 = distinct !{!66, !31}


; 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 noalias noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 630
  %4 = load i8, ptr %3, align 2, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 8
  %6 = load i64, ptr %5, align 8, !tbaa !20
  %7 = getelementptr inbounds i8, ptr %0, i64 921
  %8 = load i8, ptr %7, align 1, !tbaa !22
  %9 = getelementptr inbounds i8, ptr %1, i64 19
  %10 = load i8, ptr %9, align 1, !tbaa !23
  %11 = zext i8 %10 to i32
  %12 = add nuw nsw i32 %11, 7
  %13 = lshr i32 %12, 3
  %14 = getelementptr inbounds i8, ptr %0, i64 544
  %15 = load ptr, ptr %14, align 8, !tbaa !24
  %16 = ptrtoint ptr %15 to i64
  %17 = getelementptr inbounds i8, ptr %0, i64 552
  %18 = load ptr, ptr %17, align 8, !tbaa !25
  %19 = ptrtoint ptr %18 to i64
  %20 = zext i8 %4 to i32
  %21 = and i32 %20, 8
  %22 = icmp ne i32 %21, 0
  %23 = icmp ne i8 %4, 8
  %or.cond = and i1 %23, %22
  br i1 %or.cond, label %.preheader698, label %107

.preheader698:                                    ; preds = %2
  %.not941 = icmp eq i64 %6, 0
  br i1 %.not941, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader698
  %min.iters.check = icmp ult i64 %6, 8
  br i1 %min.iters.check, label %.lr.ph.preheader1567, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %6, -8
  %ind.end = getelementptr i8, ptr %18, i64 %n.vec
  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 ], [ %34, %vector.body ]
  %vec.phi1115 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %35, %vector.body ]
  %next.gep = getelementptr i8, ptr %18, i64 %index
  %24 = getelementptr inbounds i8, ptr %next.gep, i64 1
  %25 = getelementptr inbounds i8, ptr %next.gep, i64 5
  %wide.load = load <4 x i8>, ptr %24, align 1, !tbaa !26
  %wide.load1117 = load <4 x i8>, ptr %25, align 1, !tbaa !26
  %26 = zext <4 x i8> %wide.load to <4 x i32>
  %27 = zext <4 x i8> %wide.load1117 to <4 x i32>
  %28 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %26
  %29 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %27
  %30 = icmp slt <4 x i8> %wide.load, zeroinitializer
  %31 = icmp slt <4 x i8> %wide.load1117, zeroinitializer
  %32 = select <4 x i1> %30, <4 x i32> %28, <4 x i32> %26
  %33 = select <4 x i1> %31, <4 x i32> %29, <4 x i32> %27
  %34 = add <4 x i32> %32, %vec.phi
  %35 = add <4 x i32> %33, %vec.phi1115
  %index.next = add nuw i64 %index, 8
  %36 = icmp eq i64 %index.next, %n.vec
  br i1 %36, label %middle.block, label %vector.body, !llvm.loop !27

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %35, %34
  %37 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %6, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader1567

.lr.ph.preheader1567:                             ; preds = %middle.block, %.lr.ph.preheader
  %.pn689701.ph = phi ptr [ %18, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.0490700.ph = phi i32 [ 0, %.lr.ph.preheader ], [ %37, %middle.block ]
  %.0493699.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader1567, %.lr.ph
  %.pn689701 = phi ptr [ %.0489, %.lr.ph ], [ %.pn689701.ph, %.lr.ph.preheader1567 ]
  %.0490700 = phi i32 [ %43, %.lr.ph ], [ %.0490700.ph, %.lr.ph.preheader1567 ]
  %.0493699 = phi i64 [ %44, %.lr.ph ], [ %.0493699.ph, %.lr.ph.preheader1567 ]
  %.0489 = getelementptr inbounds i8, ptr %.pn689701, i64 1
  %38 = load i8, ptr %.0489, align 1, !tbaa !26
  %39 = zext i8 %38 to i32
  %40 = sub nuw nsw i32 256, %39
  %41 = icmp slt i8 %38, 0
  %42 = select i1 %41, i32 %40, i32 %39
  %43 = add i32 %42, %.0490700
  %44 = add nuw i64 %.0493699, 1
  %exitcond.not = icmp eq i64 %44, %6
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !31

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %.preheader698
  %.0490.lcssa = phi i32 [ 0, %.preheader698 ], [ %37, %middle.block ], [ %43, %.lr.ph ]
  %45 = getelementptr inbounds i8, ptr %0, i64 920
  %46 = load i8, ptr %45, align 8, !tbaa !32
  %47 = icmp eq i8 %46, 2
  br i1 %47, label %48, label %107

48:                                               ; preds = %._crit_edge
  %49 = and i32 %.0490.lcssa, 65535
  %50 = lshr i32 %.0490.lcssa, 10
  %51 = and i32 %50, 4194240
  %.not942 = icmp eq i8 %8, 0
  br i1 %.not942, label %._crit_edge707, label %.lr.ph706

.lr.ph706:                                        ; preds = %48
  %52 = getelementptr inbounds i8, ptr %0, i64 928
  %53 = load ptr, ptr %52, align 8, !tbaa !33
  %54 = getelementptr inbounds i8, ptr %0, i64 936
  %wide.trip.count = zext i8 %8 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %55 = icmp eq i8 %8, 1
  br i1 %55, label %._crit_edge707.loopexit.unr-lcssa, label %.lr.ph706.new

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

56:                                               ; preds = %82, %.lr.ph706.new
  %indvars.iv = phi i64 [ 0, %.lr.ph706.new ], [ %indvars.iv.next.1, %82 ]
  %.0516704 = phi i32 [ %51, %.lr.ph706.new ], [ %.1517.1, %82 ]
  %.0518703 = phi i32 [ %49, %.lr.ph706.new ], [ %.1519.1, %82 ]
  %niter = phi i64 [ 0, %.lr.ph706.new ], [ %niter.next.1, %82 ]
  %57 = getelementptr inbounds i8, ptr %53, i64 %indvars.iv
  %58 = load i8, ptr %57, align 1, !tbaa !26
  %59 = icmp eq i8 %58, 0
  br i1 %59, label %60, label %69

60:                                               ; preds = %56
  %61 = load ptr, ptr %54, align 8, !tbaa !34
  %62 = getelementptr inbounds i16, ptr %61, i64 %indvars.iv
  %63 = load i16, ptr %62, align 2, !tbaa !35
  %64 = zext i16 %63 to i32
  %65 = mul i32 %.0518703, %64
  %66 = lshr i32 %65, 8
  %67 = mul i32 %.0516704, %64
  %68 = lshr i32 %67, 8
  br label %69

69:                                               ; preds = %56, %60
  %.1519 = phi i32 [ %66, %60 ], [ %.0518703, %56 ]
  %.1517 = phi i32 [ %68, %60 ], [ %.0516704, %56 ]
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %70 = getelementptr inbounds i8, ptr %53, i64 %indvars.iv.next
  %71 = load i8, ptr %70, align 1, !tbaa !26
  %72 = icmp eq i8 %71, 0
  br i1 %72, label %73, label %82

73:                                               ; preds = %69
  %74 = load ptr, ptr %54, align 8, !tbaa !34
  %75 = getelementptr inbounds i16, ptr %74, i64 %indvars.iv.next
  %76 = load i16, ptr %75, align 2, !tbaa !35
  %77 = zext i16 %76 to i32
  %78 = mul i32 %.1519, %77
  %79 = lshr i32 %78, 8
  %80 = mul i32 %.1517, %77
  %81 = lshr i32 %80, 8
  br label %82

82:                                               ; preds = %73, %69
  %.1519.1 = phi i32 [ %79, %73 ], [ %.1519, %69 ]
  %.1517.1 = phi i32 [ %81, %73 ], [ %.1517, %69 ]
  %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_edge707.loopexit.unr-lcssa, label %56, !llvm.loop !36

._crit_edge707.loopexit.unr-lcssa:                ; preds = %82, %.lr.ph706
  %.1519.lcssa.ph = phi i32 [ poison, %.lr.ph706 ], [ %.1519.1, %82 ]
  %.1517.lcssa.ph = phi i32 [ poison, %.lr.ph706 ], [ %.1517.1, %82 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph706 ], [ %indvars.iv.next.1, %82 ]
  %.0516704.unr = phi i32 [ %51, %.lr.ph706 ], [ %.1517.1, %82 ]
  %.0518703.unr = phi i32 [ %49, %.lr.ph706 ], [ %.1519.1, %82 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge707, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge707.loopexit.unr-lcssa
  %83 = getelementptr inbounds i8, ptr %53, i64 %indvars.iv.unr
  %84 = load i8, ptr %83, align 1, !tbaa !26
  %85 = icmp eq i8 %84, 0
  br i1 %85, label %86, label %._crit_edge707

86:                                               ; preds = %.epil.preheader
  %87 = load ptr, ptr %54, align 8, !tbaa !34
  %88 = getelementptr inbounds i16, ptr %87, i64 %indvars.iv.unr
  %89 = load i16, ptr %88, align 2, !tbaa !35
  %90 = zext i16 %89 to i32
  %91 = mul i32 %.0518703.unr, %90
  %92 = lshr i32 %91, 8
  %93 = mul i32 %.0516704.unr, %90
  %94 = lshr i32 %93, 8
  br label %._crit_edge707

._crit_edge707:                                   ; preds = %._crit_edge707.loopexit.unr-lcssa, %86, %.epil.preheader, %48
  %.0518.lcssa = phi i32 [ %49, %48 ], [ %.1519.lcssa.ph, %._crit_edge707.loopexit.unr-lcssa ], [ %92, %86 ], [ %.0518703.unr, %.epil.preheader ]
  %.0516.lcssa = phi i32 [ %51, %48 ], [ %.1517.lcssa.ph, %._crit_edge707.loopexit.unr-lcssa ], [ %94, %86 ], [ %.0516704.unr, %.epil.preheader ]
  %95 = getelementptr inbounds i8, ptr %0, i64 952
  %96 = load ptr, ptr %95, align 8, !tbaa !37
  %97 = load i16, ptr %96, align 2, !tbaa !35
  %98 = zext i16 %97 to i32
  %99 = mul i32 %.0516.lcssa, %98
  %100 = icmp ugt i32 %99, 33553927
  br i1 %100, label %107, label %101

101:                                              ; preds = %._crit_edge707
  %102 = mul i32 %.0518.lcssa, %98
  %103 = lshr i32 %102, 3
  %104 = shl nuw i32 %99, 7
  %105 = and i32 %104, -1024
  %106 = add i32 %105, %103
  br label %107

107:                                              ; preds = %._crit_edge, %._crit_edge707, %101, %2
  %.0482 = phi i32 [ 2147483647, %2 ], [ %.0490.lcssa, %._crit_edge ], [ %106, %101 ], [ 2147483647, %._crit_edge707 ]
  %108 = icmp eq i8 %4, 16
  br i1 %108, label %109, label %181

109:                                              ; preds = %107
  %110 = getelementptr i8, ptr %18, i64 1
  %111 = getelementptr inbounds i8, ptr %0, i64 560
  %112 = load ptr, ptr %111, align 8, !tbaa !38
  %113 = zext nneg i32 %13 to i64
  %.0579747 = getelementptr i8, ptr %112, i64 1
  %.not946 = icmp eq i8 %10, 0
  br i1 %.not946, label %.preheader696, label %.lr.ph752.preheader

.lr.ph752.preheader:                              ; preds = %109
  %114 = ptrtoint ptr %112 to i64
  %min.iters.check1147 = icmp ult i8 %10, 121
  %115 = sub i64 %114, %19
  %diff.check1144 = icmp ult i64 %115, 16
  %or.cond1531 = select i1 %min.iters.check1147, i1 true, i1 %diff.check1144
  br i1 %or.cond1531, label %.lr.ph752.preheader1557, label %vector.ph1148

.lr.ph752.preheader1557:                          ; preds = %middle.block1145, %.lr.ph752.preheader
  %.0579750.ph = phi ptr [ %.0579747, %.lr.ph752.preheader ], [ %ind.end1151, %middle.block1145 ]
  %.0521749.ph = phi ptr [ %110, %.lr.ph752.preheader ], [ %ind.end1153, %middle.block1145 ]
  %.0619748.ph = phi i64 [ 0, %.lr.ph752.preheader ], [ %n.vec1150, %middle.block1145 ]
  %xtraiter1589 = and i64 %113, 7
  %lcmp.mod1590.not = icmp eq i64 %xtraiter1589, 0
  br i1 %lcmp.mod1590.not, label %.lr.ph752.prol.loopexit, label %.lr.ph752.prol

.lr.ph752.prol:                                   ; preds = %.lr.ph752.preheader1557, %.lr.ph752.prol
  %.0579750.prol = phi ptr [ %.0579.prol, %.lr.ph752.prol ], [ %.0579750.ph, %.lr.ph752.preheader1557 ]
  %.0521749.prol = phi ptr [ %118, %.lr.ph752.prol ], [ %.0521749.ph, %.lr.ph752.preheader1557 ]
  %.0619748.prol = phi i64 [ %117, %.lr.ph752.prol ], [ %.0619748.ph, %.lr.ph752.preheader1557 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph752.prol ], [ 0, %.lr.ph752.preheader1557 ]
  %116 = load i8, ptr %.0521749.prol, align 1, !tbaa !26
  store i8 %116, ptr %.0579750.prol, align 1, !tbaa !26
  %117 = add nuw nsw i64 %.0619748.prol, 1
  %118 = getelementptr inbounds i8, ptr %.0521749.prol, i64 1
  %.0579.prol = getelementptr inbounds i8, ptr %.0579750.prol, i64 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter1589
  br i1 %prol.iter.cmp.not, label %.lr.ph752.prol.loopexit, label %.lr.ph752.prol, !llvm.loop !39

.lr.ph752.prol.loopexit:                          ; preds = %.lr.ph752.prol, %.lr.ph752.preheader1557
  %.lcssa1559.unr = phi ptr [ poison, %.lr.ph752.preheader1557 ], [ %118, %.lr.ph752.prol ]
  %.0579.lcssa1558.unr = phi ptr [ poison, %.lr.ph752.preheader1557 ], [ %.0579.prol, %.lr.ph752.prol ]
  %.0579750.unr = phi ptr [ %.0579750.ph, %.lr.ph752.preheader1557 ], [ %.0579.prol, %.lr.ph752.prol ]
  %.0521749.unr = phi ptr [ %.0521749.ph, %.lr.ph752.preheader1557 ], [ %118, %.lr.ph752.prol ]
  %.0619748.unr = phi i64 [ %.0619748.ph, %.lr.ph752.preheader1557 ], [ %117, %.lr.ph752.prol ]
  %119 = sub nsw i64 %.0619748.ph, %113
  %120 = icmp ugt i64 %119, -8
  br i1 %120, label %.preheader696, label %.lr.ph752

vector.ph1148:                                    ; preds = %.lr.ph752.preheader
  %n.vec1150 = and i64 %113, 48
  %ind.end1151 = getelementptr i8, ptr %.0579747, i64 %n.vec1150
  %ind.end1153 = getelementptr i8, ptr %110, i64 %n.vec1150
  %wide.load1160 = load <16 x i8>, ptr %110, align 1, !tbaa !26
  store <16 x i8> %wide.load1160, ptr %.0579747, align 1, !tbaa !26
  %121 = icmp eq i64 %n.vec1150, 16
  br i1 %121, label %middle.block1145, label %vector.body1156.1, !llvm.loop !41

vector.body1156.1:                                ; preds = %vector.ph1148
  %next.gep1158.1 = getelementptr i8, ptr %112, i64 17
  %next.gep1159.1 = getelementptr i8, ptr %18, i64 17
  %wide.load1160.1 = load <16 x i8>, ptr %next.gep1159.1, align 1, !tbaa !26
  store <16 x i8> %wide.load1160.1, ptr %next.gep1158.1, align 1, !tbaa !26
  br label %middle.block1145

middle.block1145:                                 ; preds = %vector.body1156.1, %vector.ph1148
  %cmp.n1162 = icmp eq i64 %n.vec1150, %113
  br i1 %cmp.n1162, label %.preheader696, label %.lr.ph752.preheader1557

.preheader696:                                    ; preds = %.lr.ph752.prol.loopexit, %.lr.ph752, %middle.block1145, %109
  %.0619.lcssa = phi i64 [ 0, %109 ], [ %113, %middle.block1145 ], [ %113, %.lr.ph752 ], [ %113, %.lr.ph752.prol.loopexit ]
  %.0521.lcssa = phi ptr [ %110, %109 ], [ %ind.end1153, %middle.block1145 ], [ %.lcssa1559.unr, %.lr.ph752.prol.loopexit ], [ %159, %.lr.ph752 ]
  %.0579.lcssa = phi ptr [ %.0579747, %109 ], [ %ind.end1151, %middle.block1145 ], [ %.0579.lcssa1558.unr, %.lr.ph752.prol.loopexit ], [ %.0579.7, %.lr.ph752 ]
  %.0579.lcssa1164 = ptrtoint ptr %.0579.lcssa to i64
  %.0521.lcssa1166 = ptrtoint ptr %.0521.lcssa to i64
  %122 = icmp ult i64 %.0619.lcssa, %6
  br i1 %122, label %iter.check, label %.sink.split

iter.check:                                       ; preds = %.preheader696
  %123 = sub i64 %6, %.0619.lcssa
  %min.iters.check1170 = icmp ult i64 %123, 8
  br i1 %min.iters.check1170, label %.lr.ph760.preheader, label %vector.memcheck1163

vector.memcheck1163:                              ; preds = %iter.check
  %124 = sub i64 %19, %.0579.lcssa1164
  %diff.check1165 = icmp ugt i64 %124, -33
  %125 = sub i64 %.0579.lcssa1164, %.0521.lcssa1166
  %diff.check1167 = icmp ult i64 %125, 32
  %conflict.rdx = or i1 %diff.check1165, %diff.check1167
  br i1 %conflict.rdx, label %.lr.ph760.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %vector.memcheck1163
  %min.iters.check1172 = icmp ult i64 %123, 32
  br i1 %min.iters.check1172, label %vec.epilog.ph, label %vector.ph1173

vector.ph1173:                                    ; preds = %vector.main.loop.iter.check
  %n.vec1175 = and i64 %123, -32
  br label %vector.body1176

vector.body1176:                                  ; preds = %vector.body1176, %vector.ph1173
  %index1177 = phi i64 [ 0, %vector.ph1173 ], [ %index.next1188, %vector.body1176 ]
  %next.gep1178 = getelementptr i8, ptr %.0521.lcssa, i64 %index1177
  %next.gep1180 = getelementptr i8, ptr %110, i64 %index1177
  %next.gep1182 = getelementptr i8, ptr %.0579.lcssa, i64 %index1177
  %126 = getelementptr i8, ptr %next.gep1178, i64 16
  %wide.load1184 = load <16 x i8>, ptr %next.gep1178, align 1, !tbaa !26
  %wide.load1185 = load <16 x i8>, ptr %126, align 1, !tbaa !26
  %127 = getelementptr i8, ptr %next.gep1180, i64 16
  %wide.load1186 = load <16 x i8>, ptr %next.gep1180, align 1, !tbaa !26
  %wide.load1187 = load <16 x i8>, ptr %127, align 1, !tbaa !26
  %128 = sub <16 x i8> %wide.load1184, %wide.load1186
  %129 = sub <16 x i8> %wide.load1185, %wide.load1187
  %130 = getelementptr i8, ptr %next.gep1182, i64 16
  store <16 x i8> %128, ptr %next.gep1182, align 1, !tbaa !26
  store <16 x i8> %129, ptr %130, align 1, !tbaa !26
  %index.next1188 = add nuw i64 %index1177, 32
  %131 = icmp eq i64 %index.next1188, %n.vec1175
  br i1 %131, label %middle.block1168, label %vector.body1176, !llvm.loop !42

middle.block1168:                                 ; preds = %vector.body1176
  %cmp.n1189 = icmp eq i64 %123, %n.vec1175
  br i1 %cmp.n1189, label %.sink.split, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block1168
  %ind.end1202 = add i64 %.0619.lcssa, %n.vec1175
  %ind.end1199 = getelementptr i8, ptr %.0579.lcssa, i64 %n.vec1175
  %ind.end1196 = getelementptr i8, ptr %110, i64 %n.vec1175
  %ind.end1193 = getelementptr i8, ptr %.0521.lcssa, i64 %n.vec1175
  %n.vec.remaining = and i64 %123, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph760.preheader, label %vec.epilog.ph

.lr.ph760.preheader:                              ; preds = %vec.epilog.middle.block, %vector.memcheck1163, %iter.check, %vec.epilog.iter.check
  %.1522759.ph = phi ptr [ %.0521.lcssa, %iter.check ], [ %.0521.lcssa, %vector.memcheck1163 ], [ %ind.end1193, %vec.epilog.iter.check ], [ %ind.end1192, %vec.epilog.middle.block ]
  %.0523758.ph = phi ptr [ %110, %iter.check ], [ %110, %vector.memcheck1163 ], [ %ind.end1196, %vec.epilog.iter.check ], [ %ind.end1195, %vec.epilog.middle.block ]
  %.1580757.ph = phi ptr [ %.0579.lcssa, %iter.check ], [ %.0579.lcssa, %vector.memcheck1163 ], [ %ind.end1199, %vec.epilog.iter.check ], [ %ind.end1198, %vec.epilog.middle.block ]
  %.1620756.ph = phi i64 [ %.0619.lcssa, %iter.check ], [ %.0619.lcssa, %vector.memcheck1163 ], [ %ind.end1202, %vec.epilog.iter.check ], [ %ind.end1201, %vec.epilog.middle.block ]
  %132 = sub i64 %6, %.1620756.ph
  %xtraiter1591 = and i64 %132, 3
  %lcmp.mod1592.not = icmp eq i64 %xtraiter1591, 0
  br i1 %lcmp.mod1592.not, label %.lr.ph760.prol.loopexit, label %.lr.ph760.prol

.lr.ph760.prol:                                   ; preds = %.lr.ph760.preheader, %.lr.ph760.prol
  %.1522759.prol = phi ptr [ %136, %.lr.ph760.prol ], [ %.1522759.ph, %.lr.ph760.preheader ]
  %.0523758.prol = phi ptr [ %137, %.lr.ph760.prol ], [ %.0523758.ph, %.lr.ph760.preheader ]
  %.1580757.prol = phi ptr [ %138, %.lr.ph760.prol ], [ %.1580757.ph, %.lr.ph760.preheader ]
  %.1620756.prol = phi i64 [ %135, %.lr.ph760.prol ], [ %.1620756.ph, %.lr.ph760.preheader ]
  %prol.iter1593 = phi i64 [ %prol.iter1593.next, %.lr.ph760.prol ], [ 0, %.lr.ph760.preheader ]
  %133 = load i8, ptr %.1522759.prol, align 1, !tbaa !26
  %134 = load i8, ptr %.0523758.prol, align 1, !tbaa !26
  %.narrow687.prol = sub i8 %133, %134
  store i8 %.narrow687.prol, ptr %.1580757.prol, align 1, !tbaa !26
  %135 = add nuw i64 %.1620756.prol, 1
  %136 = getelementptr inbounds i8, ptr %.1522759.prol, i64 1
  %137 = getelementptr inbounds i8, ptr %.0523758.prol, i64 1
  %138 = getelementptr inbounds i8, ptr %.1580757.prol, i64 1
  %prol.iter1593.next = add i64 %prol.iter1593, 1
  %prol.iter1593.cmp.not = icmp eq i64 %prol.iter1593.next, %xtraiter1591
  br i1 %prol.iter1593.cmp.not, label %.lr.ph760.prol.loopexit, label %.lr.ph760.prol, !llvm.loop !43

.lr.ph760.prol.loopexit:                          ; preds = %.lr.ph760.prol, %.lr.ph760.preheader
  %.1522759.unr = phi ptr [ %.1522759.ph, %.lr.ph760.preheader ], [ %136, %.lr.ph760.prol ]
  %.0523758.unr = phi ptr [ %.0523758.ph, %.lr.ph760.preheader ], [ %137, %.lr.ph760.prol ]
  %.1580757.unr = phi ptr [ %.1580757.ph, %.lr.ph760.preheader ], [ %138, %.lr.ph760.prol ]
  %.1620756.unr = phi i64 [ %.1620756.ph, %.lr.ph760.preheader ], [ %135, %.lr.ph760.prol ]
  %139 = sub i64 %.1620756.ph, %6
  %140 = icmp ugt i64 %139, -4
  br i1 %140, label %.sink.split, label %.lr.ph760

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec1175, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec1191 = and i64 %123, -8
  %ind.end1192 = getelementptr i8, ptr %.0521.lcssa, i64 %n.vec1191
  %ind.end1195 = getelementptr i8, ptr %110, i64 %n.vec1191
  %ind.end1198 = getelementptr i8, ptr %.0579.lcssa, i64 %n.vec1191
  %ind.end1201 = add i64 %.0619.lcssa, %n.vec1191
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index1204 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next1210, %vec.epilog.vector.body ]
  %next.gep1205 = getelementptr i8, ptr %.0521.lcssa, i64 %index1204
  %next.gep1206 = getelementptr i8, ptr %110, i64 %index1204
  %next.gep1207 = getelementptr i8, ptr %.0579.lcssa, i64 %index1204
  %wide.load1208 = load <8 x i8>, ptr %next.gep1205, align 1, !tbaa !26
  %wide.load1209 = load <8 x i8>, ptr %next.gep1206, align 1, !tbaa !26
  %141 = sub <8 x i8> %wide.load1208, %wide.load1209
  store <8 x i8> %141, ptr %next.gep1207, align 1, !tbaa !26
  %index.next1210 = add nuw i64 %index1204, 8
  %142 = icmp eq i64 %index.next1210, %n.vec1191
  br i1 %142, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !44

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n1211 = icmp eq i64 %123, %n.vec1191
  br i1 %cmp.n1211, label %.sink.split, label %.lr.ph760.preheader

.lr.ph752:                                        ; preds = %.lr.ph752.prol.loopexit, %.lr.ph752
  %.0579750 = phi ptr [ %.0579.7, %.lr.ph752 ], [ %.0579750.unr, %.lr.ph752.prol.loopexit ]
  %.0521749 = phi ptr [ %159, %.lr.ph752 ], [ %.0521749.unr, %.lr.ph752.prol.loopexit ]
  %.0619748 = phi i64 [ %158, %.lr.ph752 ], [ %.0619748.unr, %.lr.ph752.prol.loopexit ]
  %143 = load i8, ptr %.0521749, align 1, !tbaa !26
  store i8 %143, ptr %.0579750, align 1, !tbaa !26
  %144 = getelementptr inbounds i8, ptr %.0521749, i64 1
  %.0579 = getelementptr inbounds i8, ptr %.0579750, i64 1
  %145 = load i8, ptr %144, align 1, !tbaa !26
  store i8 %145, ptr %.0579, align 1, !tbaa !26
  %146 = getelementptr inbounds i8, ptr %.0521749, i64 2
  %.0579.1 = getelementptr inbounds i8, ptr %.0579750, i64 2
  %147 = load i8, ptr %146, align 1, !tbaa !26
  store i8 %147, ptr %.0579.1, align 1, !tbaa !26
  %148 = getelementptr inbounds i8, ptr %.0521749, i64 3
  %.0579.2 = getelementptr inbounds i8, ptr %.0579750, i64 3
  %149 = load i8, ptr %148, align 1, !tbaa !26
  store i8 %149, ptr %.0579.2, align 1, !tbaa !26
  %150 = getelementptr inbounds i8, ptr %.0521749, i64 4
  %.0579.3 = getelementptr inbounds i8, ptr %.0579750, i64 4
  %151 = load i8, ptr %150, align 1, !tbaa !26
  store i8 %151, ptr %.0579.3, align 1, !tbaa !26
  %152 = getelementptr inbounds i8, ptr %.0521749, i64 5
  %.0579.4 = getelementptr inbounds i8, ptr %.0579750, i64 5
  %153 = load i8, ptr %152, align 1, !tbaa !26
  store i8 %153, ptr %.0579.4, align 1, !tbaa !26
  %154 = getelementptr inbounds i8, ptr %.0521749, i64 6
  %.0579.5 = getelementptr inbounds i8, ptr %.0579750, i64 6
  %155 = load i8, ptr %154, align 1, !tbaa !26
  store i8 %155, ptr %.0579.5, align 1, !tbaa !26
  %156 = getelementptr inbounds i8, ptr %.0521749, i64 7
  %.0579.6 = getelementptr inbounds i8, ptr %.0579750, i64 7
  %157 = load i8, ptr %156, align 1, !tbaa !26
  store i8 %157, ptr %.0579.6, align 1, !tbaa !26
  %158 = add nuw nsw i64 %.0619748, 8
  %159 = getelementptr inbounds i8, ptr %.0521749, i64 8
  %.0579.7 = getelementptr inbounds i8, ptr %.0579750, i64 8
  %exitcond1002.not.7 = icmp eq i64 %158, %113
  br i1 %exitcond1002.not.7, label %.preheader696, label %.lr.ph752, !llvm.loop !45

.lr.ph760:                                        ; preds = %.lr.ph760.prol.loopexit, %.lr.ph760
  %.1522759 = phi ptr [ %178, %.lr.ph760 ], [ %.1522759.unr, %.lr.ph760.prol.loopexit ]
  %.0523758 = phi ptr [ %179, %.lr.ph760 ], [ %.0523758.unr, %.lr.ph760.prol.loopexit ]
  %.1580757 = phi ptr [ %180, %.lr.ph760 ], [ %.1580757.unr, %.lr.ph760.prol.loopexit ]
  %.1620756 = phi i64 [ %177, %.lr.ph760 ], [ %.1620756.unr, %.lr.ph760.prol.loopexit ]
  %160 = load i8, ptr %.1522759, align 1, !tbaa !26
  %161 = load i8, ptr %.0523758, align 1, !tbaa !26
  %.narrow687 = sub i8 %160, %161
  store i8 %.narrow687, ptr %.1580757, align 1, !tbaa !26
  %162 = getelementptr inbounds i8, ptr %.1522759, i64 1
  %163 = getelementptr inbounds i8, ptr %.0523758, i64 1
  %164 = getelementptr inbounds i8, ptr %.1580757, i64 1
  %165 = load i8, ptr %162, align 1, !tbaa !26
  %166 = load i8, ptr %163, align 1, !tbaa !26
  %.narrow687.1 = sub i8 %165, %166
  store i8 %.narrow687.1, ptr %164, align 1, !tbaa !26
  %167 = getelementptr inbounds i8, ptr %.1522759, i64 2
  %168 = getelementptr inbounds i8, ptr %.0523758, i64 2
  %169 = getelementptr inbounds i8, ptr %.1580757, i64 2
  %170 = load i8, ptr %167, align 1, !tbaa !26
  %171 = load i8, ptr %168, align 1, !tbaa !26
  %.narrow687.2 = sub i8 %170, %171
  store i8 %.narrow687.2, ptr %169, align 1, !tbaa !26
  %172 = getelementptr inbounds i8, ptr %.1522759, i64 3
  %173 = getelementptr inbounds i8, ptr %.0523758, i64 3
  %174 = getelementptr inbounds i8, ptr %.1580757, i64 3
  %175 = load i8, ptr %172, align 1, !tbaa !26
  %176 = load i8, ptr %173, align 1, !tbaa !26
  %.narrow687.3 = sub i8 %175, %176
  store i8 %.narrow687.3, ptr %174, align 1, !tbaa !26
  %177 = add nuw i64 %.1620756, 4
  %178 = getelementptr inbounds i8, ptr %.1522759, i64 4
  %179 = getelementptr inbounds i8, ptr %.0523758, i64 4
  %180 = getelementptr inbounds i8, ptr %.1580757, i64 4
  %exitcond1003.not.3 = icmp eq i64 %177, %6
  br i1 %exitcond1003.not.3, label %.sink.split, label %.lr.ph760, !llvm.loop !46

181:                                              ; preds = %107
  %182 = and i32 %20, 16
  %.not = icmp eq i32 %182, 0
  br i1 %.not, label %408, label %183

183:                                              ; preds = %181
  %184 = getelementptr inbounds i8, ptr %0, i64 920
  %185 = load i8, ptr %184, align 8, !tbaa !32
  %186 = icmp eq i8 %185, 2
  br i1 %186, label %187, label %247

187:                                              ; preds = %183
  %188 = and i32 %.0482, 65535
  %189 = lshr i32 %.0482, 10
  %190 = and i32 %189, 4194240
  %.not943 = icmp eq i8 %8, 0
  br i1 %.not943, label %._crit_edge715, label %.lr.ph714

.lr.ph714:                                        ; preds = %187
  %191 = getelementptr inbounds i8, ptr %0, i64 928
  %192 = load ptr, ptr %191, align 8, !tbaa !33
  %193 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count994 = zext i8 %8 to i64
  %xtraiter1574 = and i64 %wide.trip.count994, 1
  %194 = icmp eq i8 %8, 1
  br i1 %194, label %._crit_edge715.loopexit.unr-lcssa, label %.lr.ph714.new

.lr.ph714.new:                                    ; preds = %.lr.ph714
  %unroll_iter1578 = and i64 %wide.trip.count994, 254
  br label %195

195:                                              ; preds = %221, %.lr.ph714.new
  %indvars.iv991 = phi i64 [ 0, %.lr.ph714.new ], [ %indvars.iv.next992.1, %221 ]
  %.0600712 = phi i32 [ %188, %.lr.ph714.new ], [ %.1601.1, %221 ]
  %.0602711 = phi i32 [ %190, %.lr.ph714.new ], [ %.1603.1, %221 ]
  %niter1579 = phi i64 [ 0, %.lr.ph714.new ], [ %niter1579.next.1, %221 ]
  %196 = getelementptr inbounds i8, ptr %192, i64 %indvars.iv991
  %197 = load i8, ptr %196, align 1, !tbaa !26
  %198 = icmp eq i8 %197, 1
  br i1 %198, label %199, label %208

199:                                              ; preds = %195
  %200 = load ptr, ptr %193, align 8, !tbaa !47
  %201 = getelementptr inbounds i16, ptr %200, i64 %indvars.iv991
  %202 = load i16, ptr %201, align 2, !tbaa !35
  %203 = zext i16 %202 to i32
  %204 = mul i32 %.0600712, %203
  %205 = lshr i32 %204, 8
  %206 = mul i32 %.0602711, %203
  %207 = lshr i32 %206, 8
  br label %208

208:                                              ; preds = %195, %199
  %.1603 = phi i32 [ %207, %199 ], [ %.0602711, %195 ]
  %.1601 = phi i32 [ %205, %199 ], [ %.0600712, %195 ]
  %indvars.iv.next992 = or disjoint i64 %indvars.iv991, 1
  %209 = getelementptr inbounds i8, ptr %192, i64 %indvars.iv.next992
  %210 = load i8, ptr %209, align 1, !tbaa !26
  %211 = icmp eq i8 %210, 1
  br i1 %211, label %212, label %221

212:                                              ; preds = %208
  %213 = load ptr, ptr %193, align 8, !tbaa !47
  %214 = getelementptr inbounds i16, ptr %213, i64 %indvars.iv.next992
  %215 = load i16, ptr %214, align 2, !tbaa !35
  %216 = zext i16 %215 to i32
  %217 = mul i32 %.1601, %216
  %218 = lshr i32 %217, 8
  %219 = mul i32 %.1603, %216
  %220 = lshr i32 %219, 8
  br label %221

221:                                              ; preds = %212, %208
  %.1603.1 = phi i32 [ %220, %212 ], [ %.1603, %208 ]
  %.1601.1 = phi i32 [ %218, %212 ], [ %.1601, %208 ]
  %indvars.iv.next992.1 = add nuw nsw i64 %indvars.iv991, 2
  %niter1579.next.1 = add i64 %niter1579, 2
  %niter1579.ncmp.1 = icmp eq i64 %niter1579.next.1, %unroll_iter1578
  br i1 %niter1579.ncmp.1, label %._crit_edge715.loopexit.unr-lcssa, label %195, !llvm.loop !48

._crit_edge715.loopexit.unr-lcssa:                ; preds = %221, %.lr.ph714
  %.1603.lcssa.ph = phi i32 [ poison, %.lr.ph714 ], [ %.1603.1, %221 ]
  %.1601.lcssa.ph = phi i32 [ poison, %.lr.ph714 ], [ %.1601.1, %221 ]
  %indvars.iv991.unr = phi i64 [ 0, %.lr.ph714 ], [ %indvars.iv.next992.1, %221 ]
  %.0600712.unr = phi i32 [ %188, %.lr.ph714 ], [ %.1601.1, %221 ]
  %.0602711.unr = phi i32 [ %190, %.lr.ph714 ], [ %.1603.1, %221 ]
  %lcmp.mod1575.not = icmp eq i64 %xtraiter1574, 0
  br i1 %lcmp.mod1575.not, label %._crit_edge715, label %.epil.preheader1573

.epil.preheader1573:                              ; preds = %._crit_edge715.loopexit.unr-lcssa
  %222 = getelementptr inbounds i8, ptr %192, i64 %indvars.iv991.unr
  %223 = load i8, ptr %222, align 1, !tbaa !26
  %224 = icmp eq i8 %223, 1
  br i1 %224, label %225, label %._crit_edge715

225:                                              ; preds = %.epil.preheader1573
  %226 = load ptr, ptr %193, align 8, !tbaa !47
  %227 = getelementptr inbounds i16, ptr %226, i64 %indvars.iv991.unr
  %228 = load i16, ptr %227, align 2, !tbaa !35
  %229 = zext i16 %228 to i32
  %230 = mul i32 %.0600712.unr, %229
  %231 = lshr i32 %230, 8
  %232 = mul i32 %.0602711.unr, %229
  %233 = lshr i32 %232, 8
  br label %._crit_edge715

._crit_edge715:                                   ; preds = %._crit_edge715.loopexit.unr-lcssa, %225, %.epil.preheader1573, %187
  %.0602.lcssa = phi i32 [ %190, %187 ], [ %.1603.lcssa.ph, %._crit_edge715.loopexit.unr-lcssa ], [ %233, %225 ], [ %.0602711.unr, %.epil.preheader1573 ]
  %.0600.lcssa = phi i32 [ %188, %187 ], [ %.1601.lcssa.ph, %._crit_edge715.loopexit.unr-lcssa ], [ %231, %225 ], [ %.0600712.unr, %.epil.preheader1573 ]
  %234 = getelementptr inbounds i8, ptr %0, i64 960
  %235 = load ptr, ptr %234, align 8, !tbaa !49
  %236 = getelementptr inbounds i8, ptr %235, i64 2
  %237 = load i16, ptr %236, align 2, !tbaa !35
  %238 = zext i16 %237 to i32
  %239 = mul i32 %.0602.lcssa, %238
  %240 = icmp ugt i32 %239, 33553927
  br i1 %240, label %247, label %241

241:                                              ; preds = %._crit_edge715
  %242 = mul i32 %.0600.lcssa, %238
  %243 = lshr i32 %242, 3
  %244 = shl nuw i32 %239, 7
  %245 = and i32 %244, -1024
  %246 = add i32 %245, %243
  br label %247

247:                                              ; preds = %241, %._crit_edge715, %183
  %.1608 = phi i32 [ %.0482, %183 ], [ %246, %241 ], [ 2147483647, %._crit_edge715 ]
  %248 = getelementptr inbounds i8, ptr %18, i64 1
  %249 = getelementptr inbounds i8, ptr %0, i64 560
  %250 = load ptr, ptr %249, align 8, !tbaa !38
  %251 = zext nneg i32 %13 to i64
  %.0615718 = getelementptr i8, ptr %250, i64 1
  %.not944 = icmp eq i8 %10, 0
  br i1 %.not944, label %.preheader697, label %.lr.ph724.preheader

.lr.ph724.preheader:                              ; preds = %247
  %252 = ptrtoint ptr %250 to i64
  %min.iters.check1120 = icmp ult i8 %10, 57
  %253 = sub i64 %252, %19
  %diff.check = icmp ult i64 %253, 8
  %or.cond1532 = select i1 %min.iters.check1120, i1 true, i1 %diff.check
  br i1 %or.cond1532, label %.lr.ph724.preheader1561, label %vector.ph1121

.lr.ph724.preheader1561:                          ; preds = %middle.block1118, %.lr.ph724.preheader
  %.0615722.ph = phi ptr [ %.0615718, %.lr.ph724.preheader ], [ %ind.end1124, %middle.block1118 ]
  %.0605721.ph = phi i64 [ 0, %.lr.ph724.preheader ], [ %n.vec1123, %middle.block1118 ]
  %.0609720.ph = phi i32 [ 0, %.lr.ph724.preheader ], [ %313, %middle.block1118 ]
  %.0617719.ph = phi ptr [ %248, %.lr.ph724.preheader ], [ %ind.end1127, %middle.block1118 ]
  %xtraiter1580 = and i64 %251, 1
  %lcmp.mod1581.not = icmp eq i64 %xtraiter1580, 0
  br i1 %lcmp.mod1581.not, label %.lr.ph724.prol.loopexit, label %.lr.ph724.prol

.lr.ph724.prol:                                   ; preds = %.lr.ph724.preheader1561
  %254 = load i8, ptr %.0617719.ph, align 1, !tbaa !26
  store i8 %254, ptr %.0615722.ph, align 1, !tbaa !26
  %255 = zext i8 %254 to i32
  %256 = sub nuw nsw i32 256, %255
  %257 = icmp slt i8 %254, 0
  %258 = select i1 %257, i32 %256, i32 %255
  %259 = add i32 %258, %.0609720.ph
  %260 = or disjoint i64 %.0605721.ph, 1
  %261 = getelementptr inbounds i8, ptr %.0617719.ph, i64 1
  %.0615.prol = getelementptr inbounds i8, ptr %.0615722.ph, i64 1
  br label %.lr.ph724.prol.loopexit

.lr.ph724.prol.loopexit:                          ; preds = %.lr.ph724.prol, %.lr.ph724.preheader1561
  %.lcssa1564.unr = phi i32 [ poison, %.lr.ph724.preheader1561 ], [ %259, %.lr.ph724.prol ]
  %.lcssa1563.unr = phi ptr [ poison, %.lr.ph724.preheader1561 ], [ %261, %.lr.ph724.prol ]
  %.0615.lcssa1562.unr = phi ptr [ poison, %.lr.ph724.preheader1561 ], [ %.0615.prol, %.lr.ph724.prol ]
  %.0615722.unr = phi ptr [ %.0615722.ph, %.lr.ph724.preheader1561 ], [ %.0615.prol, %.lr.ph724.prol ]
  %.0605721.unr = phi i64 [ %.0605721.ph, %.lr.ph724.preheader1561 ], [ %260, %.lr.ph724.prol ]
  %.0609720.unr = phi i32 [ %.0609720.ph, %.lr.ph724.preheader1561 ], [ %259, %.lr.ph724.prol ]
  %.0617719.unr = phi ptr [ %.0617719.ph, %.lr.ph724.preheader1561 ], [ %261, %.lr.ph724.prol ]
  %262 = add nsw i64 %251, -1
  %263 = icmp eq i64 %.0605721.ph, %262
  br i1 %263, label %.preheader697, label %.lr.ph724

vector.ph1121:                                    ; preds = %.lr.ph724.preheader
  %n.vec1123 = and i64 %251, 56
  %ind.end1124 = getelementptr i8, ptr %.0615718, i64 %n.vec1123
  %ind.end1127 = getelementptr i8, ptr %248, i64 %n.vec1123
  %264 = getelementptr i8, ptr %18, i64 5
  %wide.load1137 = load <4 x i8>, ptr %248, align 1, !tbaa !26
  %wide.load1138 = load <4 x i8>, ptr %264, align 1, !tbaa !26
  %265 = getelementptr i8, ptr %250, i64 5
  store <4 x i8> %wide.load1137, ptr %.0615718, align 1, !tbaa !26
  store <4 x i8> %wide.load1138, ptr %265, align 1, !tbaa !26
  %266 = zext <4 x i8> %wide.load1137 to <4 x i32>
  %267 = zext <4 x i8> %wide.load1138 to <4 x i32>
  %268 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %266
  %269 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %267
  %270 = icmp slt <4 x i8> %wide.load1137, zeroinitializer
  %271 = icmp slt <4 x i8> %wide.load1138, zeroinitializer
  %272 = select <4 x i1> %270, <4 x i32> %268, <4 x i32> %266
  %273 = select <4 x i1> %271, <4 x i32> %269, <4 x i32> %267
  %274 = icmp eq i64 %n.vec1123, 8
  br i1 %274, label %middle.block1118, label %vector.body1129.1, !llvm.loop !50

vector.body1129.1:                                ; preds = %vector.ph1121
  %next.gep1133.1 = getelementptr i8, ptr %250, i64 9
  %next.gep1135.1 = getelementptr i8, ptr %18, i64 9
  %275 = getelementptr i8, ptr %18, i64 13
  %wide.load1137.1 = load <4 x i8>, ptr %next.gep1135.1, align 1, !tbaa !26
  %wide.load1138.1 = load <4 x i8>, ptr %275, align 1, !tbaa !26
  %276 = getelementptr i8, ptr %250, i64 13
  store <4 x i8> %wide.load1137.1, ptr %next.gep1133.1, align 1, !tbaa !26
  store <4 x i8> %wide.load1138.1, ptr %276, align 1, !tbaa !26
  %277 = zext <4 x i8> %wide.load1137.1 to <4 x i32>
  %278 = zext <4 x i8> %wide.load1138.1 to <4 x i32>
  %279 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %277
  %280 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %278
  %281 = icmp slt <4 x i8> %wide.load1137.1, zeroinitializer
  %282 = icmp slt <4 x i8> %wide.load1138.1, zeroinitializer
  %283 = select <4 x i1> %281, <4 x i32> %279, <4 x i32> %277
  %284 = select <4 x i1> %282, <4 x i32> %280, <4 x i32> %278
  %285 = add nuw nsw <4 x i32> %283, %272
  %286 = add nuw nsw <4 x i32> %284, %273
  %287 = icmp eq i64 %n.vec1123, 16
  br i1 %287, label %middle.block1118, label %vector.body1129.2, !llvm.loop !50

vector.body1129.2:                                ; preds = %vector.body1129.1
  %next.gep1133.2 = getelementptr i8, ptr %250, i64 17
  %next.gep1135.2 = getelementptr i8, ptr %18, i64 17
  %288 = getelementptr i8, ptr %18, i64 21
  %wide.load1137.2 = load <4 x i8>, ptr %next.gep1135.2, align 1, !tbaa !26
  %wide.load1138.2 = load <4 x i8>, ptr %288, align 1, !tbaa !26
  %289 = getelementptr i8, ptr %250, i64 21
  store <4 x i8> %wide.load1137.2, ptr %next.gep1133.2, align 1, !tbaa !26
  store <4 x i8> %wide.load1138.2, ptr %289, align 1, !tbaa !26
  %290 = zext <4 x i8> %wide.load1137.2 to <4 x i32>
  %291 = zext <4 x i8> %wide.load1138.2 to <4 x i32>
  %292 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %290
  %293 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %291
  %294 = icmp slt <4 x i8> %wide.load1137.2, zeroinitializer
  %295 = icmp slt <4 x i8> %wide.load1138.2, zeroinitializer
  %296 = select <4 x i1> %294, <4 x i32> %292, <4 x i32> %290
  %297 = select <4 x i1> %295, <4 x i32> %293, <4 x i32> %291
  %298 = add nuw nsw <4 x i32> %296, %285
  %299 = add nuw nsw <4 x i32> %297, %286
  %300 = icmp eq i64 %n.vec1123, 24
  br i1 %300, label %middle.block1118, label %vector.body1129.3, !llvm.loop !50

vector.body1129.3:                                ; preds = %vector.body1129.2
  %next.gep1133.3 = getelementptr i8, ptr %250, i64 25
  %next.gep1135.3 = getelementptr i8, ptr %18, i64 25
  %301 = getelementptr i8, ptr %18, i64 29
  %wide.load1137.3 = load <4 x i8>, ptr %next.gep1135.3, align 1, !tbaa !26
  %wide.load1138.3 = load <4 x i8>, ptr %301, align 1, !tbaa !26
  %302 = getelementptr i8, ptr %250, i64 29
  store <4 x i8> %wide.load1137.3, ptr %next.gep1133.3, align 1, !tbaa !26
  store <4 x i8> %wide.load1138.3, ptr %302, align 1, !tbaa !26
  %303 = zext <4 x i8> %wide.load1137.3 to <4 x i32>
  %304 = zext <4 x i8> %wide.load1138.3 to <4 x i32>
  %305 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %303
  %306 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %304
  %307 = icmp slt <4 x i8> %wide.load1137.3, zeroinitializer
  %308 = icmp slt <4 x i8> %wide.load1138.3, zeroinitializer
  %309 = select <4 x i1> %307, <4 x i32> %305, <4 x i32> %303
  %310 = select <4 x i1> %308, <4 x i32> %306, <4 x i32> %304
  %311 = add nuw nsw <4 x i32> %309, %298
  %312 = add nuw nsw <4 x i32> %310, %299
  br label %middle.block1118

middle.block1118:                                 ; preds = %vector.body1129.3, %vector.body1129.2, %vector.body1129.1, %vector.ph1121
  %.lcssa1566 = phi <4 x i32> [ %272, %vector.ph1121 ], [ %285, %vector.body1129.1 ], [ %298, %vector.body1129.2 ], [ %311, %vector.body1129.3 ]
  %.lcssa1565 = phi <4 x i32> [ %273, %vector.ph1121 ], [ %286, %vector.body1129.1 ], [ %299, %vector.body1129.2 ], [ %312, %vector.body1129.3 ]
  %bin.rdx1140 = add nsw <4 x i32> %.lcssa1565, %.lcssa1566
  %313 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx1140)
  %cmp.n1141 = icmp eq i64 %n.vec1123, %251
  br i1 %cmp.n1141, label %.preheader697, label %.lr.ph724.preheader1561

.preheader697:                                    ; preds = %.lr.ph724.prol.loopexit, %.lr.ph724, %middle.block1118, %247
  %.0617.lcssa = phi ptr [ %248, %247 ], [ %ind.end1127, %middle.block1118 ], [ %.lcssa1563.unr, %.lr.ph724.prol.loopexit ], [ %329, %.lr.ph724 ]
  %.0609.lcssa = phi i32 [ 0, %247 ], [ %313, %middle.block1118 ], [ %.lcssa1564.unr, %.lr.ph724.prol.loopexit ], [ %327, %.lr.ph724 ]
  %.0605.lcssa = phi i64 [ 0, %247 ], [ %251, %middle.block1118 ], [ %251, %.lr.ph724 ], [ %251, %.lr.ph724.prol.loopexit ]
  %.0615.lcssa = phi ptr [ %.0615718, %247 ], [ %ind.end1124, %middle.block1118 ], [ %.0615.lcssa1562.unr, %.lr.ph724.prol.loopexit ], [ %.0615.1, %.lr.ph724 ]
  %314 = icmp ult i64 %.0605.lcssa, %6
  br i1 %314, label %.lr.ph734, label %._crit_edge735

.lr.ph724:                                        ; preds = %.lr.ph724.prol.loopexit, %.lr.ph724
  %.0615722 = phi ptr [ %.0615.1, %.lr.ph724 ], [ %.0615722.unr, %.lr.ph724.prol.loopexit ]
  %.0605721 = phi i64 [ %328, %.lr.ph724 ], [ %.0605721.unr, %.lr.ph724.prol.loopexit ]
  %.0609720 = phi i32 [ %327, %.lr.ph724 ], [ %.0609720.unr, %.lr.ph724.prol.loopexit ]
  %.0617719 = phi ptr [ %329, %.lr.ph724 ], [ %.0617719.unr, %.lr.ph724.prol.loopexit ]
  %315 = load i8, ptr %.0617719, align 1, !tbaa !26
  store i8 %315, ptr %.0615722, align 1, !tbaa !26
  %316 = zext i8 %315 to i32
  %317 = sub nuw nsw i32 256, %316
  %318 = icmp slt i8 %315, 0
  %319 = select i1 %318, i32 %317, i32 %316
  %320 = add i32 %319, %.0609720
  %321 = getelementptr inbounds i8, ptr %.0617719, i64 1
  %.0615 = getelementptr inbounds i8, ptr %.0615722, i64 1
  %322 = load i8, ptr %321, align 1, !tbaa !26
  store i8 %322, ptr %.0615, align 1, !tbaa !26
  %323 = zext i8 %322 to i32
  %324 = sub nuw nsw i32 256, %323
  %325 = icmp slt i8 %322, 0
  %326 = select i1 %325, i32 %324, i32 %323
  %327 = add i32 %326, %320
  %328 = add nuw nsw i64 %.0605721, 2
  %329 = getelementptr inbounds i8, ptr %.0617719, i64 2
  %.0615.1 = getelementptr inbounds i8, ptr %.0615722, i64 2
  %exitcond996.not.1 = icmp eq i64 %328, %251
  br i1 %exitcond996.not.1, label %.preheader697, label %.lr.ph724, !llvm.loop !51

.lr.ph734:                                        ; preds = %.preheader697, %.lr.ph734
  %.1606733 = phi i64 [ %338, %.lr.ph734 ], [ %.0605.lcssa, %.preheader697 ]
  %.1610732 = phi i32 [ %336, %.lr.ph734 ], [ %.0609.lcssa, %.preheader697 ]
  %.0614731 = phi ptr [ %340, %.lr.ph734 ], [ %248, %.preheader697 ]
  %.1616730 = phi ptr [ %341, %.lr.ph734 ], [ %.0615.lcssa, %.preheader697 ]
  %.1618729 = phi ptr [ %339, %.lr.ph734 ], [ %.0617.lcssa, %.preheader697 ]
  %330 = load i8, ptr %.1618729, align 1, !tbaa !26
  %331 = load i8, ptr %.0614731, align 1, !tbaa !26
  %.narrow = sub i8 %330, %331
  store i8 %.narrow, ptr %.1616730, align 1, !tbaa !26
  %332 = zext i8 %.narrow to i32
  %333 = sub nuw nsw i32 256, %332
  %334 = icmp slt i8 %.narrow, 0
  %335 = select i1 %334, i32 %333, i32 %332
  %336 = add i32 %335, %.1610732
  %337 = icmp ule i32 %336, %.1608
  %338 = add nuw i64 %.1606733, 1
  %339 = getelementptr inbounds i8, ptr %.1618729, i64 1
  %340 = getelementptr inbounds i8, ptr %.0614731, i64 1
  %341 = getelementptr inbounds i8, ptr %.1616730, i64 1
  %342 = icmp ult i64 %338, %6
  %or.cond927 = select i1 %337, i1 %342, i1 false
  br i1 %or.cond927, label %.lr.ph734, label %._crit_edge735, !llvm.loop !52

._crit_edge735:                                   ; preds = %.lr.ph734, %.preheader697
  %.2611 = phi i32 [ %.0609.lcssa, %.preheader697 ], [ %336, %.lr.ph734 ]
  %343 = load i8, ptr %184, align 8, !tbaa !32
  %344 = icmp eq i8 %343, 2
  br i1 %344, label %345, label %405

345:                                              ; preds = %._crit_edge735
  %346 = and i32 %.2611, 65535
  %347 = lshr i32 %.2611, 10
  %348 = and i32 %347, 4194240
  %.not945 = icmp eq i8 %8, 0
  br i1 %.not945, label %._crit_edge744, label %.lr.ph743

.lr.ph743:                                        ; preds = %345
  %349 = getelementptr inbounds i8, ptr %0, i64 928
  %350 = load ptr, ptr %349, align 8, !tbaa !33
  %351 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count1000 = zext i8 %8 to i64
  %xtraiter1583 = and i64 %wide.trip.count1000, 1
  %352 = icmp eq i8 %8, 1
  br i1 %352, label %._crit_edge744.loopexit.unr-lcssa, label %.lr.ph743.new

.lr.ph743.new:                                    ; preds = %.lr.ph743
  %unroll_iter1587 = and i64 %wide.trip.count1000, 254
  br label %353

353:                                              ; preds = %379, %.lr.ph743.new
  %indvars.iv997 = phi i64 [ 0, %.lr.ph743.new ], [ %indvars.iv.next998.1, %379 ]
  %.0595741 = phi i32 [ %346, %.lr.ph743.new ], [ %.1596.1, %379 ]
  %.0597740 = phi i32 [ %348, %.lr.ph743.new ], [ %.1598.1, %379 ]
  %niter1588 = phi i64 [ 0, %.lr.ph743.new ], [ %niter1588.next.1, %379 ]
  %354 = getelementptr inbounds i8, ptr %350, i64 %indvars.iv997
  %355 = load i8, ptr %354, align 1, !tbaa !26
  %356 = icmp eq i8 %355, 1
  br i1 %356, label %357, label %366

357:                                              ; preds = %353
  %358 = load ptr, ptr %351, align 8, !tbaa !47
  %359 = getelementptr inbounds i16, ptr %358, i64 %indvars.iv997
  %360 = load i16, ptr %359, align 2, !tbaa !35
  %361 = zext i16 %360 to i32
  %362 = mul i32 %.0595741, %361
  %363 = lshr i32 %362, 8
  %364 = mul i32 %.0597740, %361
  %365 = lshr i32 %364, 8
  br label %366

366:                                              ; preds = %353, %357
  %.1598 = phi i32 [ %365, %357 ], [ %.0597740, %353 ]
  %.1596 = phi i32 [ %363, %357 ], [ %.0595741, %353 ]
  %indvars.iv.next998 = or disjoint i64 %indvars.iv997, 1
  %367 = getelementptr inbounds i8, ptr %350, i64 %indvars.iv.next998
  %368 = load i8, ptr %367, align 1, !tbaa !26
  %369 = icmp eq i8 %368, 1
  br i1 %369, label %370, label %379

370:                                              ; preds = %366
  %371 = load ptr, ptr %351, align 8, !tbaa !47
  %372 = getelementptr inbounds i16, ptr %371, i64 %indvars.iv.next998
  %373 = load i16, ptr %372, align 2, !tbaa !35
  %374 = zext i16 %373 to i32
  %375 = mul i32 %.1596, %374
  %376 = lshr i32 %375, 8
  %377 = mul i32 %.1598, %374
  %378 = lshr i32 %377, 8
  br label %379

379:                                              ; preds = %370, %366
  %.1598.1 = phi i32 [ %378, %370 ], [ %.1598, %366 ]
  %.1596.1 = phi i32 [ %376, %370 ], [ %.1596, %366 ]
  %indvars.iv.next998.1 = add nuw nsw i64 %indvars.iv997, 2
  %niter1588.next.1 = add i64 %niter1588, 2
  %niter1588.ncmp.1 = icmp eq i64 %niter1588.next.1, %unroll_iter1587
  br i1 %niter1588.ncmp.1, label %._crit_edge744.loopexit.unr-lcssa, label %353, !llvm.loop !53

._crit_edge744.loopexit.unr-lcssa:                ; preds = %379, %.lr.ph743
  %.1598.lcssa.ph = phi i32 [ poison, %.lr.ph743 ], [ %.1598.1, %379 ]
  %.1596.lcssa.ph = phi i32 [ poison, %.lr.ph743 ], [ %.1596.1, %379 ]
  %indvars.iv997.unr = phi i64 [ 0, %.lr.ph743 ], [ %indvars.iv.next998.1, %379 ]
  %.0595741.unr = phi i32 [ %346, %.lr.ph743 ], [ %.1596.1, %379 ]
  %.0597740.unr = phi i32 [ %348, %.lr.ph743 ], [ %.1598.1, %379 ]
  %lcmp.mod1584.not = icmp eq i64 %xtraiter1583, 0
  br i1 %lcmp.mod1584.not, label %._crit_edge744, label %.epil.preheader1582

.epil.preheader1582:                              ; preds = %._crit_edge744.loopexit.unr-lcssa
  %380 = getelementptr inbounds i8, ptr %350, i64 %indvars.iv997.unr
  %381 = load i8, ptr %380, align 1, !tbaa !26
  %382 = icmp eq i8 %381, 1
  br i1 %382, label %383, label %._crit_edge744

383:                                              ; preds = %.epil.preheader1582
  %384 = load ptr, ptr %351, align 8, !tbaa !47
  %385 = getelementptr inbounds i16, ptr %384, i64 %indvars.iv997.unr
  %386 = load i16, ptr %385, align 2, !tbaa !35
  %387 = zext i16 %386 to i32
  %388 = mul i32 %.0595741.unr, %387
  %389 = lshr i32 %388, 8
  %390 = mul i32 %.0597740.unr, %387
  %391 = lshr i32 %390, 8
  br label %._crit_edge744

._crit_edge744:                                   ; preds = %._crit_edge744.loopexit.unr-lcssa, %383, %.epil.preheader1582, %345
  %.0597.lcssa = phi i32 [ %348, %345 ], [ %.1598.lcssa.ph, %._crit_edge744.loopexit.unr-lcssa ], [ %391, %383 ], [ %.0597740.unr, %.epil.preheader1582 ]
  %.0595.lcssa = phi i32 [ %346, %345 ], [ %.1596.lcssa.ph, %._crit_edge744.loopexit.unr-lcssa ], [ %389, %383 ], [ %.0595741.unr, %.epil.preheader1582 ]
  %392 = getelementptr inbounds i8, ptr %0, i64 960
  %393 = load ptr, ptr %392, align 8, !tbaa !49
  %394 = getelementptr inbounds i8, ptr %393, i64 2
  %395 = load i16, ptr %394, align 2, !tbaa !35
  %396 = zext i16 %395 to i32
  %397 = mul i32 %.0597.lcssa, %396
  %398 = icmp ugt i32 %397, 33553927
  br i1 %398, label %405, label %399

399:                                              ; preds = %._crit_edge744
  %400 = mul i32 %.0595.lcssa, %396
  %401 = lshr i32 %400, 3
  %402 = shl nuw i32 %397, 7
  %403 = and i32 %402, -1024
  %404 = add i32 %403, %401
  br label %405

405:                                              ; preds = %399, %._crit_edge744, %._crit_edge735
  %.4613 = phi i32 [ %.2611, %._crit_edge735 ], [ %404, %399 ], [ 2147483647, %._crit_edge744 ]
  %406 = icmp ult i32 %.4613, %.0482
  br i1 %406, label %.sink.split, label %408

.sink.split:                                      ; preds = %.lr.ph760.prol.loopexit, %.lr.ph760, %middle.block1168, %vec.epilog.middle.block, %405, %.preheader696
  %.sink = phi ptr [ %111, %.preheader696 ], [ %249, %405 ], [ %111, %vec.epilog.middle.block ], [ %111, %middle.block1168 ], [ %111, %.lr.ph760 ], [ %111, %.lr.ph760.prol.loopexit ]
  %.2484.ph = phi i32 [ %.0482, %.preheader696 ], [ %.4613, %405 ], [ %.0482, %vec.epilog.middle.block ], [ %.0482, %middle.block1168 ], [ %.0482, %.lr.ph760 ], [ %.0482, %.lr.ph760.prol.loopexit ]
  %407 = load ptr, ptr %.sink, align 8, !tbaa !38
  br label %408

408:                                              ; preds = %.sink.split, %405, %181
  %.2484 = phi i32 [ %.0482, %181 ], [ %.0482, %405 ], [ %.2484.ph, %.sink.split ]
  %.1481 = phi ptr [ %18, %181 ], [ %18, %405 ], [ %407, %.sink.split ]
  %409 = icmp eq i8 %4, 32
  br i1 %409, label %410, label %441

410:                                              ; preds = %408
  %411 = getelementptr inbounds i8, ptr %0, i64 568
  %412 = load ptr, ptr %411, align 8, !tbaa !54
  %413 = ptrtoint ptr %412 to i64
  %.not950 = icmp eq i64 %6, 0
  br i1 %.not950, label %.thread1059, label %iter.check1220

iter.check1220:                                   ; preds = %410
  %min.iters.check1218 = icmp ult i64 %6, 8
  br i1 %min.iters.check1218, label %.lr.ph797.preheader, label %vector.memcheck1212

vector.memcheck1212:                              ; preds = %iter.check1220
  %414 = sub i64 %413, %19
  %diff.check1213 = icmp ult i64 %414, 32
  %415 = sub i64 %413, %16
  %diff.check1214 = icmp ult i64 %415, 32
  %conflict.rdx1215 = or i1 %diff.check1213, %diff.check1214
  br i1 %conflict.rdx1215, label %.lr.ph797.preheader, label %vector.main.loop.iter.check1222

vector.main.loop.iter.check1222:                  ; preds = %vector.memcheck1212
  %min.iters.check1221 = icmp ult i64 %6, 32
  br i1 %min.iters.check1221, label %vec.epilog.ph1242, label %vector.ph1223

vector.ph1223:                                    ; preds = %vector.main.loop.iter.check1222
  %n.vec1225 = and i64 %6, -32
  br label %vector.body1226

vector.body1226:                                  ; preds = %vector.body1226, %vector.ph1223
  %index1227 = phi i64 [ 0, %vector.ph1223 ], [ %index.next1238, %vector.body1226 ]
  %next.gep1228 = getelementptr i8, ptr %15, i64 %index1227
  %next.gep1230 = getelementptr i8, ptr %412, i64 %index1227
  %next.gep1232 = getelementptr i8, ptr %18, i64 %index1227
  %416 = getelementptr inbounds i8, ptr %next.gep1230, i64 1
  %417 = getelementptr inbounds i8, ptr %next.gep1228, i64 1
  %418 = getelementptr inbounds i8, ptr %next.gep1232, i64 1
  %419 = getelementptr inbounds i8, ptr %next.gep1232, i64 17
  %wide.load1234 = load <16 x i8>, ptr %418, align 1, !tbaa !26
  %wide.load1235 = load <16 x i8>, ptr %419, align 1, !tbaa !26
  %420 = getelementptr inbounds i8, ptr %next.gep1228, i64 17
  %wide.load1236 = load <16 x i8>, ptr %417, align 1, !tbaa !26
  %wide.load1237 = load <16 x i8>, ptr %420, align 1, !tbaa !26
  %421 = sub <16 x i8> %wide.load1234, %wide.load1236
  %422 = sub <16 x i8> %wide.load1235, %wide.load1237
  %423 = getelementptr inbounds i8, ptr %next.gep1230, i64 17
  store <16 x i8> %421, ptr %416, align 1, !tbaa !26
  store <16 x i8> %422, ptr %423, align 1, !tbaa !26
  %index.next1238 = add nuw i64 %index1227, 32
  %424 = icmp eq i64 %index.next1238, %n.vec1225
  br i1 %424, label %middle.block1216, label %vector.body1226, !llvm.loop !55

middle.block1216:                                 ; preds = %vector.body1226
  %cmp.n1239 = icmp eq i64 %6, %n.vec1225
  br i1 %cmp.n1239, label %._crit_edge798.sink.split, label %vec.epilog.iter.check1243

vec.epilog.iter.check1243:                        ; preds = %middle.block1216
  %ind.end1257 = getelementptr i8, ptr %18, i64 %n.vec1225
  %ind.end1254 = getelementptr i8, ptr %412, i64 %n.vec1225
  %ind.end1251 = getelementptr i8, ptr %15, i64 %n.vec1225
  %n.vec.remaining1244 = and i64 %6, 24
  %min.epilog.iters.check1245 = icmp eq i64 %n.vec.remaining1244, 0
  br i1 %min.epilog.iters.check1245, label %.lr.ph797.preheader, label %vec.epilog.ph1242

vec.epilog.ph1242:                                ; preds = %vector.main.loop.iter.check1222, %vec.epilog.iter.check1243
  %vec.epilog.resume.val1246 = phi i64 [ %n.vec1225, %vec.epilog.iter.check1243 ], [ 0, %vector.main.loop.iter.check1222 ]
  %n.vec1248 = and i64 %6, -8
  %ind.end1250 = getelementptr i8, ptr %15, i64 %n.vec1248
  %ind.end1253 = getelementptr i8, ptr %412, i64 %n.vec1248
  %ind.end1256 = getelementptr i8, ptr %18, i64 %n.vec1248
  %invariant.gep = getelementptr i8, ptr %412, i64 1
  %invariant.gep1686 = getelementptr i8, ptr %15, i64 1
  %invariant.gep1688 = getelementptr i8, ptr %18, i64 1
  br label %vec.epilog.vector.body1259

vec.epilog.vector.body1259:                       ; preds = %vec.epilog.vector.body1259, %vec.epilog.ph1242
  %index1260 = phi i64 [ %vec.epilog.resume.val1246, %vec.epilog.ph1242 ], [ %index.next1266, %vec.epilog.vector.body1259 ]
  %gep = getelementptr i8, ptr %invariant.gep, i64 %index1260
  %gep1687 = getelementptr i8, ptr %invariant.gep1686, i64 %index1260
  %gep1689 = getelementptr i8, ptr %invariant.gep1688, i64 %index1260
  %wide.load1264 = load <8 x i8>, ptr %gep1689, align 1, !tbaa !26
  %wide.load1265 = load <8 x i8>, ptr %gep1687, align 1, !tbaa !26
  %425 = sub <8 x i8> %wide.load1264, %wide.load1265
  store <8 x i8> %425, ptr %gep, align 1, !tbaa !26
  %index.next1266 = add nuw i64 %index1260, 8
  %426 = icmp eq i64 %index.next1266, %n.vec1248
  br i1 %426, label %vec.epilog.middle.block1240, label %vec.epilog.vector.body1259, !llvm.loop !56

vec.epilog.middle.block1240:                      ; preds = %vec.epilog.vector.body1259
  %cmp.n1267 = icmp eq i64 %6, %n.vec1248
  br i1 %cmp.n1267, label %._crit_edge798.sink.split, label %.lr.ph797.preheader

.lr.ph797.preheader:                              ; preds = %vec.epilog.middle.block1240, %vector.memcheck1212, %iter.check1220, %vec.epilog.iter.check1243
  %.0591795.ph = phi i64 [ 0, %iter.check1220 ], [ 0, %vector.memcheck1212 ], [ %n.vec1225, %vec.epilog.iter.check1243 ], [ %n.vec1248, %vec.epilog.middle.block1240 ]
  %.pn684794.ph = phi ptr [ %15, %iter.check1220 ], [ %15, %vector.memcheck1212 ], [ %ind.end1251, %vec.epilog.iter.check1243 ], [ %ind.end1250, %vec.epilog.middle.block1240 ]
  %.pn685793.ph = phi ptr [ %412, %iter.check1220 ], [ %412, %vector.memcheck1212 ], [ %ind.end1254, %vec.epilog.iter.check1243 ], [ %ind.end1253, %vec.epilog.middle.block1240 ]
  %.pn683792.ph = phi ptr [ %18, %iter.check1220 ], [ %18, %vector.memcheck1212 ], [ %ind.end1257, %vec.epilog.iter.check1243 ], [ %ind.end1256, %vec.epilog.middle.block1240 ]
  %xtraiter1608 = and i64 %6, 3
  %lcmp.mod1609.not = icmp eq i64 %xtraiter1608, 0
  br i1 %lcmp.mod1609.not, label %.lr.ph797.prol.loopexit, label %.lr.ph797.prol

.lr.ph797.prol:                                   ; preds = %.lr.ph797.preheader, %.lr.ph797.prol
  %.0591795.prol = phi i64 [ %429, %.lr.ph797.prol ], [ %.0591795.ph, %.lr.ph797.preheader ]
  %.pn684794.prol = phi ptr [ %.0592.prol, %.lr.ph797.prol ], [ %.pn684794.ph, %.lr.ph797.preheader ]
  %.pn685793.prol = phi ptr [ %.0593.prol, %.lr.ph797.prol ], [ %.pn685793.ph, %.lr.ph797.preheader ]
  %.pn683792.prol = phi ptr [ %.0594.prol, %.lr.ph797.prol ], [ %.pn683792.ph, %.lr.ph797.preheader ]
  %prol.iter1610 = phi i64 [ %prol.iter1610.next, %.lr.ph797.prol ], [ 0, %.lr.ph797.preheader ]
  %.0593.prol = getelementptr inbounds i8, ptr %.pn685793.prol, i64 1
  %.0592.prol = getelementptr inbounds i8, ptr %.pn684794.prol, i64 1
  %.0594.prol = getelementptr inbounds i8, ptr %.pn683792.prol, i64 1
  %427 = load i8, ptr %.0594.prol, align 1, !tbaa !26
  %428 = load i8, ptr %.0592.prol, align 1, !tbaa !26
  %.narrow682.prol = sub i8 %427, %428
  store i8 %.narrow682.prol, ptr %.0593.prol, align 1, !tbaa !26
  %429 = add nuw i64 %.0591795.prol, 1
  %prol.iter1610.next = add i64 %prol.iter1610, 1
  %prol.iter1610.cmp.not = icmp eq i64 %prol.iter1610.next, %xtraiter1608
  br i1 %prol.iter1610.cmp.not, label %.lr.ph797.prol.loopexit, label %.lr.ph797.prol, !llvm.loop !57

.lr.ph797.prol.loopexit:                          ; preds = %.lr.ph797.prol, %.lr.ph797.preheader
  %.0591795.unr = phi i64 [ %.0591795.ph, %.lr.ph797.preheader ], [ %429, %.lr.ph797.prol ]
  %.pn684794.unr = phi ptr [ %.pn684794.ph, %.lr.ph797.preheader ], [ %.0592.prol, %.lr.ph797.prol ]
  %.pn685793.unr = phi ptr [ %.pn685793.ph, %.lr.ph797.preheader ], [ %.0593.prol, %.lr.ph797.prol ]
  %.pn683792.unr = phi ptr [ %.pn683792.ph, %.lr.ph797.preheader ], [ %.0594.prol, %.lr.ph797.prol ]
  %430 = sub i64 %.0591795.ph, %6
  %431 = icmp ugt i64 %430, -4
  br i1 %431, label %._crit_edge798.sink.split, label %.lr.ph797

.lr.ph797:                                        ; preds = %.lr.ph797.prol.loopexit, %.lr.ph797
  %.0591795 = phi i64 [ %440, %.lr.ph797 ], [ %.0591795.unr, %.lr.ph797.prol.loopexit ]
  %.pn684794 = phi ptr [ %.0592.3, %.lr.ph797 ], [ %.pn684794.unr, %.lr.ph797.prol.loopexit ]
  %.pn685793 = phi ptr [ %.0593.3, %.lr.ph797 ], [ %.pn685793.unr, %.lr.ph797.prol.loopexit ]
  %.pn683792 = phi ptr [ %.0594.3, %.lr.ph797 ], [ %.pn683792.unr, %.lr.ph797.prol.loopexit ]
  %.0593 = getelementptr inbounds i8, ptr %.pn685793, i64 1
  %.0592 = getelementptr inbounds i8, ptr %.pn684794, i64 1
  %.0594 = getelementptr inbounds i8, ptr %.pn683792, i64 1
  %432 = load i8, ptr %.0594, align 1, !tbaa !26
  %433 = load i8, ptr %.0592, align 1, !tbaa !26
  %.narrow682 = sub i8 %432, %433
  store i8 %.narrow682, ptr %.0593, align 1, !tbaa !26
  %.0593.1 = getelementptr inbounds i8, ptr %.pn685793, i64 2
  %.0592.1 = getelementptr inbounds i8, ptr %.pn684794, i64 2
  %.0594.1 = getelementptr inbounds i8, ptr %.pn683792, i64 2
  %434 = load i8, ptr %.0594.1, align 1, !tbaa !26
  %435 = load i8, ptr %.0592.1, align 1, !tbaa !26
  %.narrow682.1 = sub i8 %434, %435
  store i8 %.narrow682.1, ptr %.0593.1, align 1, !tbaa !26
  %.0593.2 = getelementptr inbounds i8, ptr %.pn685793, i64 3
  %.0592.2 = getelementptr inbounds i8, ptr %.pn684794, i64 3
  %.0594.2 = getelementptr inbounds i8, ptr %.pn683792, i64 3
  %436 = load i8, ptr %.0594.2, align 1, !tbaa !26
  %437 = load i8, ptr %.0592.2, align 1, !tbaa !26
  %.narrow682.2 = sub i8 %436, %437
  store i8 %.narrow682.2, ptr %.0593.2, align 1, !tbaa !26
  %.0593.3 = getelementptr inbounds i8, ptr %.pn685793, i64 4
  %.0592.3 = getelementptr inbounds i8, ptr %.pn684794, i64 4
  %.0594.3 = getelementptr inbounds i8, ptr %.pn683792, i64 4
  %438 = load i8, ptr %.0594.3, align 1, !tbaa !26
  %439 = load i8, ptr %.0592.3, align 1, !tbaa !26
  %.narrow682.3 = sub i8 %438, %439
  store i8 %.narrow682.3, ptr %.0593.3, align 1, !tbaa !26
  %440 = add nuw i64 %.0591795, 4
  %exitcond1015.not.3 = icmp eq i64 %440, %6
  br i1 %exitcond1015.not.3, label %._crit_edge798.sink.split, label %.lr.ph797, !llvm.loop !58

441:                                              ; preds = %408
  %442 = and i32 %20, 32
  %.not646 = icmp eq i32 %442, 0
  br i1 %.not646, label %._crit_edge798, label %443

443:                                              ; preds = %441
  %444 = getelementptr inbounds i8, ptr %0, i64 920
  %445 = load i8, ptr %444, align 8, !tbaa !32
  %446 = icmp eq i8 %445, 2
  br i1 %446, label %447, label %507

447:                                              ; preds = %443
  %448 = and i32 %.2484, 65535
  %449 = lshr i32 %.2484, 10
  %450 = and i32 %449, 4194240
  %.not947 = icmp eq i8 %8, 0
  br i1 %.not947, label %._crit_edge767, label %.lr.ph766

.lr.ph766:                                        ; preds = %447
  %451 = getelementptr inbounds i8, ptr %0, i64 928
  %452 = load ptr, ptr %451, align 8, !tbaa !33
  %453 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count1007 = zext i8 %8 to i64
  %xtraiter1595 = and i64 %wide.trip.count1007, 1
  %454 = icmp eq i8 %8, 1
  br i1 %454, label %._crit_edge767.loopexit.unr-lcssa, label %.lr.ph766.new

.lr.ph766.new:                                    ; preds = %.lr.ph766
  %unroll_iter1599 = and i64 %wide.trip.count1007, 254
  br label %455

455:                                              ; preds = %481, %.lr.ph766.new
  %indvars.iv1004 = phi i64 [ 0, %.lr.ph766.new ], [ %indvars.iv.next1005.1, %481 ]
  %.0574764 = phi i32 [ %448, %.lr.ph766.new ], [ %.1575.1, %481 ]
  %.0576763 = phi i32 [ %450, %.lr.ph766.new ], [ %.1577.1, %481 ]
  %niter1600 = phi i64 [ 0, %.lr.ph766.new ], [ %niter1600.next.1, %481 ]
  %456 = getelementptr inbounds i8, ptr %452, i64 %indvars.iv1004
  %457 = load i8, ptr %456, align 1, !tbaa !26
  %458 = icmp eq i8 %457, 2
  br i1 %458, label %459, label %468

459:                                              ; preds = %455
  %460 = load ptr, ptr %453, align 8, !tbaa !47
  %461 = getelementptr inbounds i16, ptr %460, i64 %indvars.iv1004
  %462 = load i16, ptr %461, align 2, !tbaa !35
  %463 = zext i16 %462 to i32
  %464 = mul i32 %.0574764, %463
  %465 = lshr i32 %464, 8
  %466 = mul i32 %.0576763, %463
  %467 = lshr i32 %466, 8
  br label %468

468:                                              ; preds = %455, %459
  %.1577 = phi i32 [ %467, %459 ], [ %.0576763, %455 ]
  %.1575 = phi i32 [ %465, %459 ], [ %.0574764, %455 ]
  %indvars.iv.next1005 = or disjoint i64 %indvars.iv1004, 1
  %469 = getelementptr inbounds i8, ptr %452, i64 %indvars.iv.next1005
  %470 = load i8, ptr %469, align 1, !tbaa !26
  %471 = icmp eq i8 %470, 2
  br i1 %471, label %472, label %481

472:                                              ; preds = %468
  %473 = load ptr, ptr %453, align 8, !tbaa !47
  %474 = getelementptr inbounds i16, ptr %473, i64 %indvars.iv.next1005
  %475 = load i16, ptr %474, align 2, !tbaa !35
  %476 = zext i16 %475 to i32
  %477 = mul i32 %.1575, %476
  %478 = lshr i32 %477, 8
  %479 = mul i32 %.1577, %476
  %480 = lshr i32 %479, 8
  br label %481

481:                                              ; preds = %472, %468
  %.1577.1 = phi i32 [ %480, %472 ], [ %.1577, %468 ]
  %.1575.1 = phi i32 [ %478, %472 ], [ %.1575, %468 ]
  %indvars.iv.next1005.1 = add nuw nsw i64 %indvars.iv1004, 2
  %niter1600.next.1 = add i64 %niter1600, 2
  %niter1600.ncmp.1 = icmp eq i64 %niter1600.next.1, %unroll_iter1599
  br i1 %niter1600.ncmp.1, label %._crit_edge767.loopexit.unr-lcssa, label %455, !llvm.loop !59

._crit_edge767.loopexit.unr-lcssa:                ; preds = %481, %.lr.ph766
  %.1577.lcssa.ph = phi i32 [ poison, %.lr.ph766 ], [ %.1577.1, %481 ]
  %.1575.lcssa.ph = phi i32 [ poison, %.lr.ph766 ], [ %.1575.1, %481 ]
  %indvars.iv1004.unr = phi i64 [ 0, %.lr.ph766 ], [ %indvars.iv.next1005.1, %481 ]
  %.0574764.unr = phi i32 [ %448, %.lr.ph766 ], [ %.1575.1, %481 ]
  %.0576763.unr = phi i32 [ %450, %.lr.ph766 ], [ %.1577.1, %481 ]
  %lcmp.mod1596.not = icmp eq i64 %xtraiter1595, 0
  br i1 %lcmp.mod1596.not, label %._crit_edge767, label %.epil.preheader1594

.epil.preheader1594:                              ; preds = %._crit_edge767.loopexit.unr-lcssa
  %482 = getelementptr inbounds i8, ptr %452, i64 %indvars.iv1004.unr
  %483 = load i8, ptr %482, align 1, !tbaa !26
  %484 = icmp eq i8 %483, 2
  br i1 %484, label %485, label %._crit_edge767

485:                                              ; preds = %.epil.preheader1594
  %486 = load ptr, ptr %453, align 8, !tbaa !47
  %487 = getelementptr inbounds i16, ptr %486, i64 %indvars.iv1004.unr
  %488 = load i16, ptr %487, align 2, !tbaa !35
  %489 = zext i16 %488 to i32
  %490 = mul i32 %.0574764.unr, %489
  %491 = lshr i32 %490, 8
  %492 = mul i32 %.0576763.unr, %489
  %493 = lshr i32 %492, 8
  br label %._crit_edge767

._crit_edge767:                                   ; preds = %._crit_edge767.loopexit.unr-lcssa, %485, %.epil.preheader1594, %447
  %.0576.lcssa = phi i32 [ %450, %447 ], [ %.1577.lcssa.ph, %._crit_edge767.loopexit.unr-lcssa ], [ %493, %485 ], [ %.0576763.unr, %.epil.preheader1594 ]
  %.0574.lcssa = phi i32 [ %448, %447 ], [ %.1575.lcssa.ph, %._crit_edge767.loopexit.unr-lcssa ], [ %491, %485 ], [ %.0574764.unr, %.epil.preheader1594 ]
  %494 = getelementptr inbounds i8, ptr %0, i64 960
  %495 = load ptr, ptr %494, align 8, !tbaa !49
  %496 = getelementptr inbounds i8, ptr %495, i64 4
  %497 = load i16, ptr %496, align 2, !tbaa !35
  %498 = zext i16 %497 to i32
  %499 = mul i32 %.0576.lcssa, %498
  %500 = icmp ugt i32 %499, 33553927
  br i1 %500, label %507, label %501

501:                                              ; preds = %._crit_edge767
  %502 = mul i32 %.0574.lcssa, %498
  %503 = lshr i32 %502, 3
  %504 = shl nuw i32 %499, 7
  %505 = and i32 %504, -1024
  %506 = add i32 %505, %503
  br label %507

507:                                              ; preds = %501, %._crit_edge767, %443
  %.1583 = phi i32 [ %.2484, %443 ], [ %506, %501 ], [ 2147483647, %._crit_edge767 ]
  %508 = getelementptr inbounds i8, ptr %0, i64 568
  %.not948 = icmp eq i64 %6, 0
  br i1 %.not948, label %._crit_edge780, label %.lr.ph779.preheader

.lr.ph779.preheader:                              ; preds = %507
  %509 = load ptr, ptr %508, align 8, !tbaa !54
  br label %.lr.ph779

.lr.ph779:                                        ; preds = %.lr.ph779, %.lr.ph779.preheader
  %.pn647.pn = phi ptr [ %18, %.lr.ph779.preheader ], [ %.0590777, %.lr.ph779 ]
  %.pn648.pn = phi ptr [ %15, %.lr.ph779.preheader ], [ %.0588776, %.lr.ph779 ]
  %.pn650.pn = phi ptr [ %509, %.lr.ph779.preheader ], [ %.0589775, %.lr.ph779 ]
  %.0581774 = phi i64 [ 0, %.lr.ph779.preheader ], [ %518, %.lr.ph779 ]
  %.0584773 = phi i32 [ 0, %.lr.ph779.preheader ], [ %516, %.lr.ph779 ]
  %.0589775 = getelementptr inbounds i8, ptr %.pn650.pn, i64 1
  %.0588776 = getelementptr inbounds i8, ptr %.pn648.pn, i64 1
  %.0590777 = getelementptr inbounds i8, ptr %.pn647.pn, i64 1
  %510 = load i8, ptr %.0590777, align 1, !tbaa !26
  %511 = load i8, ptr %.0588776, align 1, !tbaa !26
  %.narrow649 = sub i8 %510, %511
  store i8 %.narrow649, ptr %.0589775, align 1, !tbaa !26
  %512 = zext i8 %.narrow649 to i32
  %513 = sub nuw nsw i32 256, %512
  %514 = icmp slt i8 %.narrow649, 0
  %515 = select i1 %514, i32 %513, i32 %512
  %516 = add i32 %515, %.0584773
  %517 = icmp ugt i32 %516, %.1583
  %518 = add nuw i64 %.0581774, 1
  %exitcond1009.not = icmp eq i64 %518, %6
  %or.cond1086 = select i1 %517, i1 true, i1 %exitcond1009.not
  br i1 %or.cond1086, label %._crit_edge780.loopexit, label %.lr.ph779, !llvm.loop !60

._crit_edge780.loopexit:                          ; preds = %.lr.ph779
  %.pre = load i8, ptr %444, align 8, !tbaa !32
  br label %._crit_edge780

._crit_edge780:                                   ; preds = %._crit_edge780.loopexit, %507
  %519 = phi i8 [ %445, %507 ], [ %.pre, %._crit_edge780.loopexit ]
  %.1585 = phi i32 [ 0, %507 ], [ %516, %._crit_edge780.loopexit ]
  %520 = icmp eq i8 %519, 2
  br i1 %520, label %521, label %581

521:                                              ; preds = %._crit_edge780
  %522 = and i32 %.1585, 65535
  %523 = lshr i32 %.1585, 10
  %524 = and i32 %523, 4194240
  %.not949 = icmp eq i8 %8, 0
  br i1 %.not949, label %._crit_edge789, label %.lr.ph788

.lr.ph788:                                        ; preds = %521
  %525 = getelementptr inbounds i8, ptr %0, i64 928
  %526 = load ptr, ptr %525, align 8, !tbaa !33
  %527 = getelementptr inbounds i8, ptr %0, i64 936
  %wide.trip.count1013 = zext i8 %8 to i64
  %xtraiter1602 = and i64 %wide.trip.count1013, 1
  %528 = icmp eq i8 %8, 1
  br i1 %528, label %._crit_edge789.loopexit.unr-lcssa, label %.lr.ph788.new

.lr.ph788.new:                                    ; preds = %.lr.ph788
  %unroll_iter1606 = and i64 %wide.trip.count1013, 254
  br label %529

529:                                              ; preds = %555, %.lr.ph788.new
  %indvars.iv1010 = phi i64 [ 0, %.lr.ph788.new ], [ %indvars.iv.next1011.1, %555 ]
  %.0569786 = phi i32 [ %522, %.lr.ph788.new ], [ %.1570.1, %555 ]
  %.0571785 = phi i32 [ %524, %.lr.ph788.new ], [ %.1572.1, %555 ]
  %niter1607 = phi i64 [ 0, %.lr.ph788.new ], [ %niter1607.next.1, %555 ]
  %530 = getelementptr inbounds i8, ptr %526, i64 %indvars.iv1010
  %531 = load i8, ptr %530, align 1, !tbaa !26
  %532 = icmp eq i8 %531, 2
  br i1 %532, label %533, label %542

533:                                              ; preds = %529
  %534 = load ptr, ptr %527, align 8, !tbaa !34
  %535 = getelementptr inbounds i16, ptr %534, i64 %indvars.iv1010
  %536 = load i16, ptr %535, align 2, !tbaa !35
  %537 = zext i16 %536 to i32
  %538 = mul i32 %.0569786, %537
  %539 = lshr i32 %538, 8
  %540 = mul i32 %.0571785, %537
  %541 = lshr i32 %540, 8
  br label %542

542:                                              ; preds = %529, %533
  %.1572 = phi i32 [ %541, %533 ], [ %.0571785, %529 ]
  %.1570 = phi i32 [ %539, %533 ], [ %.0569786, %529 ]
  %indvars.iv.next1011 = or disjoint i64 %indvars.iv1010, 1
  %543 = getelementptr inbounds i8, ptr %526, i64 %indvars.iv.next1011
  %544 = load i8, ptr %543, align 1, !tbaa !26
  %545 = icmp eq i8 %544, 2
  br i1 %545, label %546, label %555

546:                                              ; preds = %542
  %547 = load ptr, ptr %527, align 8, !tbaa !34
  %548 = getelementptr inbounds i16, ptr %547, i64 %indvars.iv.next1011
  %549 = load i16, ptr %548, align 2, !tbaa !35
  %550 = zext i16 %549 to i32
  %551 = mul i32 %.1570, %550
  %552 = lshr i32 %551, 8
  %553 = mul i32 %.1572, %550
  %554 = lshr i32 %553, 8
  br label %555

555:                                              ; preds = %546, %542
  %.1572.1 = phi i32 [ %554, %546 ], [ %.1572, %542 ]
  %.1570.1 = phi i32 [ %552, %546 ], [ %.1570, %542 ]
  %indvars.iv.next1011.1 = add nuw nsw i64 %indvars.iv1010, 2
  %niter1607.next.1 = add i64 %niter1607, 2
  %niter1607.ncmp.1 = icmp eq i64 %niter1607.next.1, %unroll_iter1606
  br i1 %niter1607.ncmp.1, label %._crit_edge789.loopexit.unr-lcssa, label %529, !llvm.loop !61

._crit_edge789.loopexit.unr-lcssa:                ; preds = %555, %.lr.ph788
  %.1572.lcssa.ph = phi i32 [ poison, %.lr.ph788 ], [ %.1572.1, %555 ]
  %.1570.lcssa.ph = phi i32 [ poison, %.lr.ph788 ], [ %.1570.1, %555 ]
  %indvars.iv1010.unr = phi i64 [ 0, %.lr.ph788 ], [ %indvars.iv.next1011.1, %555 ]
  %.0569786.unr = phi i32 [ %522, %.lr.ph788 ], [ %.1570.1, %555 ]
  %.0571785.unr = phi i32 [ %524, %.lr.ph788 ], [ %.1572.1, %555 ]
  %lcmp.mod1603.not = icmp eq i64 %xtraiter1602, 0
  br i1 %lcmp.mod1603.not, label %._crit_edge789, label %.epil.preheader1601

.epil.preheader1601:                              ; preds = %._crit_edge789.loopexit.unr-lcssa
  %556 = getelementptr inbounds i8, ptr %526, i64 %indvars.iv1010.unr
  %557 = load i8, ptr %556, align 1, !tbaa !26
  %558 = icmp eq i8 %557, 2
  br i1 %558, label %559, label %._crit_edge789

559:                                              ; preds = %.epil.preheader1601
  %560 = load ptr, ptr %527, align 8, !tbaa !34
  %561 = getelementptr inbounds i16, ptr %560, i64 %indvars.iv1010.unr
  %562 = load i16, ptr %561, align 2, !tbaa !35
  %563 = zext i16 %562 to i32
  %564 = mul i32 %.0569786.unr, %563
  %565 = lshr i32 %564, 8
  %566 = mul i32 %.0571785.unr, %563
  %567 = lshr i32 %566, 8
  br label %._crit_edge789

._crit_edge789:                                   ; preds = %._crit_edge789.loopexit.unr-lcssa, %559, %.epil.preheader1601, %521
  %.0571.lcssa = phi i32 [ %524, %521 ], [ %.1572.lcssa.ph, %._crit_edge789.loopexit.unr-lcssa ], [ %567, %559 ], [ %.0571785.unr, %.epil.preheader1601 ]
  %.0569.lcssa = phi i32 [ %522, %521 ], [ %.1570.lcssa.ph, %._crit_edge789.loopexit.unr-lcssa ], [ %565, %559 ], [ %.0569786.unr, %.epil.preheader1601 ]
  %568 = getelementptr inbounds i8, ptr %0, i64 952
  %569 = load ptr, ptr %568, align 8, !tbaa !37
  %570 = getelementptr inbounds i8, ptr %569, i64 4
  %571 = load i16, ptr %570, align 2, !tbaa !35
  %572 = zext i16 %571 to i32
  %573 = mul i32 %.0571.lcssa, %572
  %574 = icmp ugt i32 %573, 33553927
  br i1 %574, label %581, label %575

575:                                              ; preds = %._crit_edge789
  %576 = mul i32 %.0569.lcssa, %572
  %577 = lshr i32 %576, 3
  %578 = shl nuw i32 %573, 7
  %579 = and i32 %578, -1024
  %580 = add i32 %579, %577
  br label %581

581:                                              ; preds = %575, %._crit_edge789, %._crit_edge780
  %.3587 = phi i32 [ %.1585, %._crit_edge780 ], [ %580, %575 ], [ 2147483647, %._crit_edge789 ]
  %582 = icmp ult i32 %.3587, %.2484
  br i1 %582, label %._crit_edge798.sink.split, label %._crit_edge798

._crit_edge798.sink.split:                        ; preds = %.lr.ph797.prol.loopexit, %.lr.ph797, %middle.block1216, %vec.epilog.middle.block1240, %581
  %.sink1087 = phi ptr [ %508, %581 ], [ %411, %vec.epilog.middle.block1240 ], [ %411, %middle.block1216 ], [ %411, %.lr.ph797 ], [ %411, %.lr.ph797.prol.loopexit ]
  %.4486.ph = phi i32 [ %.3587, %581 ], [ %.2484, %vec.epilog.middle.block1240 ], [ %.2484, %middle.block1216 ], [ %.2484, %.lr.ph797 ], [ %.2484, %.lr.ph797.prol.loopexit ]
  %.pre1046 = load ptr, ptr %.sink1087, align 8, !tbaa !54
  br label %._crit_edge798

._crit_edge798:                                   ; preds = %._crit_edge798.sink.split, %581, %441
  %.4486 = phi i32 [ %.2484, %441 ], [ %.2484, %581 ], [ %.4486.ph, %._crit_edge798.sink.split ]
  %.3 = phi ptr [ %.1481, %441 ], [ %.1481, %581 ], [ %.pre1046, %._crit_edge798.sink.split ]
  %583 = icmp eq i8 %4, 64
  br i1 %583, label %584, label %663

584:                                              ; preds = %._crit_edge798
  %585 = getelementptr inbounds i8, ptr %18, i64 1
  %586 = getelementptr inbounds i8, ptr %0, i64 576
  %587 = load ptr, ptr %586, align 8, !tbaa !62
  %588 = ptrtoint ptr %587 to i64
  %.0565840 = getelementptr inbounds i8, ptr %587, i64 1
  %.0563841 = getelementptr inbounds i8, ptr %15, i64 1
  %.not954 = icmp eq i8 %10, 0
  br i1 %.not954, label %.preheader694, label %.lr.ph847.preheader

.lr.ph847.preheader:                              ; preds = %584
  %589 = add nsw i32 %13, -1
  %590 = zext i32 %589 to i64
  %591 = add nuw nsw i64 %590, 1
  %min.iters.check1309 = icmp ult i32 %589, 15
  br i1 %min.iters.check1309, label %.lr.ph847.preheader1544, label %vector.memcheck1303

.lr.ph847.preheader1544:                          ; preds = %middle.block1307, %vector.memcheck1303, %.lr.ph847.preheader
  %.0563845.ph = phi ptr [ %.0563841, %vector.memcheck1303 ], [ %.0563841, %.lr.ph847.preheader ], [ %ind.end1313, %middle.block1307 ]
  %.0565844.ph = phi ptr [ %.0565840, %vector.memcheck1303 ], [ %.0565840, %.lr.ph847.preheader ], [ %ind.end1315, %middle.block1307 ]
  %.0560843.ph = phi i32 [ 0, %vector.memcheck1303 ], [ 0, %.lr.ph847.preheader ], [ %ind.end1317, %middle.block1307 ]
  %.0567842.ph = phi ptr [ %585, %vector.memcheck1303 ], [ %585, %.lr.ph847.preheader ], [ %ind.end1319, %middle.block1307 ]
  %592 = sub i32 %13, %.0560843.ph
  %xtraiter1628 = and i32 %592, 3
  %lcmp.mod1629.not = icmp eq i32 %xtraiter1628, 0
  br i1 %lcmp.mod1629.not, label %.lr.ph847.prol.loopexit, label %.lr.ph847.prol

.lr.ph847.prol:                                   ; preds = %.lr.ph847.preheader1544, %.lr.ph847.prol
  %.0563845.prol = phi ptr [ %.0563.prol, %.lr.ph847.prol ], [ %.0563845.ph, %.lr.ph847.preheader1544 ]
  %.0565844.prol = phi ptr [ %.0565.prol, %.lr.ph847.prol ], [ %.0565844.ph, %.lr.ph847.preheader1544 ]
  %.0560843.prol = phi i32 [ %597, %.lr.ph847.prol ], [ %.0560843.ph, %.lr.ph847.preheader1544 ]
  %.0567842.prol = phi ptr [ %593, %.lr.ph847.prol ], [ %.0567842.ph, %.lr.ph847.preheader1544 ]
  %prol.iter1630 = phi i32 [ %prol.iter1630.next, %.lr.ph847.prol ], [ 0, %.lr.ph847.preheader1544 ]
  %593 = getelementptr inbounds i8, ptr %.0567842.prol, i64 1
  %594 = load i8, ptr %.0567842.prol, align 1, !tbaa !26
  %595 = load i8, ptr %.0563845.prol, align 1, !tbaa !26
  %596 = lshr i8 %595, 1
  %.narrow679.prol = sub i8 %594, %596
  store i8 %.narrow679.prol, ptr %.0565844.prol, align 1, !tbaa !26
  %597 = add nuw nsw i32 %.0560843.prol, 1
  %.0565.prol = getelementptr inbounds i8, ptr %.0565844.prol, i64 1
  %.0563.prol = getelementptr inbounds i8, ptr %.0563845.prol, i64 1
  %prol.iter1630.next = add i32 %prol.iter1630, 1
  %prol.iter1630.cmp.not = icmp eq i32 %prol.iter1630.next, %xtraiter1628
  br i1 %prol.iter1630.cmp.not, label %.lr.ph847.prol.loopexit, label %.lr.ph847.prol, !llvm.loop !63

.lr.ph847.prol.loopexit:                          ; preds = %.lr.ph847.prol, %.lr.ph847.preheader1544
  %.lcssa1547.unr = phi ptr [ poison, %.lr.ph847.preheader1544 ], [ %593, %.lr.ph847.prol ]
  %.0565.lcssa1546.unr = phi ptr [ poison, %.lr.ph847.preheader1544 ], [ %.0565.prol, %.lr.ph847.prol ]
  %.0563.lcssa1545.unr = phi ptr [ poison, %.lr.ph847.preheader1544 ], [ %.0563.prol, %.lr.ph847.prol ]
  %.0563845.unr = phi ptr [ %.0563845.ph, %.lr.ph847.preheader1544 ], [ %.0563.prol, %.lr.ph847.prol ]
  %.0565844.unr = phi ptr [ %.0565844.ph, %.lr.ph847.preheader1544 ], [ %.0565.prol, %.lr.ph847.prol ]
  %.0560843.unr = phi i32 [ %.0560843.ph, %.lr.ph847.preheader1544 ], [ %597, %.lr.ph847.prol ]
  %.0567842.unr = phi ptr [ %.0567842.ph, %.lr.ph847.preheader1544 ], [ %593, %.lr.ph847.prol ]
  %598 = sub i32 %.0560843.ph, %13
  %599 = icmp ugt i32 %598, -4
  br i1 %599, label %.preheader694, label %.lr.ph847

vector.memcheck1303:                              ; preds = %.lr.ph847.preheader
  %600 = sub i64 %588, %19
  %diff.check1304 = icmp ult i64 %600, 16
  %601 = sub i64 %588, %16
  %diff.check1305 = icmp ult i64 %601, 16
  %conflict.rdx1306 = or i1 %diff.check1304, %diff.check1305
  br i1 %conflict.rdx1306, label %.lr.ph847.preheader1544, label %vector.ph1310

vector.ph1310:                                    ; preds = %vector.memcheck1303
  %n.vec1312 = and i64 %591, 8589934576
  %ind.end1313 = getelementptr i8, ptr %.0563841, i64 %n.vec1312
  %ind.end1315 = getelementptr i8, ptr %.0565840, i64 %n.vec1312
  %ind.end1317 = trunc i64 %n.vec1312 to i32
  %ind.end1319 = getelementptr i8, ptr %585, i64 %n.vec1312
  br label %vector.body1321

vector.body1321:                                  ; preds = %vector.body1321, %vector.ph1310
  %index1322 = phi i64 [ 0, %vector.ph1310 ], [ %index.next1328, %vector.body1321 ]
  %next.gep1323 = getelementptr i8, ptr %.0563841, i64 %index1322
  %next.gep1324 = getelementptr i8, ptr %.0565840, i64 %index1322
  %next.gep1325 = getelementptr i8, ptr %585, i64 %index1322
  %wide.load1326 = load <16 x i8>, ptr %next.gep1325, align 1, !tbaa !26
  %wide.load1327 = load <16 x i8>, ptr %next.gep1323, align 1, !tbaa !26
  %602 = lshr <16 x i8> %wide.load1327, <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>
  %603 = sub <16 x i8> %wide.load1326, %602
  store <16 x i8> %603, ptr %next.gep1324, align 1, !tbaa !26
  %index.next1328 = add nuw i64 %index1322, 16
  %604 = icmp eq i64 %index.next1328, %n.vec1312
  br i1 %604, label %middle.block1307, label %vector.body1321, !llvm.loop !64

middle.block1307:                                 ; preds = %vector.body1321
  %cmp.n1329 = icmp eq i64 %591, %n.vec1312
  br i1 %cmp.n1329, label %.preheader694, label %.lr.ph847.preheader1544

.preheader694:                                    ; preds = %.lr.ph847.prol.loopexit, %.lr.ph847, %middle.block1307, %584
  %.0567.lcssa = phi ptr [ %585, %584 ], [ %ind.end1319, %middle.block1307 ], [ %.lcssa1547.unr, %.lr.ph847.prol.loopexit ], [ %644, %.lr.ph847 ]
  %.0560.lcssa = phi i32 [ 0, %584 ], [ %13, %middle.block1307 ], [ %13, %.lr.ph847 ], [ %13, %.lr.ph847.prol.loopexit ]
  %.0565.lcssa = phi ptr [ %.0565840, %584 ], [ %ind.end1315, %middle.block1307 ], [ %.0565.lcssa1546.unr, %.lr.ph847.prol.loopexit ], [ %.0565.3, %.lr.ph847 ]
  %.0563.lcssa = phi ptr [ %.0563841, %584 ], [ %ind.end1313, %middle.block1307 ], [ %.0563.lcssa1545.unr, %.lr.ph847.prol.loopexit ], [ %.0563.3, %.lr.ph847 ]
  %.0565.lcssa1331 = ptrtoint ptr %.0565.lcssa to i64
  %.0567.lcssa1333 = ptrtoint ptr %.0567.lcssa to i64
  %.0563.lcssa1336 = ptrtoint ptr %.0563.lcssa to i64
  %605 = zext nneg i32 %.0560.lcssa to i64
  %606 = icmp ugt i64 %6, %605
  br i1 %606, label %iter.check1343, label %.sink.split1088

iter.check1343:                                   ; preds = %.preheader694
  %607 = sub i64 %6, %605
  %min.iters.check1341 = icmp ult i64 %607, 8
  br i1 %min.iters.check1341, label %.lr.ph857.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %iter.check1343
  %608 = xor i64 %605, -1
  %609 = add i64 %6, %608
  %610 = trunc i64 %609 to i32
  %611 = sub nuw nsw i32 -2, %.0560.lcssa
  %612 = icmp ult i32 %611, %610
  %613 = icmp ugt i64 %609, 4294967295
  %614 = or i1 %612, %613
  br i1 %614, label %.lr.ph857.preheader, label %vector.memcheck1330

vector.memcheck1330:                              ; preds = %vector.scevcheck
  %615 = sub i64 %19, %.0565.lcssa1331
  %diff.check1332 = icmp ugt i64 %615, -17
  %616 = sub i64 %.0565.lcssa1331, %.0567.lcssa1333
  %diff.check1334 = icmp ult i64 %616, 16
  %conflict.rdx1335 = or i1 %diff.check1332, %diff.check1334
  %617 = sub i64 %.0565.lcssa1331, %.0563.lcssa1336
  %diff.check1337 = icmp ult i64 %617, 16
  %conflict.rdx1338 = or i1 %conflict.rdx1335, %diff.check1337
  br i1 %conflict.rdx1338, label %.lr.ph857.preheader, label %vector.main.loop.iter.check1345

vector.main.loop.iter.check1345:                  ; preds = %vector.memcheck1330
  %min.iters.check1344 = icmp ult i64 %607, 16
  br i1 %min.iters.check1344, label %vec.epilog.ph1362, label %vector.ph1346

vector.ph1346:                                    ; preds = %vector.main.loop.iter.check1345
  %n.vec1348 = and i64 %607, -16
  br label %vector.body1349

vector.body1349:                                  ; preds = %vector.body1349, %vector.ph1346
  %index1350 = phi i64 [ 0, %vector.ph1346 ], [ %index.next1358, %vector.body1349 ]
  %next.gep1351 = getelementptr i8, ptr %585, i64 %index1350
  %next.gep1352 = getelementptr i8, ptr %.0563.lcssa, i64 %index1350
  %next.gep1353 = getelementptr i8, ptr %.0565.lcssa, i64 %index1350
  %next.gep1354 = getelementptr i8, ptr %.0567.lcssa, i64 %index1350
  %wide.load1355 = load <16 x i8>, ptr %next.gep1354, align 1, !tbaa !26
  %wide.load1356 = load <16 x i8>, ptr %next.gep1352, align 1, !tbaa !26
  %618 = zext <16 x i8> %wide.load1356 to <16 x i16>
  %wide.load1357 = load <16 x i8>, ptr %next.gep1351, align 1, !tbaa !26
  %619 = zext <16 x i8> %wide.load1357 to <16 x i16>
  %620 = add nuw nsw <16 x i16> %619, %618
  %621 = lshr <16 x i16> %620, <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>
  %622 = trunc nuw <16 x i16> %621 to <16 x i8>
  %623 = sub <16 x i8> %wide.load1355, %622
  store <16 x i8> %623, ptr %next.gep1353, align 1, !tbaa !26
  %index.next1358 = add nuw i64 %index1350, 16
  %624 = icmp eq i64 %index.next1358, %n.vec1348
  br i1 %624, label %middle.block1339, label %vector.body1349, !llvm.loop !65

middle.block1339:                                 ; preds = %vector.body1349
  %cmp.n1359 = icmp eq i64 %607, %n.vec1348
  br i1 %cmp.n1359, label %.sink.split1088, label %vec.epilog.iter.check1363

vec.epilog.iter.check1363:                        ; preds = %middle.block1339
  %ind.end1383 = getelementptr i8, ptr %.0567.lcssa, i64 %n.vec1348
  %ind.end1380 = getelementptr i8, ptr %.0565.lcssa, i64 %n.vec1348
  %ind.end1377 = getelementptr i8, ptr %.0563.lcssa, i64 %n.vec1348
  %ind.end1374 = getelementptr i8, ptr %585, i64 %n.vec1348
  %.cast1370 = trunc i64 %n.vec1348 to i32
  %ind.end1371 = add i32 %.0560.lcssa, %.cast1370
  %n.vec.remaining1364 = and i64 %607, 8
  %min.epilog.iters.check1365.not.not = icmp eq i64 %n.vec.remaining1364, 0
  br i1 %min.epilog.iters.check1365.not.not, label %.lr.ph857.preheader, label %vec.epilog.ph1362

.lr.ph857.preheader:                              ; preds = %vec.epilog.middle.block1360, %vector.memcheck1330, %vector.scevcheck, %iter.check1343, %vec.epilog.iter.check1363
  %.1561856.ph = phi i32 [ %.0560.lcssa, %iter.check1343 ], [ %.0560.lcssa, %vector.memcheck1330 ], [ %.0560.lcssa, %vector.scevcheck ], [ %ind.end1371, %vec.epilog.iter.check1363 ], [ %ind.end1369, %vec.epilog.middle.block1360 ]
  %.0562855.ph = phi ptr [ %585, %iter.check1343 ], [ %585, %vector.memcheck1330 ], [ %585, %vector.scevcheck ], [ %ind.end1374, %vec.epilog.iter.check1363 ], [ %ind.end1373, %vec.epilog.middle.block1360 ]
  %.1564854.ph = phi ptr [ %.0563.lcssa, %iter.check1343 ], [ %.0563.lcssa, %vector.memcheck1330 ], [ %.0563.lcssa, %vector.scevcheck ], [ %ind.end1377, %vec.epilog.iter.check1363 ], [ %ind.end1376, %vec.epilog.middle.block1360 ]
  %.1566853.ph = phi ptr [ %.0565.lcssa, %iter.check1343 ], [ %.0565.lcssa, %vector.memcheck1330 ], [ %.0565.lcssa, %vector.scevcheck ], [ %ind.end1380, %vec.epilog.iter.check1363 ], [ %ind.end1379, %vec.epilog.middle.block1360 ]
  %.1568852.ph = phi ptr [ %.0567.lcssa, %iter.check1343 ], [ %.0567.lcssa, %vector.memcheck1330 ], [ %.0567.lcssa, %vector.scevcheck ], [ %ind.end1383, %vec.epilog.iter.check1363 ], [ %ind.end1382, %vec.epilog.middle.block1360 ]
  br label %.lr.ph857

vec.epilog.ph1362:                                ; preds = %vector.main.loop.iter.check1345, %vec.epilog.iter.check1363
  %vec.epilog.resume.val1366 = phi i64 [ %n.vec1348, %vec.epilog.iter.check1363 ], [ 0, %vector.main.loop.iter.check1345 ]
  %n.vec1368 = and i64 %607, -8
  %.cast = trunc i64 %n.vec1368 to i32
  %ind.end1369 = add i32 %.0560.lcssa, %.cast
  %ind.end1373 = getelementptr i8, ptr %585, i64 %n.vec1368
  %ind.end1376 = getelementptr i8, ptr %.0563.lcssa, i64 %n.vec1368
  %ind.end1379 = getelementptr i8, ptr %.0565.lcssa, i64 %n.vec1368
  %ind.end1382 = getelementptr i8, ptr %.0567.lcssa, i64 %n.vec1368
  br label %vec.epilog.vector.body1385

vec.epilog.vector.body1385:                       ; preds = %vec.epilog.vector.body1385, %vec.epilog.ph1362
  %index1386 = phi i64 [ %vec.epilog.resume.val1366, %vec.epilog.ph1362 ], [ %index.next1394, %vec.epilog.vector.body1385 ]
  %next.gep1387 = getelementptr i8, ptr %585, i64 %index1386
  %next.gep1388 = getelementptr i8, ptr %.0563.lcssa, i64 %index1386
  %next.gep1389 = getelementptr i8, ptr %.0565.lcssa, i64 %index1386
  %next.gep1390 = getelementptr i8, ptr %.0567.lcssa, i64 %index1386
  %wide.load1391 = load <8 x i8>, ptr %next.gep1390, align 1, !tbaa !26
  %wide.load1392 = load <8 x i8>, ptr %next.gep1388, align 1, !tbaa !26
  %625 = zext <8 x i8> %wide.load1392 to <8 x i16>
  %wide.load1393 = load <8 x i8>, ptr %next.gep1387, align 1, !tbaa !26
  %626 = zext <8 x i8> %wide.load1393 to <8 x i16>
  %627 = add nuw nsw <8 x i16> %626, %625
  %628 = lshr <8 x i16> %627, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %629 = trunc nuw <8 x i16> %628 to <8 x i8>
  %630 = sub <8 x i8> %wide.load1391, %629
  store <8 x i8> %630, ptr %next.gep1389, align 1, !tbaa !26
  %index.next1394 = add nuw i64 %index1386, 8
  %631 = icmp eq i64 %index.next1394, %n.vec1368
  br i1 %631, label %vec.epilog.middle.block1360, label %vec.epilog.vector.body1385, !llvm.loop !66

vec.epilog.middle.block1360:                      ; preds = %vec.epilog.vector.body1385
  %cmp.n1395 = icmp eq i64 %607, %n.vec1368
  br i1 %cmp.n1395, label %.sink.split1088, label %.lr.ph857.preheader

.lr.ph847:                                        ; preds = %.lr.ph847.prol.loopexit, %.lr.ph847
  %.0563845 = phi ptr [ %.0563.3, %.lr.ph847 ], [ %.0563845.unr, %.lr.ph847.prol.loopexit ]
  %.0565844 = phi ptr [ %.0565.3, %.lr.ph847 ], [ %.0565844.unr, %.lr.ph847.prol.loopexit ]
  %.0560843 = phi i32 [ %648, %.lr.ph847 ], [ %.0560843.unr, %.lr.ph847.prol.loopexit ]
  %.0567842 = phi ptr [ %644, %.lr.ph847 ], [ %.0567842.unr, %.lr.ph847.prol.loopexit ]
  %632 = getelementptr inbounds i8, ptr %.0567842, i64 1
  %633 = load i8, ptr %.0567842, align 1, !tbaa !26
  %634 = load i8, ptr %.0563845, align 1, !tbaa !26
  %635 = lshr i8 %634, 1
  %.narrow679 = sub i8 %633, %635
  store i8 %.narrow679, ptr %.0565844, align 1, !tbaa !26
  %.0565 = getelementptr inbounds i8, ptr %.0565844, i64 1
  %.0563 = getelementptr inbounds i8, ptr %.0563845, i64 1
  %636 = getelementptr inbounds i8, ptr %.0567842, i64 2
  %637 = load i8, ptr %632, align 1, !tbaa !26
  %638 = load i8, ptr %.0563, align 1, !tbaa !26
  %639 = lshr i8 %638, 1
  %.narrow679.1 = sub i8 %637, %639
  store i8 %.narrow679.1, ptr %.0565, align 1, !tbaa !26
  %.0565.1 = getelementptr inbounds i8, ptr %.0565844, i64 2
  %.0563.1 = getelementptr inbounds i8, ptr %.0563845, i64 2
  %640 = getelementptr inbounds i8, ptr %.0567842, i64 3
  %641 = load i8, ptr %636, align 1, !tbaa !26
  %642 = load i8, ptr %.0563.1, align 1, !tbaa !26
  %643 = lshr i8 %642, 1
  %.narrow679.2 = sub i8 %641, %643
  store i8 %.narrow679.2, ptr %.0565.1, align 1, !tbaa !26
  %.0565.2 = getelementptr inbounds i8, ptr %.0565844, i64 3
  %.0563.2 = getelementptr inbounds i8, ptr %.0563845, i64 3
  %644 = getelementptr inbounds i8, ptr %.0567842, i64 4
  %645 = load i8, ptr %640, align 1, !tbaa !26
  %646 = load i8, ptr %.0563.2, align 1, !tbaa !26
  %647 = lshr i8 %646, 1
  %.narrow679.3 = sub i8 %645, %647
  store i8 %.narrow679.3, ptr %.0565.2, align 1, !tbaa !26
  %648 = add nuw nsw i32 %.0560843, 4
  %.0565.3 = getelementptr inbounds i8, ptr %.0565844, i64 4
  %.0563.3 = getelementptr inbounds i8, ptr %.0563845, i64 4
  %exitcond1027.not.3 = icmp eq i32 %648, %13
  br i1 %exitcond1027.not.3, label %.preheader694, label %.lr.ph847, !llvm.loop !67

.lr.ph857:                                        ; preds = %.lr.ph857.preheader, %.lr.ph857
  %.1561856 = phi i32 [ %660, %.lr.ph857 ], [ %.1561856.ph, %.lr.ph857.preheader ]
  %.0562855 = phi ptr [ %654, %.lr.ph857 ], [ %.0562855.ph, %.lr.ph857.preheader ]
  %.1564854 = phi ptr [ %651, %.lr.ph857 ], [ %.1564854.ph, %.lr.ph857.preheader ]
  %.1566853 = phi ptr [ %659, %.lr.ph857 ], [ %.1566853.ph, %.lr.ph857.preheader ]
  %.1568852 = phi ptr [ %649, %.lr.ph857 ], [ %.1568852.ph, %.lr.ph857.preheader ]
  %649 = getelementptr inbounds i8, ptr %.1568852, i64 1
  %650 = load i8, ptr %.1568852, align 1, !tbaa !26
  %651 = getelementptr inbounds i8, ptr %.1564854, i64 1
  %652 = load i8, ptr %.1564854, align 1, !tbaa !26
  %653 = zext i8 %652 to i16
  %654 = getelementptr inbounds i8, ptr %.0562855, i64 1
  %655 = load i8, ptr %.0562855, align 1, !tbaa !26
  %656 = zext i8 %655 to i16
  %657 = add nuw nsw i16 %656, %653
  %658 = lshr i16 %657, 1
  %.tr675 = trunc nuw i16 %658 to i8
  %.narrow676 = sub i8 %650, %.tr675
  %659 = getelementptr inbounds i8, ptr %.1566853, i64 1
  store i8 %.narrow676, ptr %.1566853, align 1, !tbaa !26
  %660 = add i32 %.1561856, 1
  %661 = zext i32 %660 to i64
  %662 = icmp ugt i64 %6, %661
  br i1 %662, label %.lr.ph857, label %.sink.split1088, !llvm.loop !68

663:                                              ; preds = %._crit_edge798
  %664 = and i32 %20, 64
  %.not651 = icmp eq i32 %664, 0
  br i1 %.not651, label %923, label %665

665:                                              ; preds = %663
  %666 = getelementptr inbounds i8, ptr %0, i64 920
  %667 = load i8, ptr %666, align 8, !tbaa !32
  %668 = icmp eq i8 %667, 2
  br i1 %668, label %669, label %729

669:                                              ; preds = %665
  %670 = and i32 %.4486, 65535
  %671 = lshr i32 %.4486, 10
  %672 = and i32 %671, 4194240
  %.not951 = icmp eq i8 %8, 0
  br i1 %.not951, label %._crit_edge804, label %.lr.ph803

.lr.ph803:                                        ; preds = %669
  %673 = getelementptr inbounds i8, ptr %0, i64 928
  %674 = load ptr, ptr %673, align 8, !tbaa !33
  %675 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count1019 = zext i8 %8 to i64
  %xtraiter1612 = and i64 %wide.trip.count1019, 1
  %676 = icmp eq i8 %8, 1
  br i1 %676, label %._crit_edge804.loopexit.unr-lcssa, label %.lr.ph803.new

.lr.ph803.new:                                    ; preds = %.lr.ph803
  %unroll_iter1616 = and i64 %wide.trip.count1019, 254
  br label %677

677:                                              ; preds = %703, %.lr.ph803.new
  %indvars.iv1016 = phi i64 [ 0, %.lr.ph803.new ], [ %indvars.iv.next1017.1, %703 ]
  %.0539801 = phi i32 [ %670, %.lr.ph803.new ], [ %.1540.1, %703 ]
  %.0541800 = phi i32 [ %672, %.lr.ph803.new ], [ %.1542.1, %703 ]
  %niter1617 = phi i64 [ 0, %.lr.ph803.new ], [ %niter1617.next.1, %703 ]
  %678 = getelementptr inbounds i8, ptr %674, i64 %indvars.iv1016
  %679 = load i8, ptr %678, align 1, !tbaa !26
  %680 = icmp eq i8 %679, 3
  br i1 %680, label %681, label %690

681:                                              ; preds = %677
  %682 = load ptr, ptr %675, align 8, !tbaa !47
  %683 = getelementptr inbounds i16, ptr %682, i64 %indvars.iv1016
  %684 = load i16, ptr %683, align 2, !tbaa !35
  %685 = zext i16 %684 to i32
  %686 = mul i32 %.0539801, %685
  %687 = lshr i32 %686, 8
  %688 = mul i32 %.0541800, %685
  %689 = lshr i32 %688, 8
  br label %690

690:                                              ; preds = %677, %681
  %.1542 = phi i32 [ %689, %681 ], [ %.0541800, %677 ]
  %.1540 = phi i32 [ %687, %681 ], [ %.0539801, %677 ]
  %indvars.iv.next1017 = or disjoint i64 %indvars.iv1016, 1
  %691 = getelementptr inbounds i8, ptr %674, i64 %indvars.iv.next1017
  %692 = load i8, ptr %691, align 1, !tbaa !26
  %693 = icmp eq i8 %692, 3
  br i1 %693, label %694, label %703

694:                                              ; preds = %690
  %695 = load ptr, ptr %675, align 8, !tbaa !47
  %696 = getelementptr inbounds i16, ptr %695, i64 %indvars.iv.next1017
  %697 = load i16, ptr %696, align 2, !tbaa !35
  %698 = zext i16 %697 to i32
  %699 = mul i32 %.1540, %698
  %700 = lshr i32 %699, 8
  %701 = mul i32 %.1542, %698
  %702 = lshr i32 %701, 8
  br label %703

703:                                              ; preds = %694, %690
  %.1542.1 = phi i32 [ %702, %694 ], [ %.1542, %690 ]
  %.1540.1 = phi i32 [ %700, %694 ], [ %.1540, %690 ]
  %indvars.iv.next1017.1 = add nuw nsw i64 %indvars.iv1016, 2
  %niter1617.next.1 = add i64 %niter1617, 2
  %niter1617.ncmp.1 = icmp eq i64 %niter1617.next.1, %unroll_iter1616
  br i1 %niter1617.ncmp.1, label %._crit_edge804.loopexit.unr-lcssa, label %677, !llvm.loop !69

._crit_edge804.loopexit.unr-lcssa:                ; preds = %703, %.lr.ph803
  %.1542.lcssa.ph = phi i32 [ poison, %.lr.ph803 ], [ %.1542.1, %703 ]
  %.1540.lcssa.ph = phi i32 [ poison, %.lr.ph803 ], [ %.1540.1, %703 ]
  %indvars.iv1016.unr = phi i64 [ 0, %.lr.ph803 ], [ %indvars.iv.next1017.1, %703 ]
  %.0539801.unr = phi i32 [ %670, %.lr.ph803 ], [ %.1540.1, %703 ]
  %.0541800.unr = phi i32 [ %672, %.lr.ph803 ], [ %.1542.1, %703 ]
  %lcmp.mod1613.not = icmp eq i64 %xtraiter1612, 0
  br i1 %lcmp.mod1613.not, label %._crit_edge804, label %.epil.preheader1611

.epil.preheader1611:                              ; preds = %._crit_edge804.loopexit.unr-lcssa
  %704 = getelementptr inbounds i8, ptr %674, i64 %indvars.iv1016.unr
  %705 = load i8, ptr %704, align 1, !tbaa !26
  %706 = icmp eq i8 %705, 3
  br i1 %706, label %707, label %._crit_edge804

707:                                              ; preds = %.epil.preheader1611
  %708 = load ptr, ptr %675, align 8, !tbaa !47
  %709 = getelementptr inbounds i16, ptr %708, i64 %indvars.iv1016.unr
  %710 = load i16, ptr %709, align 2, !tbaa !35
  %711 = zext i16 %710 to i32
  %712 = mul i32 %.0539801.unr, %711
  %713 = lshr i32 %712, 8
  %714 = mul i32 %.0541800.unr, %711
  %715 = lshr i32 %714, 8
  br label %._crit_edge804

._crit_edge804:                                   ; preds = %._crit_edge804.loopexit.unr-lcssa, %707, %.epil.preheader1611, %669
  %.0541.lcssa = phi i32 [ %672, %669 ], [ %.1542.lcssa.ph, %._crit_edge804.loopexit.unr-lcssa ], [ %715, %707 ], [ %.0541800.unr, %.epil.preheader1611 ]
  %.0539.lcssa = phi i32 [ %670, %669 ], [ %.1540.lcssa.ph, %._crit_edge804.loopexit.unr-lcssa ], [ %713, %707 ], [ %.0539801.unr, %.epil.preheader1611 ]
  %716 = getelementptr inbounds i8, ptr %0, i64 960
  %717 = load ptr, ptr %716, align 8, !tbaa !49
  %718 = getelementptr inbounds i8, ptr %717, i64 6
  %719 = load i16, ptr %718, align 2, !tbaa !35
  %720 = zext i16 %719 to i32
  %721 = mul i32 %.0541.lcssa, %720
  %722 = icmp ugt i32 %721, 33553927
  br i1 %722, label %729, label %723

723:                                              ; preds = %._crit_edge804
  %724 = mul i32 %.0539.lcssa, %720
  %725 = lshr i32 %724, 3
  %726 = shl nuw i32 %721, 7
  %727 = and i32 %726, -1024
  %728 = add i32 %727, %725
  br label %729

729:                                              ; preds = %723, %._crit_edge804, %665
  %.1547 = phi i32 [ %.4486, %665 ], [ %728, %723 ], [ 2147483647, %._crit_edge804 ]
  %730 = getelementptr inbounds i8, ptr %18, i64 1
  %731 = getelementptr inbounds i8, ptr %0, i64 576
  %732 = load ptr, ptr %731, align 8, !tbaa !62
  %733 = ptrtoint ptr %732 to i64
  %734 = zext nneg i32 %13 to i64
  %.0556807 = getelementptr inbounds i8, ptr %732, i64 1
  %.0554808 = getelementptr inbounds i8, ptr %15, i64 1
  %.not952 = icmp eq i8 %10, 0
  br i1 %.not952, label %.preheader695, label %.lr.ph815.preheader

.lr.ph815.preheader:                              ; preds = %729
  %min.iters.check1274 = icmp ult i8 %10, 57
  br i1 %min.iters.check1274, label %.lr.ph815.preheader1549, label %vector.memcheck1268

.lr.ph815.preheader1549:                          ; preds = %middle.block1272, %vector.memcheck1268, %.lr.ph815.preheader
  %.0554813.ph = phi ptr [ %.0554808, %vector.memcheck1268 ], [ %.0554808, %.lr.ph815.preheader ], [ %ind.end1278, %middle.block1272 ]
  %.0556812.ph = phi ptr [ %.0556807, %vector.memcheck1268 ], [ %.0556807, %.lr.ph815.preheader ], [ %ind.end1280, %middle.block1272 ]
  %.0544811.ph = phi i64 [ 0, %vector.memcheck1268 ], [ 0, %.lr.ph815.preheader ], [ %n.vec1277, %middle.block1272 ]
  %.0548810.ph = phi i32 [ 0, %vector.memcheck1268 ], [ 0, %.lr.ph815.preheader ], [ %818, %middle.block1272 ]
  %.0558809.ph = phi ptr [ %730, %vector.memcheck1268 ], [ %730, %.lr.ph815.preheader ], [ %ind.end1283, %middle.block1272 ]
  %xtraiter1618 = and i64 %734, 1
  %lcmp.mod1619.not = icmp eq i64 %xtraiter1618, 0
  br i1 %lcmp.mod1619.not, label %.lr.ph815.prol.loopexit, label %.lr.ph815.prol

.lr.ph815.prol:                                   ; preds = %.lr.ph815.preheader1549
  %735 = getelementptr inbounds i8, ptr %.0558809.ph, i64 1
  %736 = load i8, ptr %.0558809.ph, align 1, !tbaa !26
  %737 = load i8, ptr %.0554813.ph, align 1, !tbaa !26
  %738 = lshr i8 %737, 1
  %.narrow655.prol = sub i8 %736, %738
  store i8 %.narrow655.prol, ptr %.0556812.ph, align 1, !tbaa !26
  %739 = zext i8 %.narrow655.prol to i32
  %740 = sub nuw nsw i32 256, %739
  %741 = icmp slt i8 %.narrow655.prol, 0
  %742 = select i1 %741, i32 %740, i32 %739
  %743 = add i32 %742, %.0548810.ph
  %744 = or disjoint i64 %.0544811.ph, 1
  %.0556.prol = getelementptr inbounds i8, ptr %.0556812.ph, i64 1
  %.0554.prol = getelementptr inbounds i8, ptr %.0554813.ph, i64 1
  br label %.lr.ph815.prol.loopexit

.lr.ph815.prol.loopexit:                          ; preds = %.lr.ph815.prol, %.lr.ph815.preheader1549
  %.lcssa1553.unr = phi ptr [ poison, %.lr.ph815.preheader1549 ], [ %735, %.lr.ph815.prol ]
  %.lcssa1552.unr = phi i32 [ poison, %.lr.ph815.preheader1549 ], [ %743, %.lr.ph815.prol ]
  %.0556.lcssa1551.unr = phi ptr [ poison, %.lr.ph815.preheader1549 ], [ %.0556.prol, %.lr.ph815.prol ]
  %.0554.lcssa1550.unr = phi ptr [ poison, %.lr.ph815.preheader1549 ], [ %.0554.prol, %.lr.ph815.prol ]
  %.0554813.unr = phi ptr [ %.0554813.ph, %.lr.ph815.preheader1549 ], [ %.0554.prol, %.lr.ph815.prol ]
  %.0556812.unr = phi ptr [ %.0556812.ph, %.lr.ph815.preheader1549 ], [ %.0556.prol, %.lr.ph815.prol ]
  %.0544811.unr = phi i64 [ %.0544811.ph, %.lr.ph815.preheader1549 ], [ %744, %.lr.ph815.prol ]
  %.0548810.unr = phi i32 [ %.0548810.ph, %.lr.ph815.preheader1549 ], [ %743, %.lr.ph815.prol ]
  %.0558809.unr = phi ptr [ %.0558809.ph, %.lr.ph815.preheader1549 ], [ %735, %.lr.ph815.prol ]
  %745 = add nsw i64 %734, -1
  %746 = icmp eq i64 %.0544811.ph, %745
  br i1 %746, label %.preheader695, label %.lr.ph815

vector.memcheck1268:                              ; preds = %.lr.ph815.preheader
  %747 = sub i64 %733, %19
  %diff.check1269 = icmp ult i64 %747, 8
  %748 = sub i64 %733, %16
  %diff.check1270 = icmp ult i64 %748, 8
  %conflict.rdx1271 = or i1 %diff.check1269, %diff.check1270
  br i1 %conflict.rdx1271, label %.lr.ph815.preheader1549, label %vector.ph1275

vector.ph1275:                                    ; preds = %vector.memcheck1268
  %n.vec1277 = and i64 %734, 56
  %ind.end1278 = getelementptr i8, ptr %.0554808, i64 %n.vec1277
  %ind.end1280 = getelementptr i8, ptr %.0556807, i64 %n.vec1277
  %ind.end1283 = getelementptr i8, ptr %730, i64 %n.vec1277
  %749 = getelementptr i8, ptr %18, i64 5
  %wide.load1295 = load <4 x i8>, ptr %730, align 1, !tbaa !26
  %wide.load1296 = load <4 x i8>, ptr %749, align 1, !tbaa !26
  %750 = getelementptr i8, ptr %15, i64 5
  %wide.load1297 = load <4 x i8>, ptr %.0554808, align 1, !tbaa !26
  %wide.load1298 = load <4 x i8>, ptr %750, align 1, !tbaa !26
  %751 = lshr <4 x i8> %wide.load1297, <i8 1, i8 1, i8 1, i8 1>
  %752 = lshr <4 x i8> %wide.load1298, <i8 1, i8 1, i8 1, i8 1>
  %753 = sub <4 x i8> %wide.load1295, %751
  %754 = sub <4 x i8> %wide.load1296, %752
  %755 = getelementptr i8, ptr %732, i64 5
  store <4 x i8> %753, ptr %.0556807, align 1, !tbaa !26
  store <4 x i8> %754, ptr %755, align 1, !tbaa !26
  %756 = zext <4 x i8> %753 to <4 x i32>
  %757 = zext <4 x i8> %754 to <4 x i32>
  %758 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %756
  %759 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %757
  %760 = icmp slt <4 x i8> %753, zeroinitializer
  %761 = icmp slt <4 x i8> %754, zeroinitializer
  %762 = select <4 x i1> %760, <4 x i32> %758, <4 x i32> %756
  %763 = select <4 x i1> %761, <4 x i32> %759, <4 x i32> %757
  %764 = icmp eq i64 %n.vec1277, 8
  br i1 %764, label %middle.block1272, label %vector.body1285.1, !llvm.loop !70

vector.body1285.1:                                ; preds = %vector.ph1275
  %next.gep1289.1 = getelementptr i8, ptr %15, i64 9
  %next.gep1291.1 = getelementptr i8, ptr %732, i64 9
  %next.gep1293.1 = getelementptr i8, ptr %18, i64 9
  %765 = getelementptr i8, ptr %18, i64 13
  %wide.load1295.1 = load <4 x i8>, ptr %next.gep1293.1, align 1, !tbaa !26
  %wide.load1296.1 = load <4 x i8>, ptr %765, align 1, !tbaa !26
  %766 = getelementptr i8, ptr %15, i64 13
  %wide.load1297.1 = load <4 x i8>, ptr %next.gep1289.1, align 1, !tbaa !26
  %wide.load1298.1 = load <4 x i8>, ptr %766, align 1, !tbaa !26
  %767 = lshr <4 x i8> %wide.load1297.1, <i8 1, i8 1, i8 1, i8 1>
  %768 = lshr <4 x i8> %wide.load1298.1, <i8 1, i8 1, i8 1, i8 1>
  %769 = sub <4 x i8> %wide.load1295.1, %767
  %770 = sub <4 x i8> %wide.load1296.1, %768
  %771 = getelementptr i8, ptr %732, i64 13
  store <4 x i8> %769, ptr %next.gep1291.1, align 1, !tbaa !26
  store <4 x i8> %770, ptr %771, align 1, !tbaa !26
  %772 = zext <4 x i8> %769 to <4 x i32>
  %773 = zext <4 x i8> %770 to <4 x i32>
  %774 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %772
  %775 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %773
  %776 = icmp slt <4 x i8> %769, zeroinitializer
  %777 = icmp slt <4 x i8> %770, zeroinitializer
  %778 = select <4 x i1> %776, <4 x i32> %774, <4 x i32> %772
  %779 = select <4 x i1> %777, <4 x i32> %775, <4 x i32> %773
  %780 = add nuw nsw <4 x i32> %778, %762
  %781 = add nuw nsw <4 x i32> %779, %763
  %782 = icmp eq i64 %n.vec1277, 16
  br i1 %782, label %middle.block1272, label %vector.body1285.2, !llvm.loop !70

vector.body1285.2:                                ; preds = %vector.body1285.1
  %next.gep1289.2 = getelementptr i8, ptr %15, i64 17
  %next.gep1291.2 = getelementptr i8, ptr %732, i64 17
  %next.gep1293.2 = getelementptr i8, ptr %18, i64 17
  %783 = getelementptr i8, ptr %18, i64 21
  %wide.load1295.2 = load <4 x i8>, ptr %next.gep1293.2, align 1, !tbaa !26
  %wide.load1296.2 = load <4 x i8>, ptr %783, align 1, !tbaa !26
  %784 = getelementptr i8, ptr %15, i64 21
  %wide.load1297.2 = load <4 x i8>, ptr %next.gep1289.2, align 1, !tbaa !26
  %wide.load1298.2 = load <4 x i8>, ptr %784, align 1, !tbaa !26
  %785 = lshr <4 x i8> %wide.load1297.2, <i8 1, i8 1, i8 1, i8 1>
  %786 = lshr <4 x i8> %wide.load1298.2, <i8 1, i8 1, i8 1, i8 1>
  %787 = sub <4 x i8> %wide.load1295.2, %785
  %788 = sub <4 x i8> %wide.load1296.2, %786
  %789 = getelementptr i8, ptr %732, i64 21
  store <4 x i8> %787, ptr %next.gep1291.2, align 1, !tbaa !26
  store <4 x i8> %788, ptr %789, align 1, !tbaa !26
  %790 = zext <4 x i8> %787 to <4 x i32>
  %791 = zext <4 x i8> %788 to <4 x i32>
  %792 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %790
  %793 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %791
  %794 = icmp slt <4 x i8> %787, zeroinitializer
  %795 = icmp slt <4 x i8> %788, zeroinitializer
  %796 = select <4 x i1> %794, <4 x i32> %792, <4 x i32> %790
  %797 = select <4 x i1> %795, <4 x i32> %793, <4 x i32> %791
  %798 = add nuw nsw <4 x i32> %796, %780
  %799 = add nuw nsw <4 x i32> %797, %781
  %800 = icmp eq i64 %n.vec1277, 24
  br i1 %800, label %middle.block1272, label %vector.body1285.3, !llvm.loop !70

vector.body1285.3:                                ; preds = %vector.body1285.2
  %next.gep1289.3 = getelementptr i8, ptr %15, i64 25
  %next.gep1291.3 = getelementptr i8, ptr %732, i64 25
  %next.gep1293.3 = getelementptr i8, ptr %18, i64 25
  %801 = getelementptr i8, ptr %18, i64 29
  %wide.load1295.3 = load <4 x i8>, ptr %next.gep1293.3, align 1, !tbaa !26
  %wide.load1296.3 = load <4 x i8>, ptr %801, align 1, !tbaa !26
  %802 = getelementptr i8, ptr %15, i64 29
  %wide.load1297.3 = load <4 x i8>, ptr %next.gep1289.3, align 1, !tbaa !26
  %wide.load1298.3 = load <4 x i8>, ptr %802, align 1, !tbaa !26
  %803 = lshr <4 x i8> %wide.load1297.3, <i8 1, i8 1, i8 1, i8 1>
  %804 = lshr <4 x i8> %wide.load1298.3, <i8 1, i8 1, i8 1, i8 1>
  %805 = sub <4 x i8> %wide.load1295.3, %803
  %806 = sub <4 x i8> %wide.load1296.3, %804
  %807 = getelementptr i8, ptr %732, i64 29
  store <4 x i8> %805, ptr %next.gep1291.3, align 1, !tbaa !26
  store <4 x i8> %806, ptr %807, align 1, !tbaa !26
  %808 = zext <4 x i8> %805 to <4 x i32>
  %809 = zext <4 x i8> %806 to <4 x i32>
  %810 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %808
  %811 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %809
  %812 = icmp slt <4 x i8> %805, zeroinitializer
  %813 = icmp slt <4 x i8> %806, zeroinitializer
  %814 = select <4 x i1> %812, <4 x i32> %810, <4 x i32> %808
  %815 = select <4 x i1> %813, <4 x i32> %811, <4 x i32> %809
  %816 = add nuw nsw <4 x i32> %814, %798
  %817 = add nuw nsw <4 x i32> %815, %799
  br label %middle.block1272

middle.block1272:                                 ; preds = %vector.body1285.3, %vector.body1285.2, %vector.body1285.1, %vector.ph1275
  %.lcssa1555 = phi <4 x i32> [ %762, %vector.ph1275 ], [ %780, %vector.body1285.1 ], [ %798, %vector.body1285.2 ], [ %816, %vector.body1285.3 ]
  %.lcssa1554 = phi <4 x i32> [ %763, %vector.ph1275 ], [ %781, %vector.body1285.1 ], [ %799, %vector.body1285.2 ], [ %817, %vector.body1285.3 ]
  %bin.rdx1300 = add nsw <4 x i32> %.lcssa1554, %.lcssa1555
  %818 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx1300)
  %cmp.n1301 = icmp eq i64 %n.vec1277, %734
  br i1 %cmp.n1301, label %.preheader695, label %.lr.ph815.preheader1549

.preheader695:                                    ; preds = %.lr.ph815.prol.loopexit, %.lr.ph815, %middle.block1272, %729
  %.0558.lcssa = phi ptr [ %730, %729 ], [ %ind.end1283, %middle.block1272 ], [ %.lcssa1553.unr, %.lr.ph815.prol.loopexit ], [ %829, %.lr.ph815 ]
  %.0548.lcssa = phi i32 [ 0, %729 ], [ %818, %middle.block1272 ], [ %.lcssa1552.unr, %.lr.ph815.prol.loopexit ], [ %837, %.lr.ph815 ]
  %.0544.lcssa = phi i64 [ 0, %729 ], [ %734, %middle.block1272 ], [ %734, %.lr.ph815 ], [ %734, %.lr.ph815.prol.loopexit ]
  %.0556.lcssa = phi ptr [ %.0556807, %729 ], [ %ind.end1280, %middle.block1272 ], [ %.0556.lcssa1551.unr, %.lr.ph815.prol.loopexit ], [ %.0556.1, %.lr.ph815 ]
  %.0554.lcssa = phi ptr [ %.0554808, %729 ], [ %ind.end1278, %middle.block1272 ], [ %.0554.lcssa1550.unr, %.lr.ph815.prol.loopexit ], [ %.0554.1, %.lr.ph815 ]
  %819 = icmp ult i64 %.0544.lcssa, %6
  br i1 %819, label %.lr.ph827, label %._crit_edge828

.lr.ph815:                                        ; preds = %.lr.ph815.prol.loopexit, %.lr.ph815
  %.0554813 = phi ptr [ %.0554.1, %.lr.ph815 ], [ %.0554813.unr, %.lr.ph815.prol.loopexit ]
  %.0556812 = phi ptr [ %.0556.1, %.lr.ph815 ], [ %.0556812.unr, %.lr.ph815.prol.loopexit ]
  %.0544811 = phi i64 [ %838, %.lr.ph815 ], [ %.0544811.unr, %.lr.ph815.prol.loopexit ]
  %.0548810 = phi i32 [ %837, %.lr.ph815 ], [ %.0548810.unr, %.lr.ph815.prol.loopexit ]
  %.0558809 = phi ptr [ %829, %.lr.ph815 ], [ %.0558809.unr, %.lr.ph815.prol.loopexit ]
  %820 = getelementptr inbounds i8, ptr %.0558809, i64 1
  %821 = load i8, ptr %.0558809, align 1, !tbaa !26
  %822 = load i8, ptr %.0554813, align 1, !tbaa !26
  %823 = lshr i8 %822, 1
  %.narrow655 = sub i8 %821, %823
  store i8 %.narrow655, ptr %.0556812, align 1, !tbaa !26
  %824 = zext i8 %.narrow655 to i32
  %825 = sub nuw nsw i32 256, %824
  %826 = icmp slt i8 %.narrow655, 0
  %827 = select i1 %826, i32 %825, i32 %824
  %828 = add i32 %827, %.0548810
  %.0556 = getelementptr inbounds i8, ptr %.0556812, i64 1
  %.0554 = getelementptr inbounds i8, ptr %.0554813, i64 1
  %829 = getelementptr inbounds i8, ptr %.0558809, i64 2
  %830 = load i8, ptr %820, align 1, !tbaa !26
  %831 = load i8, ptr %.0554, align 1, !tbaa !26
  %832 = lshr i8 %831, 1
  %.narrow655.1 = sub i8 %830, %832
  store i8 %.narrow655.1, ptr %.0556, align 1, !tbaa !26
  %833 = zext i8 %.narrow655.1 to i32
  %834 = sub nuw nsw i32 256, %833
  %835 = icmp slt i8 %.narrow655.1, 0
  %836 = select i1 %835, i32 %834, i32 %833
  %837 = add i32 %836, %828
  %838 = add nuw nsw i64 %.0544811, 2
  %.0556.1 = getelementptr inbounds i8, ptr %.0556812, i64 2
  %.0554.1 = getelementptr inbounds i8, ptr %.0554813, i64 2
  %exitcond1021.not.1 = icmp eq i64 %838, %734
  br i1 %exitcond1021.not.1, label %.preheader695, label %.lr.ph815, !llvm.loop !71

.lr.ph827:                                        ; preds = %.preheader695, %.lr.ph827
  %.1545826 = phi i64 [ %856, %.lr.ph827 ], [ %.0544.lcssa, %.preheader695 ]
  %.1549825 = phi i32 [ %850, %.lr.ph827 ], [ %.0548.lcssa, %.preheader695 ]
  %.0553824 = phi ptr [ %853, %.lr.ph827 ], [ %730, %.preheader695 ]
  %.1555823 = phi ptr [ %854, %.lr.ph827 ], [ %.0554.lcssa, %.preheader695 ]
  %.1557822 = phi ptr [ %852, %.lr.ph827 ], [ %.0556.lcssa, %.preheader695 ]
  %.1559821 = phi ptr [ %855, %.lr.ph827 ], [ %.0558.lcssa, %.preheader695 ]
  %839 = load i8, ptr %.1559821, align 1, !tbaa !26
  %840 = load i8, ptr %.1555823, align 1, !tbaa !26
  %841 = zext i8 %840 to i16
  %842 = load i8, ptr %.0553824, align 1, !tbaa !26
  %843 = zext i8 %842 to i16
  %844 = add nuw nsw i16 %843, %841
  %845 = lshr i16 %844, 1
  %.tr = trunc nuw i16 %845 to i8
  %.narrow652 = sub i8 %839, %.tr
  store i8 %.narrow652, ptr %.1557822, align 1, !tbaa !26
  %846 = zext i8 %.narrow652 to i32
  %847 = sub nuw nsw i32 256, %846
  %848 = icmp slt i8 %.narrow652, 0
  %849 = select i1 %848, i32 %847, i32 %846
  %850 = add i32 %849, %.1549825
  %851 = icmp ule i32 %850, %.1547
  %852 = getelementptr inbounds i8, ptr %.1557822, i64 1
  %853 = getelementptr inbounds i8, ptr %.0553824, i64 1
  %854 = getelementptr inbounds i8, ptr %.1555823, i64 1
  %855 = getelementptr inbounds i8, ptr %.1559821, i64 1
  %856 = add nuw i64 %.1545826, 1
  %857 = icmp ult i64 %856, %6
  %or.cond933 = select i1 %851, i1 %857, i1 false
  br i1 %or.cond933, label %.lr.ph827, label %._crit_edge828, !llvm.loop !72

._crit_edge828:                                   ; preds = %.lr.ph827, %.preheader695
  %.2550 = phi i32 [ %.0548.lcssa, %.preheader695 ], [ %850, %.lr.ph827 ]
  %858 = load i8, ptr %666, align 8, !tbaa !32
  %859 = icmp eq i8 %858, 2
  br i1 %859, label %860, label %920

860:                                              ; preds = %._crit_edge828
  %861 = and i32 %.2550, 65535
  %862 = lshr i32 %.2550, 10
  %863 = and i32 %862, 4194240
  %.not953 = icmp eq i8 %8, 0
  br i1 %.not953, label %._crit_edge837, label %.lr.ph836

.lr.ph836:                                        ; preds = %860
  %864 = getelementptr inbounds i8, ptr %0, i64 928
  %865 = load ptr, ptr %864, align 8, !tbaa !33
  %866 = getelementptr inbounds i8, ptr %0, i64 936
  %wide.trip.count1025 = zext i8 %8 to i64
  %xtraiter1622 = and i64 %wide.trip.count1025, 1
  %867 = icmp eq i8 %8, 1
  br i1 %867, label %._crit_edge837.loopexit.unr-lcssa, label %.lr.ph836.new

.lr.ph836.new:                                    ; preds = %.lr.ph836
  %unroll_iter1626 = and i64 %wide.trip.count1025, 254
  br label %868

868:                                              ; preds = %894, %.lr.ph836.new
  %indvars.iv1022 = phi i64 [ 0, %.lr.ph836.new ], [ %indvars.iv.next1023.1, %894 ]
  %.0534834 = phi i32 [ %861, %.lr.ph836.new ], [ %.1535.1, %894 ]
  %.0536833 = phi i32 [ %863, %.lr.ph836.new ], [ %.1537.1, %894 ]
  %niter1627 = phi i64 [ 0, %.lr.ph836.new ], [ %niter1627.next.1, %894 ]
  %869 = getelementptr inbounds i8, ptr %865, i64 %indvars.iv1022
  %870 = load i8, ptr %869, align 1, !tbaa !26
  %871 = icmp eq i8 %870, 0
  br i1 %871, label %872, label %881

872:                                              ; preds = %868
  %873 = load ptr, ptr %866, align 8, !tbaa !34
  %874 = getelementptr inbounds i16, ptr %873, i64 %indvars.iv1022
  %875 = load i16, ptr %874, align 2, !tbaa !35
  %876 = zext i16 %875 to i32
  %877 = mul i32 %.0534834, %876
  %878 = lshr i32 %877, 8
  %879 = mul i32 %.0536833, %876
  %880 = lshr i32 %879, 8
  br label %881

881:                                              ; preds = %868, %872
  %.1537 = phi i32 [ %880, %872 ], [ %.0536833, %868 ]
  %.1535 = phi i32 [ %878, %872 ], [ %.0534834, %868 ]
  %indvars.iv.next1023 = or disjoint i64 %indvars.iv1022, 1
  %882 = getelementptr inbounds i8, ptr %865, i64 %indvars.iv.next1023
  %883 = load i8, ptr %882, align 1, !tbaa !26
  %884 = icmp eq i8 %883, 0
  br i1 %884, label %885, label %894

885:                                              ; preds = %881
  %886 = load ptr, ptr %866, align 8, !tbaa !34
  %887 = getelementptr inbounds i16, ptr %886, i64 %indvars.iv.next1023
  %888 = load i16, ptr %887, align 2, !tbaa !35
  %889 = zext i16 %888 to i32
  %890 = mul i32 %.1535, %889
  %891 = lshr i32 %890, 8
  %892 = mul i32 %.1537, %889
  %893 = lshr i32 %892, 8
  br label %894

894:                                              ; preds = %885, %881
  %.1537.1 = phi i32 [ %893, %885 ], [ %.1537, %881 ]
  %.1535.1 = phi i32 [ %891, %885 ], [ %.1535, %881 ]
  %indvars.iv.next1023.1 = add nuw nsw i64 %indvars.iv1022, 2
  %niter1627.next.1 = add i64 %niter1627, 2
  %niter1627.ncmp.1 = icmp eq i64 %niter1627.next.1, %unroll_iter1626
  br i1 %niter1627.ncmp.1, label %._crit_edge837.loopexit.unr-lcssa, label %868, !llvm.loop !73

._crit_edge837.loopexit.unr-lcssa:                ; preds = %894, %.lr.ph836
  %.1537.lcssa.ph = phi i32 [ poison, %.lr.ph836 ], [ %.1537.1, %894 ]
  %.1535.lcssa.ph = phi i32 [ poison, %.lr.ph836 ], [ %.1535.1, %894 ]
  %indvars.iv1022.unr = phi i64 [ 0, %.lr.ph836 ], [ %indvars.iv.next1023.1, %894 ]
  %.0534834.unr = phi i32 [ %861, %.lr.ph836 ], [ %.1535.1, %894 ]
  %.0536833.unr = phi i32 [ %863, %.lr.ph836 ], [ %.1537.1, %894 ]
  %lcmp.mod1623.not = icmp eq i64 %xtraiter1622, 0
  br i1 %lcmp.mod1623.not, label %._crit_edge837, label %.epil.preheader1621

.epil.preheader1621:                              ; preds = %._crit_edge837.loopexit.unr-lcssa
  %895 = getelementptr inbounds i8, ptr %865, i64 %indvars.iv1022.unr
  %896 = load i8, ptr %895, align 1, !tbaa !26
  %897 = icmp eq i8 %896, 0
  br i1 %897, label %898, label %._crit_edge837

898:                                              ; preds = %.epil.preheader1621
  %899 = load ptr, ptr %866, align 8, !tbaa !34
  %900 = getelementptr inbounds i16, ptr %899, i64 %indvars.iv1022.unr
  %901 = load i16, ptr %900, align 2, !tbaa !35
  %902 = zext i16 %901 to i32
  %903 = mul i32 %.0534834.unr, %902
  %904 = lshr i32 %903, 8
  %905 = mul i32 %.0536833.unr, %902
  %906 = lshr i32 %905, 8
  br label %._crit_edge837

._crit_edge837:                                   ; preds = %._crit_edge837.loopexit.unr-lcssa, %898, %.epil.preheader1621, %860
  %.0536.lcssa = phi i32 [ %863, %860 ], [ %.1537.lcssa.ph, %._crit_edge837.loopexit.unr-lcssa ], [ %906, %898 ], [ %.0536833.unr, %.epil.preheader1621 ]
  %.0534.lcssa = phi i32 [ %861, %860 ], [ %.1535.lcssa.ph, %._crit_edge837.loopexit.unr-lcssa ], [ %904, %898 ], [ %.0534834.unr, %.epil.preheader1621 ]
  %907 = getelementptr inbounds i8, ptr %0, i64 952
  %908 = load ptr, ptr %907, align 8, !tbaa !37
  %909 = getelementptr inbounds i8, ptr %908, i64 6
  %910 = load i16, ptr %909, align 2, !tbaa !35
  %911 = zext i16 %910 to i32
  %912 = mul i32 %.0536.lcssa, %911
  %913 = icmp ugt i32 %912, 33553927
  br i1 %913, label %920, label %914

914:                                              ; preds = %._crit_edge837
  %915 = mul i32 %.0534.lcssa, %911
  %916 = lshr i32 %915, 3
  %917 = shl nuw i32 %912, 7
  %918 = and i32 %917, -1024
  %919 = add i32 %918, %916
  br label %920

920:                                              ; preds = %914, %._crit_edge837, %._crit_edge828
  %.4552 = phi i32 [ %.2550, %._crit_edge828 ], [ %919, %914 ], [ 2147483647, %._crit_edge837 ]
  %921 = icmp ult i32 %.4552, %.4486
  br i1 %921, label %.sink.split1088, label %923

.sink.split1088:                                  ; preds = %.lr.ph857, %middle.block1339, %vec.epilog.middle.block1360, %920, %.preheader694
  %.sink1089 = phi ptr [ %586, %.preheader694 ], [ %731, %920 ], [ %586, %vec.epilog.middle.block1360 ], [ %586, %middle.block1339 ], [ %586, %.lr.ph857 ]
  %.6488.ph = phi i32 [ %.4486, %.preheader694 ], [ %.4552, %920 ], [ %.4486, %vec.epilog.middle.block1360 ], [ %.4486, %middle.block1339 ], [ %.4486, %.lr.ph857 ]
  %922 = load ptr, ptr %.sink1089, align 8, !tbaa !62
  br label %923

923:                                              ; preds = %.sink.split1088, %920, %663
  %.6488 = phi i32 [ %.4486, %663 ], [ %.4486, %920 ], [ %.6488.ph, %.sink.split1088 ]
  %.5 = phi ptr [ %.3, %663 ], [ %.3, %920 ], [ %922, %.sink.split1088 ]
  %924 = icmp eq i8 %4, -128
  br i1 %924, label %925, label %1021

925:                                              ; preds = %923
  %926 = getelementptr inbounds i8, ptr %18, i64 1
  %927 = getelementptr inbounds i8, ptr %0, i64 584
  %928 = load ptr, ptr %927, align 8, !tbaa !74
  %929 = ptrtoint ptr %928 to i64
  %930 = getelementptr inbounds i8, ptr %15, i64 1
  %931 = zext nneg i32 %13 to i64
  %.0530900 = getelementptr inbounds i8, ptr %928, i64 1
  %.not958 = icmp eq i8 %10, 0
  br i1 %.not958, label %.preheader692, label %.lr.ph906.preheader

.lr.ph906.preheader:                              ; preds = %925
  %min.iters.check1437 = icmp ult i8 %10, 121
  br i1 %min.iters.check1437, label %.lr.ph906.preheader1533, label %vector.memcheck1431

.lr.ph906.preheader1533:                          ; preds = %middle.block1435, %vector.memcheck1431, %.lr.ph906.preheader
  %.0530904.ph = phi ptr [ %.0530900, %vector.memcheck1431 ], [ %.0530900, %.lr.ph906.preheader ], [ %ind.end1441, %middle.block1435 ]
  %.0524903.ph = phi i64 [ 0, %vector.memcheck1431 ], [ 0, %.lr.ph906.preheader ], [ %n.vec1440, %middle.block1435 ]
  %.0528902.ph = phi ptr [ %930, %vector.memcheck1431 ], [ %930, %.lr.ph906.preheader ], [ %ind.end1444, %middle.block1435 ]
  %.0532901.ph = phi ptr [ %926, %vector.memcheck1431 ], [ %926, %.lr.ph906.preheader ], [ %ind.end1446, %middle.block1435 ]
  %xtraiter1648 = and i64 %931, 3
  %lcmp.mod1649.not = icmp eq i64 %xtraiter1648, 0
  br i1 %lcmp.mod1649.not, label %.lr.ph906.prol.loopexit, label %.lr.ph906.prol

.lr.ph906.prol:                                   ; preds = %.lr.ph906.preheader1533, %.lr.ph906.prol
  %.0530904.prol = phi ptr [ %.0530.prol, %.lr.ph906.prol ], [ %.0530904.ph, %.lr.ph906.preheader1533 ]
  %.0524903.prol = phi i64 [ %936, %.lr.ph906.prol ], [ %.0524903.ph, %.lr.ph906.preheader1533 ]
  %.0528902.prol = phi ptr [ %934, %.lr.ph906.prol ], [ %.0528902.ph, %.lr.ph906.preheader1533 ]
  %.0532901.prol = phi ptr [ %932, %.lr.ph906.prol ], [ %.0532901.ph, %.lr.ph906.preheader1533 ]
  %prol.iter1650 = phi i64 [ %prol.iter1650.next, %.lr.ph906.prol ], [ 0, %.lr.ph906.preheader1533 ]
  %932 = getelementptr inbounds i8, ptr %.0532901.prol, i64 1
  %933 = load i8, ptr %.0532901.prol, align 1, !tbaa !26
  %934 = getelementptr inbounds i8, ptr %.0528902.prol, i64 1
  %935 = load i8, ptr %.0528902.prol, align 1, !tbaa !26
  %.narrow673.prol = sub i8 %933, %935
  store i8 %.narrow673.prol, ptr %.0530904.prol, align 1, !tbaa !26
  %936 = add nuw nsw i64 %.0524903.prol, 1
  %.0530.prol = getelementptr inbounds i8, ptr %.0530904.prol, i64 1
  %prol.iter1650.next = add i64 %prol.iter1650, 1
  %prol.iter1650.cmp.not = icmp eq i64 %prol.iter1650.next, %xtraiter1648
  br i1 %prol.iter1650.cmp.not, label %.lr.ph906.prol.loopexit, label %.lr.ph906.prol, !llvm.loop !75

.lr.ph906.prol.loopexit:                          ; preds = %.lr.ph906.prol, %.lr.ph906.preheader1533
  %.lcssa1535.unr = phi ptr [ poison, %.lr.ph906.preheader1533 ], [ %932, %.lr.ph906.prol ]
  %.lcssa.unr = phi ptr [ poison, %.lr.ph906.preheader1533 ], [ %934, %.lr.ph906.prol ]
  %.0530.lcssa1534.unr = phi ptr [ poison, %.lr.ph906.preheader1533 ], [ %.0530.prol, %.lr.ph906.prol ]
  %.0530904.unr = phi ptr [ %.0530904.ph, %.lr.ph906.preheader1533 ], [ %.0530.prol, %.lr.ph906.prol ]
  %.0524903.unr = phi i64 [ %.0524903.ph, %.lr.ph906.preheader1533 ], [ %936, %.lr.ph906.prol ]
  %.0528902.unr = phi ptr [ %.0528902.ph, %.lr.ph906.preheader1533 ], [ %934, %.lr.ph906.prol ]
  %.0532901.unr = phi ptr [ %.0532901.ph, %.lr.ph906.preheader1533 ], [ %932, %.lr.ph906.prol ]
  %937 = sub nsw i64 %.0524903.ph, %931
  %938 = icmp ugt i64 %937, -4
  br i1 %938, label %.preheader692, label %.lr.ph906

vector.memcheck1431:                              ; preds = %.lr.ph906.preheader
  %939 = sub i64 %929, %19
  %diff.check1432 = icmp ult i64 %939, 16
  %940 = sub i64 %929, %16
  %diff.check1433 = icmp ult i64 %940, 16
  %conflict.rdx1434 = or i1 %diff.check1432, %diff.check1433
  br i1 %conflict.rdx1434, label %.lr.ph906.preheader1533, label %vector.ph1438

vector.ph1438:                                    ; preds = %vector.memcheck1431
  %n.vec1440 = and i64 %931, 48
  %ind.end1441 = getelementptr i8, ptr %.0530900, i64 %n.vec1440
  %ind.end1444 = getelementptr i8, ptr %930, i64 %n.vec1440
  %ind.end1446 = getelementptr i8, ptr %926, i64 %n.vec1440
  %wide.load1453 = load <16 x i8>, ptr %926, align 1, !tbaa !26
  %wide.load1454 = load <16 x i8>, ptr %930, align 1, !tbaa !26
  %941 = sub <16 x i8> %wide.load1453, %wide.load1454
  store <16 x i8> %941, ptr %.0530900, align 1, !tbaa !26
  %942 = icmp eq i64 %n.vec1440, 16
  br i1 %942, label %middle.block1435, label %vector.body1448.1, !llvm.loop !76

vector.body1448.1:                                ; preds = %vector.ph1438
  %next.gep1450.1 = getelementptr i8, ptr %928, i64 17
  %next.gep1451.1 = getelementptr i8, ptr %15, i64 17
  %next.gep1452.1 = getelementptr i8, ptr %18, i64 17
  %wide.load1453.1 = load <16 x i8>, ptr %next.gep1452.1, align 1, !tbaa !26
  %wide.load1454.1 = load <16 x i8>, ptr %next.gep1451.1, align 1, !tbaa !26
  %943 = sub <16 x i8> %wide.load1453.1, %wide.load1454.1
  store <16 x i8> %943, ptr %next.gep1450.1, align 1, !tbaa !26
  br label %middle.block1435

middle.block1435:                                 ; preds = %vector.body1448.1, %vector.ph1438
  %cmp.n1456 = icmp eq i64 %n.vec1440, %931
  br i1 %cmp.n1456, label %.preheader692, label %.lr.ph906.preheader1533

.preheader692:                                    ; preds = %.lr.ph906.prol.loopexit, %.lr.ph906, %middle.block1435, %925
  %.0532.lcssa = phi ptr [ %926, %925 ], [ %ind.end1446, %middle.block1435 ], [ %.lcssa1535.unr, %.lr.ph906.prol.loopexit ], [ %996, %.lr.ph906 ]
  %.0528.lcssa = phi ptr [ %930, %925 ], [ %ind.end1444, %middle.block1435 ], [ %.lcssa.unr, %.lr.ph906.prol.loopexit ], [ %998, %.lr.ph906 ]
  %.0524.lcssa = phi i64 [ 0, %925 ], [ %931, %middle.block1435 ], [ %931, %.lr.ph906 ], [ %931, %.lr.ph906.prol.loopexit ]
  %.0530.lcssa = phi ptr [ %.0530900, %925 ], [ %ind.end1441, %middle.block1435 ], [ %.0530.lcssa1534.unr, %.lr.ph906.prol.loopexit ], [ %.0530.3, %.lr.ph906 ]
  %.0530.lcssa1458 = ptrtoint ptr %.0530.lcssa to i64
  %.0528.lcssa1460 = ptrtoint ptr %.0528.lcssa to i64
  %.0532.lcssa1463 = ptrtoint ptr %.0532.lcssa to i64
  %944 = icmp ult i64 %.0524.lcssa, %6
  br i1 %944, label %iter.check1472, label %.thread1059.sink.split

iter.check1472:                                   ; preds = %.preheader692
  %945 = sub i64 %6, %.0524.lcssa
  %min.iters.check1470 = icmp ult i64 %945, 8
  br i1 %min.iters.check1470, label %.lr.ph917.preheader, label %vector.memcheck1457

vector.memcheck1457:                              ; preds = %iter.check1472
  %946 = sub i64 %16, %.0530.lcssa1458
  %diff.check1459 = icmp ugt i64 %946, -17
  %947 = sub i64 %.0530.lcssa1458, %.0528.lcssa1460
  %diff.check1461 = icmp ult i64 %947, 16
  %conflict.rdx1462 = or i1 %diff.check1459, %diff.check1461
  %948 = sub i64 %.0530.lcssa1458, %.0532.lcssa1463
  %diff.check1464 = icmp ult i64 %948, 16
  %conflict.rdx1465 = or i1 %conflict.rdx1462, %diff.check1464
  %949 = sub i64 %19, %.0530.lcssa1458
  %diff.check1466 = icmp ugt i64 %949, -17
  %conflict.rdx1467 = or i1 %conflict.rdx1465, %diff.check1466
  br i1 %conflict.rdx1467, label %.lr.ph917.preheader, label %vector.main.loop.iter.check1474

vector.main.loop.iter.check1474:                  ; preds = %vector.memcheck1457
  %min.iters.check1473 = icmp ult i64 %945, 16
  br i1 %min.iters.check1473, label %vec.epilog.ph1493, label %vector.ph1475

vector.ph1475:                                    ; preds = %vector.main.loop.iter.check1474
  %n.vec1477 = and i64 %945, -16
  br label %vector.body1478

vector.body1478:                                  ; preds = %vector.body1478, %vector.ph1475
  %index1479 = phi i64 [ 0, %vector.ph1475 ], [ %index.next1489, %vector.body1478 ]
  %next.gep1480 = getelementptr i8, ptr %926, i64 %index1479
  %next.gep1481 = getelementptr i8, ptr %930, i64 %index1479
  %next.gep1482 = getelementptr i8, ptr %.0528.lcssa, i64 %index1479
  %next.gep1483 = getelementptr i8, ptr %.0530.lcssa, i64 %index1479
  %next.gep1484 = getelementptr i8, ptr %.0532.lcssa, i64 %index1479
  %wide.load1485 = load <16 x i8>, ptr %next.gep1482, align 1, !tbaa !26
  %950 = zext <16 x i8> %wide.load1485 to <16 x i32>
  %wide.load1486 = load <16 x i8>, ptr %next.gep1481, align 1, !tbaa !26
  %951 = zext <16 x i8> %wide.load1486 to <16 x i32>
  %wide.load1487 = load <16 x i8>, ptr %next.gep1480, align 1, !tbaa !26
  %952 = zext <16 x i8> %wide.load1487 to <16 x i32>
  %953 = sub nsw <16 x i32> %950, %951
  %954 = sub nsw <16 x i32> %952, %951
  %955 = tail call <16 x i32> @llvm.abs.v16i32(<16 x i32> %953, i1 true)
  %956 = tail call <16 x i32> @llvm.abs.v16i32(<16 x i32> %954, i1 true)
  %957 = add nsw <16 x i32> %954, %953
  %958 = tail call <16 x i32> @llvm.abs.v16i32(<16 x i32> %957, i1 true)
  %959 = icmp ugt <16 x i32> %955, %956
  %960 = icmp ugt <16 x i32> %955, %958
  %961 = select <16 x i1> %959, <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> %960
  %962 = icmp ugt <16 x i32> %956, %958
  %963 = select <16 x i1> %962, <16 x i8> %wide.load1486, <16 x i8> %wide.load1485
  %964 = select <16 x i1> %961, <16 x i8> %963, <16 x i8> %wide.load1487
  %wide.load1488 = load <16 x i8>, ptr %next.gep1484, align 1, !tbaa !26
  %965 = sub <16 x i8> %wide.load1488, %964
  store <16 x i8> %965, ptr %next.gep1483, align 1, !tbaa !26
  %index.next1489 = add nuw i64 %index1479, 16
  %966 = icmp eq i64 %index.next1489, %n.vec1477
  br i1 %966, label %middle.block1468, label %vector.body1478, !llvm.loop !77

middle.block1468:                                 ; preds = %vector.body1478
  %cmp.n1490 = icmp eq i64 %945, %n.vec1477
  br i1 %cmp.n1490, label %.thread1059.sink.split, label %vec.epilog.iter.check1494

vec.epilog.iter.check1494:                        ; preds = %middle.block1468
  %ind.end1516 = getelementptr i8, ptr %.0532.lcssa, i64 %n.vec1477
  %ind.end1513 = getelementptr i8, ptr %.0530.lcssa, i64 %n.vec1477
  %ind.end1510 = getelementptr i8, ptr %.0528.lcssa, i64 %n.vec1477
  %ind.end1507 = getelementptr i8, ptr %930, i64 %n.vec1477
  %ind.end1504 = getelementptr i8, ptr %926, i64 %n.vec1477
  %ind.end1501 = add i64 %.0524.lcssa, %n.vec1477
  %n.vec.remaining1495 = and i64 %945, 8
  %min.epilog.iters.check1496.not.not = icmp eq i64 %n.vec.remaining1495, 0
  br i1 %min.epilog.iters.check1496.not.not, label %.lr.ph917.preheader, label %vec.epilog.ph1493

.lr.ph917.preheader:                              ; preds = %vec.epilog.middle.block1491, %vector.memcheck1457, %iter.check1472, %vec.epilog.iter.check1494
  %.1525916.ph = phi i64 [ %.0524.lcssa, %iter.check1472 ], [ %.0524.lcssa, %vector.memcheck1457 ], [ %ind.end1501, %vec.epilog.iter.check1494 ], [ %ind.end1500, %vec.epilog.middle.block1491 ]
  %.0526915.ph = phi ptr [ %926, %iter.check1472 ], [ %926, %vector.memcheck1457 ], [ %ind.end1504, %vec.epilog.iter.check1494 ], [ %ind.end1503, %vec.epilog.middle.block1491 ]
  %.0527914.ph = phi ptr [ %930, %iter.check1472 ], [ %930, %vector.memcheck1457 ], [ %ind.end1507, %vec.epilog.iter.check1494 ], [ %ind.end1506, %vec.epilog.middle.block1491 ]
  %.1529913.ph = phi ptr [ %.0528.lcssa, %iter.check1472 ], [ %.0528.lcssa, %vector.memcheck1457 ], [ %ind.end1510, %vec.epilog.iter.check1494 ], [ %ind.end1509, %vec.epilog.middle.block1491 ]
  %.1531912.ph = phi ptr [ %.0530.lcssa, %iter.check1472 ], [ %.0530.lcssa, %vector.memcheck1457 ], [ %ind.end1513, %vec.epilog.iter.check1494 ], [ %ind.end1512, %vec.epilog.middle.block1491 ]
  %.1533911.ph = phi ptr [ %.0532.lcssa, %iter.check1472 ], [ %.0532.lcssa, %vector.memcheck1457 ], [ %ind.end1516, %vec.epilog.iter.check1494 ], [ %ind.end1515, %vec.epilog.middle.block1491 ]
  br label %.lr.ph917

vec.epilog.ph1493:                                ; preds = %vector.main.loop.iter.check1474, %vec.epilog.iter.check1494
  %vec.epilog.resume.val1497 = phi i64 [ %n.vec1477, %vec.epilog.iter.check1494 ], [ 0, %vector.main.loop.iter.check1474 ]
  %n.vec1499 = and i64 %945, -8
  %ind.end1500 = add i64 %.0524.lcssa, %n.vec1499
  %ind.end1503 = getelementptr i8, ptr %926, i64 %n.vec1499
  %ind.end1506 = getelementptr i8, ptr %930, i64 %n.vec1499
  %ind.end1509 = getelementptr i8, ptr %.0528.lcssa, i64 %n.vec1499
  %ind.end1512 = getelementptr i8, ptr %.0530.lcssa, i64 %n.vec1499
  %ind.end1515 = getelementptr i8, ptr %.0532.lcssa, i64 %n.vec1499
  br label %vec.epilog.vector.body1518

vec.epilog.vector.body1518:                       ; preds = %vec.epilog.vector.body1518, %vec.epilog.ph1493
  %index1519 = phi i64 [ %vec.epilog.resume.val1497, %vec.epilog.ph1493 ], [ %index.next1529, %vec.epilog.vector.body1518 ]
  %next.gep1520 = getelementptr i8, ptr %926, i64 %index1519
  %next.gep1521 = getelementptr i8, ptr %930, i64 %index1519
  %next.gep1522 = getelementptr i8, ptr %.0528.lcssa, i64 %index1519
  %next.gep1523 = getelementptr i8, ptr %.0530.lcssa, i64 %index1519
  %next.gep1524 = getelementptr i8, ptr %.0532.lcssa, i64 %index1519
  %wide.load1525 = load <8 x i8>, ptr %next.gep1522, align 1, !tbaa !26
  %967 = zext <8 x i8> %wide.load1525 to <8 x i32>
  %wide.load1526 = load <8 x i8>, ptr %next.gep1521, align 1, !tbaa !26
  %968 = zext <8 x i8> %wide.load1526 to <8 x i32>
  %wide.load1527 = load <8 x i8>, ptr %next.gep1520, align 1, !tbaa !26
  %969 = zext <8 x i8> %wide.load1527 to <8 x i32>
  %970 = sub nsw <8 x i32> %967, %968
  %971 = sub nsw <8 x i32> %969, %968
  %972 = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> %970, i1 true)
  %973 = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> %971, i1 true)
  %974 = add nsw <8 x i32> %971, %970
  %975 = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> %974, i1 true)
  %976 = icmp ugt <8 x i32> %972, %973
  %977 = icmp ugt <8 x i32> %972, %975
  %978 = select <8 x i1> %976, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i1> %977
  %979 = icmp ugt <8 x i32> %973, %975
  %980 = select <8 x i1> %979, <8 x i8> %wide.load1526, <8 x i8> %wide.load1525
  %981 = select <8 x i1> %978, <8 x i8> %980, <8 x i8> %wide.load1527
  %wide.load1528 = load <8 x i8>, ptr %next.gep1524, align 1, !tbaa !26
  %982 = sub <8 x i8> %wide.load1528, %981
  store <8 x i8> %982, ptr %next.gep1523, align 1, !tbaa !26
  %index.next1529 = add nuw i64 %index1519, 8
  %983 = icmp eq i64 %index.next1529, %n.vec1499
  br i1 %983, label %vec.epilog.middle.block1491, label %vec.epilog.vector.body1518, !llvm.loop !78

vec.epilog.middle.block1491:                      ; preds = %vec.epilog.vector.body1518
  %cmp.n1530 = icmp eq i64 %945, %n.vec1499
  br i1 %cmp.n1530, label %.thread1059.sink.split, label %.lr.ph917.preheader

.lr.ph906:                                        ; preds = %.lr.ph906.prol.loopexit, %.lr.ph906
  %.0530904 = phi ptr [ %.0530.3, %.lr.ph906 ], [ %.0530904.unr, %.lr.ph906.prol.loopexit ]
  %.0524903 = phi i64 [ %1000, %.lr.ph906 ], [ %.0524903.unr, %.lr.ph906.prol.loopexit ]
  %.0528902 = phi ptr [ %998, %.lr.ph906 ], [ %.0528902.unr, %.lr.ph906.prol.loopexit ]
  %.0532901 = phi ptr [ %996, %.lr.ph906 ], [ %.0532901.unr, %.lr.ph906.prol.loopexit ]
  %984 = getelementptr inbounds i8, ptr %.0532901, i64 1
  %985 = load i8, ptr %.0532901, align 1, !tbaa !26
  %986 = getelementptr inbounds i8, ptr %.0528902, i64 1
  %987 = load i8, ptr %.0528902, align 1, !tbaa !26
  %.narrow673 = sub i8 %985, %987
  store i8 %.narrow673, ptr %.0530904, align 1, !tbaa !26
  %.0530 = getelementptr inbounds i8, ptr %.0530904, i64 1
  %988 = getelementptr inbounds i8, ptr %.0532901, i64 2
  %989 = load i8, ptr %984, align 1, !tbaa !26
  %990 = getelementptr inbounds i8, ptr %.0528902, i64 2
  %991 = load i8, ptr %986, align 1, !tbaa !26
  %.narrow673.1 = sub i8 %989, %991
  store i8 %.narrow673.1, ptr %.0530, align 1, !tbaa !26
  %.0530.1 = getelementptr inbounds i8, ptr %.0530904, i64 2
  %992 = getelementptr inbounds i8, ptr %.0532901, i64 3
  %993 = load i8, ptr %988, align 1, !tbaa !26
  %994 = getelementptr inbounds i8, ptr %.0528902, i64 3
  %995 = load i8, ptr %990, align 1, !tbaa !26
  %.narrow673.2 = sub i8 %993, %995
  store i8 %.narrow673.2, ptr %.0530.1, align 1, !tbaa !26
  %.0530.2 = getelementptr inbounds i8, ptr %.0530904, i64 3
  %996 = getelementptr inbounds i8, ptr %.0532901, i64 4
  %997 = load i8, ptr %992, align 1, !tbaa !26
  %998 = getelementptr inbounds i8, ptr %.0528902, i64 4
  %999 = load i8, ptr %994, align 1, !tbaa !26
  %.narrow673.3 = sub i8 %997, %999
  store i8 %.narrow673.3, ptr %.0530.2, align 1, !tbaa !26
  %1000 = add nuw nsw i64 %.0524903, 4
  %.0530.3 = getelementptr inbounds i8, ptr %.0530904, i64 4
  %exitcond1039.not.3 = icmp eq i64 %1000, %931
  br i1 %exitcond1039.not.3, label %.preheader692, label %.lr.ph906, !llvm.loop !79

.lr.ph917:                                        ; preds = %.lr.ph917.preheader, %.lr.ph917
  %.1525916 = phi i64 [ %1020, %.lr.ph917 ], [ %.1525916.ph, %.lr.ph917.preheader ]
  %.0526915 = phi ptr [ %1007, %.lr.ph917 ], [ %.0526915.ph, %.lr.ph917.preheader ]
  %.0527914 = phi ptr [ %1004, %.lr.ph917 ], [ %.0527914.ph, %.lr.ph917.preheader ]
  %.1529913 = phi ptr [ %1001, %.lr.ph917 ], [ %.1529913.ph, %.lr.ph917.preheader ]
  %.1531912 = phi ptr [ %1019, %.lr.ph917 ], [ %.1531912.ph, %.lr.ph917.preheader ]
  %.1533911 = phi ptr [ %1017, %.lr.ph917 ], [ %.1533911.ph, %.lr.ph917.preheader ]
  %1001 = getelementptr inbounds i8, ptr %.1529913, i64 1
  %1002 = load i8, ptr %.1529913, align 1, !tbaa !26
  %1003 = zext i8 %1002 to i32
  %1004 = getelementptr inbounds i8, ptr %.0527914, i64 1
  %1005 = load i8, ptr %.0527914, align 1, !tbaa !26
  %1006 = zext i8 %1005 to i32
  %1007 = getelementptr inbounds i8, ptr %.0526915, i64 1
  %1008 = load i8, ptr %.0526915, align 1, !tbaa !26
  %1009 = zext i8 %1008 to i32
  %1010 = sub nsw i32 %1003, %1006
  %1011 = sub nsw i32 %1009, %1006
  %1012 = tail call i32 @llvm.abs.i32(i32 %1010, i1 true)
  %1013 = tail call i32 @llvm.abs.i32(i32 %1011, i1 true)
  %1014 = add nsw i32 %1011, %1010
  %1015 = tail call i32 @llvm.abs.i32(i32 %1014, i1 true)
  %.not667 = icmp ugt i32 %1012, %1013
  %.not668 = icmp ugt i32 %1012, %1015
  %or.cond690 = select i1 %.not667, i1 true, i1 %.not668
  %.not669 = icmp ugt i32 %1013, %1015
  %1016 = select i1 %.not669, i8 %1005, i8 %1002
  %.tr670 = select i1 %or.cond690, i8 %1016, i8 %1008
  %1017 = getelementptr inbounds i8, ptr %.1533911, i64 1
  %1018 = load i8, ptr %.1533911, align 1, !tbaa !26
  %.narrow671 = sub i8 %1018, %.tr670
  %1019 = getelementptr inbounds i8, ptr %.1531912, i64 1
  store i8 %.narrow671, ptr %.1531912, align 1, !tbaa !26
  %1020 = add nuw i64 %.1525916, 1
  %exitcond1040.not = icmp eq i64 %1020, %6
  br i1 %exitcond1040.not, label %.thread1059.sink.split, label %.lr.ph917, !llvm.loop !80

1021:                                             ; preds = %923
  %.not657 = icmp sgt i8 %4, -1
  br i1 %.not657, label %.thread1059, label %1022

1022:                                             ; preds = %1021
  %1023 = getelementptr inbounds i8, ptr %0, i64 920
  %1024 = load i8, ptr %1023, align 8, !tbaa !32
  %1025 = icmp eq i8 %1024, 2
  br i1 %1025, label %1026, label %1086

1026:                                             ; preds = %1022
  %1027 = and i32 %.6488, 65535
  %1028 = lshr i32 %.6488, 10
  %1029 = and i32 %1028, 4194240
  %.not955 = icmp eq i8 %8, 0
  br i1 %.not955, label %._crit_edge864, label %.lr.ph863

.lr.ph863:                                        ; preds = %1026
  %1030 = getelementptr inbounds i8, ptr %0, i64 928
  %1031 = load ptr, ptr %1030, align 8, !tbaa !33
  %1032 = getelementptr inbounds i8, ptr %0, i64 944
  %wide.trip.count1031 = zext i8 %8 to i64
  %xtraiter1632 = and i64 %wide.trip.count1031, 1
  %1033 = icmp eq i8 %8, 1
  br i1 %1033, label %._crit_edge864.loopexit.unr-lcssa, label %.lr.ph863.new

.lr.ph863.new:                                    ; preds = %.lr.ph863
  %unroll_iter1636 = and i64 %wide.trip.count1031, 254
  br label %1034

1034:                                             ; preds = %1060, %.lr.ph863.new
  %indvars.iv1028 = phi i64 [ 0, %.lr.ph863.new ], [ %indvars.iv.next1029.1, %1060 ]
  %.0494861 = phi i32 [ %1027, %.lr.ph863.new ], [ %.1495.1, %1060 ]
  %.0496860 = phi i32 [ %1029, %.lr.ph863.new ], [ %.1497.1, %1060 ]
  %niter1637 = phi i64 [ 0, %.lr.ph863.new ], [ %niter1637.next.1, %1060 ]
  %1035 = getelementptr inbounds i8, ptr %1031, i64 %indvars.iv1028
  %1036 = load i8, ptr %1035, align 1, !tbaa !26
  %1037 = icmp eq i8 %1036, 4
  br i1 %1037, label %1038, label %1047

1038:                                             ; preds = %1034
  %1039 = load ptr, ptr %1032, align 8, !tbaa !47
  %1040 = getelementptr inbounds i16, ptr %1039, i64 %indvars.iv1028
  %1041 = load i16, ptr %1040, align 2, !tbaa !35
  %1042 = zext i16 %1041 to i32
  %1043 = mul i32 %.0494861, %1042
  %1044 = lshr i32 %1043, 8
  %1045 = mul i32 %.0496860, %1042
  %1046 = lshr i32 %1045, 8
  br label %1047

1047:                                             ; preds = %1034, %1038
  %.1497 = phi i32 [ %1046, %1038 ], [ %.0496860, %1034 ]
  %.1495 = phi i32 [ %1044, %1038 ], [ %.0494861, %1034 ]
  %indvars.iv.next1029 = or disjoint i64 %indvars.iv1028, 1
  %1048 = getelementptr inbounds i8, ptr %1031, i64 %indvars.iv.next1029
  %1049 = load i8, ptr %1048, align 1, !tbaa !26
  %1050 = icmp eq i8 %1049, 4
  br i1 %1050, label %1051, label %1060

1051:                                             ; preds = %1047
  %1052 = load ptr, ptr %1032, align 8, !tbaa !47
  %1053 = getelementptr inbounds i16, ptr %1052, i64 %indvars.iv.next1029
  %1054 = load i16, ptr %1053, align 2, !tbaa !35
  %1055 = zext i16 %1054 to i32
  %1056 = mul i32 %.1495, %1055
  %1057 = lshr i32 %1056, 8
  %1058 = mul i32 %.1497, %1055
  %1059 = lshr i32 %1058, 8
  br label %1060

1060:                                             ; preds = %1051, %1047
  %.1497.1 = phi i32 [ %1059, %1051 ], [ %.1497, %1047 ]
  %.1495.1 = phi i32 [ %1057, %1051 ], [ %.1495, %1047 ]
  %indvars.iv.next1029.1 = add nuw nsw i64 %indvars.iv1028, 2
  %niter1637.next.1 = add i64 %niter1637, 2
  %niter1637.ncmp.1 = icmp eq i64 %niter1637.next.1, %unroll_iter1636
  br i1 %niter1637.ncmp.1, label %._crit_edge864.loopexit.unr-lcssa, label %1034, !llvm.loop !81

._crit_edge864.loopexit.unr-lcssa:                ; preds = %1060, %.lr.ph863
  %.1497.lcssa.ph = phi i32 [ poison, %.lr.ph863 ], [ %.1497.1, %1060 ]
  %.1495.lcssa.ph = phi i32 [ poison, %.lr.ph863 ], [ %.1495.1, %1060 ]
  %indvars.iv1028.unr = phi i64 [ 0, %.lr.ph863 ], [ %indvars.iv.next1029.1, %1060 ]
  %.0494861.unr = phi i32 [ %1027, %.lr.ph863 ], [ %.1495.1, %1060 ]
  %.0496860.unr = phi i32 [ %1029, %.lr.ph863 ], [ %.1497.1, %1060 ]
  %lcmp.mod1633.not = icmp eq i64 %xtraiter1632, 0
  br i1 %lcmp.mod1633.not, label %._crit_edge864, label %.epil.preheader1631

.epil.preheader1631:                              ; preds = %._crit_edge864.loopexit.unr-lcssa
  %1061 = getelementptr inbounds i8, ptr %1031, i64 %indvars.iv1028.unr
  %1062 = load i8, ptr %1061, align 1, !tbaa !26
  %1063 = icmp eq i8 %1062, 4
  br i1 %1063, label %1064, label %._crit_edge864

1064:                                             ; preds = %.epil.preheader1631
  %1065 = load ptr, ptr %1032, align 8, !tbaa !47
  %1066 = getelementptr inbounds i16, ptr %1065, i64 %indvars.iv1028.unr
  %1067 = load i16, ptr %1066, align 2, !tbaa !35
  %1068 = zext i16 %1067 to i32
  %1069 = mul i32 %.0494861.unr, %1068
  %1070 = lshr i32 %1069, 8
  %1071 = mul i32 %.0496860.unr, %1068
  %1072 = lshr i32 %1071, 8
  br label %._crit_edge864

._crit_edge864:                                   ; preds = %._crit_edge864.loopexit.unr-lcssa, %1064, %.epil.preheader1631, %1026
  %.0496.lcssa = phi i32 [ %1029, %1026 ], [ %.1497.lcssa.ph, %._crit_edge864.loopexit.unr-lcssa ], [ %1072, %1064 ], [ %.0496860.unr, %.epil.preheader1631 ]
  %.0494.lcssa = phi i32 [ %1027, %1026 ], [ %.1495.lcssa.ph, %._crit_edge864.loopexit.unr-lcssa ], [ %1070, %1064 ], [ %.0494861.unr, %.epil.preheader1631 ]
  %1073 = getelementptr inbounds i8, ptr %0, i64 960
  %1074 = load ptr, ptr %1073, align 8, !tbaa !49
  %1075 = getelementptr inbounds i8, ptr %1074, i64 8
  %1076 = load i16, ptr %1075, align 2, !tbaa !35
  %1077 = zext i16 %1076 to i32
  %1078 = mul i32 %.0496.lcssa, %1077
  %1079 = icmp ugt i32 %1078, 33553927
  br i1 %1079, label %1086, label %1080

1080:                                             ; preds = %._crit_edge864
  %1081 = mul i32 %.0494.lcssa, %1077
  %1082 = lshr i32 %1081, 3
  %1083 = shl nuw i32 %1078, 7
  %1084 = and i32 %1083, -1024
  %1085 = add i32 %1084, %1082
  br label %1086

1086:                                             ; preds = %1080, %._crit_edge864, %1022
  %.1502 = phi i32 [ %.6488, %1022 ], [ %1085, %1080 ], [ 2147483647, %._crit_edge864 ]
  %1087 = getelementptr inbounds i8, ptr %18, i64 1
  %1088 = getelementptr inbounds i8, ptr %0, i64 584
  %1089 = load ptr, ptr %1088, align 8, !tbaa !74
  %1090 = ptrtoint ptr %1089 to i64
  %1091 = getelementptr inbounds i8, ptr %15, i64 1
  %1092 = zext nneg i32 %13 to i64
  %.0512867 = getelementptr inbounds i8, ptr %1089, i64 1
  %.not956 = icmp eq i8 %10, 0
  br i1 %.not956, label %.preheader693, label %.lr.ph874.preheader

.lr.ph874.preheader:                              ; preds = %1086
  %min.iters.check1402 = icmp ult i8 %10, 57
  br i1 %min.iters.check1402, label %.lr.ph874.preheader1537, label %vector.memcheck1396

.lr.ph874.preheader1537:                          ; preds = %middle.block1400, %vector.memcheck1396, %.lr.ph874.preheader
  %.0512872.ph = phi ptr [ %.0512867, %vector.memcheck1396 ], [ %.0512867, %.lr.ph874.preheader ], [ %ind.end1406, %middle.block1400 ]
  %.0499871.ph = phi i64 [ 0, %vector.memcheck1396 ], [ 0, %.lr.ph874.preheader ], [ %n.vec1405, %middle.block1400 ]
  %.0503870.ph = phi i32 [ 0, %vector.memcheck1396 ], [ 0, %.lr.ph874.preheader ], [ %1168, %middle.block1400 ]
  %.0510869.ph = phi ptr [ %1091, %vector.memcheck1396 ], [ %1091, %.lr.ph874.preheader ], [ %ind.end1409, %middle.block1400 ]
  %.0514868.ph = phi ptr [ %1087, %vector.memcheck1396 ], [ %1087, %.lr.ph874.preheader ], [ %ind.end1411, %middle.block1400 ]
  %xtraiter1638 = and i64 %1092, 1
  %lcmp.mod1639.not = icmp eq i64 %xtraiter1638, 0
  br i1 %lcmp.mod1639.not, label %.lr.ph874.prol.loopexit, label %.lr.ph874.prol

.lr.ph874.prol:                                   ; preds = %.lr.ph874.preheader1537
  %1093 = getelementptr inbounds i8, ptr %.0514868.ph, i64 1
  %1094 = load i8, ptr %.0514868.ph, align 1, !tbaa !26
  %1095 = getelementptr inbounds i8, ptr %.0510869.ph, i64 1
  %1096 = load i8, ptr %.0510869.ph, align 1, !tbaa !26
  %.narrow664.prol = sub i8 %1094, %1096
  store i8 %.narrow664.prol, ptr %.0512872.ph, align 1, !tbaa !26
  %1097 = zext i8 %.narrow664.prol to i32
  %1098 = sub nuw nsw i32 256, %1097
  %1099 = icmp slt i8 %.narrow664.prol, 0
  %1100 = select i1 %1099, i32 %1098, i32 %1097
  %1101 = add i32 %1100, %.0503870.ph
  %1102 = or disjoint i64 %.0499871.ph, 1
  %.0512.prol = getelementptr inbounds i8, ptr %.0512872.ph, i64 1
  br label %.lr.ph874.prol.loopexit

.lr.ph874.prol.loopexit:                          ; preds = %.lr.ph874.prol, %.lr.ph874.preheader1537
  %.lcssa1541.unr = phi ptr [ poison, %.lr.ph874.preheader1537 ], [ %1093, %.lr.ph874.prol ]
  %.lcssa1540.unr = phi ptr [ poison, %.lr.ph874.preheader1537 ], [ %1095, %.lr.ph874.prol ]
  %.lcssa1539.unr = phi i32 [ poison, %.lr.ph874.preheader1537 ], [ %1101, %.lr.ph874.prol ]
  %.0512.lcssa1538.unr = phi ptr [ poison, %.lr.ph874.preheader1537 ], [ %.0512.prol, %.lr.ph874.prol ]
  %.0512872.unr = phi ptr [ %.0512872.ph, %.lr.ph874.preheader1537 ], [ %.0512.prol, %.lr.ph874.prol ]
  %.0499871.unr = phi i64 [ %.0499871.ph, %.lr.ph874.preheader1537 ], [ %1102, %.lr.ph874.prol ]
  %.0503870.unr = phi i32 [ %.0503870.ph, %.lr.ph874.preheader1537 ], [ %1101, %.lr.ph874.prol ]
  %.0510869.unr = phi ptr [ %.0510869.ph, %.lr.ph874.preheader1537 ], [ %1095, %.lr.ph874.prol ]
  %.0514868.unr = phi ptr [ %.0514868.ph, %.lr.ph874.preheader1537 ], [ %1093, %.lr.ph874.prol ]
  %1103 = add nsw i64 %1092, -1
  %1104 = icmp eq i64 %.0499871.ph, %1103
  br i1 %1104, label %.preheader693, label %.lr.ph874

vector.memcheck1396:                              ; preds = %.lr.ph874.preheader
  %1105 = sub i64 %1090, %19
  %diff.check1397 = icmp ult i64 %1105, 8
  %1106 = sub i64 %1090, %16
  %diff.check1398 = icmp ult i64 %1106, 8
  %conflict.rdx1399 = or i1 %diff.check1397, %diff.check1398
  br i1 %conflict.rdx1399, label %.lr.ph874.preheader1537, label %vector.ph1403

vector.ph1403:                                    ; preds = %vector.memcheck1396
  %n.vec1405 = and i64 %1092, 56
  %ind.end1406 = getelementptr i8, ptr %.0512867, i64 %n.vec1405
  %ind.end1409 = getelementptr i8, ptr %1091, i64 %n.vec1405
  %ind.end1411 = getelementptr i8, ptr %1087, i64 %n.vec1405
  %1107 = getelementptr i8, ptr %18, i64 5
  %wide.load1423 = load <4 x i8>, ptr %1087, align 1, !tbaa !26
  %wide.load1424 = load <4 x i8>, ptr %1107, align 1, !tbaa !26
  %1108 = getelementptr i8, ptr %15, i64 5
  %wide.load1425 = load <4 x i8>, ptr %1091, align 1, !tbaa !26
  %wide.load1426 = load <4 x i8>, ptr %1108, align 1, !tbaa !26
  %1109 = sub <4 x i8> %wide.load1423, %wide.load1425
  %1110 = sub <4 x i8> %wide.load1424, %wide.load1426
  %1111 = getelementptr i8, ptr %1089, i64 5
  store <4 x i8> %1109, ptr %.0512867, align 1, !tbaa !26
  store <4 x i8> %1110, ptr %1111, align 1, !tbaa !26
  %1112 = zext <4 x i8> %1109 to <4 x i32>
  %1113 = zext <4 x i8> %1110 to <4 x i32>
  %1114 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1112
  %1115 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1113
  %1116 = icmp slt <4 x i8> %1109, zeroinitializer
  %1117 = icmp slt <4 x i8> %1110, zeroinitializer
  %1118 = select <4 x i1> %1116, <4 x i32> %1114, <4 x i32> %1112
  %1119 = select <4 x i1> %1117, <4 x i32> %1115, <4 x i32> %1113
  %1120 = icmp eq i64 %n.vec1405, 8
  br i1 %1120, label %middle.block1400, label %vector.body1413.1, !llvm.loop !82

vector.body1413.1:                                ; preds = %vector.ph1403
  %next.gep1417.1 = getelementptr i8, ptr %1089, i64 9
  %next.gep1419.1 = getelementptr i8, ptr %15, i64 9
  %next.gep1421.1 = getelementptr i8, ptr %18, i64 9
  %1121 = getelementptr i8, ptr %18, i64 13
  %wide.load1423.1 = load <4 x i8>, ptr %next.gep1421.1, align 1, !tbaa !26
  %wide.load1424.1 = load <4 x i8>, ptr %1121, align 1, !tbaa !26
  %1122 = getelementptr i8, ptr %15, i64 13
  %wide.load1425.1 = load <4 x i8>, ptr %next.gep1419.1, align 1, !tbaa !26
  %wide.load1426.1 = load <4 x i8>, ptr %1122, align 1, !tbaa !26
  %1123 = sub <4 x i8> %wide.load1423.1, %wide.load1425.1
  %1124 = sub <4 x i8> %wide.load1424.1, %wide.load1426.1
  %1125 = getelementptr i8, ptr %1089, i64 13
  store <4 x i8> %1123, ptr %next.gep1417.1, align 1, !tbaa !26
  store <4 x i8> %1124, ptr %1125, align 1, !tbaa !26
  %1126 = zext <4 x i8> %1123 to <4 x i32>
  %1127 = zext <4 x i8> %1124 to <4 x i32>
  %1128 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1126
  %1129 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1127
  %1130 = icmp slt <4 x i8> %1123, zeroinitializer
  %1131 = icmp slt <4 x i8> %1124, zeroinitializer
  %1132 = select <4 x i1> %1130, <4 x i32> %1128, <4 x i32> %1126
  %1133 = select <4 x i1> %1131, <4 x i32> %1129, <4 x i32> %1127
  %1134 = add nuw nsw <4 x i32> %1132, %1118
  %1135 = add nuw nsw <4 x i32> %1133, %1119
  %1136 = icmp eq i64 %n.vec1405, 16
  br i1 %1136, label %middle.block1400, label %vector.body1413.2, !llvm.loop !82

vector.body1413.2:                                ; preds = %vector.body1413.1
  %next.gep1417.2 = getelementptr i8, ptr %1089, i64 17
  %next.gep1419.2 = getelementptr i8, ptr %15, i64 17
  %next.gep1421.2 = getelementptr i8, ptr %18, i64 17
  %1137 = getelementptr i8, ptr %18, i64 21
  %wide.load1423.2 = load <4 x i8>, ptr %next.gep1421.2, align 1, !tbaa !26
  %wide.load1424.2 = load <4 x i8>, ptr %1137, align 1, !tbaa !26
  %1138 = getelementptr i8, ptr %15, i64 21
  %wide.load1425.2 = load <4 x i8>, ptr %next.gep1419.2, align 1, !tbaa !26
  %wide.load1426.2 = load <4 x i8>, ptr %1138, align 1, !tbaa !26
  %1139 = sub <4 x i8> %wide.load1423.2, %wide.load1425.2
  %1140 = sub <4 x i8> %wide.load1424.2, %wide.load1426.2
  %1141 = getelementptr i8, ptr %1089, i64 21
  store <4 x i8> %1139, ptr %next.gep1417.2, align 1, !tbaa !26
  store <4 x i8> %1140, ptr %1141, align 1, !tbaa !26
  %1142 = zext <4 x i8> %1139 to <4 x i32>
  %1143 = zext <4 x i8> %1140 to <4 x i32>
  %1144 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1142
  %1145 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1143
  %1146 = icmp slt <4 x i8> %1139, zeroinitializer
  %1147 = icmp slt <4 x i8> %1140, zeroinitializer
  %1148 = select <4 x i1> %1146, <4 x i32> %1144, <4 x i32> %1142
  %1149 = select <4 x i1> %1147, <4 x i32> %1145, <4 x i32> %1143
  %1150 = add nuw nsw <4 x i32> %1148, %1134
  %1151 = add nuw nsw <4 x i32> %1149, %1135
  %1152 = icmp eq i64 %n.vec1405, 24
  br i1 %1152, label %middle.block1400, label %vector.body1413.3, !llvm.loop !82

vector.body1413.3:                                ; preds = %vector.body1413.2
  %next.gep1417.3 = getelementptr i8, ptr %1089, i64 25
  %next.gep1419.3 = getelementptr i8, ptr %15, i64 25
  %next.gep1421.3 = getelementptr i8, ptr %18, i64 25
  %1153 = getelementptr i8, ptr %18, i64 29
  %wide.load1423.3 = load <4 x i8>, ptr %next.gep1421.3, align 1, !tbaa !26
  %wide.load1424.3 = load <4 x i8>, ptr %1153, align 1, !tbaa !26
  %1154 = getelementptr i8, ptr %15, i64 29
  %wide.load1425.3 = load <4 x i8>, ptr %next.gep1419.3, align 1, !tbaa !26
  %wide.load1426.3 = load <4 x i8>, ptr %1154, align 1, !tbaa !26
  %1155 = sub <4 x i8> %wide.load1423.3, %wide.load1425.3
  %1156 = sub <4 x i8> %wide.load1424.3, %wide.load1426.3
  %1157 = getelementptr i8, ptr %1089, i64 29
  store <4 x i8> %1155, ptr %next.gep1417.3, align 1, !tbaa !26
  store <4 x i8> %1156, ptr %1157, align 1, !tbaa !26
  %1158 = zext <4 x i8> %1155 to <4 x i32>
  %1159 = zext <4 x i8> %1156 to <4 x i32>
  %1160 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1158
  %1161 = sub nuw nsw <4 x i32> <i32 256, i32 256, i32 256, i32 256>, %1159
  %1162 = icmp slt <4 x i8> %1155, zeroinitializer
  %1163 = icmp slt <4 x i8> %1156, zeroinitializer
  %1164 = select <4 x i1> %1162, <4 x i32> %1160, <4 x i32> %1158
  %1165 = select <4 x i1> %1163, <4 x i32> %1161, <4 x i32> %1159
  %1166 = add nuw nsw <4 x i32> %1164, %1150
  %1167 = add nuw nsw <4 x i32> %1165, %1151
  br label %middle.block1400

middle.block1400:                                 ; preds = %vector.body1413.3, %vector.body1413.2, %vector.body1413.1, %vector.ph1403
  %.lcssa1543 = phi <4 x i32> [ %1118, %vector.ph1403 ], [ %1134, %vector.body1413.1 ], [ %1150, %vector.body1413.2 ], [ %1166, %vector.body1413.3 ]
  %.lcssa1542 = phi <4 x i32> [ %1119, %vector.ph1403 ], [ %1135, %vector.body1413.1 ], [ %1151, %vector.body1413.2 ], [ %1167, %vector.body1413.3 ]
  %bin.rdx1428 = add nsw <4 x i32> %.lcssa1542, %.lcssa1543
  %1168 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx1428)
  %cmp.n1429 = icmp eq i64 %n.vec1405, %1092
  br i1 %cmp.n1429, label %.preheader693, label %.lr.ph874.preheader1537

.preheader693:                                    ; preds = %.lr.ph874.prol.loopexit, %.lr.ph874, %middle.block1400, %1086
  %.0514.lcssa = phi ptr [ %1087, %1086 ], [ %ind.end1411, %middle.block1400 ], [ %.lcssa1541.unr, %.lr.ph874.prol.loopexit ], [ %1179, %.lr.ph874 ]
  %.0510.lcssa = phi ptr [ %1091, %1086 ], [ %ind.end1409, %middle.block1400 ], [ %.lcssa1540.unr, %.lr.ph874.prol.loopexit ], [ %1181, %.lr.ph874 ]
  %.0503.lcssa = phi i32 [ 0, %1086 ], [ %1168, %middle.block1400 ], [ %.lcssa1539.unr, %.lr.ph874.prol.loopexit ], [ %1187, %.lr.ph874 ]
  %.0499.lcssa = phi i64 [ 0, %1086 ], [ %1092, %middle.block1400 ], [ %1092, %.lr.ph874 ], [ %1092, %.lr.ph874.prol.loopexit ]
  %.0512.lcssa = phi ptr [ %.0512867, %1086 ], [ %ind.end1406, %middle.block1400 ], [ %.0512.lcssa1538.unr, %.lr.ph874.prol.loopexit ], [ %.0512.1, %.lr.ph874 ]
  %1169 = icmp ult i64 %.0499.lcssa, %6
  br i1 %1169, label %.lr.ph887, label %._crit_edge888

.lr.ph874:                                        ; preds = %.lr.ph874.prol.loopexit, %.lr.ph874
  %.0512872 = phi ptr [ %.0512.1, %.lr.ph874 ], [ %.0512872.unr, %.lr.ph874.prol.loopexit ]
  %.0499871 = phi i64 [ %1188, %.lr.ph874 ], [ %.0499871.unr, %.lr.ph874.prol.loopexit ]
  %.0503870 = phi i32 [ %1187, %.lr.ph874 ], [ %.0503870.unr, %.lr.ph874.prol.loopexit ]
  %.0510869 = phi ptr [ %1181, %.lr.ph874 ], [ %.0510869.unr, %.lr.ph874.prol.loopexit ]
  %.0514868 = phi ptr [ %1179, %.lr.ph874 ], [ %.0514868.unr, %.lr.ph874.prol.loopexit ]
  %1170 = getelementptr inbounds i8, ptr %.0514868, i64 1
  %1171 = load i8, ptr %.0514868, align 1, !tbaa !26
  %1172 = getelementptr inbounds i8, ptr %.0510869, i64 1
  %1173 = load i8, ptr %.0510869, align 1, !tbaa !26
  %.narrow664 = sub i8 %1171, %1173
  store i8 %.narrow664, ptr %.0512872, align 1, !tbaa !26
  %1174 = zext i8 %.narrow664 to i32
  %1175 = sub nuw nsw i32 256, %1174
  %1176 = icmp slt i8 %.narrow664, 0
  %1177 = select i1 %1176, i32 %1175, i32 %1174
  %1178 = add i32 %1177, %.0503870
  %.0512 = getelementptr inbounds i8, ptr %.0512872, i64 1
  %1179 = getelementptr inbounds i8, ptr %.0514868, i64 2
  %1180 = load i8, ptr %1170, align 1, !tbaa !26
  %1181 = getelementptr inbounds i8, ptr %.0510869, i64 2
  %1182 = load i8, ptr %1172, align 1, !tbaa !26
  %.narrow664.1 = sub i8 %1180, %1182
  store i8 %.narrow664.1, ptr %.0512, align 1, !tbaa !26
  %1183 = zext i8 %.narrow664.1 to i32
  %1184 = sub nuw nsw i32 256, %1183
  %1185 = icmp slt i8 %.narrow664.1, 0
  %1186 = select i1 %1185, i32 %1184, i32 %1183
  %1187 = add i32 %1186, %1178
  %1188 = add nuw nsw i64 %.0499871, 2
  %.0512.1 = getelementptr inbounds i8, ptr %.0512872, i64 2
  %exitcond1033.not.1 = icmp eq i64 %1188, %1092
  br i1 %exitcond1033.not.1, label %.preheader693, label %.lr.ph874, !llvm.loop !83

.lr.ph887:                                        ; preds = %.preheader693, %.lr.ph887
  %.1500886 = phi i64 [ %1214, %.lr.ph887 ], [ %.0499.lcssa, %.preheader693 ]
  %.1504885 = phi i32 [ %1207, %.lr.ph887 ], [ %.0503.lcssa, %.preheader693 ]
  %.0508884 = phi ptr [ %1211, %.lr.ph887 ], [ %1087, %.preheader693 ]
  %.0509883 = phi ptr [ %1212, %.lr.ph887 ], [ %1091, %.preheader693 ]
  %.1511882 = phi ptr [ %1213, %.lr.ph887 ], [ %.0510.lcssa, %.preheader693 ]
  %.1513881 = phi ptr [ %1209, %.lr.ph887 ], [ %.0512.lcssa, %.preheader693 ]
  %.1515880 = phi ptr [ %1210, %.lr.ph887 ], [ %.0514.lcssa, %.preheader693 ]
  %1189 = load i8, ptr %.1511882, align 1, !tbaa !26
  %1190 = zext i8 %1189 to i32
  %1191 = load i8, ptr %.0509883, align 1, !tbaa !26
  %1192 = zext i8 %1191 to i32
  %1193 = load i8, ptr %.0508884, align 1, !tbaa !26
  %1194 = zext i8 %1193 to i32
  %1195 = sub nsw i32 %1190, %1192
  %1196 = sub nsw i32 %1194, %1192
  %1197 = tail call i32 @llvm.abs.i32(i32 %1195, i1 true)
  %1198 = tail call i32 @llvm.abs.i32(i32 %1196, i1 true)
  %1199 = add nsw i32 %1196, %1195
  %1200 = tail call i32 @llvm.abs.i32(i32 %1199, i1 true)
  %.not658 = icmp ugt i32 %1197, %1198
  %.not659 = icmp ugt i32 %1197, %1200
  %or.cond691 = select i1 %.not658, i1 true, i1 %.not659
  %.not660 = icmp ugt i32 %1198, %1200
  %1201 = select i1 %.not660, i8 %1191, i8 %1189
  %.tr661 = select i1 %or.cond691, i8 %1201, i8 %1193
  %1202 = load i8, ptr %.1515880, align 1, !tbaa !26
  %.narrow662 = sub i8 %1202, %.tr661
  store i8 %.narrow662, ptr %.1513881, align 1, !tbaa !26
  %1203 = zext i8 %.narrow662 to i32
  %1204 = sub nuw nsw i32 256, %1203
  %1205 = icmp slt i8 %.narrow662, 0
  %1206 = select i1 %1205, i32 %1204, i32 %1203
  %1207 = add i32 %1206, %.1504885
  %1208 = icmp ule i32 %1207, %.1502
  %1209 = getelementptr inbounds i8, ptr %.1513881, i64 1
  %1210 = getelementptr inbounds i8, ptr %.1515880, i64 1
  %1211 = getelementptr inbounds i8, ptr %.0508884, i64 1
  %1212 = getelementptr inbounds i8, ptr %.0509883, i64 1
  %1213 = getelementptr inbounds i8, ptr %.1511882, i64 1
  %1214 = add nuw i64 %.1500886, 1
  %1215 = icmp ult i64 %1214, %6
  %or.cond940 = select i1 %1208, i1 %1215, i1 false
  br i1 %or.cond940, label %.lr.ph887, label %._crit_edge888, !llvm.loop !84

._crit_edge888:                                   ; preds = %.lr.ph887, %.preheader693
  %.2505 = phi i32 [ %.0503.lcssa, %.preheader693 ], [ %1207, %.lr.ph887 ]
  %1216 = load i8, ptr %1023, align 8, !tbaa !32
  %1217 = icmp eq i8 %1216, 2
  br i1 %1217, label %1218, label %1278

1218:                                             ; preds = %._crit_edge888
  %1219 = and i32 %.2505, 65535
  %1220 = lshr i32 %.2505, 10
  %1221 = and i32 %1220, 4194240
  %.not957 = icmp eq i8 %8, 0
  br i1 %.not957, label %._crit_edge897, label %.lr.ph896

.lr.ph896:                                        ; preds = %1218
  %1222 = getelementptr inbounds i8, ptr %0, i64 928
  %1223 = load ptr, ptr %1222, align 8, !tbaa !33
  %1224 = getelementptr inbounds i8, ptr %0, i64 936
  %wide.trip.count1037 = zext i8 %8 to i64
  %xtraiter1642 = and i64 %wide.trip.count1037, 1
  %1225 = icmp eq i8 %8, 1
  br i1 %1225, label %._crit_edge897.loopexit.unr-lcssa, label %.lr.ph896.new

.lr.ph896.new:                                    ; preds = %.lr.ph896
  %unroll_iter1646 = and i64 %wide.trip.count1037, 254
  br label %1226

1226:                                             ; preds = %1252, %.lr.ph896.new
  %indvars.iv1034 = phi i64 [ 0, %.lr.ph896.new ], [ %indvars.iv.next1035.1, %1252 ]
  %.0475894 = phi i32 [ %1219, %.lr.ph896.new ], [ %.1.1, %1252 ]
  %.0476893 = phi i32 [ %1221, %.lr.ph896.new ], [ %.1477.1, %1252 ]
  %niter1647 = phi i64 [ 0, %.lr.ph896.new ], [ %niter1647.next.1, %1252 ]
  %1227 = getelementptr inbounds i8, ptr %1223, i64 %indvars.iv1034
  %1228 = load i8, ptr %1227, align 1, !tbaa !26
  %1229 = icmp eq i8 %1228, 4
  br i1 %1229, label %1230, label %1239

1230:                                             ; preds = %1226
  %1231 = load ptr, ptr %1224, align 8, !tbaa !34
  %1232 = getelementptr inbounds i16, ptr %1231, i64 %indvars.iv1034
  %1233 = load i16, ptr %1232, align 2, !tbaa !35
  %1234 = zext i16 %1233 to i32
  %1235 = mul i32 %.0475894, %1234
  %1236 = lshr i32 %1235, 8
  %1237 = mul i32 %.0476893, %1234
  %1238 = lshr i32 %1237, 8
  br label %1239

1239:                                             ; preds = %1226, %1230
  %.1477 = phi i32 [ %1238, %1230 ], [ %.0476893, %1226 ]
  %.1 = phi i32 [ %1236, %1230 ], [ %.0475894, %1226 ]
  %indvars.iv.next1035 = or disjoint i64 %indvars.iv1034, 1
  %1240 = getelementptr inbounds i8, ptr %1223, i64 %indvars.iv.next1035
  %1241 = load i8, ptr %1240, align 1, !tbaa !26
  %1242 = icmp eq i8 %1241, 4
  br i1 %1242, label %1243, label %1252

1243:                                             ; preds = %1239
  %1244 = load ptr, ptr %1224, align 8, !tbaa !34
  %1245 = getelementptr inbounds i16, ptr %1244, i64 %indvars.iv.next1035
  %1246 = load i16, ptr %1245, align 2, !tbaa !35
  %1247 = zext i16 %1246 to i32
  %1248 = mul i32 %.1, %1247
  %1249 = lshr i32 %1248, 8
  %1250 = mul i32 %.1477, %1247
  %1251 = lshr i32 %1250, 8
  br label %1252

1252:                                             ; preds = %1243, %1239
  %.1477.1 = phi i32 [ %1251, %1243 ], [ %.1477, %1239 ]
  %.1.1 = phi i32 [ %1249, %1243 ], [ %.1, %1239 ]
  %indvars.iv.next1035.1 = add nuw nsw i64 %indvars.iv1034, 2
  %niter1647.next.1 = add i64 %niter1647, 2
  %niter1647.ncmp.1 = icmp eq i64 %niter1647.next.1, %unroll_iter1646
  br i1 %niter1647.ncmp.1, label %._crit_edge897.loopexit.unr-lcssa, label %1226, !llvm.loop !85

._crit_edge897.loopexit.unr-lcssa:                ; preds = %1252, %.lr.ph896
  %.1477.lcssa.ph = phi i32 [ poison, %.lr.ph896 ], [ %.1477.1, %1252 ]
  %.1.lcssa.ph = phi i32 [ poison, %.lr.ph896 ], [ %.1.1, %1252 ]
  %indvars.iv1034.unr = phi i64 [ 0, %.lr.ph896 ], [ %indvars.iv.next1035.1, %1252 ]
  %.0475894.unr = phi i32 [ %1219, %.lr.ph896 ], [ %.1.1, %1252 ]
  %.0476893.unr = phi i32 [ %1221, %.lr.ph896 ], [ %.1477.1, %1252 ]
  %lcmp.mod1643.not = icmp eq i64 %xtraiter1642, 0
  br i1 %lcmp.mod1643.not, label %._crit_edge897, label %.epil.preheader1641

.epil.preheader1641:                              ; preds = %._crit_edge897.loopexit.unr-lcssa
  %1253 = getelementptr inbounds i8, ptr %1223, i64 %indvars.iv1034.unr
  %1254 = load i8, ptr %1253, align 1, !tbaa !26
  %1255 = icmp eq i8 %1254, 4
  br i1 %1255, label %1256, label %._crit_edge897

1256:                                             ; preds = %.epil.preheader1641
  %1257 = load ptr, ptr %1224, align 8, !tbaa !34
  %1258 = getelementptr inbounds i16, ptr %1257, i64 %indvars.iv1034.unr
  %1259 = load i16, ptr %1258, align 2, !tbaa !35
  %1260 = zext i16 %1259 to i32
  %1261 = mul i32 %.0475894.unr, %1260
  %1262 = lshr i32 %1261, 8
  %1263 = mul i32 %.0476893.unr, %1260
  %1264 = lshr i32 %1263, 8
  br label %._crit_edge897

._crit_edge897:                                   ; preds = %._crit_edge897.loopexit.unr-lcssa, %1256, %.epil.preheader1641, %1218
  %.0476.lcssa = phi i32 [ %1221, %1218 ], [ %.1477.lcssa.ph, %._crit_edge897.loopexit.unr-lcssa ], [ %1264, %1256 ], [ %.0476893.unr, %.epil.preheader1641 ]
  %.0475.lcssa = phi i32 [ %1219, %1218 ], [ %.1.lcssa.ph, %._crit_edge897.loopexit.unr-lcssa ], [ %1262, %1256 ], [ %.0475894.unr, %.epil.preheader1641 ]
  %1265 = getelementptr inbounds i8, ptr %0, i64 952
  %1266 = load ptr, ptr %1265, align 8, !tbaa !37
  %1267 = getelementptr inbounds i8, ptr %1266, i64 8
  %1268 = load i16, ptr %1267, align 2, !tbaa !35
  %1269 = zext i16 %1268 to i32
  %1270 = mul i32 %.0476.lcssa, %1269
  %1271 = icmp ugt i32 %1270, 33553927
  br i1 %1271, label %1278, label %1272

1272:                                             ; preds = %._crit_edge897
  %1273 = mul i32 %.0475.lcssa, %1269
  %1274 = lshr i32 %1273, 3
  %1275 = shl nuw i32 %1270, 7
  %1276 = and i32 %1275, -1024
  %1277 = add i32 %1276, %1274
  br label %1278

1278:                                             ; preds = %1272, %._crit_edge897, %._crit_edge888
  %.4507 = phi i32 [ %.2505, %._crit_edge888 ], [ %1277, %1272 ], [ 2147483647, %._crit_edge897 ]
  %1279 = icmp ult i32 %.4507, %.6488
  br i1 %1279, label %.thread1059.sink.split, label %.thread1059

.thread1059.sink.split:                           ; preds = %.lr.ph917, %middle.block1468, %vec.epilog.middle.block1491, %1278, %.preheader692
  %.sink1090 = phi ptr [ %927, %.preheader692 ], [ %1088, %1278 ], [ %927, %vec.epilog.middle.block1491 ], [ %927, %middle.block1468 ], [ %927, %.lr.ph917 ]
  %1280 = load ptr, ptr %.sink1090, align 8, !tbaa !74
  br label %.thread1059

.thread1059:                                      ; preds = %.thread1059.sink.split, %410, %1278, %1021
  %.7 = phi ptr [ %.5, %1021 ], [ %.5, %1278 ], [ %412, %410 ], [ %1280, %.thread1059.sink.split ]
  %1281 = load i64, ptr %5, align 8, !tbaa !20
  %1282 = add i64 %1281, 1
  tail call void @png_write_filtered_row(ptr noundef nonnull %0, ptr noundef %.7, i64 noundef %1282)
  %1283 = load i8, ptr %7, align 1, !tbaa !22
  %.not666 = icmp eq i8 %1283, 0
  br i1 %.not666, label %1317, label %.preheader

.preheader:                                       ; preds = %.thread1059
  %1284 = icmp ugt i8 %8, 1
  br i1 %1284, label %.lr.ph920, label %._crit_edge921

.lr.ph920:                                        ; preds = %.preheader
  %1285 = getelementptr inbounds i8, ptr %0, i64 928
  %wide.trip.count1044 = zext i8 %8 to i64
  %1286 = add nsw i64 %wide.trip.count1044, -1
  %1287 = add nsw i64 %wide.trip.count1044, -2
  %xtraiter1652 = and i64 %1286, 3
  %1288 = icmp ult i64 %1287, 3
  br i1 %1288, label %._crit_edge921.loopexit.unr-lcssa, label %.lr.ph920.new

.lr.ph920.new:                                    ; preds = %.lr.ph920
  %unroll_iter1654 = and i64 %1286, -4
  br label %1289

1289:                                             ; preds = %1289, %.lr.ph920.new
  %indvars.iv1041 = phi i64 [ 1, %.lr.ph920.new ], [ %indvars.iv.next1042.3, %1289 ]
  %niter1655 = phi i64 [ 0, %.lr.ph920.new ], [ %niter1655.next.3, %1289 ]
  %1290 = load ptr, ptr %1285, align 8, !tbaa !33
  %1291 = getelementptr i8, ptr %1290, i64 %indvars.iv1041
  %1292 = getelementptr i8, ptr %1291, i64 -1
  %1293 = load i8, ptr %1292, align 1, !tbaa !26
  store i8 %1293, ptr %1291, align 1, !tbaa !26
  %1294 = load ptr, ptr %1285, align 8, !tbaa !33
  %1295 = getelementptr i8, ptr %1294, i64 %indvars.iv1041
  %1296 = getelementptr i8, ptr %1295, i64 1
  %1297 = load i8, ptr %1295, align 1, !tbaa !26
  store i8 %1297, ptr %1296, align 1, !tbaa !26
  %1298 = load ptr, ptr %1285, align 8, !tbaa !33
  %1299 = getelementptr i8, ptr %1298, i64 %indvars.iv1041
  %1300 = getelementptr i8, ptr %1299, i64 2
  %1301 = getelementptr i8, ptr %1299, i64 1
  %1302 = load i8, ptr %1301, align 1, !tbaa !26
  store i8 %1302, ptr %1300, align 1, !tbaa !26
  %1303 = load ptr, ptr %1285, align 8, !tbaa !33
  %1304 = getelementptr i8, ptr %1303, i64 %indvars.iv1041
  %1305 = getelementptr i8, ptr %1304, i64 3
  %1306 = getelementptr i8, ptr %1304, i64 2
  %1307 = load i8, ptr %1306, align 1, !tbaa !26
  store i8 %1307, ptr %1305, align 1, !tbaa !26
  %indvars.iv.next1042.3 = add nuw nsw i64 %indvars.iv1041, 4
  %niter1655.next.3 = add i64 %niter1655, 4
  %niter1655.ncmp.3 = icmp eq i64 %niter1655.next.3, %unroll_iter1654
  br i1 %niter1655.ncmp.3, label %._crit_edge921.loopexit.unr-lcssa, label %1289, !llvm.loop !86

._crit_edge921.loopexit.unr-lcssa:                ; preds = %1289, %.lr.ph920
  %indvars.iv1041.unr = phi i64 [ 1, %.lr.ph920 ], [ %indvars.iv.next1042.3, %1289 ]
  %lcmp.mod1653.not = icmp eq i64 %xtraiter1652, 0
  br i1 %lcmp.mod1653.not, label %._crit_edge921.loopexit, label %.epil.preheader1651

.epil.preheader1651:                              ; preds = %._crit_edge921.loopexit.unr-lcssa, %.epil.preheader1651
  %indvars.iv1041.epil = phi i64 [ %indvars.iv.next1042.epil, %.epil.preheader1651 ], [ %indvars.iv1041.unr, %._crit_edge921.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader1651 ], [ 0, %._crit_edge921.loopexit.unr-lcssa ]
  %1308 = load ptr, ptr %1285, align 8, !tbaa !33
  %1309 = getelementptr i8, ptr %1308, i64 %indvars.iv1041.epil
  %1310 = getelementptr i8, ptr %1309, i64 -1
  %1311 = load i8, ptr %1310, align 1, !tbaa !26
  store i8 %1311, ptr %1309, align 1, !tbaa !26
  %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, %xtraiter1652
  br i1 %epil.iter.cmp.not, label %._crit_edge921.loopexit, label %.epil.preheader1651, !llvm.loop !87

._crit_edge921.loopexit:                          ; preds = %.epil.preheader1651, %._crit_edge921.loopexit.unr-lcssa
  %1312 = zext i8 %8 to i64
  br label %._crit_edge921

._crit_edge921:                                   ; preds = %.preheader, %._crit_edge921.loopexit
  %.0.lcssa = phi i64 [ %1312, %._crit_edge921.loopexit ], [ 1, %.preheader ]
  %1313 = load i8, ptr %.7, align 1, !tbaa !26
  %1314 = getelementptr inbounds i8, ptr %0, i64 928
  %1315 = load ptr, ptr %1314, align 8, !tbaa !33
  %1316 = getelementptr inbounds i8, ptr %1315, i64 %.0.lcssa
  store i8 %1313, ptr %1316, align 1, !tbaa !26
  br label %1317

1317:                                             ; preds = %._crit_edge921, %.thread1059
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden void @png_write_filtered_row(ptr noalias noundef, ptr noundef, i64 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 630}
!6 = !{!"png_struct_def", !7, i64 0, !9, i64 200, !9, i64 208, !10, i64 216, !9, i64 224, !9, i64 232, !9, i64 240, !9, i64 248, !9, i64 256, !9, i64 264, !9, i64 272, !9, i64 280, !9, i64 288, !7, i64 296, !7, i64 297, !11, i64 300, !11, i64 304, !11, i64 308, !11, i64 312, !12, i64 320, !9, i64 432, !11, i64 440, !11, i64 444, !11, i64 448, !11, i64 452, !11, i64 456, !11, i64 460, !11, i64 464, !11, i64 468, !11, i64 472, !11, i64 476, !11, i64 480, !11, i64 484, !11, i64 488, !11, i64 492, !11, i64 496, !11, i64 500, !11, i64 504, !11, i64 508, !11, i64 512, !11, i64 516, !10, i64 520, !11, i64 528, !11, i64 532, !11, i64 536, !9, i64 544, !9, i64 552, !9, i64 560, !9, i64 568, !9, i64 576, !9, i64 584, !10, i64 592, !11, i64 600, !11, i64 604, !9, i64 608, !13, i64 616, !11, i64 620, !13, i64 624, !7, i64 626, !7, i64 627, !7, i64 628, !7, i64 629, !7, i64 630, !7, i64 631, !7, i64 632, !7, i64 633, !7, i64 634, !7, i64 635, !7, i64 636, !7, i64 637, !7, i64 638, !7, i64 639, !13, i64 640, !7, i64 642, !11, i64 644, !14, i64 648, !14, i64 658, !9, i64 672, !11, i64 680, !11, i64 684, !11, i64 688, !11, i64 692, !9, i64 696, !9, i64 704, !9, i64 712, !9, i64 720, !9, i64 728, !9, i64 736, !15, i64 744, !15, i64 749, !9, i64 760, !14, i64 768, !9, i64 784, !9, i64 792, !9, i64 800, !9, i64 808, !9, i64 816, !9, i64 824, !9, i64 832, !9, i64 840, !9, i64 848, !11, i64 856, !11, i64 860, !10, i64 864, !10, i64 872, !10, i64 880, !10, i64 888, !11, i64 896, !11, i64 900, !9, i64 904, !9, i64 912, !7, i64 920, !7, i64 921, !9, i64 928, !9, i64 936, !9, i64 944, !9, i64 952, !9, i64 960, !7, i64 968, !7, i64 969, !11, i64 1000, !9, i64 1008, !9, i64 1016, !11, i64 1024, !11, i64 1028, !9, i64 1032, !7, i64 1040, !7, i64 1041, !13, i64 1042, !13, i64 1044, !11, i64 1048, !7, i64 1052, !9, i64 1056, !9, i64 1064, !9, i64 1072, !9, i64 1080, !9, i64 1088, !9, i64 1096, !9, i64 1104, !7, i64 1112, !11, i64 1116, !11, i64 1120, !11, i64 1124, !10, i64 1128, !16, i64 1136, !10, i64 1168, !9, i64 1176, !10, i64 1184, !11, i64 1192, !11, i64 1196, !9, i64 1200, !7, i64 1208, !17, i64 1240}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!"z_stream_s", !9, i64 0, !11, i64 8, !10, i64 16, !9, i64 24, !11, i64 32, !10, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !11, i64 88, !10, i64 96, !10, i64 104}
!13 = !{!"short", !7, i64 0}
!14 = !{!"png_color_16_struct", !7, i64 0, !13, i64 2, !13, i64 4, !13, i64 6, !13, i64 8}
!15 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!16 = !{!"png_unknown_chunk_t", !7, i64 0, !9, i64 8, !10, i64 16, !7, i64 24}
!17 = !{!"png_colorspace", !11, i64 0, !18, i64 4, !19, i64 36, !13, i64 72, !13, i64 74}
!18 = !{!"png_xy", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28}
!19 = !{!"png_XYZ", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32}
!20 = !{!21, !10, i64 8}
!21 = !{!"png_row_info_struct", !11, i64 0, !10, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!22 = !{!6, !7, i64 921}
!23 = !{!21, !7, i64 19}
!24 = !{!6, !9, i64 544}
!25 = !{!6, !9, i64 552}
!26 = !{!7, !7, i64 0}
!27 = distinct !{!27, !28, !29, !30}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!"llvm.loop.isvectorized", i32 1}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = distinct !{!31, !28, !30, !29}
!32 = !{!6, !7, i64 920}
!33 = !{!6, !9, i64 928}
!34 = !{!6, !9, i64 936}
!35 = !{!13, !13, i64 0}
!36 = distinct !{!36, !28}
!37 = !{!6, !9, i64 952}
!38 = !{!6, !9, i64 560}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.unroll.disable"}
!41 = distinct !{!41, !28, !29, !30}
!42 = distinct !{!42, !28, !29, !30}
!43 = distinct !{!43, !40}
!44 = distinct !{!44, !28, !29, !30}
!45 = distinct !{!45, !28, !29}
!46 = distinct !{!46, !28, !29}
!47 = !{!6, !9, i64 944}
!48 = distinct !{!48, !28}
!49 = !{!6, !9, i64 960}
!50 = distinct !{!50, !28, !29, !30}
!51 = distinct !{!51, !28, !29}
!52 = distinct !{!52, !28}
!53 = distinct !{!53, !28}
!54 = !{!6, !9, i64 568}
!55 = distinct !{!55, !28, !29, !30}
!56 = distinct !{!56, !28, !29, !30}
!57 = distinct !{!57, !40}
!58 = distinct !{!58, !28, !29}
!59 = distinct !{!59, !28}
!60 = distinct !{!60, !28}
!61 = distinct !{!61, !28}
!62 = !{!6, !9, i64 576}
!63 = distinct !{!63, !40}
!64 = distinct !{!64, !28, !29, !30}
!65 = distinct !{!65, !28, !29, !30}
!66 = distinct !{!66, !28, !29, !30}
!67 = distinct !{!67, !28, !29}
!68 = distinct !{!68, !28, !29}
!69 = distinct !{!69, !28}
!70 = distinct !{!70, !28, !29, !30}
!71 = distinct !{!71, !28, !29}
!72 = distinct !{!72, !28}
!73 = distinct !{!73, !28}
!74 = !{!6, !9, i64 584}
!75 = distinct !{!75, !40}
!76 = distinct !{!76, !28, !29, !30}
!77 = distinct !{!77, !28, !29, !30}
!78 = distinct !{!78, !28, !29, !30}
!79 = distinct !{!79, !28, !29}
!80 = distinct !{!80, !28, !29}
!81 = distinct !{!81, !28}
!82 = distinct !{!82, !28, !29, !30}
!83 = distinct !{!83, !28, !29}
!84 = distinct !{!84, !28}
!85 = distinct !{!85, !28}
!86 = distinct !{!86, !28}
!87 = distinct !{!87, !40}


; 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