; LLVM IR from rdguez-mariano/fast_imas_IPOL :: io_png/libs/png (pngrtran)

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

; 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 i32 @png_do_rgb_to_gray(ptr noundef %0, ptr noundef %1, ptr noundef %2) #1 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i16, align 2
  %26 = alloca i16, align 2
  %27 = alloca i16, align 2
  %28 = alloca i16, align 2
  %29 = alloca i16, align 2
  %30 = alloca i16, align 2
  %31 = alloca i16, align 2
  %32 = alloca i16, align 2
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i16, align 2
  %36 = alloca i16, align 2
  %37 = alloca i16, align 2
  %38 = alloca i16, align 2
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i8, align 1
  %42 = alloca i8, align 1
  %43 = alloca i8, align 1
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca i8, align 1
  %48 = alloca i8, align 1
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca i16, align 2
  %52 = alloca i16, align 2
  %53 = alloca i16, align 2
  %54 = alloca i16, align 2
  %55 = alloca i16, align 2
  %56 = alloca i16, align 2
  %57 = alloca i16, align 2
  %58 = alloca i16, align 2
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca i16, align 2
  %62 = alloca i16, align 2
  %63 = alloca i16, align 2
  %64 = alloca i16, align 2
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #2
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.png_row_info_struct, ptr %65, i32 0, i32 0
  %67 = load i64, ptr %66, align 8, !tbaa !9
  store i64 %67, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  store i32 0, ptr %9, align 4, !tbaa !13
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.png_row_info_struct, ptr %68, i32 0, i32 2
  %70 = load i8, ptr %69, align 8, !tbaa !15
  %71 = zext i8 %70 to i32
  %72 = and i32 %71, 2
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %1033

74:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  %75 = load ptr, ptr %4, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.png_struct_def, ptr %75, i32 0, i32 115
  %77 = load i16, ptr %76, align 2, !tbaa !16
  %78 = zext i16 %77 to i64
  store i64 %78, ptr %10, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #2
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.png_struct_def, ptr %79, i32 0, i32 116
  %81 = load i16, ptr %80, align 4, !tbaa !24
  %82 = zext i16 %81 to i64
  store i64 %82, ptr %11, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #2
  %83 = load ptr, ptr %4, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.png_struct_def, ptr %83, i32 0, i32 117
  %85 = load i16, ptr %84, align 2, !tbaa !25
  %86 = zext i16 %85 to i64
  store i64 %86, ptr %12, align 8, !tbaa !12
  %87 = load ptr, ptr %5, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.png_row_info_struct, ptr %87, i32 0, i32 2
  %89 = load i8, ptr %88, align 8, !tbaa !15
  %90 = zext i8 %89 to i32
  %91 = icmp eq i32 %90, 2
  br i1 %91, label %92, label %525

92:                                               ; preds = %74
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.png_row_info_struct, ptr %93, i32 0, i32 3
  %95 = load i8, ptr %94, align 1, !tbaa !26
  %96 = zext i8 %95 to i32
  %97 = icmp eq i32 %96, 8
  br i1 %97, label %98, label %251

98:                                               ; preds = %92
  %99 = load ptr, ptr %4, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.png_struct_def, ptr %99, i32 0, i32 68
  %101 = load ptr, ptr %100, align 8, !tbaa !27
  %102 = icmp ne ptr %101, null
  br i1 %102, label %103, label %190

103:                                              ; preds = %98
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.png_struct_def, ptr %104, i32 0, i32 69
  %106 = load ptr, ptr %105, align 8, !tbaa !28
  %107 = icmp ne ptr %106, null
  br i1 %107, label %108, label %190

108:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  %109 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %109, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #2
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %110, ptr %14, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %111

111:                                              ; preds = %186, %108
  %112 = load i64, ptr %7, align 8, !tbaa !12
  %113 = load i64, ptr %8, align 8, !tbaa !12
  %114 = icmp ult i64 %112, %113
  br i1 %114, label %115, label %189

115:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #2
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.png_struct_def, ptr %116, i32 0, i32 69
  %118 = load ptr, ptr %117, align 8, !tbaa !28
  %119 = load ptr, ptr %13, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %119, i32 1
  store ptr %120, ptr %13, align 8, !tbaa !5
  %121 = load i8, ptr %119, align 1, !tbaa !29
  %122 = zext i8 %121 to i64
  %123 = getelementptr inbounds i8, ptr %118, i64 %122
  %124 = load i8, ptr %123, align 1, !tbaa !29
  store i8 %124, ptr %15, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #2
  %125 = load ptr, ptr %4, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.png_struct_def, ptr %125, i32 0, i32 69
  %127 = load ptr, ptr %126, align 8, !tbaa !28
  %128 = load ptr, ptr %13, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i32 1
  store ptr %129, ptr %13, align 8, !tbaa !5
  %130 = load i8, ptr %128, align 1, !tbaa !29
  %131 = zext i8 %130 to i64
  %132 = getelementptr inbounds i8, ptr %127, i64 %131
  %133 = load i8, ptr %132, align 1, !tbaa !29
  store i8 %133, ptr %16, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #2
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.png_struct_def, ptr %134, i32 0, i32 69
  %136 = load ptr, ptr %135, align 8, !tbaa !28
  %137 = load ptr, ptr %13, align 8, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %137, i32 1
  store ptr %138, ptr %13, align 8, !tbaa !5
  %139 = load i8, ptr %137, align 1, !tbaa !29
  %140 = zext i8 %139 to i64
  %141 = getelementptr inbounds i8, ptr %136, i64 %140
  %142 = load i8, ptr %141, align 1, !tbaa !29
  store i8 %142, ptr %17, align 1, !tbaa !29
  %143 = load i8, ptr %15, align 1, !tbaa !29
  %144 = zext i8 %143 to i32
  %145 = load i8, ptr %16, align 1, !tbaa !29
  %146 = zext i8 %145 to i32
  %147 = icmp ne i32 %144, %146
  br i1 %147, label %154, label %148

148:                                              ; preds = %115
  %149 = load i8, ptr %15, align 1, !tbaa !29
  %150 = zext i8 %149 to i32
  %151 = load i8, ptr %17, align 1, !tbaa !29
  %152 = zext i8 %151 to i32
  %153 = icmp ne i32 %150, %152
  br i1 %153, label %154, label %179

154:                                              ; preds = %148, %115
  %155 = load i32, ptr %9, align 4, !tbaa !13
  %156 = or i32 %155, 1
  store i32 %156, ptr %9, align 4, !tbaa !13
  %157 = load ptr, ptr %4, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.png_struct_def, ptr %157, i32 0, i32 68
  %159 = load ptr, ptr %158, align 8, !tbaa !27
  %160 = load i64, ptr %10, align 8, !tbaa !12
  %161 = load i8, ptr %15, align 1, !tbaa !29
  %162 = zext i8 %161 to i64
  %163 = mul i64 %160, %162
  %164 = load i64, ptr %11, align 8, !tbaa !12
  %165 = load i8, ptr %16, align 1, !tbaa !29
  %166 = zext i8 %165 to i64
  %167 = mul i64 %164, %166
  %168 = add i64 %163, %167
  %169 = load i64, ptr %12, align 8, !tbaa !12
  %170 = load i8, ptr %17, align 1, !tbaa !29
  %171 = zext i8 %170 to i64
  %172 = mul i64 %169, %171
  %173 = add i64 %168, %172
  %174 = lshr i64 %173, 15
  %175 = getelementptr inbounds i8, ptr %159, i64 %174
  %176 = load i8, ptr %175, align 1, !tbaa !29
  %177 = load ptr, ptr %14, align 8, !tbaa !5
  %178 = getelementptr inbounds i8, ptr %177, i32 1
  store ptr %178, ptr %14, align 8, !tbaa !5
  store i8 %176, ptr %177, align 1, !tbaa !29
  br label %185

179:                                              ; preds = %148
  %180 = load ptr, ptr %13, align 8, !tbaa !5
  %181 = getelementptr inbounds i8, ptr %180, i64 -1
  %182 = load i8, ptr %181, align 1, !tbaa !29
  %183 = load ptr, ptr %14, align 8, !tbaa !5
  %184 = getelementptr inbounds i8, ptr %183, i32 1
  store ptr %184, ptr %14, align 8, !tbaa !5
  store i8 %182, ptr %183, align 1, !tbaa !29
  br label %185

185:                                              ; preds = %179, %154
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #2
  br label %186

186:                                              ; preds = %185
  %187 = load i64, ptr %7, align 8, !tbaa !12
  %188 = add i64 %187, 1
  store i64 %188, ptr %7, align 8, !tbaa !12
  br label %111, !llvm.loop !30

189:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  br label %250

190:                                              ; preds = %103, %98
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  %191 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %191, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  %192 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %192, ptr %19, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %193

193:                                              ; preds = %246, %190
  %194 = load i64, ptr %7, align 8, !tbaa !12
  %195 = load i64, ptr %8, align 8, !tbaa !12
  %196 = icmp ult i64 %194, %195
  br i1 %196, label %197, label %249

197:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #2
  %198 = load ptr, ptr %18, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i32 1
  store ptr %199, ptr %18, align 8, !tbaa !5
  %200 = load i8, ptr %198, align 1, !tbaa !29
  store i8 %200, ptr %20, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #2
  %201 = load ptr, ptr %18, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i32 1
  store ptr %202, ptr %18, align 8, !tbaa !5
  %203 = load i8, ptr %201, align 1, !tbaa !29
  store i8 %203, ptr %21, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #2
  %204 = load ptr, ptr %18, align 8, !tbaa !5
  %205 = getelementptr inbounds i8, ptr %204, i32 1
  store ptr %205, ptr %18, align 8, !tbaa !5
  %206 = load i8, ptr %204, align 1, !tbaa !29
  store i8 %206, ptr %22, align 1, !tbaa !29
  %207 = load i8, ptr %20, align 1, !tbaa !29
  %208 = zext i8 %207 to i32
  %209 = load i8, ptr %21, align 1, !tbaa !29
  %210 = zext i8 %209 to i32
  %211 = icmp ne i32 %208, %210
  br i1 %211, label %218, label %212

212:                                              ; preds = %197
  %213 = load i8, ptr %20, align 1, !tbaa !29
  %214 = zext i8 %213 to i32
  %215 = load i8, ptr %22, align 1, !tbaa !29
  %216 = zext i8 %215 to i32
  %217 = icmp ne i32 %214, %216
  br i1 %217, label %218, label %239

218:                                              ; preds = %212, %197
  %219 = load i32, ptr %9, align 4, !tbaa !13
  %220 = or i32 %219, 1
  store i32 %220, ptr %9, align 4, !tbaa !13
  %221 = load i64, ptr %10, align 8, !tbaa !12
  %222 = load i8, ptr %20, align 1, !tbaa !29
  %223 = zext i8 %222 to i64
  %224 = mul i64 %221, %223
  %225 = load i64, ptr %11, align 8, !tbaa !12
  %226 = load i8, ptr %21, align 1, !tbaa !29
  %227 = zext i8 %226 to i64
  %228 = mul i64 %225, %227
  %229 = add i64 %224, %228
  %230 = load i64, ptr %12, align 8, !tbaa !12
  %231 = load i8, ptr %22, align 1, !tbaa !29
  %232 = zext i8 %231 to i64
  %233 = mul i64 %230, %232
  %234 = add i64 %229, %233
  %235 = lshr i64 %234, 15
  %236 = trunc i64 %235 to i8
  %237 = load ptr, ptr %19, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i32 1
  store ptr %238, ptr %19, align 8, !tbaa !5
  store i8 %236, ptr %237, align 1, !tbaa !29
  br label %245

239:                                              ; preds = %212
  %240 = load ptr, ptr %18, align 8, !tbaa !5
  %241 = getelementptr inbounds i8, ptr %240, i64 -1
  %242 = load i8, ptr %241, align 1, !tbaa !29
  %243 = load ptr, ptr %19, align 8, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %243, i32 1
  store ptr %244, ptr %19, align 8, !tbaa !5
  store i8 %242, ptr %243, align 1, !tbaa !29
  br label %245

245:                                              ; preds = %239, %218
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #2
  br label %246

246:                                              ; preds = %245
  %247 = load i64, ptr %7, align 8, !tbaa !12
  %248 = add i64 %247, 1
  store i64 %248, ptr %7, align 8, !tbaa !12
  br label %193, !llvm.loop !32

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

250:                                              ; preds = %249, %189
  br label %524

251:                                              ; preds = %92
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.png_struct_def, ptr %252, i32 0, i32 72
  %254 = load ptr, ptr %253, align 8, !tbaa !33
  %255 = icmp ne ptr %254, null
  br i1 %255, label %256, label %431

256:                                              ; preds = %251
  %257 = load ptr, ptr %4, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.png_struct_def, ptr %257, i32 0, i32 71
  %259 = load ptr, ptr %258, align 8, !tbaa !34
  %260 = icmp ne ptr %259, null
  br i1 %260, label %261, label %431

261:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #2
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %262, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #2
  %263 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %263, ptr %24, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %264

264:                                              ; preds = %427, %261
  %265 = load i64, ptr %7, align 8, !tbaa !12
  %266 = load i64, ptr %8, align 8, !tbaa !12
  %267 = icmp ult i64 %265, %266
  br i1 %267, label %268, label %430

268:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #2
  %269 = load ptr, ptr %23, align 8, !tbaa !5
  %270 = load i8, ptr %269, align 1, !tbaa !29
  %271 = zext i8 %270 to i32
  %272 = shl i32 %271, 8
  %273 = load ptr, ptr %23, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i64 1
  %275 = load i8, ptr %274, align 1, !tbaa !29
  %276 = zext i8 %275 to i32
  %277 = or i32 %272, %276
  %278 = trunc i32 %277 to i16
  store i16 %278, ptr %25, align 2, !tbaa !35
  %279 = load ptr, ptr %23, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 2
  store ptr %280, ptr %23, align 8, !tbaa !5
  %281 = load ptr, ptr %23, align 8, !tbaa !5
  %282 = load i8, ptr %281, align 1, !tbaa !29
  %283 = zext i8 %282 to i32
  %284 = shl i32 %283, 8
  %285 = load ptr, ptr %23, align 8, !tbaa !5
  %286 = getelementptr inbounds i8, ptr %285, i64 1
  %287 = load i8, ptr %286, align 1, !tbaa !29
  %288 = zext i8 %287 to i32
  %289 = or i32 %284, %288
  %290 = trunc i32 %289 to i16
  store i16 %290, ptr %26, align 2, !tbaa !35
  %291 = load ptr, ptr %23, align 8, !tbaa !5
  %292 = getelementptr inbounds i8, ptr %291, i64 2
  store ptr %292, ptr %23, align 8, !tbaa !5
  %293 = load ptr, ptr %23, align 8, !tbaa !5
  %294 = load i8, ptr %293, align 1, !tbaa !29
  %295 = zext i8 %294 to i32
  %296 = shl i32 %295, 8
  %297 = load ptr, ptr %23, align 8, !tbaa !5
  %298 = getelementptr inbounds i8, ptr %297, i64 1
  %299 = load i8, ptr %298, align 1, !tbaa !29
  %300 = zext i8 %299 to i32
  %301 = or i32 %296, %300
  %302 = trunc i32 %301 to i16
  store i16 %302, ptr %27, align 2, !tbaa !35
  %303 = load ptr, ptr %23, align 8, !tbaa !5
  %304 = getelementptr inbounds i8, ptr %303, i64 2
  store ptr %304, ptr %23, align 8, !tbaa !5
  %305 = load i16, ptr %25, align 2, !tbaa !35
  %306 = zext i16 %305 to i32
  %307 = load i16, ptr %26, align 2, !tbaa !35
  %308 = zext i16 %307 to i32
  %309 = icmp eq i32 %306, %308
  br i1 %309, label %310, label %318

310:                                              ; preds = %268
  %311 = load i16, ptr %25, align 2, !tbaa !35
  %312 = zext i16 %311 to i32
  %313 = load i16, ptr %27, align 2, !tbaa !35
  %314 = zext i16 %313 to i32
  %315 = icmp eq i32 %312, %314
  br i1 %315, label %316, label %318

316:                                              ; preds = %310
  %317 = load i16, ptr %25, align 2, !tbaa !35
  store i16 %317, ptr %28, align 2, !tbaa !35
  br label %413

318:                                              ; preds = %310, %268
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #2
  %319 = load ptr, ptr %4, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.png_struct_def, ptr %319, i32 0, i32 72
  %321 = load ptr, ptr %320, align 8, !tbaa !33
  %322 = load i16, ptr %25, align 2, !tbaa !35
  %323 = zext i16 %322 to i32
  %324 = and i32 %323, 255
  %325 = load ptr, ptr %4, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.png_struct_def, ptr %325, i32 0, i32 64
  %327 = load i32, ptr %326, align 8, !tbaa !36
  %328 = ashr i32 %324, %327
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds ptr, ptr %321, i64 %329
  %331 = load ptr, ptr %330, align 8, !tbaa !5
  %332 = load i16, ptr %25, align 2, !tbaa !35
  %333 = zext i16 %332 to i32
  %334 = ashr i32 %333, 8
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds i16, ptr %331, i64 %335
  %337 = load i16, ptr %336, align 2, !tbaa !35
  store i16 %337, ptr %29, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #2
  %338 = load ptr, ptr %4, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.png_struct_def, ptr %338, i32 0, i32 72
  %340 = load ptr, ptr %339, align 8, !tbaa !33
  %341 = load i16, ptr %26, align 2, !tbaa !35
  %342 = zext i16 %341 to i32
  %343 = and i32 %342, 255
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.png_struct_def, ptr %344, i32 0, i32 64
  %346 = load i32, ptr %345, align 8, !tbaa !36
  %347 = ashr i32 %343, %346
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds ptr, ptr %340, i64 %348
  %350 = load ptr, ptr %349, align 8, !tbaa !5
  %351 = load i16, ptr %26, align 2, !tbaa !35
  %352 = zext i16 %351 to i32
  %353 = ashr i32 %352, 8
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i16, ptr %350, i64 %354
  %356 = load i16, ptr %355, align 2, !tbaa !35
  store i16 %356, ptr %30, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #2
  %357 = load ptr, ptr %4, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.png_struct_def, ptr %357, i32 0, i32 72
  %359 = load ptr, ptr %358, align 8, !tbaa !33
  %360 = load i16, ptr %27, align 2, !tbaa !35
  %361 = zext i16 %360 to i32
  %362 = and i32 %361, 255
  %363 = load ptr, ptr %4, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.png_struct_def, ptr %363, i32 0, i32 64
  %365 = load i32, ptr %364, align 8, !tbaa !36
  %366 = ashr i32 %362, %365
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds ptr, ptr %359, i64 %367
  %369 = load ptr, ptr %368, align 8, !tbaa !5
  %370 = load i16, ptr %27, align 2, !tbaa !35
  %371 = zext i16 %370 to i32
  %372 = ashr i32 %371, 8
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i16, ptr %369, i64 %373
  %375 = load i16, ptr %374, align 2, !tbaa !35
  store i16 %375, ptr %31, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 2, ptr %32) #2
  %376 = load i64, ptr %10, align 8, !tbaa !12
  %377 = load i16, ptr %29, align 2, !tbaa !35
  %378 = zext i16 %377 to i64
  %379 = mul i64 %376, %378
  %380 = load i64, ptr %11, align 8, !tbaa !12
  %381 = load i16, ptr %30, align 2, !tbaa !35
  %382 = zext i16 %381 to i64
  %383 = mul i64 %380, %382
  %384 = add i64 %379, %383
  %385 = load i64, ptr %12, align 8, !tbaa !12
  %386 = load i16, ptr %31, align 2, !tbaa !35
  %387 = zext i16 %386 to i64
  %388 = mul i64 %385, %387
  %389 = add i64 %384, %388
  %390 = lshr i64 %389, 15
  %391 = trunc i64 %390 to i16
  store i16 %391, ptr %32, align 2, !tbaa !35
  %392 = load ptr, ptr %4, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.png_struct_def, ptr %392, i32 0, i32 71
  %394 = load ptr, ptr %393, align 8, !tbaa !34
  %395 = load i16, ptr %32, align 2, !tbaa !35
  %396 = zext i16 %395 to i32
  %397 = and i32 %396, 255
  %398 = load ptr, ptr %4, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.png_struct_def, ptr %398, i32 0, i32 64
  %400 = load i32, ptr %399, align 8, !tbaa !36
  %401 = ashr i32 %397, %400
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds ptr, ptr %394, i64 %402
  %404 = load ptr, ptr %403, align 8, !tbaa !5
  %405 = load i16, ptr %32, align 2, !tbaa !35
  %406 = zext i16 %405 to i32
  %407 = ashr i32 %406, 8
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds i16, ptr %404, i64 %408
  %410 = load i16, ptr %409, align 2, !tbaa !35
  store i16 %410, ptr %28, align 2, !tbaa !35
  %411 = load i32, ptr %9, align 4, !tbaa !13
  %412 = or i32 %411, 1
  store i32 %412, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #2
  br label %413

413:                                              ; preds = %318, %316
  %414 = load i16, ptr %28, align 2, !tbaa !35
  %415 = zext i16 %414 to i32
  %416 = ashr i32 %415, 8
  %417 = and i32 %416, 255
  %418 = trunc i32 %417 to i8
  %419 = load ptr, ptr %24, align 8, !tbaa !5
  %420 = getelementptr inbounds i8, ptr %419, i32 1
  store ptr %420, ptr %24, align 8, !tbaa !5
  store i8 %418, ptr %419, align 1, !tbaa !29
  %421 = load i16, ptr %28, align 2, !tbaa !35
  %422 = zext i16 %421 to i32
  %423 = and i32 %422, 255
  %424 = trunc i32 %423 to i8
  %425 = load ptr, ptr %24, align 8, !tbaa !5
  %426 = getelementptr inbounds i8, ptr %425, i32 1
  store ptr %426, ptr %24, align 8, !tbaa !5
  store i8 %424, ptr %425, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #2
  br label %427

427:                                              ; preds = %413
  %428 = load i64, ptr %7, align 8, !tbaa !12
  %429 = add i64 %428, 1
  store i64 %429, ptr %7, align 8, !tbaa !12
  br label %264, !llvm.loop !37

430:                                              ; preds = %264
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #2
  br label %523

431:                                              ; preds = %256, %251
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #2
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %432, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #2
  %433 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %433, ptr %34, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %434

434:                                              ; preds = %519, %431
  %435 = load i64, ptr %7, align 8, !tbaa !12
  %436 = load i64, ptr %8, align 8, !tbaa !12
  %437 = icmp ult i64 %435, %436
  br i1 %437, label %438, label %522

438:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 2, ptr %35) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %36) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %37) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %38) #2
  %439 = load ptr, ptr %33, align 8, !tbaa !5
  %440 = load i8, ptr %439, align 1, !tbaa !29
  %441 = zext i8 %440 to i32
  %442 = shl i32 %441, 8
  %443 = load ptr, ptr %33, align 8, !tbaa !5
  %444 = getelementptr inbounds i8, ptr %443, i64 1
  %445 = load i8, ptr %444, align 1, !tbaa !29
  %446 = zext i8 %445 to i32
  %447 = or i32 %442, %446
  %448 = trunc i32 %447 to i16
  store i16 %448, ptr %35, align 2, !tbaa !35
  %449 = load ptr, ptr %33, align 8, !tbaa !5
  %450 = getelementptr inbounds i8, ptr %449, i64 2
  store ptr %450, ptr %33, align 8, !tbaa !5
  %451 = load ptr, ptr %33, align 8, !tbaa !5
  %452 = load i8, ptr %451, align 1, !tbaa !29
  %453 = zext i8 %452 to i32
  %454 = shl i32 %453, 8
  %455 = load ptr, ptr %33, align 8, !tbaa !5
  %456 = getelementptr inbounds i8, ptr %455, i64 1
  %457 = load i8, ptr %456, align 1, !tbaa !29
  %458 = zext i8 %457 to i32
  %459 = or i32 %454, %458
  %460 = trunc i32 %459 to i16
  store i16 %460, ptr %36, align 2, !tbaa !35
  %461 = load ptr, ptr %33, align 8, !tbaa !5
  %462 = getelementptr inbounds i8, ptr %461, i64 2
  store ptr %462, ptr %33, align 8, !tbaa !5
  %463 = load ptr, ptr %33, align 8, !tbaa !5
  %464 = load i8, ptr %463, align 1, !tbaa !29
  %465 = zext i8 %464 to i32
  %466 = shl i32 %465, 8
  %467 = load ptr, ptr %33, align 8, !tbaa !5
  %468 = getelementptr inbounds i8, ptr %467, i64 1
  %469 = load i8, ptr %468, align 1, !tbaa !29
  %470 = zext i8 %469 to i32
  %471 = or i32 %466, %470
  %472 = trunc i32 %471 to i16
  store i16 %472, ptr %37, align 2, !tbaa !35
  %473 = load ptr, ptr %33, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i64 2
  store ptr %474, ptr %33, align 8, !tbaa !5
  %475 = load i16, ptr %35, align 2, !tbaa !35
  %476 = zext i16 %475 to i32
  %477 = load i16, ptr %36, align 2, !tbaa !35
  %478 = zext i16 %477 to i32
  %479 = icmp ne i32 %476, %478
  br i1 %479, label %486, label %480

480:                                              ; preds = %438
  %481 = load i16, ptr %35, align 2, !tbaa !35
  %482 = zext i16 %481 to i32
  %483 = load i16, ptr %37, align 2, !tbaa !35
  %484 = zext i16 %483 to i32
  %485 = icmp ne i32 %482, %484
  br i1 %485, label %486, label %489

486:                                              ; preds = %480, %438
  %487 = load i32, ptr %9, align 4, !tbaa !13
  %488 = or i32 %487, 1
  store i32 %488, ptr %9, align 4, !tbaa !13
  br label %489

489:                                              ; preds = %486, %480
  %490 = load i64, ptr %10, align 8, !tbaa !12
  %491 = load i16, ptr %35, align 2, !tbaa !35
  %492 = zext i16 %491 to i64
  %493 = mul i64 %490, %492
  %494 = load i64, ptr %11, align 8, !tbaa !12
  %495 = load i16, ptr %36, align 2, !tbaa !35
  %496 = zext i16 %495 to i64
  %497 = mul i64 %494, %496
  %498 = add i64 %493, %497
  %499 = load i64, ptr %12, align 8, !tbaa !12
  %500 = load i16, ptr %37, align 2, !tbaa !35
  %501 = zext i16 %500 to i64
  %502 = mul i64 %499, %501
  %503 = add i64 %498, %502
  %504 = lshr i64 %503, 15
  %505 = trunc i64 %504 to i16
  store i16 %505, ptr %38, align 2, !tbaa !35
  %506 = load i16, ptr %38, align 2, !tbaa !35
  %507 = zext i16 %506 to i32
  %508 = ashr i32 %507, 8
  %509 = and i32 %508, 255
  %510 = trunc i32 %509 to i8
  %511 = load ptr, ptr %34, align 8, !tbaa !5
  %512 = getelementptr inbounds i8, ptr %511, i32 1
  store ptr %512, ptr %34, align 8, !tbaa !5
  store i8 %510, ptr %511, align 1, !tbaa !29
  %513 = load i16, ptr %38, align 2, !tbaa !35
  %514 = zext i16 %513 to i32
  %515 = and i32 %514, 255
  %516 = trunc i32 %515 to i8
  %517 = load ptr, ptr %34, align 8, !tbaa !5
  %518 = getelementptr inbounds i8, ptr %517, i32 1
  store ptr %518, ptr %34, align 8, !tbaa !5
  store i8 %516, ptr %517, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 2, ptr %38) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %37) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %36) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %35) #2
  br label %519

519:                                              ; preds = %489
  %520 = load i64, ptr %7, align 8, !tbaa !12
  %521 = add i64 %520, 1
  store i64 %521, ptr %7, align 8, !tbaa !12
  br label %434, !llvm.loop !38

522:                                              ; preds = %434
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #2
  br label %523

523:                                              ; preds = %522, %430
  br label %524

524:                                              ; preds = %523, %250
  br label %525

525:                                              ; preds = %524, %74
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.png_row_info_struct, ptr %526, i32 0, i32 2
  %528 = load i8, ptr %527, align 8, !tbaa !15
  %529 = zext i8 %528 to i32
  %530 = icmp eq i32 %529, 6
  br i1 %530, label %531, label %982

531:                                              ; preds = %525
  %532 = load ptr, ptr %5, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.png_row_info_struct, ptr %532, i32 0, i32 3
  %534 = load i8, ptr %533, align 1, !tbaa !26
  %535 = zext i8 %534 to i32
  %536 = icmp eq i32 %535, 8
  br i1 %536, label %537, label %688

537:                                              ; preds = %531
  %538 = load ptr, ptr %4, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.png_struct_def, ptr %538, i32 0, i32 68
  %540 = load ptr, ptr %539, align 8, !tbaa !27
  %541 = icmp ne ptr %540, null
  br i1 %541, label %542, label %628

542:                                              ; preds = %537
  %543 = load ptr, ptr %4, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.png_struct_def, ptr %543, i32 0, i32 69
  %545 = load ptr, ptr %544, align 8, !tbaa !28
  %546 = icmp ne ptr %545, null
  br i1 %546, label %547, label %628

547:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #2
  %548 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %548, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #2
  %549 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %549, ptr %40, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %550

550:                                              ; preds = %624, %547
  %551 = load i64, ptr %7, align 8, !tbaa !12
  %552 = load i64, ptr %8, align 8, !tbaa !12
  %553 = icmp ult i64 %551, %552
  br i1 %553, label %554, label %627

554:                                              ; preds = %550
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #2
  %555 = load ptr, ptr %4, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.png_struct_def, ptr %555, i32 0, i32 69
  %557 = load ptr, ptr %556, align 8, !tbaa !28
  %558 = load ptr, ptr %39, align 8, !tbaa !5
  %559 = getelementptr inbounds i8, ptr %558, i32 1
  store ptr %559, ptr %39, align 8, !tbaa !5
  %560 = load i8, ptr %558, align 1, !tbaa !29
  %561 = zext i8 %560 to i64
  %562 = getelementptr inbounds i8, ptr %557, i64 %561
  %563 = load i8, ptr %562, align 1, !tbaa !29
  store i8 %563, ptr %41, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #2
  %564 = load ptr, ptr %4, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.png_struct_def, ptr %564, i32 0, i32 69
  %566 = load ptr, ptr %565, align 8, !tbaa !28
  %567 = load ptr, ptr %39, align 8, !tbaa !5
  %568 = getelementptr inbounds i8, ptr %567, i32 1
  store ptr %568, ptr %39, align 8, !tbaa !5
  %569 = load i8, ptr %567, align 1, !tbaa !29
  %570 = zext i8 %569 to i64
  %571 = getelementptr inbounds i8, ptr %566, i64 %570
  %572 = load i8, ptr %571, align 1, !tbaa !29
  store i8 %572, ptr %42, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #2
  %573 = load ptr, ptr %4, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.png_struct_def, ptr %573, i32 0, i32 69
  %575 = load ptr, ptr %574, align 8, !tbaa !28
  %576 = load ptr, ptr %39, align 8, !tbaa !5
  %577 = getelementptr inbounds i8, ptr %576, i32 1
  store ptr %577, ptr %39, align 8, !tbaa !5
  %578 = load i8, ptr %576, align 1, !tbaa !29
  %579 = zext i8 %578 to i64
  %580 = getelementptr inbounds i8, ptr %575, i64 %579
  %581 = load i8, ptr %580, align 1, !tbaa !29
  store i8 %581, ptr %43, align 1, !tbaa !29
  %582 = load i8, ptr %41, align 1, !tbaa !29
  %583 = zext i8 %582 to i32
  %584 = load i8, ptr %42, align 1, !tbaa !29
  %585 = zext i8 %584 to i32
  %586 = icmp ne i32 %583, %585
  br i1 %586, label %593, label %587

587:                                              ; preds = %554
  %588 = load i8, ptr %41, align 1, !tbaa !29
  %589 = zext i8 %588 to i32
  %590 = load i8, ptr %43, align 1, !tbaa !29
  %591 = zext i8 %590 to i32
  %592 = icmp ne i32 %589, %591
  br i1 %592, label %593, label %596

593:                                              ; preds = %587, %554
  %594 = load i32, ptr %9, align 4, !tbaa !13
  %595 = or i32 %594, 1
  store i32 %595, ptr %9, align 4, !tbaa !13
  br label %596

596:                                              ; preds = %593, %587
  %597 = load ptr, ptr %4, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.png_struct_def, ptr %597, i32 0, i32 68
  %599 = load ptr, ptr %598, align 8, !tbaa !27
  %600 = load i64, ptr %10, align 8, !tbaa !12
  %601 = load i8, ptr %41, align 1, !tbaa !29
  %602 = zext i8 %601 to i64
  %603 = mul i64 %600, %602
  %604 = load i64, ptr %11, align 8, !tbaa !12
  %605 = load i8, ptr %42, align 1, !tbaa !29
  %606 = zext i8 %605 to i64
  %607 = mul i64 %604, %606
  %608 = add i64 %603, %607
  %609 = load i64, ptr %12, align 8, !tbaa !12
  %610 = load i8, ptr %43, align 1, !tbaa !29
  %611 = zext i8 %610 to i64
  %612 = mul i64 %609, %611
  %613 = add i64 %608, %612
  %614 = lshr i64 %613, 15
  %615 = getelementptr inbounds i8, ptr %599, i64 %614
  %616 = load i8, ptr %615, align 1, !tbaa !29
  %617 = load ptr, ptr %40, align 8, !tbaa !5
  %618 = getelementptr inbounds i8, ptr %617, i32 1
  store ptr %618, ptr %40, align 8, !tbaa !5
  store i8 %616, ptr %617, align 1, !tbaa !29
  %619 = load ptr, ptr %39, align 8, !tbaa !5
  %620 = getelementptr inbounds i8, ptr %619, i32 1
  store ptr %620, ptr %39, align 8, !tbaa !5
  %621 = load i8, ptr %619, align 1, !tbaa !29
  %622 = load ptr, ptr %40, align 8, !tbaa !5
  %623 = getelementptr inbounds i8, ptr %622, i32 1
  store ptr %623, ptr %40, align 8, !tbaa !5
  store i8 %621, ptr %622, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #2
  br label %624

624:                                              ; preds = %596
  %625 = load i64, ptr %7, align 8, !tbaa !12
  %626 = add i64 %625, 1
  store i64 %626, ptr %7, align 8, !tbaa !12
  br label %550, !llvm.loop !39

627:                                              ; preds = %550
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #2
  br label %687

628:                                              ; preds = %542, %537
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #2
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %629, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #2
  %630 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %630, ptr %45, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %631

631:                                              ; preds = %683, %628
  %632 = load i64, ptr %7, align 8, !tbaa !12
  %633 = load i64, ptr %8, align 8, !tbaa !12
  %634 = icmp ult i64 %632, %633
  br i1 %634, label %635, label %686

635:                                              ; preds = %631
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #2
  %636 = load ptr, ptr %44, align 8, !tbaa !5
  %637 = getelementptr inbounds i8, ptr %636, i32 1
  store ptr %637, ptr %44, align 8, !tbaa !5
  %638 = load i8, ptr %636, align 1, !tbaa !29
  store i8 %638, ptr %46, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #2
  %639 = load ptr, ptr %44, align 8, !tbaa !5
  %640 = getelementptr inbounds i8, ptr %639, i32 1
  store ptr %640, ptr %44, align 8, !tbaa !5
  %641 = load i8, ptr %639, align 1, !tbaa !29
  store i8 %641, ptr %47, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #2
  %642 = load ptr, ptr %44, align 8, !tbaa !5
  %643 = getelementptr inbounds i8, ptr %642, i32 1
  store ptr %643, ptr %44, align 8, !tbaa !5
  %644 = load i8, ptr %642, align 1, !tbaa !29
  store i8 %644, ptr %48, align 1, !tbaa !29
  %645 = load i8, ptr %46, align 1, !tbaa !29
  %646 = zext i8 %645 to i32
  %647 = load i8, ptr %47, align 1, !tbaa !29
  %648 = zext i8 %647 to i32
  %649 = icmp ne i32 %646, %648
  br i1 %649, label %656, label %650

650:                                              ; preds = %635
  %651 = load i8, ptr %46, align 1, !tbaa !29
  %652 = zext i8 %651 to i32
  %653 = load i8, ptr %48, align 1, !tbaa !29
  %654 = zext i8 %653 to i32
  %655 = icmp ne i32 %652, %654
  br i1 %655, label %656, label %659

656:                                              ; preds = %650, %635
  %657 = load i32, ptr %9, align 4, !tbaa !13
  %658 = or i32 %657, 1
  store i32 %658, ptr %9, align 4, !tbaa !13
  br label %659

659:                                              ; preds = %656, %650
  %660 = load i64, ptr %10, align 8, !tbaa !12
  %661 = load i8, ptr %46, align 1, !tbaa !29
  %662 = zext i8 %661 to i64
  %663 = mul i64 %660, %662
  %664 = load i64, ptr %11, align 8, !tbaa !12
  %665 = load i8, ptr %47, align 1, !tbaa !29
  %666 = zext i8 %665 to i64
  %667 = mul i64 %664, %666
  %668 = add i64 %663, %667
  %669 = load i64, ptr %12, align 8, !tbaa !12
  %670 = load i8, ptr %48, align 1, !tbaa !29
  %671 = zext i8 %670 to i64
  %672 = mul i64 %669, %671
  %673 = add i64 %668, %672
  %674 = lshr i64 %673, 15
  %675 = trunc i64 %674 to i8
  %676 = load ptr, ptr %45, align 8, !tbaa !5
  %677 = getelementptr inbounds i8, ptr %676, i32 1
  store ptr %677, ptr %45, align 8, !tbaa !5
  store i8 %675, ptr %676, align 1, !tbaa !29
  %678 = load ptr, ptr %44, align 8, !tbaa !5
  %679 = getelementptr inbounds i8, ptr %678, i32 1
  store ptr %679, ptr %44, align 8, !tbaa !5
  %680 = load i8, ptr %678, align 1, !tbaa !29
  %681 = load ptr, ptr %45, align 8, !tbaa !5
  %682 = getelementptr inbounds i8, ptr %681, i32 1
  store ptr %682, ptr %45, align 8, !tbaa !5
  store i8 %680, ptr %681, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #2
  br label %683

683:                                              ; preds = %659
  %684 = load i64, ptr %7, align 8, !tbaa !12
  %685 = add i64 %684, 1
  store i64 %685, ptr %7, align 8, !tbaa !12
  br label %631, !llvm.loop !40

686:                                              ; preds = %631
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #2
  br label %687

687:                                              ; preds = %686, %627
  br label %981

688:                                              ; preds = %531
  %689 = load ptr, ptr %4, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.png_struct_def, ptr %689, i32 0, i32 72
  %691 = load ptr, ptr %690, align 8, !tbaa !33
  %692 = icmp ne ptr %691, null
  br i1 %692, label %693, label %878

693:                                              ; preds = %688
  %694 = load ptr, ptr %4, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.png_struct_def, ptr %694, i32 0, i32 71
  %696 = load ptr, ptr %695, align 8, !tbaa !34
  %697 = icmp ne ptr %696, null
  br i1 %697, label %698, label %878

698:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #2
  %699 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %699, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #2
  %700 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %700, ptr %50, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %701

701:                                              ; preds = %874, %698
  %702 = load i64, ptr %7, align 8, !tbaa !12
  %703 = load i64, ptr %8, align 8, !tbaa !12
  %704 = icmp ult i64 %702, %703
  br i1 %704, label %705, label %877

705:                                              ; preds = %701
  call void @llvm.lifetime.start.p0(i64 2, ptr %51) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %52) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %53) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %54) #2
  %706 = load ptr, ptr %49, align 8, !tbaa !5
  %707 = load i8, ptr %706, align 1, !tbaa !29
  %708 = zext i8 %707 to i32
  %709 = shl i32 %708, 8
  %710 = load ptr, ptr %49, align 8, !tbaa !5
  %711 = getelementptr inbounds i8, ptr %710, i64 1
  %712 = load i8, ptr %711, align 1, !tbaa !29
  %713 = zext i8 %712 to i32
  %714 = or i32 %709, %713
  %715 = trunc i32 %714 to i16
  store i16 %715, ptr %51, align 2, !tbaa !35
  %716 = load ptr, ptr %49, align 8, !tbaa !5
  %717 = getelementptr inbounds i8, ptr %716, i64 2
  store ptr %717, ptr %49, align 8, !tbaa !5
  %718 = load ptr, ptr %49, align 8, !tbaa !5
  %719 = load i8, ptr %718, align 1, !tbaa !29
  %720 = zext i8 %719 to i32
  %721 = shl i32 %720, 8
  %722 = load ptr, ptr %49, align 8, !tbaa !5
  %723 = getelementptr inbounds i8, ptr %722, i64 1
  %724 = load i8, ptr %723, align 1, !tbaa !29
  %725 = zext i8 %724 to i32
  %726 = or i32 %721, %725
  %727 = trunc i32 %726 to i16
  store i16 %727, ptr %52, align 2, !tbaa !35
  %728 = load ptr, ptr %49, align 8, !tbaa !5
  %729 = getelementptr inbounds i8, ptr %728, i64 2
  store ptr %729, ptr %49, align 8, !tbaa !5
  %730 = load ptr, ptr %49, align 8, !tbaa !5
  %731 = load i8, ptr %730, align 1, !tbaa !29
  %732 = zext i8 %731 to i32
  %733 = shl i32 %732, 8
  %734 = load ptr, ptr %49, align 8, !tbaa !5
  %735 = getelementptr inbounds i8, ptr %734, i64 1
  %736 = load i8, ptr %735, align 1, !tbaa !29
  %737 = zext i8 %736 to i32
  %738 = or i32 %733, %737
  %739 = trunc i32 %738 to i16
  store i16 %739, ptr %53, align 2, !tbaa !35
  %740 = load ptr, ptr %49, align 8, !tbaa !5
  %741 = getelementptr inbounds i8, ptr %740, i64 2
  store ptr %741, ptr %49, align 8, !tbaa !5
  %742 = load i16, ptr %51, align 2, !tbaa !35
  %743 = zext i16 %742 to i32
  %744 = load i16, ptr %52, align 2, !tbaa !35
  %745 = zext i16 %744 to i32
  %746 = icmp eq i32 %743, %745
  br i1 %746, label %747, label %755

747:                                              ; preds = %705
  %748 = load i16, ptr %51, align 2, !tbaa !35
  %749 = zext i16 %748 to i32
  %750 = load i16, ptr %53, align 2, !tbaa !35
  %751 = zext i16 %750 to i32
  %752 = icmp eq i32 %749, %751
  br i1 %752, label %753, label %755

753:                                              ; preds = %747
  %754 = load i16, ptr %51, align 2, !tbaa !35
  store i16 %754, ptr %54, align 2, !tbaa !35
  br label %850

755:                                              ; preds = %747, %705
  call void @llvm.lifetime.start.p0(i64 2, ptr %55) #2
  %756 = load ptr, ptr %4, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.png_struct_def, ptr %756, i32 0, i32 72
  %758 = load ptr, ptr %757, align 8, !tbaa !33
  %759 = load i16, ptr %51, align 2, !tbaa !35
  %760 = zext i16 %759 to i32
  %761 = and i32 %760, 255
  %762 = load ptr, ptr %4, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.png_struct_def, ptr %762, i32 0, i32 64
  %764 = load i32, ptr %763, align 8, !tbaa !36
  %765 = ashr i32 %761, %764
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds ptr, ptr %758, i64 %766
  %768 = load ptr, ptr %767, align 8, !tbaa !5
  %769 = load i16, ptr %51, align 2, !tbaa !35
  %770 = zext i16 %769 to i32
  %771 = ashr i32 %770, 8
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds i16, ptr %768, i64 %772
  %774 = load i16, ptr %773, align 2, !tbaa !35
  store i16 %774, ptr %55, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 2, ptr %56) #2
  %775 = load ptr, ptr %4, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.png_struct_def, ptr %775, i32 0, i32 72
  %777 = load ptr, ptr %776, align 8, !tbaa !33
  %778 = load i16, ptr %52, align 2, !tbaa !35
  %779 = zext i16 %778 to i32
  %780 = and i32 %779, 255
  %781 = load ptr, ptr %4, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.png_struct_def, ptr %781, i32 0, i32 64
  %783 = load i32, ptr %782, align 8, !tbaa !36
  %784 = ashr i32 %780, %783
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds ptr, ptr %777, i64 %785
  %787 = load ptr, ptr %786, align 8, !tbaa !5
  %788 = load i16, ptr %52, align 2, !tbaa !35
  %789 = zext i16 %788 to i32
  %790 = ashr i32 %789, 8
  %791 = sext i32 %790 to i64
  %792 = getelementptr inbounds i16, ptr %787, i64 %791
  %793 = load i16, ptr %792, align 2, !tbaa !35
  store i16 %793, ptr %56, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 2, ptr %57) #2
  %794 = load ptr, ptr %4, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.png_struct_def, ptr %794, i32 0, i32 72
  %796 = load ptr, ptr %795, align 8, !tbaa !33
  %797 = load i16, ptr %53, align 2, !tbaa !35
  %798 = zext i16 %797 to i32
  %799 = and i32 %798, 255
  %800 = load ptr, ptr %4, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.png_struct_def, ptr %800, i32 0, i32 64
  %802 = load i32, ptr %801, align 8, !tbaa !36
  %803 = ashr i32 %799, %802
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds ptr, ptr %796, i64 %804
  %806 = load ptr, ptr %805, align 8, !tbaa !5
  %807 = load i16, ptr %53, align 2, !tbaa !35
  %808 = zext i16 %807 to i32
  %809 = ashr i32 %808, 8
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds i16, ptr %806, i64 %810
  %812 = load i16, ptr %811, align 2, !tbaa !35
  store i16 %812, ptr %57, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 2, ptr %58) #2
  %813 = load i64, ptr %10, align 8, !tbaa !12
  %814 = load i16, ptr %55, align 2, !tbaa !35
  %815 = zext i16 %814 to i64
  %816 = mul i64 %813, %815
  %817 = load i64, ptr %11, align 8, !tbaa !12
  %818 = load i16, ptr %56, align 2, !tbaa !35
  %819 = zext i16 %818 to i64
  %820 = mul i64 %817, %819
  %821 = add i64 %816, %820
  %822 = load i64, ptr %12, align 8, !tbaa !12
  %823 = load i16, ptr %57, align 2, !tbaa !35
  %824 = zext i16 %823 to i64
  %825 = mul i64 %822, %824
  %826 = add i64 %821, %825
  %827 = lshr i64 %826, 15
  %828 = trunc i64 %827 to i16
  store i16 %828, ptr %58, align 2, !tbaa !35
  %829 = load ptr, ptr %4, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.png_struct_def, ptr %829, i32 0, i32 71
  %831 = load ptr, ptr %830, align 8, !tbaa !34
  %832 = load i16, ptr %58, align 2, !tbaa !35
  %833 = zext i16 %832 to i32
  %834 = and i32 %833, 255
  %835 = load ptr, ptr %4, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.png_struct_def, ptr %835, i32 0, i32 64
  %837 = load i32, ptr %836, align 8, !tbaa !36
  %838 = ashr i32 %834, %837
  %839 = sext i32 %838 to i64
  %840 = getelementptr inbounds ptr, ptr %831, i64 %839
  %841 = load ptr, ptr %840, align 8, !tbaa !5
  %842 = load i16, ptr %58, align 2, !tbaa !35
  %843 = zext i16 %842 to i32
  %844 = ashr i32 %843, 8
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds i16, ptr %841, i64 %845
  %847 = load i16, ptr %846, align 2, !tbaa !35
  store i16 %847, ptr %54, align 2, !tbaa !35
  %848 = load i32, ptr %9, align 4, !tbaa !13
  %849 = or i32 %848, 1
  store i32 %849, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %58) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %57) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %56) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %55) #2
  br label %850

850:                                              ; preds = %755, %753
  %851 = load i16, ptr %54, align 2, !tbaa !35
  %852 = zext i16 %851 to i32
  %853 = ashr i32 %852, 8
  %854 = and i32 %853, 255
  %855 = trunc i32 %854 to i8
  %856 = load ptr, ptr %50, align 8, !tbaa !5
  %857 = getelementptr inbounds i8, ptr %856, i32 1
  store ptr %857, ptr %50, align 8, !tbaa !5
  store i8 %855, ptr %856, align 1, !tbaa !29
  %858 = load i16, ptr %54, align 2, !tbaa !35
  %859 = zext i16 %858 to i32
  %860 = and i32 %859, 255
  %861 = trunc i32 %860 to i8
  %862 = load ptr, ptr %50, align 8, !tbaa !5
  %863 = getelementptr inbounds i8, ptr %862, i32 1
  store ptr %863, ptr %50, align 8, !tbaa !5
  store i8 %861, ptr %862, align 1, !tbaa !29
  %864 = load ptr, ptr %49, align 8, !tbaa !5
  %865 = getelementptr inbounds i8, ptr %864, i32 1
  store ptr %865, ptr %49, align 8, !tbaa !5
  %866 = load i8, ptr %864, align 1, !tbaa !29
  %867 = load ptr, ptr %50, align 8, !tbaa !5
  %868 = getelementptr inbounds i8, ptr %867, i32 1
  store ptr %868, ptr %50, align 8, !tbaa !5
  store i8 %866, ptr %867, align 1, !tbaa !29
  %869 = load ptr, ptr %49, align 8, !tbaa !5
  %870 = getelementptr inbounds i8, ptr %869, i32 1
  store ptr %870, ptr %49, align 8, !tbaa !5
  %871 = load i8, ptr %869, align 1, !tbaa !29
  %872 = load ptr, ptr %50, align 8, !tbaa !5
  %873 = getelementptr inbounds i8, ptr %872, i32 1
  store ptr %873, ptr %50, align 8, !tbaa !5
  store i8 %871, ptr %872, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 2, ptr %54) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %53) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %52) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %51) #2
  br label %874

874:                                              ; preds = %850
  %875 = load i64, ptr %7, align 8, !tbaa !12
  %876 = add i64 %875, 1
  store i64 %876, ptr %7, align 8, !tbaa !12
  br label %701, !llvm.loop !41

877:                                              ; preds = %701
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #2
  br label %980

878:                                              ; preds = %693, %688
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #2
  %879 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %879, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #2
  %880 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %880, ptr %60, align 8, !tbaa !5
  store i64 0, ptr %7, align 8, !tbaa !12
  br label %881

881:                                              ; preds = %976, %878
  %882 = load i64, ptr %7, align 8, !tbaa !12
  %883 = load i64, ptr %8, align 8, !tbaa !12
  %884 = icmp ult i64 %882, %883
  br i1 %884, label %885, label %979

885:                                              ; preds = %881
  call void @llvm.lifetime.start.p0(i64 2, ptr %61) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %62) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %63) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %64) #2
  %886 = load ptr, ptr %59, align 8, !tbaa !5
  %887 = load i8, ptr %886, align 1, !tbaa !29
  %888 = zext i8 %887 to i32
  %889 = shl i32 %888, 8
  %890 = load ptr, ptr %59, align 8, !tbaa !5
  %891 = getelementptr inbounds i8, ptr %890, i64 1
  %892 = load i8, ptr %891, align 1, !tbaa !29
  %893 = zext i8 %892 to i32
  %894 = or i32 %889, %893
  %895 = trunc i32 %894 to i16
  store i16 %895, ptr %61, align 2, !tbaa !35
  %896 = load ptr, ptr %59, align 8, !tbaa !5
  %897 = getelementptr inbounds i8, ptr %896, i64 2
  store ptr %897, ptr %59, align 8, !tbaa !5
  %898 = load ptr, ptr %59, align 8, !tbaa !5
  %899 = load i8, ptr %898, align 1, !tbaa !29
  %900 = zext i8 %899 to i32
  %901 = shl i32 %900, 8
  %902 = load ptr, ptr %59, align 8, !tbaa !5
  %903 = getelementptr inbounds i8, ptr %902, i64 1
  %904 = load i8, ptr %903, align 1, !tbaa !29
  %905 = zext i8 %904 to i32
  %906 = or i32 %901, %905
  %907 = trunc i32 %906 to i16
  store i16 %907, ptr %62, align 2, !tbaa !35
  %908 = load ptr, ptr %59, align 8, !tbaa !5
  %909 = getelementptr inbounds i8, ptr %908, i64 2
  store ptr %909, ptr %59, align 8, !tbaa !5
  %910 = load ptr, ptr %59, align 8, !tbaa !5
  %911 = load i8, ptr %910, align 1, !tbaa !29
  %912 = zext i8 %911 to i32
  %913 = shl i32 %912, 8
  %914 = load ptr, ptr %59, align 8, !tbaa !5
  %915 = getelementptr inbounds i8, ptr %914, i64 1
  %916 = load i8, ptr %915, align 1, !tbaa !29
  %917 = zext i8 %916 to i32
  %918 = or i32 %913, %917
  %919 = trunc i32 %918 to i16
  store i16 %919, ptr %63, align 2, !tbaa !35
  %920 = load ptr, ptr %59, align 8, !tbaa !5
  %921 = getelementptr inbounds i8, ptr %920, i64 2
  store ptr %921, ptr %59, align 8, !tbaa !5
  %922 = load i16, ptr %61, align 2, !tbaa !35
  %923 = zext i16 %922 to i32
  %924 = load i16, ptr %62, align 2, !tbaa !35
  %925 = zext i16 %924 to i32
  %926 = icmp ne i32 %923, %925
  br i1 %926, label %933, label %927

927:                                              ; preds = %885
  %928 = load i16, ptr %61, align 2, !tbaa !35
  %929 = zext i16 %928 to i32
  %930 = load i16, ptr %63, align 2, !tbaa !35
  %931 = zext i16 %930 to i32
  %932 = icmp ne i32 %929, %931
  br i1 %932, label %933, label %936

933:                                              ; preds = %927, %885
  %934 = load i32, ptr %9, align 4, !tbaa !13
  %935 = or i32 %934, 1
  store i32 %935, ptr %9, align 4, !tbaa !13
  br label %936

936:                                              ; preds = %933, %927
  %937 = load i64, ptr %10, align 8, !tbaa !12
  %938 = load i16, ptr %61, align 2, !tbaa !35
  %939 = zext i16 %938 to i64
  %940 = mul i64 %937, %939
  %941 = load i64, ptr %11, align 8, !tbaa !12
  %942 = load i16, ptr %62, align 2, !tbaa !35
  %943 = zext i16 %942 to i64
  %944 = mul i64 %941, %943
  %945 = add i64 %940, %944
  %946 = load i64, ptr %12, align 8, !tbaa !12
  %947 = load i16, ptr %63, align 2, !tbaa !35
  %948 = zext i16 %947 to i64
  %949 = mul i64 %946, %948
  %950 = add i64 %945, %949
  %951 = lshr i64 %950, 15
  %952 = trunc i64 %951 to i16
  store i16 %952, ptr %64, align 2, !tbaa !35
  %953 = load i16, ptr %64, align 2, !tbaa !35
  %954 = zext i16 %953 to i32
  %955 = ashr i32 %954, 8
  %956 = and i32 %955, 255
  %957 = trunc i32 %956 to i8
  %958 = load ptr, ptr %60, align 8, !tbaa !5
  %959 = getelementptr inbounds i8, ptr %958, i32 1
  store ptr %959, ptr %60, align 8, !tbaa !5
  store i8 %957, ptr %958, align 1, !tbaa !29
  %960 = load i16, ptr %64, align 2, !tbaa !35
  %961 = zext i16 %960 to i32
  %962 = and i32 %961, 255
  %963 = trunc i32 %962 to i8
  %964 = load ptr, ptr %60, align 8, !tbaa !5
  %965 = getelementptr inbounds i8, ptr %964, i32 1
  store ptr %965, ptr %60, align 8, !tbaa !5
  store i8 %963, ptr %964, align 1, !tbaa !29
  %966 = load ptr, ptr %59, align 8, !tbaa !5
  %967 = getelementptr inbounds i8, ptr %966, i32 1
  store ptr %967, ptr %59, align 8, !tbaa !5
  %968 = load i8, ptr %966, align 1, !tbaa !29
  %969 = load ptr, ptr %60, align 8, !tbaa !5
  %970 = getelementptr inbounds i8, ptr %969, i32 1
  store ptr %970, ptr %60, align 8, !tbaa !5
  store i8 %968, ptr %969, align 1, !tbaa !29
  %971 = load ptr, ptr %59, align 8, !tbaa !5
  %972 = getelementptr inbounds i8, ptr %971, i32 1
  store ptr %972, ptr %59, align 8, !tbaa !5
  %973 = load i8, ptr %971, align 1, !tbaa !29
  %974 = load ptr, ptr %60, align 8, !tbaa !5
  %975 = getelementptr inbounds i8, ptr %974, i32 1
  store ptr %975, ptr %60, align 8, !tbaa !5
  store i8 %973, ptr %974, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 2, ptr %64) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %63) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %62) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %61) #2
  br label %976

976:                                              ; preds = %936
  %977 = load i64, ptr %7, align 8, !tbaa !12
  %978 = add i64 %977, 1
  store i64 %978, ptr %7, align 8, !tbaa !12
  br label %881, !llvm.loop !42

979:                                              ; preds = %881
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #2
  br label %980

980:                                              ; preds = %979, %877
  br label %981

981:                                              ; preds = %980, %687
  br label %982

982:                                              ; preds = %981, %525
  %983 = load ptr, ptr %5, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.png_row_info_struct, ptr %983, i32 0, i32 4
  %985 = load i8, ptr %984, align 2, !tbaa !43
  %986 = zext i8 %985 to i32
  %987 = sub nsw i32 %986, 2
  %988 = trunc i32 %987 to i8
  store i8 %988, ptr %984, align 2, !tbaa !43
  %989 = load ptr, ptr %5, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.png_row_info_struct, ptr %989, i32 0, i32 2
  %991 = load i8, ptr %990, align 8, !tbaa !15
  %992 = zext i8 %991 to i32
  %993 = and i32 %992, -3
  %994 = trunc i32 %993 to i8
  store i8 %994, ptr %990, align 8, !tbaa !15
  %995 = load ptr, ptr %5, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.png_row_info_struct, ptr %995, i32 0, i32 4
  %997 = load i8, ptr %996, align 2, !tbaa !43
  %998 = zext i8 %997 to i32
  %999 = load ptr, ptr %5, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.png_row_info_struct, ptr %999, i32 0, i32 3
  %1001 = load i8, ptr %1000, align 1, !tbaa !26
  %1002 = zext i8 %1001 to i32
  %1003 = mul nsw i32 %998, %1002
  %1004 = trunc i32 %1003 to i8
  %1005 = load ptr, ptr %5, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.png_row_info_struct, ptr %1005, i32 0, i32 5
  store i8 %1004, ptr %1006, align 1, !tbaa !44
  %1007 = load ptr, ptr %5, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct.png_row_info_struct, ptr %1007, i32 0, i32 5
  %1009 = load i8, ptr %1008, align 1, !tbaa !44
  %1010 = zext i8 %1009 to i32
  %1011 = icmp sge i32 %1010, 8
  br i1 %1011, label %1012, label %1020

1012:                                             ; preds = %982
  %1013 = load i64, ptr %8, align 8, !tbaa !12
  %1014 = load ptr, ptr %5, align 8, !tbaa !5
  %1015 = getelementptr inbounds %struct.png_row_info_struct, ptr %1014, i32 0, i32 5
  %1016 = load i8, ptr %1015, align 1, !tbaa !44
  %1017 = zext i8 %1016 to i64
  %1018 = lshr i64 %1017, 3
  %1019 = mul i64 %1013, %1018
  br label %1029

1020:                                             ; preds = %982
  %1021 = load i64, ptr %8, align 8, !tbaa !12
  %1022 = load ptr, ptr %5, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.png_row_info_struct, ptr %1022, i32 0, i32 5
  %1024 = load i8, ptr %1023, align 1, !tbaa !44
  %1025 = zext i8 %1024 to i64
  %1026 = mul i64 %1021, %1025
  %1027 = add i64 %1026, 7
  %1028 = lshr i64 %1027, 3
  br label %1029

1029:                                             ; preds = %1020, %1012
  %1030 = phi i64 [ %1019, %1012 ], [ %1028, %1020 ]
  %1031 = load ptr, ptr %5, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.png_row_info_struct, ptr %1031, i32 0, i32 1
  store i64 %1030, ptr %1032, align 8, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  br label %1033

1033:                                             ; preds = %1029, %3
  %1034 = load i32, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  ret i32 %1034
}

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, !11, i64 0}
!10 = !{!"png_row_info_struct", !11, i64 0, !11, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!11 = !{!"long", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!10, !7, i64 16}
!16 = !{!17, !19, i64 1082}
!17 = !{!"png_struct_def", !7, i64 0, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !7, i64 272, !7, i64 273, !11, i64 280, !11, i64 288, !11, i64 296, !18, i64 304, !6, i64 416, !11, i64 424, !14, i64 432, !14, i64 436, !14, i64 440, !14, i64 444, !14, i64 448, !11, i64 456, !11, i64 464, !11, i64 472, !11, i64 480, !11, i64 488, !11, i64 496, !11, i64 504, !11, i64 512, !6, i64 520, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !10, i64 568, !11, i64 592, !11, i64 600, !6, i64 608, !19, i64 616, !19, i64 618, !7, i64 620, !7, i64 625, !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, !19, i64 638, !7, i64 640, !20, i64 644, !21, i64 648, !21, i64 658, !6, i64 672, !11, i64 680, !11, i64 688, !14, i64 696, !20, i64 700, !20, i64 704, !6, i64 712, !6, i64 720, !6, i64 728, !6, i64 736, !6, i64 744, !6, i64 752, !22, i64 760, !22, i64 765, !6, i64 776, !21, i64 784, !6, i64 800, !6, i64 808, !6, i64 816, !6, i64 824, !6, i64 832, !6, i64 840, !6, i64 848, !6, i64 856, !6, i64 864, !11, i64 872, !11, i64 880, !11, i64 888, !11, i64 896, !11, i64 904, !11, i64 912, !14, i64 920, !14, i64 924, !11, i64 928, !11, i64 936, !6, i64 944, !6, i64 952, !6, i64 960, !6, i64 968, !6, i64 976, !7, i64 984, !7, i64 985, !6, i64 992, !6, i64 1000, !6, i64 1008, !6, i64 1016, !6, i64 1024, !6, i64 1032, !11, i64 1040, !6, i64 1048, !6, i64 1056, !14, i64 1064, !6, i64 1072, !7, i64 1080, !19, i64 1082, !19, i64 1084, !19, i64 1086, !11, i64 1088, !11, i64 1096, !7, i64 1104, !7, i64 1105, !11, i64 1112, !11, i64 1120, !6, i64 1128, !6, i64 1136, !6, i64 1144, !6, i64 1152, !6, i64 1160, !6, i64 1168, !6, i64 1176, !7, i64 1184, !11, i64 1192, !11, i64 1200, !23, i64 1208, !11, i64 1240, !11, i64 1248, !6, i64 1256}
!18 = !{!"z_stream_s", !6, i64 0, !14, i64 8, !11, i64 16, !6, i64 24, !14, i64 32, !11, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !14, i64 88, !11, i64 96, !11, i64 104}
!19 = !{!"short", !7, i64 0}
!20 = !{!"float", !7, i64 0}
!21 = !{!"png_color_16_struct", !7, i64 0, !19, i64 2, !19, i64 4, !19, i64 6, !19, i64 8}
!22 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!23 = !{!"png_unknown_chunk_t", !7, i64 0, !6, i64 8, !11, i64 16, !7, i64 24}
!24 = !{!17, !19, i64 1084}
!25 = !{!17, !19, i64 1086}
!26 = !{!10, !7, i64 17}
!27 = !{!17, !6, i64 720}
!28 = !{!17, !6, i64 728}
!29 = !{!7, !7, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!17, !6, i64 752}
!34 = !{!17, !6, i64 744}
!35 = !{!19, !19, i64 0}
!36 = !{!17, !14, i64 696}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}
!40 = distinct !{!40, !31}
!41 = distinct !{!41, !31}
!42 = distinct !{!42, !31}
!43 = !{!10, !7, i64 18}
!44 = !{!10, !7, i64 19}
!45 = !{!10, !11, i64 8}


; 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: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local range(i32 0, 2) i32 @png_do_rgb_to_gray(ptr nocapture noundef readonly %0, ptr nocapture noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = load i64, ptr %1, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 16
  %6 = load i8, ptr %5, align 8, !tbaa !10
  %7 = and i8 %6, 2
  %.not = icmp eq i8 %7, 0
  br i1 %.not, label %442, label %8

8:                                                ; preds = %3
  %9 = getelementptr inbounds i8, ptr %0, i64 1082
  %10 = load i16, ptr %9, align 2, !tbaa !11
  %11 = zext i16 %10 to i64
  %12 = getelementptr inbounds i8, ptr %0, i64 1084
  %13 = load i16, ptr %12, align 4, !tbaa !21
  %14 = zext i16 %13 to i64
  %15 = getelementptr inbounds i8, ptr %0, i64 1086
  %16 = load i16, ptr %15, align 2, !tbaa !22
  %17 = zext i16 %16 to i64
  %18 = icmp eq i8 %6, 2
  br i1 %18, label %19, label %.loopexit350

19:                                               ; preds = %8
  %20 = getelementptr inbounds i8, ptr %1, i64 17
  %21 = load i8, ptr %20, align 1, !tbaa !23
  %22 = icmp eq i8 %21, 8
  br i1 %22, label %23, label %79

23:                                               ; preds = %19
  %24 = getelementptr inbounds i8, ptr %0, i64 720
  %25 = load ptr, ptr %24, align 8, !tbaa !24
  %.not322 = icmp eq ptr %25, null
  br i1 %.not322, label %59, label %26

26:                                               ; preds = %23
  %27 = getelementptr inbounds i8, ptr %0, i64 728
  %28 = load ptr, ptr %27, align 8, !tbaa !25
  %.not323 = icmp eq ptr %28, null
  br i1 %.not323, label %59, label %.preheader351

.preheader351:                                    ; preds = %26
  %.not404 = icmp eq i64 %4, 0
  br i1 %.not404, label %.loopexit350, label %.lr.ph370

.lr.ph370:                                        ; preds = %.preheader351, %57
  %.0369 = phi i64 [ %58, %57 ], [ 0, %.preheader351 ]
  %.0282368 = phi i32 [ %.1283, %57 ], [ 0, %.preheader351 ]
  %.0290367 = phi ptr [ %40, %57 ], [ %2, %.preheader351 ]
  %.0291366 = phi ptr [ %.1292, %57 ], [ %2, %.preheader351 ]
  %29 = load ptr, ptr %27, align 8, !tbaa !25
  %30 = getelementptr inbounds i8, ptr %.0290367, i64 1
  %31 = load i8, ptr %.0290367, align 1, !tbaa !26
  %32 = zext i8 %31 to i64
  %33 = getelementptr inbounds i8, ptr %29, i64 %32
  %34 = load i8, ptr %33, align 1, !tbaa !26
  %35 = getelementptr inbounds i8, ptr %.0290367, i64 2
  %36 = load i8, ptr %30, align 1, !tbaa !26
  %37 = zext i8 %36 to i64
  %38 = getelementptr inbounds i8, ptr %29, i64 %37
  %39 = load i8, ptr %38, align 1, !tbaa !26
  %40 = getelementptr inbounds i8, ptr %.0290367, i64 3
  %41 = load i8, ptr %35, align 1, !tbaa !26
  %42 = zext i8 %41 to i64
  %43 = getelementptr inbounds i8, ptr %29, i64 %42
  %44 = load i8, ptr %43, align 1, !tbaa !26
  %.not336 = icmp eq i8 %34, %39
  %.not337 = icmp eq i8 %34, %44
  %or.cond = select i1 %.not336, i1 %.not337, i1 false
  br i1 %or.cond, label %57, label %45

45:                                               ; preds = %.lr.ph370
  %46 = load ptr, ptr %24, align 8, !tbaa !24
  %47 = zext i8 %34 to i64
  %48 = mul nuw nsw i64 %47, %11
  %49 = zext i8 %39 to i64
  %50 = mul nuw nsw i64 %49, %14
  %51 = add nuw nsw i64 %50, %48
  %52 = zext i8 %44 to i64
  %53 = mul nuw nsw i64 %52, %17
  %54 = add nuw nsw i64 %51, %53
  %55 = lshr i64 %54, 15
  %56 = getelementptr inbounds i8, ptr %46, i64 %55
  %storemerge338.pre = load i8, ptr %56, align 1, !tbaa !26
  br label %57

57:                                               ; preds = %.lr.ph370, %45
  %storemerge338 = phi i8 [ %storemerge338.pre, %45 ], [ %41, %.lr.ph370 ]
  %.1283 = phi i32 [ 1, %45 ], [ %.0282368, %.lr.ph370 ]
  %.1292 = getelementptr inbounds i8, ptr %.0291366, i64 1
  store i8 %storemerge338, ptr %.0291366, align 1, !tbaa !26
  %58 = add nuw i64 %.0369, 1
  %exitcond417.not = icmp eq i64 %58, %4
  br i1 %exitcond417.not, label %.loopexit350, label %.lr.ph370, !llvm.loop !27

59:                                               ; preds = %26, %23
  %.not405 = icmp eq i64 %4, 0
  br i1 %.not405, label %.loopexit350, label %.lr.ph376

.lr.ph376:                                        ; preds = %59, %77
  %.1375 = phi i64 [ %78, %77 ], [ 0, %59 ]
  %.2284374 = phi i32 [ %.3285, %77 ], [ 0, %59 ]
  %.0295373 = phi ptr [ %64, %77 ], [ %2, %59 ]
  %.0296372 = phi ptr [ %.1297, %77 ], [ %2, %59 ]
  %60 = getelementptr inbounds i8, ptr %.0295373, i64 1
  %61 = load i8, ptr %.0295373, align 1, !tbaa !26
  %62 = getelementptr inbounds i8, ptr %.0295373, i64 2
  %63 = load i8, ptr %60, align 1, !tbaa !26
  %64 = getelementptr inbounds i8, ptr %.0295373, i64 3
  %65 = load i8, ptr %62, align 1, !tbaa !26
  %.not324 = icmp eq i8 %61, %63
  %.not325 = icmp eq i8 %61, %65
  %or.cond339 = select i1 %.not324, i1 %.not325, i1 false
  br i1 %or.cond339, label %77, label %66

66:                                               ; preds = %.lr.ph376
  %67 = zext i8 %61 to i64
  %68 = mul nuw nsw i64 %67, %11
  %69 = zext i8 %63 to i64
  %70 = mul nuw nsw i64 %69, %14
  %71 = add nuw nsw i64 %70, %68
  %72 = zext i8 %65 to i64
  %73 = mul nuw nsw i64 %72, %17
  %74 = add nuw nsw i64 %71, %73
  %75 = lshr i64 %74, 15
  %76 = trunc i64 %75 to i8
  br label %77

77:                                               ; preds = %.lr.ph376, %66
  %storemerge = phi i8 [ %76, %66 ], [ %61, %.lr.ph376 ]
  %.3285 = phi i32 [ 1, %66 ], [ %.2284374, %.lr.ph376 ]
  %.1297 = getelementptr inbounds i8, ptr %.0296372, i64 1
  store i8 %storemerge, ptr %.0296372, align 1, !tbaa !26
  %78 = add nuw i64 %.1375, 1
  %exitcond418.not = icmp eq i64 %78, %4
  br i1 %exitcond418.not, label %.loopexit350, label %.lr.ph376, !llvm.loop !29

79:                                               ; preds = %19
  %80 = getelementptr inbounds i8, ptr %0, i64 752
  %81 = load ptr, ptr %80, align 8, !tbaa !30
  %.not318 = icmp eq ptr %81, null
  br i1 %.not318, label %170, label %82

82:                                               ; preds = %79
  %83 = getelementptr inbounds i8, ptr %0, i64 744
  %84 = load ptr, ptr %83, align 8, !tbaa !31
  %.not319 = icmp eq ptr %84, null
  br i1 %.not319, label %170, label %.preheader354

.preheader354:                                    ; preds = %82
  %.not402 = icmp eq i64 %4, 0
  br i1 %.not402, label %.loopexit350, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader354
  %85 = getelementptr inbounds i8, ptr %0, i64 696
  br label %86

86:                                               ; preds = %.lr.ph, %163
  %.2359 = phi i64 [ 0, %.lr.ph ], [ %169, %163 ]
  %.4286358 = phi i32 [ 0, %.lr.ph ], [ %.5287, %163 ]
  %.0298357 = phi ptr [ %2, %.lr.ph ], [ %110, %163 ]
  %.0299356 = phi ptr [ %2, %.lr.ph ], [ %168, %163 ]
  %87 = load i8, ptr %.0298357, align 1, !tbaa !26
  %88 = zext i8 %87 to i16
  %89 = shl nuw i16 %88, 8
  %90 = getelementptr inbounds i8, ptr %.0298357, i64 1
  %91 = load i8, ptr %90, align 1, !tbaa !26
  %92 = zext i8 %91 to i16
  %93 = or disjoint i16 %89, %92
  %94 = getelementptr inbounds i8, ptr %.0298357, i64 2
  %95 = load i8, ptr %94, align 1, !tbaa !26
  %96 = zext i8 %95 to i32
  %97 = shl nuw nsw i32 %96, 8
  %98 = getelementptr inbounds i8, ptr %.0298357, i64 3
  %99 = load i8, ptr %98, align 1, !tbaa !26
  %100 = zext i8 %99 to i32
  %101 = or disjoint i32 %97, %100
  %102 = getelementptr inbounds i8, ptr %.0298357, i64 4
  %103 = load i8, ptr %102, align 1, !tbaa !26
  %104 = zext i8 %103 to i16
  %105 = shl nuw i16 %104, 8
  %106 = getelementptr inbounds i8, ptr %.0298357, i64 5
  %107 = load i8, ptr %106, align 1, !tbaa !26
  %108 = zext i8 %107 to i16
  %109 = or disjoint i16 %105, %108
  %110 = getelementptr inbounds i8, ptr %.0298357, i64 6
  %111 = zext i16 %93 to i32
  %112 = icmp eq i32 %101, %111
  %113 = icmp eq i16 %93, %109
  %or.cond340 = select i1 %112, i1 %113, i1 false
  br i1 %or.cond340, label %163, label %114

114:                                              ; preds = %86
  %115 = load ptr, ptr %80, align 8, !tbaa !30
  %116 = and i32 %111, 255
  %117 = load i32, ptr %85, align 8, !tbaa !32
  %118 = lshr i32 %116, %117
  %119 = zext nneg i32 %118 to i64
  %120 = getelementptr inbounds ptr, ptr %115, i64 %119
  %121 = load ptr, ptr %120, align 8, !tbaa !33
  %122 = lshr i32 %111, 8
  %123 = zext nneg i32 %122 to i64
  %124 = getelementptr inbounds i16, ptr %121, i64 %123
  %125 = load i16, ptr %124, align 2, !tbaa !34
  %126 = lshr i32 %100, %117
  %127 = zext nneg i32 %126 to i64
  %128 = getelementptr inbounds ptr, ptr %115, i64 %127
  %129 = load ptr, ptr %128, align 8, !tbaa !33
  %130 = zext i8 %95 to i64
  %131 = getelementptr inbounds i16, ptr %129, i64 %130
  %132 = load i16, ptr %131, align 2, !tbaa !34
  %133 = zext i16 %109 to i32
  %134 = and i32 %133, 255
  %135 = lshr i32 %134, %117
  %136 = zext nneg i32 %135 to i64
  %137 = getelementptr inbounds ptr, ptr %115, i64 %136
  %138 = load ptr, ptr %137, align 8, !tbaa !33
  %139 = lshr i32 %133, 8
  %140 = zext nneg i32 %139 to i64
  %141 = getelementptr inbounds i16, ptr %138, i64 %140
  %142 = load i16, ptr %141, align 2, !tbaa !34
  %143 = zext i16 %125 to i64
  %144 = mul nuw nsw i64 %143, %11
  %145 = zext i16 %132 to i64
  %146 = mul nuw nsw i64 %145, %14
  %147 = add nuw nsw i64 %146, %144
  %148 = zext i16 %142 to i64
  %149 = mul nuw nsw i64 %148, %17
  %150 = add nuw nsw i64 %147, %149
  %151 = trunc i64 %150 to i32
  %152 = lshr i32 %151, 15
  %153 = load ptr, ptr %83, align 8, !tbaa !31
  %154 = and i32 %152, 255
  %155 = lshr i32 %154, %117
  %156 = zext nneg i32 %155 to i64
  %157 = getelementptr inbounds ptr, ptr %153, i64 %156
  %158 = load ptr, ptr %157, align 8, !tbaa !33
  %159 = lshr i64 %150, 23
  %160 = and i64 %159, 255
  %161 = getelementptr inbounds i16, ptr %158, i64 %160
  %162 = load i16, ptr %161, align 2, !tbaa !34
  br label %163

163:                                              ; preds = %86, %114
  %.0301 = phi i16 [ %162, %114 ], [ %93, %86 ]
  %.5287 = phi i32 [ 1, %114 ], [ %.4286358, %86 ]
  %164 = lshr i16 %.0301, 8
  %165 = trunc nuw i16 %164 to i8
  %166 = getelementptr inbounds i8, ptr %.0299356, i64 1
  store i8 %165, ptr %.0299356, align 1, !tbaa !26
  %167 = trunc i16 %.0301 to i8
  %168 = getelementptr inbounds i8, ptr %.0299356, i64 2
  store i8 %167, ptr %166, align 1, !tbaa !26
  %169 = add nuw i64 %.2359, 1
  %exitcond.not = icmp eq i64 %169, %4
  br i1 %exitcond.not, label %.loopexit350, label %86, !llvm.loop !35

170:                                              ; preds = %82, %79
  %.not403 = icmp eq i64 %4, 0
  br i1 %.not403, label %.loopexit350, label %.lr.ph364

.lr.ph364:                                        ; preds = %170, %.lr.ph364
  %.3363 = phi i64 [ %209, %.lr.ph364 ], [ 0, %170 ]
  %.6288362 = phi i32 [ %.7289, %.lr.ph364 ], [ 0, %170 ]
  %.0302361 = phi ptr [ %194, %.lr.ph364 ], [ %2, %170 ]
  %.0303360 = phi ptr [ %208, %.lr.ph364 ], [ %2, %170 ]
  %171 = load i8, ptr %.0302361, align 1, !tbaa !26
  %172 = zext i8 %171 to i16
  %173 = shl nuw i16 %172, 8
  %174 = getelementptr inbounds i8, ptr %.0302361, i64 1
  %175 = load i8, ptr %174, align 1, !tbaa !26
  %176 = zext i8 %175 to i16
  %177 = or disjoint i16 %173, %176
  %178 = getelementptr inbounds i8, ptr %.0302361, i64 2
  %179 = load i8, ptr %178, align 1, !tbaa !26
  %180 = zext i8 %179 to i16
  %181 = shl nuw i16 %180, 8
  %182 = getelementptr inbounds i8, ptr %.0302361, i64 3
  %183 = load i8, ptr %182, align 1, !tbaa !26
  %184 = zext i8 %183 to i16
  %185 = or disjoint i16 %181, %184
  %186 = getelementptr inbounds i8, ptr %.0302361, i64 4
  %187 = load i8, ptr %186, align 1, !tbaa !26
  %188 = zext i8 %187 to i16
  %189 = shl nuw i16 %188, 8
  %190 = getelementptr inbounds i8, ptr %.0302361, i64 5
  %191 = load i8, ptr %190, align 1, !tbaa !26
  %192 = zext i8 %191 to i16
  %193 = or disjoint i16 %189, %192
  %194 = getelementptr inbounds i8, ptr %.0302361, i64 6
  %.not320 = icmp eq i16 %177, %185
  %.not321 = icmp eq i16 %177, %193
  %or.cond341 = select i1 %.not320, i1 %.not321, i1 false
  %.7289 = select i1 %or.cond341, i32 %.6288362, i32 1
  %195 = zext i16 %177 to i64
  %196 = mul nuw nsw i64 %195, %11
  %197 = zext i16 %185 to i64
  %198 = mul nuw nsw i64 %197, %14
  %199 = add nuw nsw i64 %198, %196
  %200 = zext i16 %193 to i64
  %201 = mul nuw nsw i64 %200, %17
  %202 = add nuw nsw i64 %199, %201
  %203 = lshr i64 %202, 23
  %204 = trunc i64 %203 to i8
  %205 = getelementptr inbounds i8, ptr %.0303360, i64 1
  store i8 %204, ptr %.0303360, align 1, !tbaa !26
  %206 = lshr i64 %202, 15
  %207 = trunc i64 %206 to i8
  %208 = getelementptr inbounds i8, ptr %.0303360, i64 2
  store i8 %207, ptr %205, align 1, !tbaa !26
  %209 = add nuw i64 %.3363, 1
  %exitcond416.not = icmp eq i64 %209, %4
  br i1 %exitcond416.not, label %.loopexit350, label %.lr.ph364, !llvm.loop !36

.loopexit350:                                     ; preds = %163, %.lr.ph364, %57, %77, %.preheader354, %170, %.preheader351, %59, %8
  %.8 = phi i32 [ 0, %8 ], [ 0, %59 ], [ 0, %.preheader351 ], [ 0, %170 ], [ 0, %.preheader354 ], [ %.3285, %77 ], [ %.1283, %57 ], [ %.7289, %.lr.ph364 ], [ %.5287, %163 ]
  %210 = load i8, ptr %5, align 8, !tbaa !10
  %211 = icmp eq i8 %210, 6
  br i1 %211, label %212, label %.loopexit

212:                                              ; preds = %.loopexit350
  %213 = getelementptr inbounds i8, ptr %1, i64 17
  %214 = load i8, ptr %213, align 1, !tbaa !23
  %215 = icmp eq i8 %214, 8
  br i1 %215, label %216, label %277

216:                                              ; preds = %212
  %217 = getelementptr inbounds i8, ptr %0, i64 720
  %218 = load ptr, ptr %217, align 8, !tbaa !24
  %.not330 = icmp eq ptr %218, null
  br i1 %.not330, label %255, label %219

219:                                              ; preds = %216
  %220 = getelementptr inbounds i8, ptr %0, i64 728
  %221 = load ptr, ptr %220, align 8, !tbaa !25
  %.not331 = icmp eq ptr %221, null
  br i1 %.not331, label %255, label %.preheader

.preheader:                                       ; preds = %219
  %.not408 = icmp eq i64 %4, 0
  br i1 %.not408, label %.loopexit, label %.lr.ph394

.lr.ph394:                                        ; preds = %.preheader, %.lr.ph394
  %.4393 = phi i64 [ %254, %.lr.ph394 ], [ 0, %.preheader ]
  %.9392 = phi i32 [ %.10, %.lr.ph394 ], [ %.8, %.preheader ]
  %.0306391 = phi ptr [ %251, %.lr.ph394 ], [ %2, %.preheader ]
  %.0307390 = phi ptr [ %253, %.lr.ph394 ], [ %2, %.preheader ]
  %222 = load ptr, ptr %220, align 8, !tbaa !25
  %223 = getelementptr inbounds i8, ptr %.0306391, i64 1
  %224 = load i8, ptr %.0306391, align 1, !tbaa !26
  %225 = zext i8 %224 to i64
  %226 = getelementptr inbounds i8, ptr %222, i64 %225
  %227 = load i8, ptr %226, align 1, !tbaa !26
  %228 = getelementptr inbounds i8, ptr %.0306391, i64 2
  %229 = load i8, ptr %223, align 1, !tbaa !26
  %230 = zext i8 %229 to i64
  %231 = getelementptr inbounds i8, ptr %222, i64 %230
  %232 = load i8, ptr %231, align 1, !tbaa !26
  %233 = getelementptr inbounds i8, ptr %.0306391, i64 3
  %234 = load i8, ptr %228, align 1, !tbaa !26
  %235 = zext i8 %234 to i64
  %236 = getelementptr inbounds i8, ptr %222, i64 %235
  %237 = load i8, ptr %236, align 1, !tbaa !26
  %.not334 = icmp eq i8 %227, %232
  %.not335 = icmp eq i8 %227, %237
  %or.cond342 = and i1 %.not334, %.not335
  %.10 = select i1 %or.cond342, i32 %.9392, i32 1
  %238 = load ptr, ptr %217, align 8, !tbaa !24
  %239 = zext i8 %227 to i64
  %240 = mul nuw nsw i64 %239, %11
  %241 = zext i8 %232 to i64
  %242 = mul nuw nsw i64 %241, %14
  %243 = add nuw nsw i64 %242, %240
  %244 = zext i8 %237 to i64
  %245 = mul nuw nsw i64 %244, %17
  %246 = add nuw nsw i64 %243, %245
  %247 = lshr i64 %246, 15
  %248 = getelementptr inbounds i8, ptr %238, i64 %247
  %249 = load i8, ptr %248, align 1, !tbaa !26
  %250 = getelementptr inbounds i8, ptr %.0307390, i64 1
  store i8 %249, ptr %.0307390, align 1, !tbaa !26
  %251 = getelementptr inbounds i8, ptr %.0306391, i64 4
  %252 = load i8, ptr %233, align 1, !tbaa !26
  %253 = getelementptr inbounds i8, ptr %.0307390, i64 2
  store i8 %252, ptr %250, align 1, !tbaa !26
  %254 = add nuw i64 %.4393, 1
  %exitcond421.not = icmp eq i64 %254, %4
  br i1 %exitcond421.not, label %.loopexit, label %.lr.ph394, !llvm.loop !37

255:                                              ; preds = %219, %216
  %.not409 = icmp eq i64 %4, 0
  br i1 %.not409, label %.loopexit, label %.lr.ph400

.lr.ph400:                                        ; preds = %255, %.lr.ph400
  %.5399 = phi i64 [ %276, %.lr.ph400 ], [ 0, %255 ]
  %.11398 = phi i32 [ %.12, %.lr.ph400 ], [ %.8, %255 ]
  %.0308397 = phi ptr [ %273, %.lr.ph400 ], [ %2, %255 ]
  %.0309396 = phi ptr [ %275, %.lr.ph400 ], [ %2, %255 ]
  %256 = getelementptr inbounds i8, ptr %.0308397, i64 1
  %257 = load i8, ptr %.0308397, align 1, !tbaa !26
  %258 = getelementptr inbounds i8, ptr %.0308397, i64 2
  %259 = load i8, ptr %256, align 1, !tbaa !26
  %260 = getelementptr inbounds i8, ptr %.0308397, i64 3
  %261 = load i8, ptr %258, align 1, !tbaa !26
  %.not332 = icmp eq i8 %257, %259
  %.not333 = icmp eq i8 %257, %261
  %or.cond343 = select i1 %.not332, i1 %.not333, i1 false
  %.12 = select i1 %or.cond343, i32 %.11398, i32 1
  %262 = zext i8 %257 to i64
  %263 = mul nuw nsw i64 %262, %11
  %264 = zext i8 %259 to i64
  %265 = mul nuw nsw i64 %264, %14
  %266 = add nuw nsw i64 %265, %263
  %267 = zext i8 %261 to i64
  %268 = mul nuw nsw i64 %267, %17
  %269 = add nuw nsw i64 %266, %268
  %270 = lshr i64 %269, 15
  %271 = trunc i64 %270 to i8
  %272 = getelementptr inbounds i8, ptr %.0309396, i64 1
  store i8 %271, ptr %.0309396, align 1, !tbaa !26
  %273 = getelementptr inbounds i8, ptr %.0308397, i64 4
  %274 = load i8, ptr %260, align 1, !tbaa !26
  %275 = getelementptr inbounds i8, ptr %.0309396, i64 2
  store i8 %274, ptr %272, align 1, !tbaa !26
  %276 = add nuw i64 %.5399, 1
  %exitcond422.not = icmp eq i64 %276, %4
  br i1 %exitcond422.not, label %.loopexit, label %.lr.ph400, !llvm.loop !38

277:                                              ; preds = %212
  %278 = getelementptr inbounds i8, ptr %0, i64 752
  %279 = load ptr, ptr %278, align 8, !tbaa !30
  %.not326 = icmp eq ptr %279, null
  br i1 %.not326, label %374, label %280

280:                                              ; preds = %277
  %281 = getelementptr inbounds i8, ptr %0, i64 744
  %282 = load ptr, ptr %281, align 8, !tbaa !31
  %.not327 = icmp eq ptr %282, null
  br i1 %.not327, label %374, label %.preheader348

.preheader348:                                    ; preds = %280
  %.not406 = icmp eq i64 %4, 0
  br i1 %.not406, label %.loopexit, label %.lr.ph382

.lr.ph382:                                        ; preds = %.preheader348
  %283 = getelementptr inbounds i8, ptr %0, i64 696
  br label %284

284:                                              ; preds = %.lr.ph382, %361
  %.6381 = phi i64 [ 0, %.lr.ph382 ], [ %373, %361 ]
  %.13380 = phi i32 [ %.8, %.lr.ph382 ], [ %.14, %361 ]
  %.0304379 = phi ptr [ %2, %.lr.ph382 ], [ %372, %361 ]
  %.0305378 = phi ptr [ %2, %.lr.ph382 ], [ %370, %361 ]
  %285 = load i8, ptr %.0305378, align 1, !tbaa !26
  %286 = zext i8 %285 to i16
  %287 = shl nuw i16 %286, 8
  %288 = getelementptr inbounds i8, ptr %.0305378, i64 1
  %289 = load i8, ptr %288, align 1, !tbaa !26
  %290 = zext i8 %289 to i16
  %291 = or disjoint i16 %287, %290
  %292 = getelementptr inbounds i8, ptr %.0305378, i64 2
  %293 = load i8, ptr %292, align 1, !tbaa !26
  %294 = zext i8 %293 to i32
  %295 = shl nuw nsw i32 %294, 8
  %296 = getelementptr inbounds i8, ptr %.0305378, i64 3
  %297 = load i8, ptr %296, align 1, !tbaa !26
  %298 = zext i8 %297 to i32
  %299 = or disjoint i32 %295, %298
  %300 = getelementptr inbounds i8, ptr %.0305378, i64 4
  %301 = load i8, ptr %300, align 1, !tbaa !26
  %302 = zext i8 %301 to i16
  %303 = shl nuw i16 %302, 8
  %304 = getelementptr inbounds i8, ptr %.0305378, i64 5
  %305 = load i8, ptr %304, align 1, !tbaa !26
  %306 = zext i8 %305 to i16
  %307 = or disjoint i16 %303, %306
  %308 = getelementptr inbounds i8, ptr %.0305378, i64 6
  %309 = zext i16 %291 to i32
  %310 = icmp eq i32 %299, %309
  %311 = icmp eq i16 %291, %307
  %or.cond344 = select i1 %310, i1 %311, i1 false
  br i1 %or.cond344, label %361, label %312

312:                                              ; preds = %284
  %313 = load ptr, ptr %278, align 8, !tbaa !30
  %314 = and i32 %309, 255
  %315 = load i32, ptr %283, align 8, !tbaa !32
  %316 = lshr i32 %314, %315
  %317 = zext nneg i32 %316 to i64
  %318 = getelementptr inbounds ptr, ptr %313, i64 %317
  %319 = load ptr, ptr %318, align 8, !tbaa !33
  %320 = lshr i32 %309, 8
  %321 = zext nneg i32 %320 to i64
  %322 = getelementptr inbounds i16, ptr %319, i64 %321
  %323 = load i16, ptr %322, align 2, !tbaa !34
  %324 = lshr i32 %298, %315
  %325 = zext nneg i32 %324 to i64
  %326 = getelementptr inbounds ptr, ptr %313, i64 %325
  %327 = load ptr, ptr %326, align 8, !tbaa !33
  %328 = zext i8 %293 to i64
  %329 = getelementptr inbounds i16, ptr %327, i64 %328
  %330 = load i16, ptr %329, align 2, !tbaa !34
  %331 = zext i16 %307 to i32
  %332 = and i32 %331, 255
  %333 = lshr i32 %332, %315
  %334 = zext nneg i32 %333 to i64
  %335 = getelementptr inbounds ptr, ptr %313, i64 %334
  %336 = load ptr, ptr %335, align 8, !tbaa !33
  %337 = lshr i32 %331, 8
  %338 = zext nneg i32 %337 to i64
  %339 = getelementptr inbounds i16, ptr %336, i64 %338
  %340 = load i16, ptr %339, align 2, !tbaa !34
  %341 = zext i16 %323 to i64
  %342 = mul nuw nsw i64 %341, %11
  %343 = zext i16 %330 to i64
  %344 = mul nuw nsw i64 %343, %14
  %345 = add nuw nsw i64 %344, %342
  %346 = zext i16 %340 to i64
  %347 = mul nuw nsw i64 %346, %17
  %348 = add nuw nsw i64 %345, %347
  %349 = trunc i64 %348 to i32
  %350 = lshr i32 %349, 15
  %351 = load ptr, ptr %281, align 8, !tbaa !31
  %352 = and i32 %350, 255
  %353 = lshr i32 %352, %315
  %354 = zext nneg i32 %353 to i64
  %355 = getelementptr inbounds ptr, ptr %351, i64 %354
  %356 = load ptr, ptr %355, align 8, !tbaa !33
  %357 = lshr i64 %348, 23
  %358 = and i64 %357, 255
  %359 = getelementptr inbounds i16, ptr %356, i64 %358
  %360 = load i16, ptr %359, align 2, !tbaa !34
  br label %361

361:                                              ; preds = %284, %312
  %.0300 = phi i16 [ %360, %312 ], [ %291, %284 ]
  %.14 = phi i32 [ 1, %312 ], [ %.13380, %284 ]
  %362 = lshr i16 %.0300, 8
  %363 = trunc nuw i16 %362 to i8
  %364 = getelementptr inbounds i8, ptr %.0304379, i64 1
  store i8 %363, ptr %.0304379, align 1, !tbaa !26
  %365 = trunc i16 %.0300 to i8
  %366 = getelementptr inbounds i8, ptr %.0304379, i64 2
  store i8 %365, ptr %364, align 1, !tbaa !26
  %367 = getelementptr inbounds i8, ptr %.0305378, i64 7
  %368 = load i8, ptr %308, align 1, !tbaa !26
  %369 = getelementptr inbounds i8, ptr %.0304379, i64 3
  store i8 %368, ptr %366, align 1, !tbaa !26
  %370 = getelementptr inbounds i8, ptr %.0305378, i64 8
  %371 = load i8, ptr %367, align 1, !tbaa !26
  %372 = getelementptr inbounds i8, ptr %.0304379, i64 4
  store i8 %371, ptr %369, align 1, !tbaa !26
  %373 = add nuw i64 %.6381, 1
  %exitcond419.not = icmp eq i64 %373, %4
  br i1 %exitcond419.not, label %.loopexit, label %284, !llvm.loop !39

374:                                              ; preds = %280, %277
  %.not407 = icmp eq i64 %4, 0
  br i1 %.not407, label %.loopexit, label %.lr.ph388

.lr.ph388:                                        ; preds = %374, %.lr.ph388
  %.7387 = phi i64 [ %419, %.lr.ph388 ], [ 0, %374 ]
  %.15386 = phi i32 [ %.16, %.lr.ph388 ], [ %.8, %374 ]
  %.0293385 = phi ptr [ %418, %.lr.ph388 ], [ %2, %374 ]
  %.0294384 = phi ptr [ %416, %.lr.ph388 ], [ %2, %374 ]
  %375 = load i8, ptr %.0294384, align 1, !tbaa !26
  %376 = zext i8 %375 to i16
  %377 = shl nuw i16 %376, 8
  %378 = getelementptr inbounds i8, ptr %.0294384, i64 1
  %379 = load i8, ptr %378, align 1, !tbaa !26
  %380 = zext i8 %379 to i16
  %381 = or disjoint i16 %377, %380
  %382 = getelementptr inbounds i8, ptr %.0294384, i64 2
  %383 = load i8, ptr %382, align 1, !tbaa !26
  %384 = zext i8 %383 to i16
  %385 = shl nuw i16 %384, 8
  %386 = getelementptr inbounds i8, ptr %.0294384, i64 3
  %387 = load i8, ptr %386, align 1, !tbaa !26
  %388 = zext i8 %387 to i16
  %389 = or disjoint i16 %385, %388
  %390 = getelementptr inbounds i8, ptr %.0294384, i64 4
  %391 = load i8, ptr %390, align 1, !tbaa !26
  %392 = zext i8 %391 to i16
  %393 = shl nuw i16 %392, 8
  %394 = getelementptr inbounds i8, ptr %.0294384, i64 5
  %395 = load i8, ptr %394, align 1, !tbaa !26
  %396 = zext i8 %395 to i16
  %397 = or disjoint i16 %393, %396
  %398 = getelementptr inbounds i8, ptr %.0294384, i64 6
  %.not328 = icmp eq i16 %381, %389
  %.not329 = icmp eq i16 %381, %397
  %or.cond345 = select i1 %.not328, i1 %.not329, i1 false
  %.16 = select i1 %or.cond345, i32 %.15386, i32 1
  %399 = zext i16 %381 to i64
  %400 = mul nuw nsw i64 %399, %11
  %401 = zext i16 %389 to i64
  %402 = mul nuw nsw i64 %401, %14
  %403 = add nuw nsw i64 %402, %400
  %404 = zext i16 %397 to i64
  %405 = mul nuw nsw i64 %404, %17
  %406 = add nuw nsw i64 %403, %405
  %407 = lshr i64 %406, 23
  %408 = trunc i64 %407 to i8
  %409 = getelementptr inbounds i8, ptr %.0293385, i64 1
  store i8 %408, ptr %.0293385, align 1, !tbaa !26
  %410 = lshr i64 %406, 15
  %411 = trunc i64 %410 to i8
  %412 = getelementptr inbounds i8, ptr %.0293385, i64 2
  store i8 %411, ptr %409, align 1, !tbaa !26
  %413 = getelementptr inbounds i8, ptr %.0294384, i64 7
  %414 = load i8, ptr %398, align 1, !tbaa !26
  %415 = getelementptr inbounds i8, ptr %.0293385, i64 3
  store i8 %414, ptr %412, align 1, !tbaa !26
  %416 = getelementptr inbounds i8, ptr %.0294384, i64 8
  %417 = load i8, ptr %413, align 1, !tbaa !26
  %418 = getelementptr inbounds i8, ptr %.0293385, i64 4
  store i8 %417, ptr %415, align 1, !tbaa !26
  %419 = add nuw i64 %.7387, 1
  %exitcond420.not = icmp eq i64 %419, %4
  br i1 %exitcond420.not, label %.loopexit, label %.lr.ph388, !llvm.loop !40

.loopexit:                                        ; preds = %361, %.lr.ph388, %.lr.ph394, %.lr.ph400, %.preheader348, %374, %.preheader, %255, %.loopexit350
  %.17 = phi i32 [ %.8, %.loopexit350 ], [ %.8, %255 ], [ %.8, %.preheader ], [ %.8, %374 ], [ %.8, %.preheader348 ], [ %.12, %.lr.ph400 ], [ %.10, %.lr.ph394 ], [ %.16, %.lr.ph388 ], [ %.14, %361 ]
  %420 = getelementptr inbounds i8, ptr %1, i64 18
  %421 = load i8, ptr %420, align 2, !tbaa !41
  %422 = add i8 %421, -2
  store i8 %422, ptr %420, align 2, !tbaa !41
  %423 = load i8, ptr %5, align 8, !tbaa !10
  %424 = and i8 %423, -3
  store i8 %424, ptr %5, align 8, !tbaa !10
  %425 = getelementptr inbounds i8, ptr %1, i64 17
  %426 = load i8, ptr %425, align 1, !tbaa !23
  %427 = mul i8 %426, %422
  %428 = getelementptr inbounds i8, ptr %1, i64 19
  store i8 %427, ptr %428, align 1, !tbaa !42
  %429 = icmp ugt i8 %427, 7
  br i1 %429, label %430, label %434

430:                                              ; preds = %.loopexit
  %431 = lshr i8 %427, 3
  %432 = zext nneg i8 %431 to i64
  %433 = mul i64 %4, %432
  br label %439

434:                                              ; preds = %.loopexit
  %435 = zext nneg i8 %427 to i64
  %436 = mul i64 %4, %435
  %437 = add i64 %436, 7
  %438 = lshr i64 %437, 3
  br label %439

439:                                              ; preds = %434, %430
  %440 = phi i64 [ %433, %430 ], [ %438, %434 ]
  %441 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 %440, ptr %441, align 8, !tbaa !43
  br label %442

442:                                              ; preds = %439, %3
  %.18 = phi i32 [ %.17, %439 ], [ 0, %3 ]
  ret i32 %.18
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"png_row_info_struct", !7, i64 0, !7, i64 8, !8, i64 16, !8, i64 17, !8, i64 18, !8, i64 19}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !8, i64 16}
!11 = !{!12, !16, i64 1082}
!12 = !{!"png_struct_def", !8, i64 0, !13, i64 200, !13, i64 208, !13, i64 216, !13, i64 224, !13, i64 232, !13, i64 240, !13, i64 248, !13, i64 256, !13, i64 264, !8, i64 272, !8, i64 273, !7, i64 280, !7, i64 288, !7, i64 296, !14, i64 304, !13, i64 416, !7, i64 424, !15, i64 432, !15, i64 436, !15, i64 440, !15, i64 444, !15, i64 448, !7, i64 456, !7, i64 464, !7, i64 472, !7, i64 480, !7, i64 488, !7, i64 496, !7, i64 504, !7, i64 512, !13, i64 520, !13, i64 528, !13, i64 536, !13, i64 544, !13, i64 552, !13, i64 560, !6, i64 568, !7, i64 592, !7, i64 600, !13, i64 608, !16, i64 616, !16, i64 618, !8, i64 620, !8, i64 625, !8, i64 626, !8, i64 627, !8, i64 628, !8, i64 629, !8, i64 630, !8, i64 631, !8, i64 632, !8, i64 633, !8, i64 634, !8, i64 635, !8, i64 636, !16, i64 638, !8, i64 640, !17, i64 644, !18, i64 648, !18, i64 658, !13, i64 672, !7, i64 680, !7, i64 688, !15, i64 696, !17, i64 700, !17, i64 704, !13, i64 712, !13, i64 720, !13, i64 728, !13, i64 736, !13, i64 744, !13, i64 752, !19, i64 760, !19, i64 765, !13, i64 776, !18, i64 784, !13, i64 800, !13, i64 808, !13, i64 816, !13, i64 824, !13, i64 832, !13, i64 840, !13, i64 848, !13, i64 856, !13, i64 864, !7, i64 872, !7, i64 880, !7, i64 888, !7, i64 896, !7, i64 904, !7, i64 912, !15, i64 920, !15, i64 924, !7, i64 928, !7, i64 936, !13, i64 944, !13, i64 952, !13, i64 960, !13, i64 968, !13, i64 976, !8, i64 984, !8, i64 985, !13, i64 992, !13, i64 1000, !13, i64 1008, !13, i64 1016, !13, i64 1024, !13, i64 1032, !7, i64 1040, !13, i64 1048, !13, i64 1056, !15, i64 1064, !13, i64 1072, !8, i64 1080, !16, i64 1082, !16, i64 1084, !16, i64 1086, !7, i64 1088, !7, i64 1096, !8, i64 1104, !8, i64 1105, !7, i64 1112, !7, i64 1120, !13, i64 1128, !13, i64 1136, !13, i64 1144, !13, i64 1152, !13, i64 1160, !13, i64 1168, !13, i64 1176, !8, i64 1184, !7, i64 1192, !7, i64 1200, !20, i64 1208, !7, i64 1240, !7, i64 1248, !13, i64 1256}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"z_stream_s", !13, i64 0, !15, i64 8, !7, i64 16, !13, i64 24, !15, i64 32, !7, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !15, i64 88, !7, i64 96, !7, i64 104}
!15 = !{!"int", !8, i64 0}
!16 = !{!"short", !8, i64 0}
!17 = !{!"float", !8, i64 0}
!18 = !{!"png_color_16_struct", !8, i64 0, !16, i64 2, !16, i64 4, !16, i64 6, !16, i64 8}
!19 = !{!"png_color_8_struct", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3, !8, i64 4}
!20 = !{!"png_unknown_chunk_t", !8, i64 0, !13, i64 8, !7, i64 16, !8, i64 24}
!21 = !{!12, !16, i64 1084}
!22 = !{!12, !16, i64 1086}
!23 = !{!6, !8, i64 17}
!24 = !{!12, !13, i64 720}
!25 = !{!12, !13, i64 728}
!26 = !{!8, !8, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = !{!12, !13, i64 752}
!31 = !{!12, !13, i64 744}
!32 = !{!12, !15, i64 696}
!33 = !{!13, !13, i64 0}
!34 = !{!16, !16, i64 0}
!35 = distinct !{!35, !28}
!36 = distinct !{!36, !28}
!37 = distinct !{!37, !28}
!38 = distinct !{!38, !28}
!39 = distinct !{!39, !28}
!40 = distinct !{!40, !28}
!41 = !{!6, !8, i64 18}
!42 = !{!6, !8, i64 19}
!43 = !{!6, !7, i64 8}


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