; LLVM IR from niessner/Matterport :: code/gaps/pkgs/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_color_struct = type { i8, i8, i8 }
%struct.png_struct_def = type { [1 x %struct.__jmp_buf_tag], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i32, i32, i32, %struct.z_stream_s, ptr, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_row_info_struct, i32, i32, ptr, i16, i16, [5 x i8], i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i8, float, %struct.png_color_16_struct, %struct.png_color_16_struct, ptr, i32, i32, i32, float, float, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_color_8_struct, %struct.png_color_8_struct, ptr, %struct.png_color_16_struct, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i64, i64, i64, i32, i32, i64, i64, ptr, ptr, ptr, ptr, ptr, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, i32, ptr, i8, i16, i16, i16, i32, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i32, i32, i32, %struct.png_unknown_chunk_t, i32, i32, ptr, i32 }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.png_row_info_struct = type { i32, i64, i8, i8, i8, i8 }
%struct.png_color_8_struct = type { i8, i8, i8, i8, i8 }
%struct.png_color_16_struct = type { i8, i16, i16, i16, i16 }
%struct.png_unknown_chunk_t = type { [5 x i8], ptr, i64, i8 }
%struct.png_dsort_struct = type { ptr, i8, i8 }

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

; Function Attrs: nounwind uwtable
define dso_local void @png_set_quantize(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) #1 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i8, align 1
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %struct.png_color_struct, align 1
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i64, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  store i32 %5, ptr %12, align 4, !tbaa !9
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = icmp eq ptr %62, null
  br i1 %63, label %64, label %65

64:                                               ; preds = %6
  br label %1142

65:                                               ; preds = %6
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.png_struct_def, ptr %66, i32 0, i32 15
  %68 = load i32, ptr %67, align 4, !tbaa !11
  %69 = or i32 %68, 64
  store i32 %69, ptr %67, align 4, !tbaa !11
  %70 = load i32, ptr %12, align 4, !tbaa !9
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %99, label %72

72:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = load i32, ptr %9, align 4, !tbaa !9
  %75 = sext i32 %74 to i64
  %76 = mul i64 %75, 1
  %77 = trunc i64 %76 to i32
  %78 = zext i32 %77 to i64
  %79 = call ptr @png_malloc(ptr noundef %73, i64 noundef %78)
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.png_struct_def, ptr %80, i32 0, i32 100
  store ptr %79, ptr %81, align 8, !tbaa !21
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %95, %72
  %83 = load i32, ptr %13, align 4, !tbaa !9
  %84 = load i32, ptr %9, align 4, !tbaa !9
  %85 = icmp slt i32 %83, %84
  br i1 %85, label %86, label %98

86:                                               ; preds = %82
  %87 = load i32, ptr %13, align 4, !tbaa !9
  %88 = trunc i32 %87 to i8
  %89 = load ptr, ptr %7, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.png_struct_def, ptr %89, i32 0, i32 100
  %91 = load ptr, ptr %90, align 8, !tbaa !21
  %92 = load i32, ptr %13, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds i8, ptr %91, i64 %93
  store i8 %88, ptr %94, align 1, !tbaa !22
  br label %95

95:                                               ; preds = %86
  %96 = load i32, ptr %13, align 4, !tbaa !9
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr %13, align 4, !tbaa !9
  br label %82, !llvm.loop !23

98:                                               ; preds = %82
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %99

99:                                               ; preds = %98, %65
  %100 = load i32, ptr %9, align 4, !tbaa !9
  %101 = load i32, ptr %10, align 4, !tbaa !9
  %102 = icmp sgt i32 %100, %101
  br i1 %102, label %103, label %945

103:                                              ; preds = %99
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = icmp ne ptr %104, null
  br i1 %105, label %106, label %489

106:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = mul i64 %109, 1
  %111 = trunc i64 %110 to i32
  %112 = zext i32 %111 to i64
  %113 = call ptr @png_malloc(ptr noundef %107, i64 noundef %112)
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.png_struct_def, ptr %114, i32 0, i32 126
  store ptr %113, ptr %115, align 8, !tbaa !25
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %116

116:                                              ; preds = %129, %106
  %117 = load i32, ptr %14, align 4, !tbaa !9
  %118 = load i32, ptr %9, align 4, !tbaa !9
  %119 = icmp slt i32 %117, %118
  br i1 %119, label %120, label %132

120:                                              ; preds = %116
  %121 = load i32, ptr %14, align 4, !tbaa !9
  %122 = trunc i32 %121 to i8
  %123 = load ptr, ptr %7, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.png_struct_def, ptr %123, i32 0, i32 126
  %125 = load ptr, ptr %124, align 8, !tbaa !25
  %126 = load i32, ptr %14, align 4, !tbaa !9
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds i8, ptr %125, i64 %127
  store i8 %122, ptr %128, align 1, !tbaa !22
  br label %129

129:                                              ; preds = %120
  %130 = load i32, ptr %14, align 4, !tbaa !9
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %14, align 4, !tbaa !9
  br label %116, !llvm.loop !26

132:                                              ; preds = %116
  %133 = load i32, ptr %9, align 4, !tbaa !9
  %134 = sub nsw i32 %133, 1
  store i32 %134, ptr %14, align 4, !tbaa !9
  br label %135

135:                                              ; preds = %213, %132
  %136 = load i32, ptr %14, align 4, !tbaa !9
  %137 = load i32, ptr %10, align 4, !tbaa !9
  %138 = icmp sge i32 %136, %137
  br i1 %138, label %139, label %216

139:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 1, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %202, %139
  %141 = load i32, ptr %16, align 4, !tbaa !9
  %142 = load i32, ptr %14, align 4, !tbaa !9
  %143 = icmp slt i32 %141, %142
  br i1 %143, label %144, label %205

144:                                              ; preds = %140
  %145 = load ptr, ptr %11, align 8, !tbaa !5
  %146 = load ptr, ptr %7, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.png_struct_def, ptr %146, i32 0, i32 126
  %148 = load ptr, ptr %147, align 8, !tbaa !25
  %149 = load i32, ptr %16, align 4, !tbaa !9
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds i8, ptr %148, i64 %150
  %152 = load i8, ptr %151, align 1, !tbaa !22
  %153 = zext i8 %152 to i64
  %154 = getelementptr inbounds i16, ptr %145, i64 %153
  %155 = load i16, ptr %154, align 2, !tbaa !27
  %156 = zext i16 %155 to i32
  %157 = load ptr, ptr %11, align 8, !tbaa !5
  %158 = load ptr, ptr %7, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.png_struct_def, ptr %158, i32 0, i32 126
  %160 = load ptr, ptr %159, align 8, !tbaa !25
  %161 = load i32, ptr %16, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i8, ptr %160, i64 %163
  %165 = load i8, ptr %164, align 1, !tbaa !22
  %166 = zext i8 %165 to i64
  %167 = getelementptr inbounds i16, ptr %157, i64 %166
  %168 = load i16, ptr %167, align 2, !tbaa !27
  %169 = zext i16 %168 to i32
  %170 = icmp slt i32 %156, %169
  br i1 %170, label %171, label %201

171:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #6
  %172 = load ptr, ptr %7, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.png_struct_def, ptr %172, i32 0, i32 126
  %174 = load ptr, ptr %173, align 8, !tbaa !25
  %175 = load i32, ptr %16, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i8, ptr %174, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !22
  store i8 %178, ptr %17, align 1, !tbaa !22
  %179 = load ptr, ptr %7, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.png_struct_def, ptr %179, i32 0, i32 126
  %181 = load ptr, ptr %180, align 8, !tbaa !25
  %182 = load i32, ptr %16, align 4, !tbaa !9
  %183 = add nsw i32 %182, 1
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds i8, ptr %181, i64 %184
  %186 = load i8, ptr %185, align 1, !tbaa !22
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.png_struct_def, ptr %187, i32 0, i32 126
  %189 = load ptr, ptr %188, align 8, !tbaa !25
  %190 = load i32, ptr %16, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i8, ptr %189, i64 %191
  store i8 %186, ptr %192, align 1, !tbaa !22
  %193 = load i8, ptr %17, align 1, !tbaa !22
  %194 = load ptr, ptr %7, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.png_struct_def, ptr %194, i32 0, i32 126
  %196 = load ptr, ptr %195, align 8, !tbaa !25
  %197 = load i32, ptr %16, align 4, !tbaa !9
  %198 = add nsw i32 %197, 1
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i8, ptr %196, i64 %199
  store i8 %193, ptr %200, align 1, !tbaa !22
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #6
  br label %201

201:                                              ; preds = %171, %144
  br label %202

202:                                              ; preds = %201
  %203 = load i32, ptr %16, align 4, !tbaa !9
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %16, align 4, !tbaa !9
  br label %140, !llvm.loop !28

205:                                              ; preds = %140
  %206 = load i32, ptr %15, align 4, !tbaa !9
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %208, label %209

208:                                              ; preds = %205
  store i32 8, ptr %18, align 4
  br label %210

209:                                              ; preds = %205
  store i32 0, ptr %18, align 4
  br label %210

210:                                              ; preds = %209, %208
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  %211 = load i32, ptr %18, align 4
  switch i32 %211, label %1143 [
    i32 0, label %212
    i32 8, label %216
  ]

212:                                              ; preds = %210
  br label %213

213:                                              ; preds = %212
  %214 = load i32, ptr %14, align 4, !tbaa !9
  %215 = add nsw i32 %214, -1
  store i32 %215, ptr %14, align 4, !tbaa !9
  br label %135, !llvm.loop !29

216:                                              ; preds = %210, %135
  %217 = load i32, ptr %12, align 4, !tbaa !9
  %218 = icmp ne i32 %217, 0
  br i1 %218, label %219, label %265

219:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %220 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %220, ptr %19, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %221

221:                                              ; preds = %261, %219
  %222 = load i32, ptr %14, align 4, !tbaa !9
  %223 = load i32, ptr %10, align 4, !tbaa !9
  %224 = icmp slt i32 %222, %223
  br i1 %224, label %225, label %264

225:                                              ; preds = %221
  %226 = load ptr, ptr %7, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.png_struct_def, ptr %226, i32 0, i32 126
  %228 = load ptr, ptr %227, align 8, !tbaa !25
  %229 = load i32, ptr %14, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds i8, ptr %228, i64 %230
  %232 = load i8, ptr %231, align 1, !tbaa !22
  %233 = zext i8 %232 to i32
  %234 = load i32, ptr %10, align 4, !tbaa !9
  %235 = icmp sge i32 %233, %234
  br i1 %235, label %236, label %260

236:                                              ; preds = %225
  br label %237

237:                                              ; preds = %240, %236
  %238 = load i32, ptr %19, align 4, !tbaa !9
  %239 = add nsw i32 %238, -1
  store i32 %239, ptr %19, align 4, !tbaa !9
  br label %240

240:                                              ; preds = %237
  %241 = load ptr, ptr %7, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.png_struct_def, ptr %241, i32 0, i32 126
  %243 = load ptr, ptr %242, align 8, !tbaa !25
  %244 = load i32, ptr %19, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i8, ptr %243, i64 %245
  %247 = load i8, ptr %246, align 1, !tbaa !22
  %248 = zext i8 %247 to i32
  %249 = load i32, ptr %10, align 4, !tbaa !9
  %250 = icmp sge i32 %248, %249
  br i1 %250, label %237, label %251, !llvm.loop !30

251:                                              ; preds = %240
  %252 = load ptr, ptr %8, align 8, !tbaa !5
  %253 = load i32, ptr %14, align 4, !tbaa !9
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds %struct.png_color_struct, ptr %252, i64 %254
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = load i32, ptr %19, align 4, !tbaa !9
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds %struct.png_color_struct, ptr %256, i64 %258
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %255, ptr align 1 %259, i64 3, i1 false), !tbaa.struct !31
  br label %260

260:                                              ; preds = %251, %225
  br label %261

261:                                              ; preds = %260
  %262 = load i32, ptr %14, align 4, !tbaa !9
  %263 = add nsw i32 %262, 1
  store i32 %263, ptr %14, align 4, !tbaa !9
  br label %221, !llvm.loop !32

264:                                              ; preds = %221
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %482

265:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %266 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %266, ptr %20, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %267

267:                                              ; preds = %331, %265
  %268 = load i32, ptr %14, align 4, !tbaa !9
  %269 = load i32, ptr %10, align 4, !tbaa !9
  %270 = icmp slt i32 %268, %269
  br i1 %270, label %271, label %334

271:                                              ; preds = %267
  %272 = load ptr, ptr %7, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.png_struct_def, ptr %272, i32 0, i32 126
  %274 = load ptr, ptr %273, align 8, !tbaa !25
  %275 = load i32, ptr %14, align 4, !tbaa !9
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i8, ptr %274, i64 %276
  %278 = load i8, ptr %277, align 1, !tbaa !22
  %279 = zext i8 %278 to i32
  %280 = load i32, ptr %10, align 4, !tbaa !9
  %281 = icmp sge i32 %279, %280
  br i1 %281, label %282, label %330

282:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 3, ptr %21) #6
  br label %283

283:                                              ; preds = %286, %282
  %284 = load i32, ptr %20, align 4, !tbaa !9
  %285 = add nsw i32 %284, -1
  store i32 %285, ptr %20, align 4, !tbaa !9
  br label %286

286:                                              ; preds = %283
  %287 = load ptr, ptr %7, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.png_struct_def, ptr %287, i32 0, i32 126
  %289 = load ptr, ptr %288, align 8, !tbaa !25
  %290 = load i32, ptr %20, align 4, !tbaa !9
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i8, ptr %289, i64 %291
  %293 = load i8, ptr %292, align 1, !tbaa !22
  %294 = zext i8 %293 to i32
  %295 = load i32, ptr %10, align 4, !tbaa !9
  %296 = icmp sge i32 %294, %295
  br i1 %296, label %283, label %297, !llvm.loop !33

297:                                              ; preds = %286
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = load i32, ptr %20, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds %struct.png_color_struct, ptr %298, i64 %300
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %21, ptr align 1 %301, i64 3, i1 false), !tbaa.struct !31
  %302 = load ptr, ptr %8, align 8, !tbaa !5
  %303 = load i32, ptr %20, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds %struct.png_color_struct, ptr %302, i64 %304
  %306 = load ptr, ptr %8, align 8, !tbaa !5
  %307 = load i32, ptr %14, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds %struct.png_color_struct, ptr %306, i64 %308
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %305, ptr align 1 %309, i64 3, i1 false), !tbaa.struct !31
  %310 = load ptr, ptr %8, align 8, !tbaa !5
  %311 = load i32, ptr %14, align 4, !tbaa !9
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds %struct.png_color_struct, ptr %310, i64 %312
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %313, ptr align 1 %21, i64 3, i1 false), !tbaa.struct !31
  %314 = load i32, ptr %14, align 4, !tbaa !9
  %315 = trunc i32 %314 to i8
  %316 = load ptr, ptr %7, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.png_struct_def, ptr %316, i32 0, i32 100
  %318 = load ptr, ptr %317, align 8, !tbaa !21
  %319 = load i32, ptr %20, align 4, !tbaa !9
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds i8, ptr %318, i64 %320
  store i8 %315, ptr %321, align 1, !tbaa !22
  %322 = load i32, ptr %20, align 4, !tbaa !9
  %323 = trunc i32 %322 to i8
  %324 = load ptr, ptr %7, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.png_struct_def, ptr %324, i32 0, i32 100
  %326 = load ptr, ptr %325, align 8, !tbaa !21
  %327 = load i32, ptr %14, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i8, ptr %326, i64 %328
  store i8 %323, ptr %329, align 1, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 3, ptr %21) #6
  br label %330

330:                                              ; preds = %297, %271
  br label %331

331:                                              ; preds = %330
  %332 = load i32, ptr %14, align 4, !tbaa !9
  %333 = add nsw i32 %332, 1
  store i32 %333, ptr %14, align 4, !tbaa !9
  br label %267, !llvm.loop !34

334:                                              ; preds = %267
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %335

335:                                              ; preds = %478, %334
  %336 = load i32, ptr %14, align 4, !tbaa !9
  %337 = load i32, ptr %9, align 4, !tbaa !9
  %338 = icmp slt i32 %336, %337
  br i1 %338, label %339, label %481

339:                                              ; preds = %335
  %340 = load ptr, ptr %7, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.png_struct_def, ptr %340, i32 0, i32 100
  %342 = load ptr, ptr %341, align 8, !tbaa !21
  %343 = load i32, ptr %14, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i8, ptr %342, i64 %344
  %346 = load i8, ptr %345, align 1, !tbaa !22
  %347 = zext i8 %346 to i32
  %348 = load i32, ptr %10, align 4, !tbaa !9
  %349 = icmp sge i32 %347, %348
  br i1 %349, label %350, label %477

350:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %351 = load ptr, ptr %7, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.png_struct_def, ptr %351, i32 0, i32 100
  %353 = load ptr, ptr %352, align 8, !tbaa !21
  %354 = load i32, ptr %14, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds i8, ptr %353, i64 %355
  %357 = load i8, ptr %356, align 1, !tbaa !22
  %358 = zext i8 %357 to i32
  store i32 %358, ptr %25, align 4, !tbaa !9
  %359 = load ptr, ptr %8, align 8, !tbaa !5
  %360 = load i32, ptr %25, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds %struct.png_color_struct, ptr %359, i64 %361
  %363 = getelementptr inbounds %struct.png_color_struct, ptr %362, i32 0, i32 0
  %364 = load i8, ptr %363, align 1, !tbaa !35
  %365 = zext i8 %364 to i32
  %366 = load ptr, ptr %8, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.png_color_struct, ptr %366, i64 0
  %368 = getelementptr inbounds %struct.png_color_struct, ptr %367, i32 0, i32 0
  %369 = load i8, ptr %368, align 1, !tbaa !35
  %370 = zext i8 %369 to i32
  %371 = sub nsw i32 %365, %370
  %372 = call i32 @llvm.abs.i32(i32 %371, i1 true)
  %373 = load ptr, ptr %8, align 8, !tbaa !5
  %374 = load i32, ptr %25, align 4, !tbaa !9
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds %struct.png_color_struct, ptr %373, i64 %375
  %377 = getelementptr inbounds %struct.png_color_struct, ptr %376, i32 0, i32 1
  %378 = load i8, ptr %377, align 1, !tbaa !37
  %379 = zext i8 %378 to i32
  %380 = load ptr, ptr %8, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.png_color_struct, ptr %380, i64 0
  %382 = getelementptr inbounds %struct.png_color_struct, ptr %381, i32 0, i32 1
  %383 = load i8, ptr %382, align 1, !tbaa !37
  %384 = zext i8 %383 to i32
  %385 = sub nsw i32 %379, %384
  %386 = call i32 @llvm.abs.i32(i32 %385, i1 true)
  %387 = add nsw i32 %372, %386
  %388 = load ptr, ptr %8, align 8, !tbaa !5
  %389 = load i32, ptr %25, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds %struct.png_color_struct, ptr %388, i64 %390
  %392 = getelementptr inbounds %struct.png_color_struct, ptr %391, i32 0, i32 2
  %393 = load i8, ptr %392, align 1, !tbaa !38
  %394 = zext i8 %393 to i32
  %395 = load ptr, ptr %8, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.png_color_struct, ptr %395, i64 0
  %397 = getelementptr inbounds %struct.png_color_struct, ptr %396, i32 0, i32 2
  %398 = load i8, ptr %397, align 1, !tbaa !38
  %399 = zext i8 %398 to i32
  %400 = sub nsw i32 %394, %399
  %401 = call i32 @llvm.abs.i32(i32 %400, i1 true)
  %402 = add nsw i32 %387, %401
  store i32 %402, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %403

403:                                              ; preds = %465, %350
  %404 = load i32, ptr %23, align 4, !tbaa !9
  %405 = load i32, ptr %10, align 4, !tbaa !9
  %406 = icmp slt i32 %404, %405
  br i1 %406, label %407, label %468

407:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %408 = load ptr, ptr %8, align 8, !tbaa !5
  %409 = load i32, ptr %25, align 4, !tbaa !9
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds %struct.png_color_struct, ptr %408, i64 %410
  %412 = getelementptr inbounds %struct.png_color_struct, ptr %411, i32 0, i32 0
  %413 = load i8, ptr %412, align 1, !tbaa !35
  %414 = zext i8 %413 to i32
  %415 = load ptr, ptr %8, align 8, !tbaa !5
  %416 = load i32, ptr %23, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds %struct.png_color_struct, ptr %415, i64 %417
  %419 = getelementptr inbounds %struct.png_color_struct, ptr %418, i32 0, i32 0
  %420 = load i8, ptr %419, align 1, !tbaa !35
  %421 = zext i8 %420 to i32
  %422 = sub nsw i32 %414, %421
  %423 = call i32 @llvm.abs.i32(i32 %422, i1 true)
  %424 = load ptr, ptr %8, align 8, !tbaa !5
  %425 = load i32, ptr %25, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds %struct.png_color_struct, ptr %424, i64 %426
  %428 = getelementptr inbounds %struct.png_color_struct, ptr %427, i32 0, i32 1
  %429 = load i8, ptr %428, align 1, !tbaa !37
  %430 = zext i8 %429 to i32
  %431 = load ptr, ptr %8, align 8, !tbaa !5
  %432 = load i32, ptr %23, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds %struct.png_color_struct, ptr %431, i64 %433
  %435 = getelementptr inbounds %struct.png_color_struct, ptr %434, i32 0, i32 1
  %436 = load i8, ptr %435, align 1, !tbaa !37
  %437 = zext i8 %436 to i32
  %438 = sub nsw i32 %430, %437
  %439 = call i32 @llvm.abs.i32(i32 %438, i1 true)
  %440 = add nsw i32 %423, %439
  %441 = load ptr, ptr %8, align 8, !tbaa !5
  %442 = load i32, ptr %25, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds %struct.png_color_struct, ptr %441, i64 %443
  %445 = getelementptr inbounds %struct.png_color_struct, ptr %444, i32 0, i32 2
  %446 = load i8, ptr %445, align 1, !tbaa !38
  %447 = zext i8 %446 to i32
  %448 = load ptr, ptr %8, align 8, !tbaa !5
  %449 = load i32, ptr %23, align 4, !tbaa !9
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds %struct.png_color_struct, ptr %448, i64 %450
  %452 = getelementptr inbounds %struct.png_color_struct, ptr %451, i32 0, i32 2
  %453 = load i8, ptr %452, align 1, !tbaa !38
  %454 = zext i8 %453 to i32
  %455 = sub nsw i32 %447, %454
  %456 = call i32 @llvm.abs.i32(i32 %455, i1 true)
  %457 = add nsw i32 %440, %456
  store i32 %457, ptr %26, align 4, !tbaa !9
  %458 = load i32, ptr %26, align 4, !tbaa !9
  %459 = load i32, ptr %22, align 4, !tbaa !9
  %460 = icmp slt i32 %458, %459
  br i1 %460, label %461, label %464

461:                                              ; preds = %407
  %462 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %462, ptr %22, align 4, !tbaa !9
  %463 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %463, ptr %24, align 4, !tbaa !9
  br label %464

464:                                              ; preds = %461, %407
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %465

465:                                              ; preds = %464
  %466 = load i32, ptr %23, align 4, !tbaa !9
  %467 = add nsw i32 %466, 1
  store i32 %467, ptr %23, align 4, !tbaa !9
  br label %403, !llvm.loop !39

468:                                              ; preds = %403
  %469 = load i32, ptr %24, align 4, !tbaa !9
  %470 = trunc i32 %469 to i8
  %471 = load ptr, ptr %7, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.png_struct_def, ptr %471, i32 0, i32 100
  %473 = load ptr, ptr %472, align 8, !tbaa !21
  %474 = load i32, ptr %14, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i8, ptr %473, i64 %475
  store i8 %470, ptr %476, align 1, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %477

477:                                              ; preds = %468, %339
  br label %478

478:                                              ; preds = %477
  %479 = load i32, ptr %14, align 4, !tbaa !9
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %14, align 4, !tbaa !9
  br label %335, !llvm.loop !40

481:                                              ; preds = %335
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %482

482:                                              ; preds = %481, %264
  %483 = load ptr, ptr %7, align 8, !tbaa !5
  %484 = load ptr, ptr %7, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.png_struct_def, ptr %484, i32 0, i32 126
  %486 = load ptr, ptr %485, align 8, !tbaa !25
  call void @png_free(ptr noundef %483, ptr noundef %486)
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.png_struct_def, ptr %487, i32 0, i32 126
  store ptr null, ptr %488, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %943

489:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  store ptr null, ptr %30, align 8, !tbaa !5
  %490 = load ptr, ptr %7, align 8, !tbaa !5
  %491 = load i32, ptr %9, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = mul i64 %492, 1
  %494 = trunc i64 %493 to i32
  %495 = zext i32 %494 to i64
  %496 = call ptr @png_malloc(ptr noundef %490, i64 noundef %495)
  %497 = load ptr, ptr %7, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.png_struct_def, ptr %497, i32 0, i32 127
  store ptr %496, ptr %498, align 8, !tbaa !41
  %499 = load ptr, ptr %7, align 8, !tbaa !5
  %500 = load i32, ptr %9, align 4, !tbaa !9
  %501 = sext i32 %500 to i64
  %502 = mul i64 %501, 1
  %503 = trunc i64 %502 to i32
  %504 = zext i32 %503 to i64
  %505 = call ptr @png_malloc(ptr noundef %499, i64 noundef %504)
  %506 = load ptr, ptr %7, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.png_struct_def, ptr %506, i32 0, i32 128
  store ptr %505, ptr %507, align 8, !tbaa !42
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %508

508:                                              ; preds = %529, %489
  %509 = load i32, ptr %27, align 4, !tbaa !9
  %510 = load i32, ptr %9, align 4, !tbaa !9
  %511 = icmp slt i32 %509, %510
  br i1 %511, label %512, label %532

512:                                              ; preds = %508
  %513 = load i32, ptr %27, align 4, !tbaa !9
  %514 = trunc i32 %513 to i8
  %515 = load ptr, ptr %7, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.png_struct_def, ptr %515, i32 0, i32 127
  %517 = load ptr, ptr %516, align 8, !tbaa !41
  %518 = load i32, ptr %27, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i8, ptr %517, i64 %519
  store i8 %514, ptr %520, align 1, !tbaa !22
  %521 = load i32, ptr %27, align 4, !tbaa !9
  %522 = trunc i32 %521 to i8
  %523 = load ptr, ptr %7, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.png_struct_def, ptr %523, i32 0, i32 128
  %525 = load ptr, ptr %524, align 8, !tbaa !42
  %526 = load i32, ptr %27, align 4, !tbaa !9
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds i8, ptr %525, i64 %527
  store i8 %522, ptr %528, align 1, !tbaa !22
  br label %529

529:                                              ; preds = %512
  %530 = load i32, ptr %27, align 4, !tbaa !9
  %531 = add nsw i32 %530, 1
  store i32 %531, ptr %27, align 4, !tbaa !9
  br label %508, !llvm.loop !43

532:                                              ; preds = %508
  %533 = load ptr, ptr %7, align 8, !tbaa !5
  %534 = call ptr @png_calloc(ptr noundef %533, i64 noundef 6152)
  store ptr %534, ptr %31, align 8, !tbaa !5
  %535 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %535, ptr %29, align 4, !tbaa !9
  store i32 96, ptr %28, align 4, !tbaa !9
  br label %536

536:                                              ; preds = %925, %532
  %537 = load i32, ptr %29, align 4, !tbaa !9
  %538 = load i32, ptr %10, align 4, !tbaa !9
  %539 = icmp sgt i32 %537, %538
  br i1 %539, label %540, label %928

540:                                              ; preds = %536
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %541

541:                                              ; preds = %649, %540
  %542 = load i32, ptr %27, align 4, !tbaa !9
  %543 = load i32, ptr %29, align 4, !tbaa !9
  %544 = sub nsw i32 %543, 1
  %545 = icmp slt i32 %542, %544
  br i1 %545, label %546, label %652

546:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %547 = load i32, ptr %27, align 4, !tbaa !9
  %548 = add nsw i32 %547, 1
  store i32 %548, ptr %32, align 4, !tbaa !9
  br label %549

549:                                              ; preds = %638, %546
  %550 = load i32, ptr %32, align 4, !tbaa !9
  %551 = load i32, ptr %29, align 4, !tbaa !9
  %552 = icmp slt i32 %550, %551
  br i1 %552, label %553, label %641

553:                                              ; preds = %549
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  %554 = load ptr, ptr %8, align 8, !tbaa !5
  %555 = load i32, ptr %27, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds %struct.png_color_struct, ptr %554, i64 %556
  %558 = getelementptr inbounds %struct.png_color_struct, ptr %557, i32 0, i32 0
  %559 = load i8, ptr %558, align 1, !tbaa !35
  %560 = zext i8 %559 to i32
  %561 = load ptr, ptr %8, align 8, !tbaa !5
  %562 = load i32, ptr %32, align 4, !tbaa !9
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds %struct.png_color_struct, ptr %561, i64 %563
  %565 = getelementptr inbounds %struct.png_color_struct, ptr %564, i32 0, i32 0
  %566 = load i8, ptr %565, align 1, !tbaa !35
  %567 = zext i8 %566 to i32
  %568 = sub nsw i32 %560, %567
  %569 = call i32 @llvm.abs.i32(i32 %568, i1 true)
  %570 = load ptr, ptr %8, align 8, !tbaa !5
  %571 = load i32, ptr %27, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds %struct.png_color_struct, ptr %570, i64 %572
  %574 = getelementptr inbounds %struct.png_color_struct, ptr %573, i32 0, i32 1
  %575 = load i8, ptr %574, align 1, !tbaa !37
  %576 = zext i8 %575 to i32
  %577 = load ptr, ptr %8, align 8, !tbaa !5
  %578 = load i32, ptr %32, align 4, !tbaa !9
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds %struct.png_color_struct, ptr %577, i64 %579
  %581 = getelementptr inbounds %struct.png_color_struct, ptr %580, i32 0, i32 1
  %582 = load i8, ptr %581, align 1, !tbaa !37
  %583 = zext i8 %582 to i32
  %584 = sub nsw i32 %576, %583
  %585 = call i32 @llvm.abs.i32(i32 %584, i1 true)
  %586 = add nsw i32 %569, %585
  %587 = load ptr, ptr %8, align 8, !tbaa !5
  %588 = load i32, ptr %27, align 4, !tbaa !9
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds %struct.png_color_struct, ptr %587, i64 %589
  %591 = getelementptr inbounds %struct.png_color_struct, ptr %590, i32 0, i32 2
  %592 = load i8, ptr %591, align 1, !tbaa !38
  %593 = zext i8 %592 to i32
  %594 = load ptr, ptr %8, align 8, !tbaa !5
  %595 = load i32, ptr %32, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds %struct.png_color_struct, ptr %594, i64 %596
  %598 = getelementptr inbounds %struct.png_color_struct, ptr %597, i32 0, i32 2
  %599 = load i8, ptr %598, align 1, !tbaa !38
  %600 = zext i8 %599 to i32
  %601 = sub nsw i32 %593, %600
  %602 = call i32 @llvm.abs.i32(i32 %601, i1 true)
  %603 = add nsw i32 %586, %602
  store i32 %603, ptr %33, align 4, !tbaa !9
  %604 = load i32, ptr %33, align 4, !tbaa !9
  %605 = load i32, ptr %28, align 4, !tbaa !9
  %606 = icmp sle i32 %604, %605
  br i1 %606, label %607, label %634

607:                                              ; preds = %553
  %608 = load ptr, ptr %7, align 8, !tbaa !5
  %609 = call ptr @png_malloc_warn(ptr noundef %608, i64 noundef 16)
  store ptr %609, ptr %30, align 8, !tbaa !5
  %610 = load ptr, ptr %30, align 8, !tbaa !5
  %611 = icmp eq ptr %610, null
  br i1 %611, label %612, label %613

612:                                              ; preds = %607
  store i32 38, ptr %18, align 4
  br label %635

613:                                              ; preds = %607
  %614 = load ptr, ptr %31, align 8, !tbaa !5
  %615 = load i32, ptr %33, align 4, !tbaa !9
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds ptr, ptr %614, i64 %616
  %618 = load ptr, ptr %617, align 8, !tbaa !5
  %619 = load ptr, ptr %30, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.png_dsort_struct, ptr %619, i32 0, i32 0
  store ptr %618, ptr %620, align 8, !tbaa !44
  %621 = load i32, ptr %27, align 4, !tbaa !9
  %622 = trunc i32 %621 to i8
  %623 = load ptr, ptr %30, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.png_dsort_struct, ptr %623, i32 0, i32 1
  store i8 %622, ptr %624, align 8, !tbaa !46
  %625 = load i32, ptr %32, align 4, !tbaa !9
  %626 = trunc i32 %625 to i8
  %627 = load ptr, ptr %30, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.png_dsort_struct, ptr %627, i32 0, i32 2
  store i8 %626, ptr %628, align 1, !tbaa !47
  %629 = load ptr, ptr %30, align 8, !tbaa !5
  %630 = load ptr, ptr %31, align 8, !tbaa !5
  %631 = load i32, ptr %33, align 4, !tbaa !9
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds ptr, ptr %630, i64 %632
  store ptr %629, ptr %633, align 8, !tbaa !5
  br label %634

634:                                              ; preds = %613, %553
  store i32 0, ptr %18, align 4
  br label %635

635:                                              ; preds = %634, %612
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  %636 = load i32, ptr %18, align 4
  switch i32 %636, label %1143 [
    i32 0, label %637
    i32 38, label %641
  ]

637:                                              ; preds = %635
  br label %638

638:                                              ; preds = %637
  %639 = load i32, ptr %32, align 4, !tbaa !9
  %640 = add nsw i32 %639, 1
  store i32 %640, ptr %32, align 4, !tbaa !9
  br label %549, !llvm.loop !48

641:                                              ; preds = %635, %549
  %642 = load ptr, ptr %30, align 8, !tbaa !5
  %643 = icmp eq ptr %642, null
  br i1 %643, label %644, label %645

644:                                              ; preds = %641
  store i32 35, ptr %18, align 4
  br label %646

645:                                              ; preds = %641
  store i32 0, ptr %18, align 4
  br label %646

646:                                              ; preds = %645, %644
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  %647 = load i32, ptr %18, align 4
  switch i32 %647, label %1143 [
    i32 0, label %648
    i32 35, label %652
  ]

648:                                              ; preds = %646
  br label %649

649:                                              ; preds = %648
  %650 = load i32, ptr %27, align 4, !tbaa !9
  %651 = add nsw i32 %650, 1
  store i32 %651, ptr %27, align 4, !tbaa !9
  br label %541, !llvm.loop !49

652:                                              ; preds = %646, %541
  %653 = load ptr, ptr %30, align 8, !tbaa !5
  %654 = icmp ne ptr %653, null
  br i1 %654, label %655, label %889

655:                                              ; preds = %652
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %656

656:                                              ; preds = %885, %655
  %657 = load i32, ptr %27, align 4, !tbaa !9
  %658 = load i32, ptr %28, align 4, !tbaa !9
  %659 = icmp sle i32 %657, %658
  br i1 %659, label %660, label %888

660:                                              ; preds = %656
  %661 = load ptr, ptr %31, align 8, !tbaa !5
  %662 = load i32, ptr %27, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds ptr, ptr %661, i64 %663
  %665 = load ptr, ptr %664, align 8, !tbaa !5
  %666 = icmp ne ptr %665, null
  br i1 %666, label %667, label %884

667:                                              ; preds = %660
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %668 = load ptr, ptr %31, align 8, !tbaa !5
  %669 = load i32, ptr %27, align 4, !tbaa !9
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds ptr, ptr %668, i64 %670
  %672 = load ptr, ptr %671, align 8, !tbaa !5
  store ptr %672, ptr %34, align 8, !tbaa !5
  br label %673

673:                                              ; preds = %871, %667
  %674 = load ptr, ptr %34, align 8, !tbaa !5
  %675 = icmp ne ptr %674, null
  br i1 %675, label %676, label %875

676:                                              ; preds = %673
  %677 = load ptr, ptr %7, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.png_struct_def, ptr %677, i32 0, i32 127
  %679 = load ptr, ptr %678, align 8, !tbaa !41
  %680 = load ptr, ptr %34, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.png_dsort_struct, ptr %680, i32 0, i32 1
  %682 = load i8, ptr %681, align 8, !tbaa !46
  %683 = zext i8 %682 to i64
  %684 = getelementptr inbounds i8, ptr %679, i64 %683
  %685 = load i8, ptr %684, align 1, !tbaa !22
  %686 = zext i8 %685 to i32
  %687 = load i32, ptr %29, align 4, !tbaa !9
  %688 = icmp slt i32 %686, %687
  br i1 %688, label %689, label %865

689:                                              ; preds = %676
  %690 = load ptr, ptr %7, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.png_struct_def, ptr %690, i32 0, i32 127
  %692 = load ptr, ptr %691, align 8, !tbaa !41
  %693 = load ptr, ptr %34, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.png_dsort_struct, ptr %693, i32 0, i32 2
  %695 = load i8, ptr %694, align 1, !tbaa !47
  %696 = zext i8 %695 to i64
  %697 = getelementptr inbounds i8, ptr %692, i64 %696
  %698 = load i8, ptr %697, align 1, !tbaa !22
  %699 = zext i8 %698 to i32
  %700 = load i32, ptr %29, align 4, !tbaa !9
  %701 = icmp slt i32 %699, %700
  br i1 %701, label %702, label %865

702:                                              ; preds = %689
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  %703 = load i32, ptr %29, align 4, !tbaa !9
  %704 = and i32 %703, 1
  %705 = icmp ne i32 %704, 0
  br i1 %705, label %706, label %715

706:                                              ; preds = %702
  %707 = load ptr, ptr %34, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.png_dsort_struct, ptr %707, i32 0, i32 1
  %709 = load i8, ptr %708, align 8, !tbaa !46
  %710 = zext i8 %709 to i32
  store i32 %710, ptr %35, align 4, !tbaa !9
  %711 = load ptr, ptr %34, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.png_dsort_struct, ptr %711, i32 0, i32 2
  %713 = load i8, ptr %712, align 1, !tbaa !47
  %714 = zext i8 %713 to i32
  store i32 %714, ptr %36, align 4, !tbaa !9
  br label %724

715:                                              ; preds = %702
  %716 = load ptr, ptr %34, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.png_dsort_struct, ptr %716, i32 0, i32 2
  %718 = load i8, ptr %717, align 1, !tbaa !47
  %719 = zext i8 %718 to i32
  store i32 %719, ptr %35, align 4, !tbaa !9
  %720 = load ptr, ptr %34, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.png_dsort_struct, ptr %720, i32 0, i32 1
  %722 = load i8, ptr %721, align 8, !tbaa !46
  %723 = zext i8 %722 to i32
  store i32 %723, ptr %36, align 4, !tbaa !9
  br label %724

724:                                              ; preds = %715, %706
  %725 = load i32, ptr %29, align 4, !tbaa !9
  %726 = add nsw i32 %725, -1
  store i32 %726, ptr %29, align 4, !tbaa !9
  %727 = load ptr, ptr %8, align 8, !tbaa !5
  %728 = load ptr, ptr %7, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.png_struct_def, ptr %728, i32 0, i32 127
  %730 = load ptr, ptr %729, align 8, !tbaa !41
  %731 = load i32, ptr %35, align 4, !tbaa !9
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds i8, ptr %730, i64 %732
  %734 = load i8, ptr %733, align 1, !tbaa !22
  %735 = zext i8 %734 to i64
  %736 = getelementptr inbounds %struct.png_color_struct, ptr %727, i64 %735
  %737 = load ptr, ptr %8, align 8, !tbaa !5
  %738 = load i32, ptr %29, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds %struct.png_color_struct, ptr %737, i64 %739
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %736, ptr align 1 %740, i64 3, i1 false), !tbaa.struct !31
  %741 = load i32, ptr %12, align 4, !tbaa !9
  %742 = icmp ne i32 %741, 0
  br i1 %742, label %810, label %743

743:                                              ; preds = %724
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %744

744:                                              ; preds = %806, %743
  %745 = load i32, ptr %37, align 4, !tbaa !9
  %746 = load i32, ptr %9, align 4, !tbaa !9
  %747 = icmp slt i32 %745, %746
  br i1 %747, label %748, label %809

748:                                              ; preds = %744
  %749 = load ptr, ptr %7, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.png_struct_def, ptr %749, i32 0, i32 100
  %751 = load ptr, ptr %750, align 8, !tbaa !21
  %752 = load i32, ptr %37, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds i8, ptr %751, i64 %753
  %755 = load i8, ptr %754, align 1, !tbaa !22
  %756 = zext i8 %755 to i32
  %757 = load ptr, ptr %7, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.png_struct_def, ptr %757, i32 0, i32 127
  %759 = load ptr, ptr %758, align 8, !tbaa !41
  %760 = load i32, ptr %35, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds i8, ptr %759, i64 %761
  %763 = load i8, ptr %762, align 1, !tbaa !22
  %764 = zext i8 %763 to i32
  %765 = icmp eq i32 %756, %764
  br i1 %765, label %766, label %780

766:                                              ; preds = %748
  %767 = load ptr, ptr %7, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.png_struct_def, ptr %767, i32 0, i32 127
  %769 = load ptr, ptr %768, align 8, !tbaa !41
  %770 = load i32, ptr %36, align 4, !tbaa !9
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds i8, ptr %769, i64 %771
  %773 = load i8, ptr %772, align 1, !tbaa !22
  %774 = load ptr, ptr %7, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.png_struct_def, ptr %774, i32 0, i32 100
  %776 = load ptr, ptr %775, align 8, !tbaa !21
  %777 = load i32, ptr %37, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds i8, ptr %776, i64 %778
  store i8 %773, ptr %779, align 1, !tbaa !22
  br label %780

780:                                              ; preds = %766, %748
  %781 = load ptr, ptr %7, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.png_struct_def, ptr %781, i32 0, i32 100
  %783 = load ptr, ptr %782, align 8, !tbaa !21
  %784 = load i32, ptr %37, align 4, !tbaa !9
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds i8, ptr %783, i64 %785
  %787 = load i8, ptr %786, align 1, !tbaa !22
  %788 = zext i8 %787 to i32
  %789 = load i32, ptr %29, align 4, !tbaa !9
  %790 = icmp eq i32 %788, %789
  br i1 %790, label %791, label %805

791:                                              ; preds = %780
  %792 = load ptr, ptr %7, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.png_struct_def, ptr %792, i32 0, i32 127
  %794 = load ptr, ptr %793, align 8, !tbaa !41
  %795 = load i32, ptr %35, align 4, !tbaa !9
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds i8, ptr %794, i64 %796
  %798 = load i8, ptr %797, align 1, !tbaa !22
  %799 = load ptr, ptr %7, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct.png_struct_def, ptr %799, i32 0, i32 100
  %801 = load ptr, ptr %800, align 8, !tbaa !21
  %802 = load i32, ptr %37, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds i8, ptr %801, i64 %803
  store i8 %798, ptr %804, align 1, !tbaa !22
  br label %805

805:                                              ; preds = %791, %780
  br label %806

806:                                              ; preds = %805
  %807 = load i32, ptr %37, align 4, !tbaa !9
  %808 = add nsw i32 %807, 1
  store i32 %808, ptr %37, align 4, !tbaa !9
  br label %744, !llvm.loop !50

809:                                              ; preds = %744
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %810

810:                                              ; preds = %809, %724
  %811 = load ptr, ptr %7, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.png_struct_def, ptr %811, i32 0, i32 127
  %813 = load ptr, ptr %812, align 8, !tbaa !41
  %814 = load i32, ptr %35, align 4, !tbaa !9
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds i8, ptr %813, i64 %815
  %817 = load i8, ptr %816, align 1, !tbaa !22
  %818 = load ptr, ptr %7, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.png_struct_def, ptr %818, i32 0, i32 127
  %820 = load ptr, ptr %819, align 8, !tbaa !41
  %821 = load ptr, ptr %7, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.png_struct_def, ptr %821, i32 0, i32 128
  %823 = load ptr, ptr %822, align 8, !tbaa !42
  %824 = load i32, ptr %29, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds i8, ptr %823, i64 %825
  %827 = load i8, ptr %826, align 1, !tbaa !22
  %828 = zext i8 %827 to i64
  %829 = getelementptr inbounds i8, ptr %820, i64 %828
  store i8 %817, ptr %829, align 1, !tbaa !22
  %830 = load ptr, ptr %7, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.png_struct_def, ptr %830, i32 0, i32 128
  %832 = load ptr, ptr %831, align 8, !tbaa !42
  %833 = load i32, ptr %29, align 4, !tbaa !9
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds i8, ptr %832, i64 %834
  %836 = load i8, ptr %835, align 1, !tbaa !22
  %837 = load ptr, ptr %7, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.png_struct_def, ptr %837, i32 0, i32 128
  %839 = load ptr, ptr %838, align 8, !tbaa !42
  %840 = load ptr, ptr %7, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.png_struct_def, ptr %840, i32 0, i32 127
  %842 = load ptr, ptr %841, align 8, !tbaa !41
  %843 = load i32, ptr %35, align 4, !tbaa !9
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds i8, ptr %842, i64 %844
  %846 = load i8, ptr %845, align 1, !tbaa !22
  %847 = zext i8 %846 to i64
  %848 = getelementptr inbounds i8, ptr %839, i64 %847
  store i8 %836, ptr %848, align 1, !tbaa !22
  %849 = load i32, ptr %29, align 4, !tbaa !9
  %850 = trunc i32 %849 to i8
  %851 = load ptr, ptr %7, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.png_struct_def, ptr %851, i32 0, i32 127
  %853 = load ptr, ptr %852, align 8, !tbaa !41
  %854 = load i32, ptr %35, align 4, !tbaa !9
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds i8, ptr %853, i64 %855
  store i8 %850, ptr %856, align 1, !tbaa !22
  %857 = load i32, ptr %35, align 4, !tbaa !9
  %858 = trunc i32 %857 to i8
  %859 = load ptr, ptr %7, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.png_struct_def, ptr %859, i32 0, i32 128
  %861 = load ptr, ptr %860, align 8, !tbaa !42
  %862 = load i32, ptr %29, align 4, !tbaa !9
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds i8, ptr %861, i64 %863
  store i8 %858, ptr %864, align 1, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %865

865:                                              ; preds = %810, %689, %676
  %866 = load i32, ptr %29, align 4, !tbaa !9
  %867 = load i32, ptr %10, align 4, !tbaa !9
  %868 = icmp sle i32 %866, %867
  br i1 %868, label %869, label %870

869:                                              ; preds = %865
  br label %875

870:                                              ; preds = %865
  br label %871

871:                                              ; preds = %870
  %872 = load ptr, ptr %34, align 8, !tbaa !5
  %873 = getelementptr inbounds %struct.png_dsort_struct, ptr %872, i32 0, i32 0
  %874 = load ptr, ptr %873, align 8, !tbaa !44
  store ptr %874, ptr %34, align 8, !tbaa !5
  br label %673, !llvm.loop !51

875:                                              ; preds = %869, %673
  %876 = load i32, ptr %29, align 4, !tbaa !9
  %877 = load i32, ptr %10, align 4, !tbaa !9
  %878 = icmp sle i32 %876, %877
  br i1 %878, label %879, label %880

879:                                              ; preds = %875
  store i32 41, ptr %18, align 4
  br label %881

880:                                              ; preds = %875
  store i32 0, ptr %18, align 4
  br label %881

881:                                              ; preds = %880, %879
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  %882 = load i32, ptr %18, align 4
  switch i32 %882, label %1143 [
    i32 0, label %883
    i32 41, label %888
  ]

883:                                              ; preds = %881
  br label %884

884:                                              ; preds = %883, %660
  br label %885

885:                                              ; preds = %884
  %886 = load i32, ptr %27, align 4, !tbaa !9
  %887 = add nsw i32 %886, 1
  store i32 %887, ptr %27, align 4, !tbaa !9
  br label %656, !llvm.loop !52

888:                                              ; preds = %881, %656
  br label %889

889:                                              ; preds = %888, %652
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %890

890:                                              ; preds = %922, %889
  %891 = load i32, ptr %27, align 4, !tbaa !9
  %892 = icmp slt i32 %891, 769
  br i1 %892, label %893, label %925

893:                                              ; preds = %890
  %894 = load ptr, ptr %31, align 8, !tbaa !5
  %895 = load i32, ptr %27, align 4, !tbaa !9
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds ptr, ptr %894, i64 %896
  %898 = load ptr, ptr %897, align 8, !tbaa !5
  %899 = icmp ne ptr %898, null
  br i1 %899, label %900, label %917

900:                                              ; preds = %893
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %901 = load ptr, ptr %31, align 8, !tbaa !5
  %902 = load i32, ptr %27, align 4, !tbaa !9
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds ptr, ptr %901, i64 %903
  %905 = load ptr, ptr %904, align 8, !tbaa !5
  store ptr %905, ptr %38, align 8, !tbaa !5
  br label %906

906:                                              ; preds = %909, %900
  %907 = load ptr, ptr %38, align 8, !tbaa !5
  %908 = icmp ne ptr %907, null
  br i1 %908, label %909, label %916

909:                                              ; preds = %906
  %910 = load ptr, ptr %38, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.png_dsort_struct, ptr %910, i32 0, i32 0
  %912 = load ptr, ptr %911, align 8, !tbaa !44
  store ptr %912, ptr %30, align 8, !tbaa !5
  %913 = load ptr, ptr %7, align 8, !tbaa !5
  %914 = load ptr, ptr %38, align 8, !tbaa !5
  call void @png_free(ptr noundef %913, ptr noundef %914)
  %915 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %915, ptr %38, align 8, !tbaa !5
  br label %906, !llvm.loop !53

916:                                              ; preds = %906
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %917

917:                                              ; preds = %916, %893
  %918 = load ptr, ptr %31, align 8, !tbaa !5
  %919 = load i32, ptr %27, align 4, !tbaa !9
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds ptr, ptr %918, i64 %920
  store ptr null, ptr %921, align 8, !tbaa !5
  br label %922

922:                                              ; preds = %917
  %923 = load i32, ptr %27, align 4, !tbaa !9
  %924 = add nsw i32 %923, 1
  store i32 %924, ptr %27, align 4, !tbaa !9
  br label %890, !llvm.loop !54

925:                                              ; preds = %890
  %926 = load i32, ptr %28, align 4, !tbaa !9
  %927 = add nsw i32 %926, 96
  store i32 %927, ptr %28, align 4, !tbaa !9
  br label %536, !llvm.loop !55

928:                                              ; preds = %536
  %929 = load ptr, ptr %7, align 8, !tbaa !5
  %930 = load ptr, ptr %31, align 8, !tbaa !5
  call void @png_free(ptr noundef %929, ptr noundef %930)
  %931 = load ptr, ptr %7, align 8, !tbaa !5
  %932 = load ptr, ptr %7, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.png_struct_def, ptr %932, i32 0, i32 128
  %934 = load ptr, ptr %933, align 8, !tbaa !42
  call void @png_free(ptr noundef %931, ptr noundef %934)
  %935 = load ptr, ptr %7, align 8, !tbaa !5
  %936 = load ptr, ptr %7, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.png_struct_def, ptr %936, i32 0, i32 127
  %938 = load ptr, ptr %937, align 8, !tbaa !41
  call void @png_free(ptr noundef %935, ptr noundef %938)
  %939 = load ptr, ptr %7, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.png_struct_def, ptr %939, i32 0, i32 128
  store ptr null, ptr %940, align 8, !tbaa !42
  %941 = load ptr, ptr %7, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.png_struct_def, ptr %941, i32 0, i32 127
  store ptr null, ptr %942, align 8, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %943

943:                                              ; preds = %928, %482
  %944 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %944, ptr %9, align 4, !tbaa !9
  br label %945

945:                                              ; preds = %943, %99
  %946 = load ptr, ptr %7, align 8, !tbaa !5
  %947 = getelementptr inbounds %struct.png_struct_def, ptr %946, i32 0, i32 41
  %948 = load ptr, ptr %947, align 8, !tbaa !56
  %949 = icmp eq ptr %948, null
  br i1 %949, label %950, label %954

950:                                              ; preds = %945
  %951 = load ptr, ptr %8, align 8, !tbaa !5
  %952 = load ptr, ptr %7, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.png_struct_def, ptr %952, i32 0, i32 41
  store ptr %951, ptr %953, align 8, !tbaa !56
  br label %954

954:                                              ; preds = %950, %945
  %955 = load i32, ptr %9, align 4, !tbaa !9
  %956 = trunc i32 %955 to i16
  %957 = load ptr, ptr %7, align 8, !tbaa !5
  %958 = getelementptr inbounds %struct.png_struct_def, ptr %957, i32 0, i32 42
  store i16 %956, ptr %958, align 8, !tbaa !57
  %959 = load i32, ptr %12, align 4, !tbaa !9
  %960 = icmp ne i32 %959, 0
  br i1 %960, label %961, label %1142

961:                                              ; preds = %954
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  store i32 15, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  store i32 32, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  store i32 32, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  store i32 32, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %962 = load i32, ptr %41, align 4, !tbaa !9
  %963 = zext i32 %962 to i64
  %964 = shl i64 1, %963
  store i64 %964, ptr %45, align 8, !tbaa !58
  %965 = load ptr, ptr %7, align 8, !tbaa !5
  %966 = load i64, ptr %45, align 8, !tbaa !58
  %967 = mul i64 %966, 1
  %968 = trunc i64 %967 to i32
  %969 = zext i32 %968 to i64
  %970 = call ptr @png_calloc(ptr noundef %965, i64 noundef %969)
  %971 = load ptr, ptr %7, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.png_struct_def, ptr %971, i32 0, i32 99
  store ptr %970, ptr %972, align 8, !tbaa !59
  %973 = load ptr, ptr %7, align 8, !tbaa !5
  %974 = load i64, ptr %45, align 8, !tbaa !58
  %975 = mul i64 %974, 1
  %976 = trunc i64 %975 to i32
  %977 = zext i32 %976 to i64
  %978 = call ptr @png_malloc(ptr noundef %973, i64 noundef %977)
  store ptr %978, ptr %40, align 8, !tbaa !5
  %979 = load ptr, ptr %40, align 8, !tbaa !5
  %980 = load i64, ptr %45, align 8, !tbaa !58
  %981 = mul i64 %980, 1
  call void @llvm.memset.p0.i64(ptr align 1 %979, i8 -1, i64 %981, i1 false)
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %982

982:                                              ; preds = %1136, %961
  %983 = load i32, ptr %39, align 4, !tbaa !9
  %984 = load i32, ptr %9, align 4, !tbaa !9
  %985 = icmp slt i32 %983, %984
  br i1 %985, label %986, label %1139

986:                                              ; preds = %982
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  %987 = load ptr, ptr %8, align 8, !tbaa !5
  %988 = load i32, ptr %39, align 4, !tbaa !9
  %989 = sext i32 %988 to i64
  %990 = getelementptr inbounds %struct.png_color_struct, ptr %987, i64 %989
  %991 = getelementptr inbounds %struct.png_color_struct, ptr %990, i32 0, i32 0
  %992 = load i8, ptr %991, align 1, !tbaa !35
  %993 = zext i8 %992 to i32
  %994 = ashr i32 %993, 3
  store i32 %994, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  %995 = load ptr, ptr %8, align 8, !tbaa !5
  %996 = load i32, ptr %39, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds %struct.png_color_struct, ptr %995, i64 %997
  %999 = getelementptr inbounds %struct.png_color_struct, ptr %998, i32 0, i32 1
  %1000 = load i8, ptr %999, align 1, !tbaa !37
  %1001 = zext i8 %1000 to i32
  %1002 = ashr i32 %1001, 3
  store i32 %1002, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  %1003 = load ptr, ptr %8, align 8, !tbaa !5
  %1004 = load i32, ptr %39, align 4, !tbaa !9
  %1005 = sext i32 %1004 to i64
  %1006 = getelementptr inbounds %struct.png_color_struct, ptr %1003, i64 %1005
  %1007 = getelementptr inbounds %struct.png_color_struct, ptr %1006, i32 0, i32 2
  %1008 = load i8, ptr %1007, align 1, !tbaa !38
  %1009 = zext i8 %1008 to i32
  %1010 = ashr i32 %1009, 3
  store i32 %1010, ptr %51, align 4, !tbaa !9
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %1011

1011:                                             ; preds = %1132, %986
  %1012 = load i32, ptr %46, align 4, !tbaa !9
  %1013 = load i32, ptr %42, align 4, !tbaa !9
  %1014 = icmp slt i32 %1012, %1013
  br i1 %1014, label %1015, label %1135

1015:                                             ; preds = %1011
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  %1016 = load i32, ptr %46, align 4, !tbaa !9
  %1017 = load i32, ptr %49, align 4, !tbaa !9
  %1018 = icmp sgt i32 %1016, %1017
  br i1 %1018, label %1019, label %1023

1019:                                             ; preds = %1015
  %1020 = load i32, ptr %46, align 4, !tbaa !9
  %1021 = load i32, ptr %49, align 4, !tbaa !9
  %1022 = sub nsw i32 %1020, %1021
  br label %1027

1023:                                             ; preds = %1015
  %1024 = load i32, ptr %49, align 4, !tbaa !9
  %1025 = load i32, ptr %46, align 4, !tbaa !9
  %1026 = sub nsw i32 %1024, %1025
  br label %1027

1027:                                             ; preds = %1023, %1019
  %1028 = phi i32 [ %1022, %1019 ], [ %1026, %1023 ]
  store i32 %1028, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  %1029 = load i32, ptr %46, align 4, !tbaa !9
  %1030 = shl i32 %1029, 10
  store i32 %1030, ptr %53, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %1031

1031:                                             ; preds = %1128, %1027
  %1032 = load i32, ptr %47, align 4, !tbaa !9
  %1033 = load i32, ptr %43, align 4, !tbaa !9
  %1034 = icmp slt i32 %1032, %1033
  br i1 %1034, label %1035, label %1131

1035:                                             ; preds = %1031
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  %1036 = load i32, ptr %47, align 4, !tbaa !9
  %1037 = load i32, ptr %50, align 4, !tbaa !9
  %1038 = icmp sgt i32 %1036, %1037
  br i1 %1038, label %1039, label %1043

1039:                                             ; preds = %1035
  %1040 = load i32, ptr %47, align 4, !tbaa !9
  %1041 = load i32, ptr %50, align 4, !tbaa !9
  %1042 = sub nsw i32 %1040, %1041
  br label %1047

1043:                                             ; preds = %1035
  %1044 = load i32, ptr %50, align 4, !tbaa !9
  %1045 = load i32, ptr %47, align 4, !tbaa !9
  %1046 = sub nsw i32 %1044, %1045
  br label %1047

1047:                                             ; preds = %1043, %1039
  %1048 = phi i32 [ %1042, %1039 ], [ %1046, %1043 ]
  store i32 %1048, ptr %54, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  %1049 = load i32, ptr %52, align 4, !tbaa !9
  %1050 = load i32, ptr %54, align 4, !tbaa !9
  %1051 = add nsw i32 %1049, %1050
  store i32 %1051, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  %1052 = load i32, ptr %52, align 4, !tbaa !9
  %1053 = load i32, ptr %54, align 4, !tbaa !9
  %1054 = icmp sgt i32 %1052, %1053
  br i1 %1054, label %1055, label %1057

1055:                                             ; preds = %1047
  %1056 = load i32, ptr %52, align 4, !tbaa !9
  br label %1059

1057:                                             ; preds = %1047
  %1058 = load i32, ptr %54, align 4, !tbaa !9
  br label %1059

1059:                                             ; preds = %1057, %1055
  %1060 = phi i32 [ %1056, %1055 ], [ %1058, %1057 ]
  store i32 %1060, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  %1061 = load i32, ptr %53, align 4, !tbaa !9
  %1062 = load i32, ptr %47, align 4, !tbaa !9
  %1063 = shl i32 %1062, 5
  %1064 = or i32 %1061, %1063
  store i32 %1064, ptr %57, align 4, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %1065

1065:                                             ; preds = %1124, %1059
  %1066 = load i32, ptr %48, align 4, !tbaa !9
  %1067 = load i32, ptr %44, align 4, !tbaa !9
  %1068 = icmp slt i32 %1066, %1067
  br i1 %1068, label %1069, label %1127

1069:                                             ; preds = %1065
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %1070 = load i32, ptr %57, align 4, !tbaa !9
  %1071 = load i32, ptr %48, align 4, !tbaa !9
  %1072 = or i32 %1070, %1071
  store i32 %1072, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  %1073 = load i32, ptr %48, align 4, !tbaa !9
  %1074 = load i32, ptr %51, align 4, !tbaa !9
  %1075 = icmp sgt i32 %1073, %1074
  br i1 %1075, label %1076, label %1080

1076:                                             ; preds = %1069
  %1077 = load i32, ptr %48, align 4, !tbaa !9
  %1078 = load i32, ptr %51, align 4, !tbaa !9
  %1079 = sub nsw i32 %1077, %1078
  br label %1084

1080:                                             ; preds = %1069
  %1081 = load i32, ptr %51, align 4, !tbaa !9
  %1082 = load i32, ptr %48, align 4, !tbaa !9
  %1083 = sub nsw i32 %1081, %1082
  br label %1084

1084:                                             ; preds = %1080, %1076
  %1085 = phi i32 [ %1079, %1076 ], [ %1083, %1080 ]
  store i32 %1085, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  %1086 = load i32, ptr %56, align 4, !tbaa !9
  %1087 = load i32, ptr %59, align 4, !tbaa !9
  %1088 = icmp sgt i32 %1086, %1087
  br i1 %1088, label %1089, label %1091

1089:                                             ; preds = %1084
  %1090 = load i32, ptr %56, align 4, !tbaa !9
  br label %1093

1091:                                             ; preds = %1084
  %1092 = load i32, ptr %59, align 4, !tbaa !9
  br label %1093

1093:                                             ; preds = %1091, %1089
  %1094 = phi i32 [ %1090, %1089 ], [ %1092, %1091 ]
  store i32 %1094, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #6
  %1095 = load i32, ptr %60, align 4, !tbaa !9
  %1096 = load i32, ptr %55, align 4, !tbaa !9
  %1097 = add nsw i32 %1095, %1096
  %1098 = load i32, ptr %59, align 4, !tbaa !9
  %1099 = add nsw i32 %1097, %1098
  store i32 %1099, ptr %61, align 4, !tbaa !9
  %1100 = load i32, ptr %61, align 4, !tbaa !9
  %1101 = load ptr, ptr %40, align 8, !tbaa !5
  %1102 = load i32, ptr %58, align 4, !tbaa !9
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds i8, ptr %1101, i64 %1103
  %1105 = load i8, ptr %1104, align 1, !tbaa !22
  %1106 = zext i8 %1105 to i32
  %1107 = icmp slt i32 %1100, %1106
  br i1 %1107, label %1108, label %1123

1108:                                             ; preds = %1093
  %1109 = load i32, ptr %61, align 4, !tbaa !9
  %1110 = trunc i32 %1109 to i8
  %1111 = load ptr, ptr %40, align 8, !tbaa !5
  %1112 = load i32, ptr %58, align 4, !tbaa !9
  %1113 = sext i32 %1112 to i64
  %1114 = getelementptr inbounds i8, ptr %1111, i64 %1113
  store i8 %1110, ptr %1114, align 1, !tbaa !22
  %1115 = load i32, ptr %39, align 4, !tbaa !9
  %1116 = trunc i32 %1115 to i8
  %1117 = load ptr, ptr %7, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.png_struct_def, ptr %1117, i32 0, i32 99
  %1119 = load ptr, ptr %1118, align 8, !tbaa !59
  %1120 = load i32, ptr %58, align 4, !tbaa !9
  %1121 = sext i32 %1120 to i64
  %1122 = getelementptr inbounds i8, ptr %1119, i64 %1121
  store i8 %1116, ptr %1122, align 1, !tbaa !22
  br label %1123

1123:                                             ; preds = %1108, %1093
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %1124

1124:                                             ; preds = %1123
  %1125 = load i32, ptr %48, align 4, !tbaa !9
  %1126 = add nsw i32 %1125, 1
  store i32 %1126, ptr %48, align 4, !tbaa !9
  br label %1065, !llvm.loop !60

1127:                                             ; preds = %1065
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  br label %1128

1128:                                             ; preds = %1127
  %1129 = load i32, ptr %47, align 4, !tbaa !9
  %1130 = add nsw i32 %1129, 1
  store i32 %1130, ptr %47, align 4, !tbaa !9
  br label %1031, !llvm.loop !61

1131:                                             ; preds = %1031
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  br label %1132

1132:                                             ; preds = %1131
  %1133 = load i32, ptr %46, align 4, !tbaa !9
  %1134 = add nsw i32 %1133, 1
  store i32 %1134, ptr %46, align 4, !tbaa !9
  br label %1011, !llvm.loop !62

1135:                                             ; preds = %1011
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  br label %1136

1136:                                             ; preds = %1135
  %1137 = load i32, ptr %39, align 4, !tbaa !9
  %1138 = add nsw i32 %1137, 1
  store i32 %1138, ptr %39, align 4, !tbaa !9
  br label %982, !llvm.loop !63

1139:                                             ; preds = %982
  %1140 = load ptr, ptr %7, align 8, !tbaa !5
  %1141 = load ptr, ptr %40, align 8, !tbaa !5
  call void @png_free(ptr noundef %1140, ptr noundef %1141)
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  br label %1142

1142:                                             ; preds = %1139, %954, %64
  ret void

1143:                                             ; preds = %881, %646, %635, %210
  unreachable
}

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

declare ptr @png_malloc(ptr noundef, i64 noundef) #3

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

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

declare void @png_free(ptr noundef, ptr noundef) #3

declare ptr @png_calloc(ptr noundef, i64 noundef) #3

declare ptr @png_malloc_warn(ptr noundef, i64 noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

attributes #0 = { nocallback nofree 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.png_color_struct = type { i8, i8, i8 }

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

; Function Attrs: nounwind uwtable
define dso_local void @png_set_quantize(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef readonly %4, i32 noundef %5) local_unnamed_addr #1 {
  %7 = alloca %struct.png_color_struct, align 1
  %8 = icmp eq ptr %0, null
  br i1 %8, label %487, label %9

9:                                                ; preds = %6
  %10 = getelementptr inbounds i8, ptr %0, i64 292
  %11 = load i32, ptr %10, align 4, !tbaa !5
  %12 = or i32 %11, 64
  store i32 %12, ptr %10, align 4, !tbaa !5
  %.not = icmp eq i32 %5, 0
  br i1 %.not, label %13, label %.loopexit469

13:                                               ; preds = %9
  %14 = zext i32 %2 to i64
  %15 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef %14) #7
  %16 = getelementptr inbounds i8, ptr %0, i64 912
  store ptr %15, ptr %16, align 8, !tbaa !19
  %17 = icmp sgt i32 %2, 0
  br i1 %17, label %.lr.ph.preheader, label %.loopexit469

.lr.ph.preheader:                                 ; preds = %13
  %xtraiter = and i64 %14, 3
  %18 = icmp ult i32 %2, 4
  br i1 %18, label %.loopexit469.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %14, 2147483644
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %19 = trunc i64 %indvars.iv to i8
  %20 = load ptr, ptr %16, align 8, !tbaa !19
  %21 = getelementptr inbounds i8, ptr %20, i64 %indvars.iv
  store i8 %19, ptr %21, align 1, !tbaa !20
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %22 = trunc i64 %indvars.iv.next to i8
  %23 = load ptr, ptr %16, align 8, !tbaa !19
  %24 = getelementptr inbounds i8, ptr %23, i64 %indvars.iv.next
  store i8 %22, ptr %24, align 1, !tbaa !20
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %25 = trunc i64 %indvars.iv.next.1 to i8
  %26 = load ptr, ptr %16, align 8, !tbaa !19
  %27 = getelementptr inbounds i8, ptr %26, i64 %indvars.iv.next.1
  store i8 %25, ptr %27, align 1, !tbaa !20
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %28 = trunc i64 %indvars.iv.next.2 to i8
  %29 = load ptr, ptr %16, align 8, !tbaa !19
  %30 = getelementptr inbounds i8, ptr %29, i64 %indvars.iv.next.2
  store i8 %28, ptr %30, align 1, !tbaa !20
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.loopexit469.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !21

.loopexit469.loopexit.unr-lcssa:                  ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit469, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.loopexit469.loopexit.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %.loopexit469.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %.loopexit469.loopexit.unr-lcssa ]
  %31 = trunc i64 %indvars.iv.epil to i8
  %32 = load ptr, ptr %16, align 8, !tbaa !19
  %33 = getelementptr inbounds i8, ptr %32, i64 %indvars.iv.epil
  store i8 %31, ptr %33, align 1, !tbaa !20
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.loopexit469, label %.lr.ph.epil, !llvm.loop !23

.loopexit469:                                     ; preds = %.loopexit469.loopexit.unr-lcssa, %.lr.ph.epil, %13, %9
  %34 = icmp sgt i32 %2, %3
  br i1 %34, label %35, label %419

35:                                               ; preds = %.loopexit469
  %.not420 = icmp eq ptr %4, null
  %36 = zext i32 %2 to i64
  %37 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef %36) #7
  br i1 %.not420, label %167, label %38

38:                                               ; preds = %35
  %39 = getelementptr inbounds i8, ptr %0, i64 1080
  store ptr %37, ptr %39, align 8, !tbaa !25
  %40 = icmp sgt i32 %2, 0
  br i1 %40, label %.lr.ph478.preheader, label %.preheader468

.lr.ph478.preheader:                              ; preds = %38
  %xtraiter689 = and i64 %36, 3
  %41 = icmp ult i32 %2, 4
  br i1 %41, label %.preheader468.loopexit.unr-lcssa, label %.lr.ph478.preheader.new

.lr.ph478.preheader.new:                          ; preds = %.lr.ph478.preheader
  %unroll_iter692 = and i64 %36, 2147483644
  br label %.lr.ph478

.preheader468.loopexit.unr-lcssa:                 ; preds = %.lr.ph478, %.lr.ph478.preheader
  %indvars.iv546.unr = phi i64 [ 0, %.lr.ph478.preheader ], [ %indvars.iv.next547.3, %.lr.ph478 ]
  %lcmp.mod691.not = icmp eq i64 %xtraiter689, 0
  br i1 %lcmp.mod691.not, label %.preheader468, label %.lr.ph478.epil

.lr.ph478.epil:                                   ; preds = %.preheader468.loopexit.unr-lcssa, %.lr.ph478.epil
  %indvars.iv546.epil = phi i64 [ %indvars.iv.next547.epil, %.lr.ph478.epil ], [ %indvars.iv546.unr, %.preheader468.loopexit.unr-lcssa ]
  %epil.iter690 = phi i64 [ %epil.iter690.next, %.lr.ph478.epil ], [ 0, %.preheader468.loopexit.unr-lcssa ]
  %42 = trunc i64 %indvars.iv546.epil to i8
  %43 = load ptr, ptr %39, align 8, !tbaa !25
  %44 = getelementptr inbounds i8, ptr %43, i64 %indvars.iv546.epil
  store i8 %42, ptr %44, align 1, !tbaa !20
  %indvars.iv.next547.epil = add nuw nsw i64 %indvars.iv546.epil, 1
  %epil.iter690.next = add i64 %epil.iter690, 1
  %epil.iter690.cmp.not = icmp eq i64 %epil.iter690.next, %xtraiter689
  br i1 %epil.iter690.cmp.not, label %.preheader468, label %.lr.ph478.epil, !llvm.loop !26

.preheader468:                                    ; preds = %.preheader468.loopexit.unr-lcssa, %.lr.ph478.epil, %38
  %invariant.smax = tail call i32 @llvm.smax.i32(i32 %3, i32 1)
  br label %57

.lr.ph478:                                        ; preds = %.lr.ph478, %.lr.ph478.preheader.new
  %indvars.iv546 = phi i64 [ 0, %.lr.ph478.preheader.new ], [ %indvars.iv.next547.3, %.lr.ph478 ]
  %niter693 = phi i64 [ 0, %.lr.ph478.preheader.new ], [ %niter693.next.3, %.lr.ph478 ]
  %45 = trunc i64 %indvars.iv546 to i8
  %46 = load ptr, ptr %39, align 8, !tbaa !25
  %47 = getelementptr inbounds i8, ptr %46, i64 %indvars.iv546
  store i8 %45, ptr %47, align 1, !tbaa !20
  %indvars.iv.next547 = or disjoint i64 %indvars.iv546, 1
  %48 = trunc i64 %indvars.iv.next547 to i8
  %49 = load ptr, ptr %39, align 8, !tbaa !25
  %50 = getelementptr inbounds i8, ptr %49, i64 %indvars.iv.next547
  store i8 %48, ptr %50, align 1, !tbaa !20
  %indvars.iv.next547.1 = or disjoint i64 %indvars.iv546, 2
  %51 = trunc i64 %indvars.iv.next547.1 to i8
  %52 = load ptr, ptr %39, align 8, !tbaa !25
  %53 = getelementptr inbounds i8, ptr %52, i64 %indvars.iv.next547.1
  store i8 %51, ptr %53, align 1, !tbaa !20
  %indvars.iv.next547.2 = or disjoint i64 %indvars.iv546, 3
  %54 = trunc i64 %indvars.iv.next547.2 to i8
  %55 = load ptr, ptr %39, align 8, !tbaa !25
  %56 = getelementptr inbounds i8, ptr %55, i64 %indvars.iv.next547.2
  store i8 %54, ptr %56, align 1, !tbaa !20
  %indvars.iv.next547.3 = add nuw nsw i64 %indvars.iv546, 4
  %niter693.next.3 = add i64 %niter693, 4
  %niter693.ncmp.3 = icmp eq i64 %niter693.next.3, %unroll_iter692
  br i1 %niter693.ncmp.3, label %.preheader468.loopexit.unr-lcssa, label %.lr.ph478, !llvm.loop !27

57:                                               ; preds = %.preheader468, %._crit_edge
  %indvars.iv554.in = phi i32 [ %2, %.preheader468 ], [ %indvars.iv554, %._crit_edge ]
  %.1.in = phi i32 [ %2, %.preheader468 ], [ %.1, %._crit_edge ]
  %indvars.iv554 = add i32 %indvars.iv554.in, -1
  %.1 = add nsw i32 %.1.in, -1
  %or.cond = icmp sgt i32 %.1.in, %invariant.smax
  br i1 %or.cond, label %.lr.ph481.preheader, label %._crit_edge.thread

.lr.ph481.preheader:                              ; preds = %57
  %wide.trip.count556 = zext i32 %indvars.iv554 to i64
  br label %.lr.ph481

.lr.ph481:                                        ; preds = %.lr.ph481.preheader, %73
  %indvars.iv551 = phi i64 [ 0, %.lr.ph481.preheader ], [ %indvars.iv.next552, %73 ]
  %.0356480 = phi i32 [ 1, %.lr.ph481.preheader ], [ %.1357, %73 ]
  %58 = load ptr, ptr %39, align 8, !tbaa !25
  %59 = getelementptr inbounds i8, ptr %58, i64 %indvars.iv551
  %60 = load i8, ptr %59, align 1, !tbaa !20
  %61 = zext i8 %60 to i64
  %62 = getelementptr inbounds i16, ptr %4, i64 %61
  %63 = load i16, ptr %62, align 2, !tbaa !28
  %indvars.iv.next552 = add nuw nsw i64 %indvars.iv551, 1
  %64 = getelementptr inbounds i8, ptr %58, i64 %indvars.iv.next552
  %65 = load i8, ptr %64, align 1, !tbaa !20
  %66 = zext i8 %65 to i64
  %67 = getelementptr inbounds i16, ptr %4, i64 %66
  %68 = load i16, ptr %67, align 2, !tbaa !28
  %69 = icmp ult i16 %63, %68
  br i1 %69, label %70, label %73

70:                                               ; preds = %.lr.ph481
  store i8 %65, ptr %59, align 1, !tbaa !20
  %71 = load ptr, ptr %39, align 8, !tbaa !25
  %72 = getelementptr inbounds i8, ptr %71, i64 %indvars.iv.next552
  store i8 %60, ptr %72, align 1, !tbaa !20
  br label %73

73:                                               ; preds = %.lr.ph481, %70
  %.1357 = phi i32 [ 0, %70 ], [ %.0356480, %.lr.ph481 ]
  %exitcond557.not = icmp eq i64 %indvars.iv.next552, %wide.trip.count556
  br i1 %exitcond557.not, label %._crit_edge, label %.lr.ph481, !llvm.loop !29

._crit_edge:                                      ; preds = %73
  %.not432 = icmp eq i32 %.1357, 0
  br i1 %.not432, label %57, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %._crit_edge, %57
  %74 = icmp sgt i32 %3, 0
  br i1 %.not, label %.preheader463, label %.preheader465

.preheader465:                                    ; preds = %._crit_edge.thread
  br i1 %74, label %.lr.ph484.preheader, label %.loopexit462

.lr.ph484.preheader:                              ; preds = %.preheader465
  %wide.trip.count564 = zext nneg i32 %3 to i64
  %75 = trunc i32 %3 to i8
  br label %.lr.ph484

.preheader463:                                    ; preds = %._crit_edge.thread
  br i1 %74, label %.lr.ph487, label %.preheader461

.lr.ph487:                                        ; preds = %.preheader463
  %76 = getelementptr inbounds i8, ptr %0, i64 912
  %wide.trip.count572 = zext nneg i32 %3 to i64
  %77 = trunc i32 %3 to i8
  br label %94

.lr.ph484:                                        ; preds = %.lr.ph484.preheader, %89
  %indvars.iv561 = phi i64 [ 0, %.lr.ph484.preheader ], [ %indvars.iv.next562, %89 ]
  %.0363482 = phi i32 [ %2, %.lr.ph484.preheader ], [ %.2365, %89 ]
  %78 = load ptr, ptr %39, align 8, !tbaa !25
  %79 = getelementptr inbounds i8, ptr %78, i64 %indvars.iv561
  %80 = load i8, ptr %79, align 1, !tbaa !20
  %81 = zext i8 %80 to i32
  %.not436 = icmp slt i32 %81, %3
  br i1 %.not436, label %89, label %.preheader464.preheader

.preheader464.preheader:                          ; preds = %.lr.ph484
  %82 = sext i32 %.0363482 to i64
  br label %.preheader464

.preheader464:                                    ; preds = %.preheader464.preheader, %.preheader464
  %indvars.iv558 = phi i64 [ %82, %.preheader464.preheader ], [ %indvars.iv.next559, %.preheader464 ]
  %indvars.iv.next559 = add nsw i64 %indvars.iv558, -1
  %83 = getelementptr inbounds i8, ptr %78, i64 %indvars.iv.next559
  %84 = load i8, ptr %83, align 1, !tbaa !20
  %.not437 = icmp ult i8 %84, %75
  br i1 %.not437, label %85, label %.preheader464, !llvm.loop !30

85:                                               ; preds = %.preheader464
  %86 = trunc nsw i64 %indvars.iv.next559 to i32
  %87 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv561
  %88 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv.next559
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %87, ptr noundef nonnull align 1 dereferenceable(3) %88, i64 3, i1 false), !tbaa.struct !31
  br label %89

89:                                               ; preds = %.lr.ph484, %85
  %.2365 = phi i32 [ %86, %85 ], [ %.0363482, %.lr.ph484 ]
  %indvars.iv.next562 = add nuw nsw i64 %indvars.iv561, 1
  %exitcond565.not = icmp eq i64 %indvars.iv.next562, %wide.trip.count564
  br i1 %exitcond565.not, label %.loopexit462, label %.lr.ph484, !llvm.loop !32

.preheader461:                                    ; preds = %114, %.preheader463
  br i1 %40, label %.lr.ph496, label %.loopexit462

.lr.ph496:                                        ; preds = %.preheader461
  %90 = getelementptr inbounds i8, ptr %0, i64 912
  %91 = getelementptr inbounds i8, ptr %1, i64 1
  %92 = getelementptr inbounds i8, ptr %1, i64 2
  %93 = icmp sgt i32 %3, 1
  %wide.trip.count577 = zext nneg i32 %3 to i64
  br label %115

94:                                               ; preds = %.lr.ph487, %114
  %indvars.iv569 = phi i64 [ 0, %.lr.ph487 ], [ %indvars.iv.next570, %114 ]
  %.0366485 = phi i32 [ %2, %.lr.ph487 ], [ %.2368, %114 ]
  %95 = load ptr, ptr %39, align 8, !tbaa !25
  %96 = getelementptr inbounds i8, ptr %95, i64 %indvars.iv569
  %97 = load i8, ptr %96, align 1, !tbaa !20
  %98 = zext i8 %97 to i32
  %.not434 = icmp slt i32 %98, %3
  br i1 %.not434, label %114, label %99

99:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %7)
  %100 = sext i32 %.0366485 to i64
  br label %101

101:                                              ; preds = %101, %99
  %indvars.iv566 = phi i64 [ %indvars.iv.next567, %101 ], [ %100, %99 ]
  %indvars.iv.next567 = add nsw i64 %indvars.iv566, -1
  %102 = getelementptr inbounds i8, ptr %95, i64 %indvars.iv.next567
  %103 = load i8, ptr %102, align 1, !tbaa !20
  %.not435 = icmp ult i8 %103, %77
  br i1 %.not435, label %104, label %101, !llvm.loop !33

104:                                              ; preds = %101
  %105 = trunc nsw i64 %indvars.iv.next567 to i32
  %106 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv.next567
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %7, ptr noundef nonnull align 1 dereferenceable(3) %106, i64 3, i1 false), !tbaa.struct !31
  %107 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv569
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %106, ptr noundef nonnull align 1 dereferenceable(3) %107, i64 3, i1 false), !tbaa.struct !31
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %107, ptr noundef nonnull align 1 dereferenceable(3) %7, i64 3, i1 false), !tbaa.struct !31
  %108 = trunc i64 %indvars.iv569 to i8
  %109 = load ptr, ptr %76, align 8, !tbaa !19
  %110 = getelementptr inbounds i8, ptr %109, i64 %indvars.iv.next567
  store i8 %108, ptr %110, align 1, !tbaa !20
  %111 = trunc i64 %indvars.iv.next567 to i8
  %112 = load ptr, ptr %76, align 8, !tbaa !19
  %113 = getelementptr inbounds i8, ptr %112, i64 %indvars.iv569
  store i8 %111, ptr %113, align 1, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %7)
  br label %114

114:                                              ; preds = %94, %104
  %.2368 = phi i32 [ %105, %104 ], [ %.0366485, %94 ]
  %indvars.iv.next570 = add nuw nsw i64 %indvars.iv569, 1
  %exitcond573.not = icmp eq i64 %indvars.iv.next570, %wide.trip.count572
  br i1 %exitcond573.not, label %.preheader461, label %94, !llvm.loop !34

115:                                              ; preds = %.lr.ph496, %165
  %indvars.iv579 = phi i64 [ 0, %.lr.ph496 ], [ %indvars.iv.next580, %165 ]
  %116 = load ptr, ptr %90, align 8, !tbaa !19
  %117 = getelementptr inbounds i8, ptr %116, i64 %indvars.iv579
  %118 = load i8, ptr %117, align 1, !tbaa !20
  %119 = zext i8 %118 to i32
  %.not433 = icmp slt i32 %119, %3
  br i1 %.not433, label %165, label %120

120:                                              ; preds = %115
  %121 = zext i8 %118 to i64
  %122 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %121
  %123 = load i8, ptr %122, align 1, !tbaa !35
  %124 = zext i8 %123 to i32
  %125 = getelementptr inbounds i8, ptr %122, i64 1
  %126 = load i8, ptr %125, align 1, !tbaa !37
  %127 = zext i8 %126 to i32
  %128 = getelementptr inbounds i8, ptr %122, i64 2
  %129 = load i8, ptr %128, align 1, !tbaa !38
  %130 = zext i8 %129 to i32
  br i1 %93, label %.lr.ph492.preheader, label %._crit_edge493

.lr.ph492.preheader:                              ; preds = %120
  %131 = load i8, ptr %91, align 1, !tbaa !37
  %132 = zext i8 %131 to i32
  %133 = sub nsw i32 %127, %132
  %134 = tail call i32 @llvm.abs.i32(i32 %133, i1 true)
  %135 = load i8, ptr %1, align 1, !tbaa !35
  %136 = zext i8 %135 to i32
  %137 = sub nsw i32 %124, %136
  %138 = tail call i32 @llvm.abs.i32(i32 %137, i1 true)
  %139 = add nuw nsw i32 %134, %138
  %140 = load i8, ptr %92, align 1, !tbaa !38
  %141 = zext i8 %140 to i32
  %142 = sub nsw i32 %130, %141
  %143 = tail call i32 @llvm.abs.i32(i32 %142, i1 true)
  %144 = add nuw nsw i32 %139, %143
  br label %.lr.ph492

.lr.ph492:                                        ; preds = %.lr.ph492.preheader, %.lr.ph492
  %indvars.iv574 = phi i64 [ 1, %.lr.ph492.preheader ], [ %indvars.iv.next575, %.lr.ph492 ]
  %.0369490 = phi i32 [ %144, %.lr.ph492.preheader ], [ %spec.select438, %.lr.ph492 ]
  %.0372488 = phi i32 [ 0, %.lr.ph492.preheader ], [ %spec.select, %.lr.ph492 ]
  %145 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv574
  %146 = load i8, ptr %145, align 1, !tbaa !35
  %147 = zext i8 %146 to i32
  %148 = sub nsw i32 %124, %147
  %149 = tail call i32 @llvm.abs.i32(i32 %148, i1 true)
  %150 = getelementptr inbounds i8, ptr %145, i64 1
  %151 = load i8, ptr %150, align 1, !tbaa !37
  %152 = zext i8 %151 to i32
  %153 = sub nsw i32 %127, %152
  %154 = tail call i32 @llvm.abs.i32(i32 %153, i1 true)
  %155 = add nuw nsw i32 %154, %149
  %156 = getelementptr inbounds i8, ptr %145, i64 2
  %157 = load i8, ptr %156, align 1, !tbaa !38
  %158 = zext i8 %157 to i32
  %159 = sub nsw i32 %130, %158
  %160 = tail call i32 @llvm.abs.i32(i32 %159, i1 true)
  %161 = add nuw nsw i32 %155, %160
  %162 = icmp slt i32 %161, %.0369490
  %163 = trunc nuw nsw i64 %indvars.iv574 to i32
  %spec.select = select i1 %162, i32 %163, i32 %.0372488
  %spec.select438 = tail call i32 @llvm.smin.i32(i32 %161, i32 %.0369490)
  %indvars.iv.next575 = add nuw nsw i64 %indvars.iv574, 1
  %exitcond578.not = icmp eq i64 %indvars.iv.next575, %wide.trip.count577
  br i1 %exitcond578.not, label %._crit_edge493, label %.lr.ph492, !llvm.loop !39

._crit_edge493:                                   ; preds = %.lr.ph492, %120
  %.0372.lcssa = phi i32 [ 0, %120 ], [ %spec.select, %.lr.ph492 ]
  %164 = trunc i32 %.0372.lcssa to i8
  store i8 %164, ptr %117, align 1, !tbaa !20
  br label %165

165:                                              ; preds = %115, %._crit_edge493
  %indvars.iv.next580 = add nuw nsw i64 %indvars.iv579, 1
  %exitcond583.not = icmp eq i64 %indvars.iv.next580, %36
  br i1 %exitcond583.not, label %.loopexit462, label %115, !llvm.loop !40

.loopexit462:                                     ; preds = %89, %165, %.preheader465, %.preheader461
  %166 = load ptr, ptr %39, align 8, !tbaa !25
  tail call void @png_free(ptr noundef %0, ptr noundef %166) #7
  store ptr null, ptr %39, align 8, !tbaa !25
  br label %419

167:                                              ; preds = %35
  %168 = getelementptr inbounds i8, ptr %0, i64 1088
  store ptr %37, ptr %168, align 8, !tbaa !41
  %169 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef %36) #7
  %170 = getelementptr inbounds i8, ptr %0, i64 1096
  store ptr %169, ptr %170, align 8, !tbaa !42
  %171 = icmp sgt i32 %2, 0
  br i1 %171, label %.lr.ph499.preheader, label %.preheader459.lr.ph

.lr.ph499.preheader:                              ; preds = %167
  %xtraiter694 = and i64 %36, 1
  %172 = icmp eq i32 %2, 1
  br i1 %172, label %.preheader459.lr.ph.loopexit.unr-lcssa, label %.lr.ph499.preheader.new

.lr.ph499.preheader.new:                          ; preds = %.lr.ph499.preheader
  %unroll_iter697 = and i64 %36, 2147483646
  br label %.lr.ph499

.lr.ph499:                                        ; preds = %.lr.ph499, %.lr.ph499.preheader.new
  %indvars.iv584 = phi i64 [ 0, %.lr.ph499.preheader.new ], [ %indvars.iv.next585.1, %.lr.ph499 ]
  %niter698 = phi i64 [ 0, %.lr.ph499.preheader.new ], [ %niter698.next.1, %.lr.ph499 ]
  %173 = trunc i64 %indvars.iv584 to i8
  %174 = load ptr, ptr %168, align 8, !tbaa !41
  %175 = getelementptr inbounds i8, ptr %174, i64 %indvars.iv584
  store i8 %173, ptr %175, align 1, !tbaa !20
  %176 = load ptr, ptr %170, align 8, !tbaa !42
  %177 = getelementptr inbounds i8, ptr %176, i64 %indvars.iv584
  store i8 %173, ptr %177, align 1, !tbaa !20
  %indvars.iv.next585 = or disjoint i64 %indvars.iv584, 1
  %178 = trunc i64 %indvars.iv.next585 to i8
  %179 = load ptr, ptr %168, align 8, !tbaa !41
  %180 = getelementptr inbounds i8, ptr %179, i64 %indvars.iv.next585
  store i8 %178, ptr %180, align 1, !tbaa !20
  %181 = load ptr, ptr %170, align 8, !tbaa !42
  %182 = getelementptr inbounds i8, ptr %181, i64 %indvars.iv.next585
  store i8 %178, ptr %182, align 1, !tbaa !20
  %indvars.iv.next585.1 = add nuw nsw i64 %indvars.iv584, 2
  %niter698.next.1 = add i64 %niter698, 2
  %niter698.ncmp.1 = icmp eq i64 %niter698.next.1, %unroll_iter697
  br i1 %niter698.ncmp.1, label %.preheader459.lr.ph.loopexit.unr-lcssa, label %.lr.ph499, !llvm.loop !43

.preheader459.lr.ph.loopexit.unr-lcssa:           ; preds = %.lr.ph499, %.lr.ph499.preheader
  %indvars.iv584.unr = phi i64 [ 0, %.lr.ph499.preheader ], [ %indvars.iv.next585.1, %.lr.ph499 ]
  %lcmp.mod696.not = icmp eq i64 %xtraiter694, 0
  br i1 %lcmp.mod696.not, label %.preheader459.lr.ph, label %.lr.ph499.epil

.lr.ph499.epil:                                   ; preds = %.preheader459.lr.ph.loopexit.unr-lcssa
  %183 = trunc i64 %indvars.iv584.unr to i8
  %184 = load ptr, ptr %168, align 8, !tbaa !41
  %185 = getelementptr inbounds i8, ptr %184, i64 %indvars.iv584.unr
  store i8 %183, ptr %185, align 1, !tbaa !20
  %186 = load ptr, ptr %170, align 8, !tbaa !42
  %187 = getelementptr inbounds i8, ptr %186, i64 %indvars.iv584.unr
  store i8 %183, ptr %187, align 1, !tbaa !20
  br label %.preheader459.lr.ph

.preheader459.lr.ph:                              ; preds = %.lr.ph499.epil, %.preheader459.lr.ph.loopexit.unr-lcssa, %167
  %188 = tail call ptr @png_calloc(ptr noundef nonnull %0, i64 noundef 6152) #7
  %189 = getelementptr inbounds i8, ptr %0, i64 912
  br label %.preheader459

.preheader459:                                    ; preds = %.preheader459.lr.ph, %414
  %indvars.iv627 = phi i64 [ 97, %.preheader459.lr.ph ], [ %indvars.iv.next628, %414 ]
  %.0378520 = phi i32 [ 96, %.preheader459.lr.ph ], [ %415, %414 ]
  %.0382519 = phi i32 [ %2, %.preheader459.lr.ph ], [ %.6, %414 ]
  %.0387518 = phi ptr [ null, %.preheader459.lr.ph ], [ %.9, %414 ]
  %190 = tail call i32 @llvm.smax.i32(i32 %.0382519, i32 1)
  %smax = add nsw i32 %190, -1
  %wide.trip.count599 = zext nneg i32 %smax to i64
  %wide.trip.count594 = zext i32 %.0382519 to i64
  br label %191

191:                                              ; preds = %.preheader459, %._crit_edge505
  %indvars.iv596 = phi i64 [ 0, %.preheader459 ], [ %indvars.iv.next597, %._crit_edge505 ]
  %indvars.iv589 = phi i64 [ 1, %.preheader459 ], [ %indvars.iv.next590, %._crit_edge505 ]
  %.1388 = phi ptr [ %.0387518, %.preheader459 ], [ %.4391.ph, %._crit_edge505 ]
  %exitcond600.not = icmp eq i64 %indvars.iv596, %wide.trip.count599
  br i1 %exitcond600.not, label %232, label %.lr.ph504

.lr.ph504:                                        ; preds = %191
  %indvars.iv.next597 = add nuw nsw i64 %indvars.iv596, 1
  %192 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv596
  %193 = getelementptr inbounds i8, ptr %192, i64 1
  %194 = getelementptr inbounds i8, ptr %192, i64 2
  %195 = trunc i64 %indvars.iv596 to i8
  br label %196

196:                                              ; preds = %.lr.ph504, %230
  %indvars.iv591 = phi i64 [ %indvars.iv589, %.lr.ph504 ], [ %indvars.iv.next592, %230 ]
  %.2389502 = phi ptr [ %.1388, %.lr.ph504 ], [ %.4391.ph, %230 ]
  %197 = load i8, ptr %192, align 1, !tbaa !35
  %198 = zext i8 %197 to i32
  %199 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv591
  %200 = load i8, ptr %199, align 1, !tbaa !35
  %201 = zext i8 %200 to i32
  %202 = sub nsw i32 %198, %201
  %203 = tail call i32 @llvm.abs.i32(i32 %202, i1 true)
  %204 = load i8, ptr %193, align 1, !tbaa !37
  %205 = zext i8 %204 to i32
  %206 = getelementptr inbounds i8, ptr %199, i64 1
  %207 = load i8, ptr %206, align 1, !tbaa !37
  %208 = zext i8 %207 to i32
  %209 = sub nsw i32 %205, %208
  %210 = tail call i32 @llvm.abs.i32(i32 %209, i1 true)
  %211 = add nuw nsw i32 %210, %203
  %212 = load i8, ptr %194, align 1, !tbaa !38
  %213 = zext i8 %212 to i32
  %214 = getelementptr inbounds i8, ptr %199, i64 2
  %215 = load i8, ptr %214, align 1, !tbaa !38
  %216 = zext i8 %215 to i32
  %217 = sub nsw i32 %213, %216
  %218 = tail call i32 @llvm.abs.i32(i32 %217, i1 true)
  %219 = add nuw nsw i32 %211, %218
  %.not421 = icmp ugt i32 %219, %.0378520
  br i1 %.not421, label %230, label %220

220:                                              ; preds = %196
  %221 = tail call ptr @png_malloc_warn(ptr noundef %0, i64 noundef 16) #7
  %222 = icmp eq ptr %221, null
  br i1 %222, label %.thread450, label %223

223:                                              ; preds = %220
  %224 = zext nneg i32 %219 to i64
  %225 = getelementptr inbounds ptr, ptr %188, i64 %224
  %226 = load ptr, ptr %225, align 8, !tbaa !44
  store ptr %226, ptr %221, align 8, !tbaa !45
  %227 = getelementptr inbounds i8, ptr %221, i64 8
  store i8 %195, ptr %227, align 8, !tbaa !47
  %228 = trunc i64 %indvars.iv591 to i8
  %229 = getelementptr inbounds i8, ptr %221, i64 9
  store i8 %228, ptr %229, align 1, !tbaa !48
  store ptr %221, ptr %225, align 8, !tbaa !44
  br label %230

230:                                              ; preds = %223, %196
  %.4391.ph = phi ptr [ %.2389502, %196 ], [ %221, %223 ]
  %indvars.iv.next592 = add nuw nsw i64 %indvars.iv591, 1
  %exitcond595.not = icmp eq i64 %indvars.iv.next592, %wide.trip.count594
  br i1 %exitcond595.not, label %._crit_edge505, label %196, !llvm.loop !49

._crit_edge505:                                   ; preds = %230
  %231 = icmp eq ptr %.4391.ph, null
  %indvars.iv.next590 = add nuw nsw i64 %indvars.iv589, 1
  br i1 %231, label %.thread450, label %191

232:                                              ; preds = %191
  %.not422 = icmp eq ptr %.1388, null
  br i1 %.not422, label %.thread450, label %.preheader457

.preheader457:                                    ; preds = %232
  br i1 %.not, label %.preheader457.split.us, label %.preheader457.split

.preheader457.split.us:                           ; preds = %.preheader457
  br i1 %171, label %.preheader457.split.us.split.us, label %.preheader457.split.us.split

.preheader457.split.us.split.us:                  ; preds = %.preheader457.split.us, %.split.us.us.split.us.us.thread
  %indvars.iv618 = phi i64 [ %indvars.iv.next619, %.split.us.us.split.us.us.thread ], [ 0, %.preheader457.split.us ]
  %.1383511.us.us = phi i32 [ %.5.us.us, %.split.us.us.split.us.us.thread ], [ %.0382519, %.preheader457.split.us ]
  %233 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv618
  %234 = load ptr, ptr %233, align 8, !tbaa !44
  %.not424.us.us = icmp eq ptr %234, null
  br i1 %.not424.us.us, label %.split.us.us.split.us.us.thread, label %.preheader456.us.us

.split.us.us.split.us.us.thread:                  ; preds = %262, %.preheader457.split.us.split.us
  %.5.us.us = phi i32 [ %.1383511.us.us, %.preheader457.split.us.split.us ], [ %.3385.us.us.us.us, %262 ]
  %indvars.iv.next619 = add nuw nsw i64 %indvars.iv618, 1
  %exitcond622.not = icmp eq i64 %indvars.iv.next619, %indvars.iv627
  br i1 %exitcond622.not, label %.thread450, label %.preheader457.split.us.split.us, !llvm.loop !50

.preheader456.us.us:                              ; preds = %.preheader457.split.us.split.us, %262
  %.2384510.us.us.us.us = phi i32 [ %.3385.us.us.us.us, %262 ], [ %.1383511.us.us, %.preheader457.split.us.split.us ]
  %.0395509.us.us.us.us = phi ptr [ %263, %262 ], [ %234, %.preheader457.split.us.split.us ]
  %235 = load ptr, ptr %168, align 8, !tbaa !41
  %236 = getelementptr inbounds i8, ptr %.0395509.us.us.us.us, i64 8
  %237 = load i8, ptr %236, align 8, !tbaa !47
  %238 = zext i8 %237 to i64
  %239 = getelementptr inbounds i8, ptr %235, i64 %238
  %240 = load i8, ptr %239, align 1, !tbaa !20
  %241 = zext i8 %240 to i32
  %242 = icmp sgt i32 %.2384510.us.us.us.us, %241
  br i1 %242, label %243, label %261

243:                                              ; preds = %.preheader456.us.us
  %244 = getelementptr inbounds i8, ptr %.0395509.us.us.us.us, i64 9
  %245 = load i8, ptr %244, align 1, !tbaa !48
  %246 = zext i8 %245 to i64
  %247 = getelementptr inbounds i8, ptr %235, i64 %246
  %248 = load i8, ptr %247, align 1, !tbaa !20
  %249 = zext i8 %248 to i32
  %250 = icmp ugt i32 %.2384510.us.us.us.us, %249
  br i1 %250, label %.preheader.us.us.us.us, label %261

.preheader.us.us.us.us:                           ; preds = %243
  %251 = and i32 %.2384510.us.us.us.us, 1
  %.not426.us.us.us.us = icmp eq i32 %251, 0
  %.440.us.us.us.us = select i1 %.not426.us.us.us.us, i8 %237, i8 %245
  %.441.us.us.us.us = select i1 %.not426.us.us.us.us, i8 %245, i8 %237
  %252 = add nsw i32 %.2384510.us.us.us.us, -1
  %253 = zext i8 %.441.us.us.us.us to i64
  %254 = getelementptr inbounds i8, ptr %235, i64 %253
  %255 = load i8, ptr %254, align 1, !tbaa !20
  %256 = zext i8 %255 to i64
  %257 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %256
  %258 = zext nneg i32 %252 to i64
  %259 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %258
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %257, ptr noundef nonnull align 1 dereferenceable(3) %259, i64 3, i1 false), !tbaa.struct !31
  %260 = zext i8 %.440.us.us.us.us to i64
  br label %264

261:                                              ; preds = %..loopexit_crit_edge.us.us.us.us, %243, %.preheader456.us.us
  %.3385.us.us.us.us = phi i32 [ %252, %..loopexit_crit_edge.us.us.us.us ], [ %.2384510.us.us.us.us, %243 ], [ %.2384510.us.us.us.us, %.preheader456.us.us ]
  %.not427.us.us.us.us = icmp sgt i32 %.3385.us.us.us.us, %3
  br i1 %.not427.us.us.us.us, label %262, label %.thread450

262:                                              ; preds = %261
  %263 = load ptr, ptr %.0395509.us.us.us.us, align 8, !tbaa !45
  %.not425.us.us.us.us = icmp eq ptr %263, null
  br i1 %.not425.us.us.us.us, label %.split.us.us.split.us.us.thread, label %.preheader456.us.us, !llvm.loop !51

264:                                              ; preds = %285, %.preheader.us.us.us.us
  %indvars.iv613 = phi i64 [ %indvars.iv.next614, %285 ], [ 0, %.preheader.us.us.us.us ]
  %265 = load ptr, ptr %189, align 8, !tbaa !19
  %266 = getelementptr inbounds i8, ptr %265, i64 %indvars.iv613
  %267 = load i8, ptr %266, align 1, !tbaa !20
  %268 = load ptr, ptr %168, align 8, !tbaa !41
  %269 = getelementptr inbounds i8, ptr %268, i64 %253
  %270 = load i8, ptr %269, align 1, !tbaa !20
  %271 = icmp eq i8 %267, %270
  br i1 %271, label %272, label %275

272:                                              ; preds = %264
  %273 = getelementptr inbounds i8, ptr %268, i64 %260
  %274 = load i8, ptr %273, align 1, !tbaa !20
  store i8 %274, ptr %266, align 1, !tbaa !20
  %.pre = load ptr, ptr %189, align 8, !tbaa !19
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.pre, i64 %indvars.iv613
  %.pre647 = load i8, ptr %.phi.trans.insert, align 1, !tbaa !20
  br label %275

275:                                              ; preds = %272, %264
  %276 = phi i8 [ %.pre647, %272 ], [ %267, %264 ]
  %277 = phi ptr [ %.pre, %272 ], [ %265, %264 ]
  %278 = zext i8 %276 to i32
  %279 = icmp eq i32 %252, %278
  br i1 %279, label %280, label %285

280:                                              ; preds = %275
  %281 = getelementptr inbounds i8, ptr %277, i64 %indvars.iv613
  %282 = load ptr, ptr %168, align 8, !tbaa !41
  %283 = getelementptr inbounds i8, ptr %282, i64 %253
  %284 = load i8, ptr %283, align 1, !tbaa !20
  store i8 %284, ptr %281, align 1, !tbaa !20
  br label %285

285:                                              ; preds = %280, %275
  %indvars.iv.next614 = add nuw nsw i64 %indvars.iv613, 1
  %exitcond617.not = icmp eq i64 %indvars.iv.next614, %36
  br i1 %exitcond617.not, label %..loopexit_crit_edge.us.us.us.us, label %264, !llvm.loop !52

..loopexit_crit_edge.us.us.us.us:                 ; preds = %285
  %286 = load ptr, ptr %168, align 8, !tbaa !41
  %287 = getelementptr inbounds i8, ptr %286, i64 %253
  %288 = load i8, ptr %287, align 1, !tbaa !20
  %289 = load ptr, ptr %170, align 8, !tbaa !42
  %290 = getelementptr inbounds i8, ptr %289, i64 %258
  %291 = load i8, ptr %290, align 1, !tbaa !20
  %292 = zext i8 %291 to i64
  %293 = getelementptr inbounds i8, ptr %286, i64 %292
  store i8 %288, ptr %293, align 1, !tbaa !20
  %294 = load ptr, ptr %170, align 8, !tbaa !42
  %295 = getelementptr inbounds i8, ptr %294, i64 %258
  %296 = load i8, ptr %295, align 1, !tbaa !20
  %297 = load ptr, ptr %168, align 8, !tbaa !41
  %298 = getelementptr inbounds i8, ptr %297, i64 %253
  %299 = load i8, ptr %298, align 1, !tbaa !20
  %300 = zext i8 %299 to i64
  %301 = getelementptr inbounds i8, ptr %294, i64 %300
  store i8 %296, ptr %301, align 1, !tbaa !20
  %302 = trunc i32 %252 to i8
  %303 = load ptr, ptr %168, align 8, !tbaa !41
  %304 = getelementptr inbounds i8, ptr %303, i64 %253
  store i8 %302, ptr %304, align 1, !tbaa !20
  %305 = load ptr, ptr %170, align 8, !tbaa !42
  %306 = getelementptr inbounds i8, ptr %305, i64 %258
  store i8 %.441.us.us.us.us, ptr %306, align 1, !tbaa !20
  br label %261

.preheader457.split.us.split:                     ; preds = %.preheader457.split.us, %.split.us.us.split.thread
  %indvars.iv608 = phi i64 [ %indvars.iv.next609, %.split.us.us.split.thread ], [ 0, %.preheader457.split.us ]
  %.1383511.us = phi i32 [ %.5.us, %.split.us.us.split.thread ], [ %.0382519, %.preheader457.split.us ]
  %307 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv608
  %308 = load ptr, ptr %307, align 8, !tbaa !44
  %.not424.us = icmp eq ptr %308, null
  br i1 %.not424.us, label %.split.us.us.split.thread, label %.preheader456.us

.split.us.us.split.thread:                        ; preds = %356, %.preheader457.split.us.split
  %.5.us = phi i32 [ %.1383511.us, %.preheader457.split.us.split ], [ %.3385.us.us, %356 ]
  %indvars.iv.next609 = add nuw nsw i64 %indvars.iv608, 1
  %exitcond612.not = icmp eq i64 %indvars.iv.next609, %indvars.iv627
  br i1 %exitcond612.not, label %.thread450, label %.preheader457.split.us.split, !llvm.loop !50

.preheader456.us:                                 ; preds = %.preheader457.split.us.split, %356
  %.2384510.us.us = phi i32 [ %.3385.us.us, %356 ], [ %.1383511.us, %.preheader457.split.us.split ]
  %.0395509.us.us = phi ptr [ %357, %356 ], [ %308, %.preheader457.split.us.split ]
  %309 = load ptr, ptr %168, align 8, !tbaa !41
  %310 = getelementptr inbounds i8, ptr %.0395509.us.us, i64 8
  %311 = load i8, ptr %310, align 8, !tbaa !47
  %312 = zext i8 %311 to i64
  %313 = getelementptr inbounds i8, ptr %309, i64 %312
  %314 = load i8, ptr %313, align 1, !tbaa !20
  %315 = zext i8 %314 to i32
  %316 = icmp sgt i32 %.2384510.us.us, %315
  br i1 %316, label %317, label %355

317:                                              ; preds = %.preheader456.us
  %318 = getelementptr inbounds i8, ptr %.0395509.us.us, i64 9
  %319 = load i8, ptr %318, align 1, !tbaa !48
  %320 = zext i8 %319 to i64
  %321 = getelementptr inbounds i8, ptr %309, i64 %320
  %322 = load i8, ptr %321, align 1, !tbaa !20
  %323 = zext i8 %322 to i32
  %324 = icmp ugt i32 %.2384510.us.us, %323
  br i1 %324, label %.preheader.us.us, label %355

.preheader.us.us:                                 ; preds = %317
  %325 = and i32 %.2384510.us.us, 1
  %.not426.us.us = icmp eq i32 %325, 0
  %.441.us.us = select i1 %.not426.us.us, i8 %319, i8 %311
  %326 = add nsw i32 %.2384510.us.us, -1
  %327 = zext i8 %.441.us.us to i64
  %328 = getelementptr inbounds i8, ptr %309, i64 %327
  %329 = load i8, ptr %328, align 1, !tbaa !20
  %330 = zext i8 %329 to i64
  %331 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %330
  %332 = zext nneg i32 %326 to i64
  %333 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %332
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %331, ptr noundef nonnull align 1 dereferenceable(3) %333, i64 3, i1 false), !tbaa.struct !31
  %334 = load ptr, ptr %168, align 8, !tbaa !41
  %335 = getelementptr inbounds i8, ptr %334, i64 %327
  %336 = load i8, ptr %335, align 1, !tbaa !20
  %337 = load ptr, ptr %170, align 8, !tbaa !42
  %338 = getelementptr inbounds i8, ptr %337, i64 %332
  %339 = load i8, ptr %338, align 1, !tbaa !20
  %340 = zext i8 %339 to i64
  %341 = getelementptr inbounds i8, ptr %334, i64 %340
  store i8 %336, ptr %341, align 1, !tbaa !20
  %342 = load ptr, ptr %170, align 8, !tbaa !42
  %343 = getelementptr inbounds i8, ptr %342, i64 %332
  %344 = load i8, ptr %343, align 1, !tbaa !20
  %345 = load ptr, ptr %168, align 8, !tbaa !41
  %346 = getelementptr inbounds i8, ptr %345, i64 %327
  %347 = load i8, ptr %346, align 1, !tbaa !20
  %348 = zext i8 %347 to i64
  %349 = getelementptr inbounds i8, ptr %342, i64 %348
  store i8 %344, ptr %349, align 1, !tbaa !20
  %350 = trunc i32 %326 to i8
  %351 = load ptr, ptr %168, align 8, !tbaa !41
  %352 = getelementptr inbounds i8, ptr %351, i64 %327
  store i8 %350, ptr %352, align 1, !tbaa !20
  %353 = load ptr, ptr %170, align 8, !tbaa !42
  %354 = getelementptr inbounds i8, ptr %353, i64 %332
  store i8 %.441.us.us, ptr %354, align 1, !tbaa !20
  br label %355

355:                                              ; preds = %.preheader.us.us, %317, %.preheader456.us
  %.3385.us.us = phi i32 [ %326, %.preheader.us.us ], [ %.2384510.us.us, %317 ], [ %.2384510.us.us, %.preheader456.us ]
  %.not427.us.us = icmp sgt i32 %.3385.us.us, %3
  br i1 %.not427.us.us, label %356, label %.thread450

356:                                              ; preds = %355
  %357 = load ptr, ptr %.0395509.us.us, align 8, !tbaa !45
  %.not425.us.us = icmp eq ptr %357, null
  br i1 %.not425.us.us, label %.split.us.us.split.thread, label %.preheader456.us, !llvm.loop !51

.preheader457.split:                              ; preds = %.preheader457, %.split.thread
  %indvars.iv601 = phi i64 [ %indvars.iv.next602, %.split.thread ], [ 0, %.preheader457 ]
  %.1383511 = phi i32 [ %.5, %.split.thread ], [ %.0382519, %.preheader457 ]
  %358 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv601
  %359 = load ptr, ptr %358, align 8, !tbaa !44
  %.not424 = icmp eq ptr %359, null
  br i1 %.not424, label %.split.thread, label %.preheader456

.preheader456:                                    ; preds = %.preheader457.split, %408
  %.2384510 = phi i32 [ %.3385, %408 ], [ %.1383511, %.preheader457.split ]
  %.0395509 = phi ptr [ %409, %408 ], [ %359, %.preheader457.split ]
  %360 = load ptr, ptr %168, align 8, !tbaa !41
  %361 = getelementptr inbounds i8, ptr %.0395509, i64 8
  %362 = load i8, ptr %361, align 8, !tbaa !47
  %363 = zext i8 %362 to i64
  %364 = getelementptr inbounds i8, ptr %360, i64 %363
  %365 = load i8, ptr %364, align 1, !tbaa !20
  %366 = zext i8 %365 to i32
  %367 = icmp sgt i32 %.2384510, %366
  br i1 %367, label %368, label %407

368:                                              ; preds = %.preheader456
  %369 = getelementptr inbounds i8, ptr %.0395509, i64 9
  %370 = load i8, ptr %369, align 1, !tbaa !48
  %371 = zext i8 %370 to i64
  %372 = getelementptr inbounds i8, ptr %360, i64 %371
  %373 = load i8, ptr %372, align 1, !tbaa !20
  %374 = zext i8 %373 to i32
  %375 = icmp ugt i32 %.2384510, %374
  br i1 %375, label %376, label %407

376:                                              ; preds = %368
  %377 = and i32 %.2384510, 1
  %.not426 = icmp eq i32 %377, 0
  %.441 = select i1 %.not426, i8 %370, i8 %362
  %378 = add nsw i32 %.2384510, -1
  %379 = zext i8 %.441 to i64
  %380 = getelementptr inbounds i8, ptr %360, i64 %379
  %381 = load i8, ptr %380, align 1, !tbaa !20
  %382 = zext i8 %381 to i64
  %383 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %382
  %384 = zext nneg i32 %378 to i64
  %385 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %384
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %383, ptr noundef nonnull align 1 dereferenceable(3) %385, i64 3, i1 false), !tbaa.struct !31
  %386 = load ptr, ptr %168, align 8, !tbaa !41
  %387 = getelementptr inbounds i8, ptr %386, i64 %379
  %388 = load i8, ptr %387, align 1, !tbaa !20
  %389 = load ptr, ptr %170, align 8, !tbaa !42
  %390 = getelementptr inbounds i8, ptr %389, i64 %384
  %391 = load i8, ptr %390, align 1, !tbaa !20
  %392 = zext i8 %391 to i64
  %393 = getelementptr inbounds i8, ptr %386, i64 %392
  store i8 %388, ptr %393, align 1, !tbaa !20
  %394 = load ptr, ptr %170, align 8, !tbaa !42
  %395 = getelementptr inbounds i8, ptr %394, i64 %384
  %396 = load i8, ptr %395, align 1, !tbaa !20
  %397 = load ptr, ptr %168, align 8, !tbaa !41
  %398 = getelementptr inbounds i8, ptr %397, i64 %379
  %399 = load i8, ptr %398, align 1, !tbaa !20
  %400 = zext i8 %399 to i64
  %401 = getelementptr inbounds i8, ptr %394, i64 %400
  store i8 %396, ptr %401, align 1, !tbaa !20
  %402 = trunc i32 %378 to i8
  %403 = load ptr, ptr %168, align 8, !tbaa !41
  %404 = getelementptr inbounds i8, ptr %403, i64 %379
  store i8 %402, ptr %404, align 1, !tbaa !20
  %405 = load ptr, ptr %170, align 8, !tbaa !42
  %406 = getelementptr inbounds i8, ptr %405, i64 %384
  store i8 %.441, ptr %406, align 1, !tbaa !20
  br label %407

407:                                              ; preds = %376, %368, %.preheader456
  %.3385 = phi i32 [ %378, %376 ], [ %.2384510, %368 ], [ %.2384510, %.preheader456 ]
  %.not427 = icmp sgt i32 %.3385, %3
  br i1 %.not427, label %408, label %.thread450

408:                                              ; preds = %407
  %409 = load ptr, ptr %.0395509, align 8, !tbaa !45
  %.not425 = icmp eq ptr %409, null
  br i1 %.not425, label %.split.thread, label %.preheader456, !llvm.loop !51

.split.thread:                                    ; preds = %408, %.preheader457.split
  %.5 = phi i32 [ %.1383511, %.preheader457.split ], [ %.3385, %408 ]
  %indvars.iv.next602 = add nuw nsw i64 %indvars.iv601, 1
  %exitcond607.not = icmp eq i64 %indvars.iv.next602, %indvars.iv627
  br i1 %exitcond607.not, label %.thread450, label %.preheader457.split, !llvm.loop !50

.thread450:                                       ; preds = %._crit_edge505, %.split.thread, %.split.us.us.split.thread, %.split.us.us.split.us.us.thread, %220, %407, %355, %261, %232
  %.6393453 = phi ptr [ null, %232 ], [ %.1388, %261 ], [ %.1388, %355 ], [ %.1388, %407 ], [ null, %220 ], [ %.1388, %.split.us.us.split.us.us.thread ], [ %.1388, %.split.us.us.split.thread ], [ %.1388, %.split.thread ], [ null, %._crit_edge505 ]
  %.6 = phi i32 [ %.0382519, %232 ], [ %.3385.us.us.us.us, %261 ], [ %.3385.us.us, %355 ], [ %.3385, %407 ], [ %.0382519, %220 ], [ %.5.us.us, %.split.us.us.split.us.us.thread ], [ %.5.us, %.split.us.us.split.thread ], [ %.5, %.split.thread ], [ %.0382519, %._crit_edge505 ]
  br label %410

410:                                              ; preds = %.thread450, %.loopexit455
  %indvars.iv623 = phi i64 [ 0, %.thread450 ], [ %indvars.iv.next624, %.loopexit455 ]
  %.7516 = phi ptr [ %.6393453, %.thread450 ], [ %.9, %.loopexit455 ]
  %411 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv623
  %412 = load ptr, ptr %411, align 8, !tbaa !44
  %.not429 = icmp eq ptr %412, null
  br i1 %.not429, label %.loopexit455, label %.preheader454

.preheader454:                                    ; preds = %410, %.preheader454
  %.0399515 = phi ptr [ %413, %.preheader454 ], [ %412, %410 ]
  %413 = load ptr, ptr %.0399515, align 8, !tbaa !45
  tail call void @png_free(ptr noundef %0, ptr noundef nonnull %.0399515) #7
  %.not430 = icmp eq ptr %413, null
  br i1 %.not430, label %.loopexit455, label %.preheader454, !llvm.loop !53

.loopexit455:                                     ; preds = %.preheader454, %410
  %.9 = phi ptr [ %.7516, %410 ], [ null, %.preheader454 ]
  store ptr null, ptr %411, align 8, !tbaa !44
  %indvars.iv.next624 = add nuw nsw i64 %indvars.iv623, 1
  %exitcond626.not = icmp eq i64 %indvars.iv.next624, 769
  br i1 %exitcond626.not, label %414, label %410, !llvm.loop !54

414:                                              ; preds = %.loopexit455
  %415 = add nuw nsw i32 %.0378520, 96
  %416 = icmp sgt i32 %.6, %3
  %indvars.iv.next628 = add nuw i64 %indvars.iv627, 96
  br i1 %416, label %.preheader459, label %._crit_edge524, !llvm.loop !55

._crit_edge524:                                   ; preds = %414
  tail call void @png_free(ptr noundef %0, ptr noundef nonnull %188) #7
  %417 = load ptr, ptr %170, align 8, !tbaa !42
  tail call void @png_free(ptr noundef %0, ptr noundef %417) #7
  %418 = load ptr, ptr %168, align 8, !tbaa !41
  tail call void @png_free(ptr noundef %0, ptr noundef %418) #7
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %168, i8 0, i64 16, i1 false)
  br label %419

419:                                              ; preds = %.loopexit462, %._crit_edge524, %.loopexit469
  %.0 = phi i32 [ %2, %.loopexit469 ], [ %3, %._crit_edge524 ], [ %3, %.loopexit462 ]
  %420 = getelementptr inbounds i8, ptr %0, i64 568
  %421 = load ptr, ptr %420, align 8, !tbaa !56
  %422 = icmp eq ptr %421, null
  br i1 %422, label %423, label %424

423:                                              ; preds = %419
  store ptr %1, ptr %420, align 8, !tbaa !56
  br label %424

424:                                              ; preds = %423, %419
  %425 = trunc i32 %.0 to i16
  %426 = getelementptr inbounds i8, ptr %0, i64 576
  store i16 %425, ptr %426, align 8, !tbaa !57
  br i1 %.not, label %487, label %427

427:                                              ; preds = %424
  %428 = tail call ptr @png_calloc(ptr noundef nonnull %0, i64 noundef 32768) #7
  %429 = getelementptr inbounds i8, ptr %0, i64 904
  store ptr %428, ptr %429, align 8, !tbaa !58
  %430 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 32768) #7
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32768) %430, i8 -1, i64 32768, i1 false)
  %431 = icmp sgt i32 %.0, 0
  br i1 %431, label %.lr.ph530.preheader, label %._crit_edge531

.lr.ph530.preheader:                              ; preds = %427
  %wide.trip.count645 = zext nneg i32 %.0 to i64
  br label %.lr.ph530

.lr.ph530:                                        ; preds = %.lr.ph530.preheader, %486
  %indvars.iv642 = phi i64 [ 0, %.lr.ph530.preheader ], [ %indvars.iv.next643, %486 ]
  %432 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv642
  %433 = load i8, ptr %432, align 1, !tbaa !35
  %434 = lshr i8 %433, 3
  %435 = zext nneg i8 %434 to i32
  %436 = getelementptr inbounds i8, ptr %432, i64 1
  %437 = load i8, ptr %436, align 1, !tbaa !37
  %438 = lshr i8 %437, 3
  %439 = zext nneg i8 %438 to i32
  %440 = getelementptr inbounds i8, ptr %432, i64 2
  %441 = load i8, ptr %440, align 1, !tbaa !38
  %442 = lshr i8 %441, 3
  %443 = zext nneg i8 %442 to i32
  %444 = trunc i64 %indvars.iv642 to i8
  %445 = zext nneg i8 %442 to i64
  %446 = zext nneg i8 %438 to i64
  %447 = zext nneg i8 %434 to i64
  br label %448

448:                                              ; preds = %.lr.ph530, %485
  %indvars.iv638 = phi i64 [ 0, %.lr.ph530 ], [ %indvars.iv.next639, %485 ]
  %indvars640 = trunc i64 %indvars.iv638 to i32
  %449 = icmp ugt i64 %indvars.iv638, %447
  %450 = sub nsw i32 %indvars640, %435
  %451 = sub nsw i64 %447, %indvars.iv638
  %452 = trunc nsw i64 %451 to i32
  %453 = select i1 %449, i32 %450, i32 %452
  %454 = shl nuw nsw i64 %indvars.iv638, 10
  br label %455

455:                                              ; preds = %448, %484
  %indvars.iv634 = phi i64 [ 0, %448 ], [ %indvars.iv.next635, %484 ]
  %indvars636 = trunc i64 %indvars.iv634 to i32
  %456 = icmp ugt i64 %indvars.iv634, %446
  %457 = sub nsw i32 %indvars636, %439
  %458 = sub nsw i64 %446, %indvars.iv634
  %459 = trunc nsw i64 %458 to i32
  %460 = select i1 %456, i32 %457, i32 %459
  %461 = add nsw i32 %460, %453
  %462 = tail call i32 @llvm.smax.i32(i32 %453, i32 %460)
  %463 = shl nuw nsw i64 %indvars.iv634, 5
  %464 = add nuw nsw i64 %463, %454
  br label %465

465:                                              ; preds = %455, %483
  %indvars.iv630 = phi i64 [ 0, %455 ], [ %indvars.iv.next631, %483 ]
  %indvars632 = trunc i64 %indvars.iv630 to i32
  %466 = add nuw nsw i64 %indvars.iv630, %464
  %467 = icmp ugt i64 %indvars.iv630, %445
  %468 = sub nsw i32 %indvars632, %443
  %469 = sub nsw i64 %445, %indvars.iv630
  %470 = trunc nsw i64 %469 to i32
  %471 = select i1 %467, i32 %468, i32 %470
  %472 = tail call i32 @llvm.smax.i32(i32 %462, i32 %471)
  %473 = add i32 %461, %471
  %474 = add i32 %473, %472
  %475 = getelementptr inbounds i8, ptr %430, i64 %466
  %476 = load i8, ptr %475, align 1, !tbaa !20
  %477 = zext i8 %476 to i32
  %478 = icmp slt i32 %474, %477
  br i1 %478, label %479, label %483

479:                                              ; preds = %465
  %480 = trunc i32 %474 to i8
  store i8 %480, ptr %475, align 1, !tbaa !20
  %481 = load ptr, ptr %429, align 8, !tbaa !58
  %482 = getelementptr inbounds i8, ptr %481, i64 %466
  store i8 %444, ptr %482, align 1, !tbaa !20
  br label %483

483:                                              ; preds = %479, %465
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %exitcond633.not = icmp eq i64 %indvars.iv.next631, 32
  br i1 %exitcond633.not, label %484, label %465, !llvm.loop !59

484:                                              ; preds = %483
  %indvars.iv.next635 = add nuw nsw i64 %indvars.iv634, 1
  %exitcond637.not = icmp eq i64 %indvars.iv.next635, 32
  br i1 %exitcond637.not, label %485, label %455, !llvm.loop !60

485:                                              ; preds = %484
  %indvars.iv.next639 = add nuw nsw i64 %indvars.iv638, 1
  %exitcond641.not = icmp eq i64 %indvars.iv.next639, 32
  br i1 %exitcond641.not, label %486, label %448, !llvm.loop !61

486:                                              ; preds = %485
  %indvars.iv.next643 = add nuw nsw i64 %indvars.iv642, 1
  %exitcond646.not = icmp eq i64 %indvars.iv.next643, %wide.trip.count645
  br i1 %exitcond646.not, label %._crit_edge531, label %.lr.ph530, !llvm.loop !62

._crit_edge531:                                   ; preds = %486, %427
  tail call void @png_free(ptr noundef %0, ptr noundef nonnull %430) #7
  br label %487

487:                                              ; preds = %6, %._crit_edge531, %424
  ret void
}

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

declare ptr @png_malloc(ptr noundef, i64 noundef) local_unnamed_addr #3

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

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

declare void @png_free(ptr noundef, ptr noundef) local_unnamed_addr #3

declare ptr @png_calloc(ptr noundef, i64 noundef) local_unnamed_addr #3

declare ptr @png_malloc_warn(ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #6

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


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