; LLVM IR from EyalAr/lwip :: src/lib/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, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i32, i32, i32, i32, %struct.z_stream_s, i32, i32, i32, i32, i64, i32, i32, i32, ptr, ptr, i64, i32, i32, ptr, i16, i32, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i8, i32, %struct.png_color_16_struct, %struct.png_color_16_struct, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_color_8_struct, %struct.png_color_8_struct, ptr, %struct.png_color_16_struct, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i64, i64, i64, i32, i32, ptr, ptr, i8, [29 x i8], i32, ptr, ptr, i32, i32, ptr, i8, i8, i16, i16, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i32, i32, i32, i64, %struct.png_unknown_chunk_t, i64, ptr, i64, i32, i32, ptr, [4 x ptr], %struct.png_colorspace }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.png_color_8_struct = type { i8, i8, i8, i8, i8 }
%struct.png_color_16_struct = type { i8, i16, i16, i16, i16 }
%struct.png_unknown_chunk_t = type { [5 x i8], ptr, i64, i8 }
%struct.png_colorspace = type { i32, %struct.png_xy, %struct.png_XYZ, i16, i16 }
%struct.png_xy = type { i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.png_XYZ = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.png_dsort_struct = type { ptr, i8, i8 }

; Function Attrs: nounwind uwtable
declare hidden i32 @png_rtran_ok(ptr noalias noundef, i32 noundef) #0

; 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) #1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @png_set_quantize(ptr noalias noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) #0 {
  %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 = call i32 @png_rtran_ok(ptr noundef %62, i32 noundef 0)
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %65, label %66

65:                                               ; preds = %6
  br label %1143

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

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

83:                                               ; preds = %96, %73
  %84 = load i32, ptr %13, align 4, !tbaa !9
  %85 = load i32, ptr %9, align 4, !tbaa !9
  %86 = icmp slt i32 %84, %85
  br i1 %86, label %87, label %99

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

96:                                               ; preds = %87
  %97 = load i32, ptr %13, align 4, !tbaa !9
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %13, align 4, !tbaa !9
  br label %83, !llvm.loop !24

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

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

104:                                              ; preds = %100
  %105 = load ptr, ptr %11, align 8, !tbaa !5
  %106 = icmp ne ptr %105, null
  br i1 %106, label %107, label %490

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

117:                                              ; preds = %130, %107
  %118 = load i32, ptr %14, align 4, !tbaa !9
  %119 = load i32, ptr %9, align 4, !tbaa !9
  %120 = icmp slt i32 %118, %119
  br i1 %120, label %121, label %133

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

130:                                              ; preds = %121
  %131 = load i32, ptr %14, align 4, !tbaa !9
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %14, align 4, !tbaa !9
  br label %117, !llvm.loop !27

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

136:                                              ; preds = %214, %133
  %137 = load i32, ptr %14, align 4, !tbaa !9
  %138 = load i32, ptr %10, align 4, !tbaa !9
  %139 = icmp sge i32 %137, %138
  br i1 %139, label %140, label %217

140:                                              ; preds = %136
  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 %141

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

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

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

202:                                              ; preds = %172, %145
  br label %203

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

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

209:                                              ; preds = %206
  store i32 8, ptr %18, align 4
  br label %211

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

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

213:                                              ; preds = %211
  br label %214

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

217:                                              ; preds = %211, %136
  %218 = load i32, ptr %12, align 4, !tbaa !9
  %219 = icmp ne i32 %218, 0
  br i1 %219, label %220, label %266

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

222:                                              ; preds = %262, %220
  %223 = load i32, ptr %14, align 4, !tbaa !9
  %224 = load i32, ptr %10, align 4, !tbaa !9
  %225 = icmp slt i32 %223, %224
  br i1 %225, label %226, label %265

226:                                              ; preds = %222
  %227 = load ptr, ptr %7, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.png_struct_def, ptr %227, i32 0, i32 102
  %229 = load ptr, ptr %228, align 8, !tbaa !26
  %230 = load i32, ptr %14, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i8, ptr %229, i64 %231
  %233 = load i8, ptr %232, align 1, !tbaa !23
  %234 = zext i8 %233 to i32
  %235 = load i32, ptr %10, align 4, !tbaa !9
  %236 = icmp sge i32 %234, %235
  br i1 %236, label %237, label %261

237:                                              ; preds = %226
  br label %238

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

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

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

261:                                              ; preds = %252, %226
  br label %262

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

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

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

268:                                              ; preds = %332, %266
  %269 = load i32, ptr %14, align 4, !tbaa !9
  %270 = load i32, ptr %10, align 4, !tbaa !9
  %271 = icmp slt i32 %269, %270
  br i1 %271, label %272, label %335

272:                                              ; preds = %268
  %273 = load ptr, ptr %7, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.png_struct_def, ptr %273, i32 0, i32 102
  %275 = load ptr, ptr %274, align 8, !tbaa !26
  %276 = load i32, ptr %14, align 4, !tbaa !9
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds i8, ptr %275, i64 %277
  %279 = load i8, ptr %278, align 1, !tbaa !23
  %280 = zext i8 %279 to i32
  %281 = load i32, ptr %10, align 4, !tbaa !9
  %282 = icmp sge i32 %280, %281
  br i1 %282, label %283, label %331

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

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

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

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

331:                                              ; preds = %298, %272
  br label %332

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

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

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

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

351:                                              ; preds = %340
  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
  %352 = load ptr, ptr %7, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.png_struct_def, ptr %352, i32 0, i32 83
  %354 = load ptr, ptr %353, align 8, !tbaa !22
  %355 = load i32, ptr %14, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i8, ptr %354, i64 %356
  %358 = load i8, ptr %357, align 1, !tbaa !23
  %359 = zext i8 %358 to i32
  store i32 %359, ptr %25, align 4, !tbaa !9
  %360 = load ptr, ptr %8, align 8, !tbaa !5
  %361 = load i32, ptr %25, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds %struct.png_color_struct, ptr %360, i64 %362
  %364 = getelementptr inbounds %struct.png_color_struct, ptr %363, i32 0, i32 0
  %365 = load i8, ptr %364, align 1, !tbaa !36
  %366 = zext i8 %365 to i32
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.png_color_struct, ptr %367, i64 0
  %369 = getelementptr inbounds %struct.png_color_struct, ptr %368, i32 0, i32 0
  %370 = load i8, ptr %369, align 1, !tbaa !36
  %371 = zext i8 %370 to i32
  %372 = sub nsw i32 %366, %371
  %373 = call i32 @llvm.abs.i32(i32 %372, i1 true)
  %374 = load ptr, ptr %8, align 8, !tbaa !5
  %375 = load i32, ptr %25, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds %struct.png_color_struct, ptr %374, i64 %376
  %378 = getelementptr inbounds %struct.png_color_struct, ptr %377, i32 0, i32 1
  %379 = load i8, ptr %378, align 1, !tbaa !38
  %380 = zext i8 %379 to i32
  %381 = load ptr, ptr %8, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.png_color_struct, ptr %381, i64 0
  %383 = getelementptr inbounds %struct.png_color_struct, ptr %382, i32 0, i32 1
  %384 = load i8, ptr %383, align 1, !tbaa !38
  %385 = zext i8 %384 to i32
  %386 = sub nsw i32 %380, %385
  %387 = call i32 @llvm.abs.i32(i32 %386, i1 true)
  %388 = add nsw i32 %373, %387
  %389 = load ptr, ptr %8, align 8, !tbaa !5
  %390 = load i32, ptr %25, align 4, !tbaa !9
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds %struct.png_color_struct, ptr %389, i64 %391
  %393 = getelementptr inbounds %struct.png_color_struct, ptr %392, i32 0, i32 2
  %394 = load i8, ptr %393, align 1, !tbaa !39
  %395 = zext i8 %394 to i32
  %396 = load ptr, ptr %8, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.png_color_struct, ptr %396, i64 0
  %398 = getelementptr inbounds %struct.png_color_struct, ptr %397, i32 0, i32 2
  %399 = load i8, ptr %398, align 1, !tbaa !39
  %400 = zext i8 %399 to i32
  %401 = sub nsw i32 %395, %400
  %402 = call i32 @llvm.abs.i32(i32 %401, i1 true)
  %403 = add nsw i32 %388, %402
  store i32 %403, 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 %404

404:                                              ; preds = %466, %351
  %405 = load i32, ptr %23, align 4, !tbaa !9
  %406 = load i32, ptr %10, align 4, !tbaa !9
  %407 = icmp slt i32 %405, %406
  br i1 %407, label %408, label %469

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

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

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

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

469:                                              ; preds = %404
  %470 = load i32, ptr %24, align 4, !tbaa !9
  %471 = trunc i32 %470 to i8
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.png_struct_def, ptr %472, i32 0, i32 83
  %474 = load ptr, ptr %473, align 8, !tbaa !22
  %475 = load i32, ptr %14, align 4, !tbaa !9
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds i8, ptr %474, i64 %476
  store i8 %471, ptr %477, align 1, !tbaa !23
  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 %478

478:                                              ; preds = %469, %340
  br label %479

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

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

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

490:                                              ; preds = %104
  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
  %491 = load ptr, ptr %7, align 8, !tbaa !5
  %492 = load i32, ptr %9, align 4, !tbaa !9
  %493 = sext i32 %492 to i64
  %494 = mul i64 %493, 1
  %495 = trunc i64 %494 to i32
  %496 = zext i32 %495 to i64
  %497 = call noalias ptr @png_malloc(ptr noundef %491, i64 noundef %496)
  %498 = load ptr, ptr %7, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.png_struct_def, ptr %498, i32 0, i32 103
  store ptr %497, ptr %499, align 8, !tbaa !42
  %500 = load ptr, ptr %7, align 8, !tbaa !5
  %501 = load i32, ptr %9, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = mul i64 %502, 1
  %504 = trunc i64 %503 to i32
  %505 = zext i32 %504 to i64
  %506 = call noalias ptr @png_malloc(ptr noundef %500, i64 noundef %505)
  %507 = load ptr, ptr %7, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.png_struct_def, ptr %507, i32 0, i32 104
  store ptr %506, ptr %508, align 8, !tbaa !43
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %509

509:                                              ; preds = %530, %490
  %510 = load i32, ptr %27, align 4, !tbaa !9
  %511 = load i32, ptr %9, align 4, !tbaa !9
  %512 = icmp slt i32 %510, %511
  br i1 %512, label %513, label %533

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

530:                                              ; preds = %513
  %531 = load i32, ptr %27, align 4, !tbaa !9
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %27, align 4, !tbaa !9
  br label %509, !llvm.loop !44

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

537:                                              ; preds = %926, %533
  %538 = load i32, ptr %29, align 4, !tbaa !9
  %539 = load i32, ptr %10, align 4, !tbaa !9
  %540 = icmp sgt i32 %538, %539
  br i1 %540, label %541, label %929

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

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

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

550:                                              ; preds = %639, %547
  %551 = load i32, ptr %32, align 4, !tbaa !9
  %552 = load i32, ptr %29, align 4, !tbaa !9
  %553 = icmp slt i32 %551, %552
  br i1 %553, label %554, label %642

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

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

613:                                              ; preds = %608
  store i32 38, ptr %18, align 4
  br label %636

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

635:                                              ; preds = %614, %554
  store i32 0, ptr %18, align 4
  br label %636

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

638:                                              ; preds = %636
  br label %639

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

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

645:                                              ; preds = %642
  store i32 35, ptr %18, align 4
  br label %647

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

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

649:                                              ; preds = %647
  br label %650

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

653:                                              ; preds = %647, %542
  %654 = load ptr, ptr %30, align 8, !tbaa !5
  %655 = icmp ne ptr %654, null
  br i1 %655, label %656, label %890

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

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

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

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

674:                                              ; preds = %872, %668
  %675 = load ptr, ptr %34, align 8, !tbaa !5
  %676 = icmp ne ptr %675, null
  br i1 %676, label %677, label %876

677:                                              ; preds = %674
  %678 = load ptr, ptr %7, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.png_struct_def, ptr %678, i32 0, i32 103
  %680 = load ptr, ptr %679, align 8, !tbaa !42
  %681 = load ptr, ptr %34, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.png_dsort_struct, ptr %681, i32 0, i32 1
  %683 = load i8, ptr %682, align 8, !tbaa !47
  %684 = zext i8 %683 to i64
  %685 = getelementptr inbounds i8, ptr %680, i64 %684
  %686 = load i8, ptr %685, align 1, !tbaa !23
  %687 = zext i8 %686 to i32
  %688 = load i32, ptr %29, align 4, !tbaa !9
  %689 = icmp slt i32 %687, %688
  br i1 %689, label %690, label %866

690:                                              ; preds = %677
  %691 = load ptr, ptr %7, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.png_struct_def, ptr %691, i32 0, i32 103
  %693 = load ptr, ptr %692, align 8, !tbaa !42
  %694 = load ptr, ptr %34, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.png_dsort_struct, ptr %694, i32 0, i32 2
  %696 = load i8, ptr %695, align 1, !tbaa !48
  %697 = zext i8 %696 to i64
  %698 = getelementptr inbounds i8, ptr %693, i64 %697
  %699 = load i8, ptr %698, align 1, !tbaa !23
  %700 = zext i8 %699 to i32
  %701 = load i32, ptr %29, align 4, !tbaa !9
  %702 = icmp slt i32 %700, %701
  br i1 %702, label %703, label %866

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

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

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

725:                                              ; preds = %716, %707
  %726 = load i32, ptr %29, align 4, !tbaa !9
  %727 = add nsw i32 %726, -1
  store i32 %727, ptr %29, align 4, !tbaa !9
  %728 = load ptr, ptr %8, align 8, !tbaa !5
  %729 = load ptr, ptr %7, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.png_struct_def, ptr %729, i32 0, i32 103
  %731 = load ptr, ptr %730, align 8, !tbaa !42
  %732 = load i32, ptr %35, align 4, !tbaa !9
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i8, ptr %731, i64 %733
  %735 = load i8, ptr %734, align 1, !tbaa !23
  %736 = zext i8 %735 to i64
  %737 = getelementptr inbounds %struct.png_color_struct, ptr %728, i64 %736
  %738 = load ptr, ptr %8, align 8, !tbaa !5
  %739 = load i32, ptr %29, align 4, !tbaa !9
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds %struct.png_color_struct, ptr %738, i64 %740
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %737, ptr align 1 %741, i64 3, i1 false), !tbaa.struct !32
  %742 = load i32, ptr %12, align 4, !tbaa !9
  %743 = icmp eq i32 %742, 0
  br i1 %743, label %744, label %811

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

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

749:                                              ; preds = %745
  %750 = load ptr, ptr %7, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.png_struct_def, ptr %750, i32 0, i32 83
  %752 = load ptr, ptr %751, align 8, !tbaa !22
  %753 = load i32, ptr %37, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds i8, ptr %752, i64 %754
  %756 = load i8, ptr %755, align 1, !tbaa !23
  %757 = zext i8 %756 to i32
  %758 = load ptr, ptr %7, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.png_struct_def, ptr %758, i32 0, i32 103
  %760 = load ptr, ptr %759, align 8, !tbaa !42
  %761 = load i32, ptr %35, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds i8, ptr %760, i64 %762
  %764 = load i8, ptr %763, align 1, !tbaa !23
  %765 = zext i8 %764 to i32
  %766 = icmp eq i32 %757, %765
  br i1 %766, label %767, label %781

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

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

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

806:                                              ; preds = %792, %781
  br label %807

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

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

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

866:                                              ; preds = %811, %690, %677
  %867 = load i32, ptr %29, align 4, !tbaa !9
  %868 = load i32, ptr %10, align 4, !tbaa !9
  %869 = icmp sle i32 %867, %868
  br i1 %869, label %870, label %871

870:                                              ; preds = %866
  br label %876

871:                                              ; preds = %866
  br label %872

872:                                              ; preds = %871
  %873 = load ptr, ptr %34, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.png_dsort_struct, ptr %873, i32 0, i32 0
  %875 = load ptr, ptr %874, align 8, !tbaa !45
  store ptr %875, ptr %34, align 8, !tbaa !5
  br label %674, !llvm.loop !52

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

880:                                              ; preds = %876
  store i32 41, ptr %18, align 4
  br label %882

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

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

884:                                              ; preds = %882
  br label %885

885:                                              ; preds = %884, %661
  br label %886

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

889:                                              ; preds = %882, %657
  br label %890

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

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

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

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

907:                                              ; preds = %910, %901
  %908 = load ptr, ptr %38, align 8, !tbaa !5
  %909 = icmp ne ptr %908, null
  br i1 %909, label %910, label %917

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

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

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

923:                                              ; preds = %918
  %924 = load i32, ptr %27, align 4, !tbaa !9
  %925 = add nsw i32 %924, 1
  store i32 %925, ptr %27, align 4, !tbaa !9
  br label %891, !llvm.loop !55

926:                                              ; preds = %891
  %927 = load i32, ptr %28, align 4, !tbaa !9
  %928 = add nsw i32 %927, 96
  store i32 %928, ptr %28, align 4, !tbaa !9
  br label %537, !llvm.loop !56

929:                                              ; preds = %537
  %930 = load ptr, ptr %7, align 8, !tbaa !5
  %931 = load ptr, ptr %31, align 8, !tbaa !5
  call void @png_free(ptr noundef %930, ptr noundef %931)
  %932 = load ptr, ptr %7, align 8, !tbaa !5
  %933 = load ptr, ptr %7, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.png_struct_def, ptr %933, i32 0, i32 104
  %935 = load ptr, ptr %934, align 8, !tbaa !43
  call void @png_free(ptr noundef %932, ptr noundef %935)
  %936 = load ptr, ptr %7, align 8, !tbaa !5
  %937 = load ptr, ptr %7, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.png_struct_def, ptr %937, i32 0, i32 103
  %939 = load ptr, ptr %938, align 8, !tbaa !42
  call void @png_free(ptr noundef %936, ptr noundef %939)
  %940 = load ptr, ptr %7, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.png_struct_def, ptr %940, i32 0, i32 104
  store ptr null, ptr %941, align 8, !tbaa !43
  %942 = load ptr, ptr %7, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.png_struct_def, ptr %942, i32 0, i32 103
  store ptr null, ptr %943, align 8, !tbaa !42
  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 %944

944:                                              ; preds = %929, %483
  %945 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %945, ptr %9, align 4, !tbaa !9
  br label %946

946:                                              ; preds = %944, %100
  %947 = load ptr, ptr %7, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.png_struct_def, ptr %947, i32 0, i32 31
  %949 = load ptr, ptr %948, align 8, !tbaa !57
  %950 = icmp eq ptr %949, null
  br i1 %950, label %951, label %955

951:                                              ; preds = %946
  %952 = load ptr, ptr %8, align 8, !tbaa !5
  %953 = load ptr, ptr %7, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.png_struct_def, ptr %953, i32 0, i32 31
  store ptr %952, ptr %954, align 8, !tbaa !57
  br label %955

955:                                              ; preds = %951, %946
  %956 = load i32, ptr %9, align 4, !tbaa !9
  %957 = trunc i32 %956 to i16
  %958 = load ptr, ptr %7, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.png_struct_def, ptr %958, i32 0, i32 32
  store i16 %957, ptr %959, align 8, !tbaa !58
  %960 = load i32, ptr %12, align 4, !tbaa !9
  %961 = icmp ne i32 %960, 0
  br i1 %961, label %962, label %1143

962:                                              ; preds = %955
  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
  %963 = load i32, ptr %41, align 4, !tbaa !9
  %964 = zext i32 %963 to i64
  %965 = shl i64 1, %964
  store i64 %965, ptr %45, align 8, !tbaa !59
  %966 = load ptr, ptr %7, align 8, !tbaa !5
  %967 = load i64, ptr %45, align 8, !tbaa !59
  %968 = mul i64 %967, 1
  %969 = trunc i64 %968 to i32
  %970 = zext i32 %969 to i64
  %971 = call noalias ptr @png_calloc(ptr noundef %966, i64 noundef %970)
  %972 = load ptr, ptr %7, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.png_struct_def, ptr %972, i32 0, i32 82
  store ptr %971, ptr %973, align 8, !tbaa !60
  %974 = load ptr, ptr %7, align 8, !tbaa !5
  %975 = load i64, ptr %45, align 8, !tbaa !59
  %976 = mul i64 %975, 1
  %977 = trunc i64 %976 to i32
  %978 = zext i32 %977 to i64
  %979 = call noalias ptr @png_malloc(ptr noundef %974, i64 noundef %978)
  store ptr %979, ptr %40, align 8, !tbaa !5
  %980 = load ptr, ptr %40, align 8, !tbaa !5
  %981 = load i64, ptr %45, align 8, !tbaa !59
  %982 = mul i64 %981, 1
  call void @llvm.memset.p0.i64(ptr align 1 %980, i8 -1, i64 %982, i1 false)
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %983

983:                                              ; preds = %1137, %962
  %984 = load i32, ptr %39, align 4, !tbaa !9
  %985 = load i32, ptr %9, align 4, !tbaa !9
  %986 = icmp slt i32 %984, %985
  br i1 %986, label %987, label %1140

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

1012:                                             ; preds = %1133, %987
  %1013 = load i32, ptr %46, align 4, !tbaa !9
  %1014 = load i32, ptr %42, align 4, !tbaa !9
  %1015 = icmp slt i32 %1013, %1014
  br i1 %1015, label %1016, label %1136

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

1020:                                             ; preds = %1016
  %1021 = load i32, ptr %46, align 4, !tbaa !9
  %1022 = load i32, ptr %49, align 4, !tbaa !9
  %1023 = sub nsw i32 %1021, %1022
  br label %1028

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

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

1032:                                             ; preds = %1129, %1028
  %1033 = load i32, ptr %47, align 4, !tbaa !9
  %1034 = load i32, ptr %43, align 4, !tbaa !9
  %1035 = icmp slt i32 %1033, %1034
  br i1 %1035, label %1036, label %1132

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

1040:                                             ; preds = %1036
  %1041 = load i32, ptr %47, align 4, !tbaa !9
  %1042 = load i32, ptr %50, align 4, !tbaa !9
  %1043 = sub nsw i32 %1041, %1042
  br label %1048

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

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

1056:                                             ; preds = %1048
  %1057 = load i32, ptr %52, align 4, !tbaa !9
  br label %1060

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

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

1066:                                             ; preds = %1125, %1060
  %1067 = load i32, ptr %48, align 4, !tbaa !9
  %1068 = load i32, ptr %44, align 4, !tbaa !9
  %1069 = icmp slt i32 %1067, %1068
  br i1 %1069, label %1070, label %1128

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

1077:                                             ; preds = %1070
  %1078 = load i32, ptr %48, align 4, !tbaa !9
  %1079 = load i32, ptr %51, align 4, !tbaa !9
  %1080 = sub nsw i32 %1078, %1079
  br label %1085

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

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

1090:                                             ; preds = %1085
  %1091 = load i32, ptr %56, align 4, !tbaa !9
  br label %1094

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

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

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

1124:                                             ; preds = %1109, %1094
  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 %1125

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

1128:                                             ; preds = %1066
  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 %1129

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

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

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

1136:                                             ; preds = %1012
  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 %1137

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

1140:                                             ; preds = %983
  %1141 = load ptr, ptr %7, align 8, !tbaa !5
  %1142 = load ptr, ptr %40, align 8, !tbaa !5
  call void @png_free(ptr noundef %1141, ptr noundef %1142)
  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 %1143

1143:                                             ; preds = %1140, %955, %65
  ret void

1144:                                             ; preds = %882, %647, %636, %211
  unreachable
}

declare noalias ptr @png_malloc(ptr noundef, i64 noundef) #4

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

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

declare noalias ptr @png_calloc(ptr noundef, i64 noundef) #4

declare noalias ptr @png_malloc_warn(ptr noundef, i64 noundef) #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !13, 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, !10, i64 296, !14, i64 304, !10, i64 416, !10, i64 420, !10, i64 424, !10, i64 428, !13, i64 432, !10, i64 440, !10, i64 444, !10, i64 448, !6, i64 456, !6, i64 464, !13, i64 472, !10, i64 480, !10, i64 484, !6, i64 488, !15, i64 496, !10, i64 500, !15, i64 504, !7, i64 506, !7, i64 507, !7, i64 508, !7, i64 509, !7, i64 510, !7, i64 511, !7, i64 512, !7, i64 513, !7, i64 514, !7, i64 515, !7, i64 516, !7, i64 517, !7, i64 518, !15, i64 520, !7, i64 522, !10, i64 524, !16, i64 528, !16, i64 538, !10, i64 548, !10, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584, !6, i64 592, !6, i64 600, !17, i64 608, !17, i64 613, !6, i64 624, !16, i64 632, !6, i64 648, !6, i64 656, !6, i64 664, !6, i64 672, !6, i64 680, !6, i64 688, !6, i64 696, !6, i64 704, !6, i64 712, !10, i64 720, !10, i64 724, !13, i64 728, !13, i64 736, !13, i64 744, !13, i64 752, !10, i64 760, !10, i64 764, !6, i64 768, !6, i64 776, !7, i64 784, !7, i64 785, !10, i64 816, !6, i64 824, !6, i64 832, !10, i64 840, !10, i64 844, !6, i64 848, !7, i64 856, !7, i64 857, !15, i64 858, !15, i64 860, !10, i64 864, !7, i64 868, !6, i64 872, !6, i64 880, !6, i64 888, !6, i64 896, !6, i64 904, !6, i64 912, !6, i64 920, !7, i64 928, !10, i64 932, !10, i64 936, !10, i64 940, !13, i64 944, !18, i64 952, !13, i64 984, !6, i64 992, !13, i64 1000, !10, i64 1008, !10, i64 1012, !6, i64 1016, !7, i64 1024, !19, i64 1056}
!13 = !{!"long", !7, i64 0}
!14 = !{!"z_stream_s", !6, i64 0, !10, i64 8, !13, i64 16, !6, i64 24, !10, i64 32, !13, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !13, i64 96, !13, i64 104}
!15 = !{!"short", !7, i64 0}
!16 = !{!"png_color_16_struct", !7, i64 0, !15, i64 2, !15, i64 4, !15, i64 6, !15, 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, !6, i64 8, !13, i64 16, !7, i64 24}
!19 = !{!"png_colorspace", !10, i64 0, !20, i64 4, !21, i64 36, !15, i64 72, !15, i64 74}
!20 = !{!"png_xy", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!21 = !{!"png_XYZ", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32}
!22 = !{!12, !6, i64 776}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!12, !6, i64 904}
!27 = distinct !{!27, !25}
!28 = !{!15, !15, i64 0}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = !{i64 0, i64 1, !23, i64 1, i64 1, !23, i64 2, i64 1, !23}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = !{!37, !7, i64 0}
!37 = !{!"png_color_struct", !7, i64 0, !7, i64 1, !7, i64 2}
!38 = !{!37, !7, i64 1}
!39 = !{!37, !7, i64 2}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = !{!12, !6, i64 912}
!43 = !{!12, !6, i64 920}
!44 = distinct !{!44, !25}
!45 = !{!46, !6, i64 0}
!46 = !{!"png_dsort_struct", !6, i64 0, !7, i64 8, !7, i64 9}
!47 = !{!46, !7, i64 8}
!48 = !{!46, !7, i64 9}
!49 = distinct !{!49, !25}
!50 = distinct !{!50, !25}
!51 = distinct !{!51, !25}
!52 = distinct !{!52, !25}
!53 = distinct !{!53, !25}
!54 = distinct !{!54, !25}
!55 = distinct !{!55, !25}
!56 = distinct !{!56, !25}
!57 = !{!12, !6, i64 488}
!58 = !{!12, !15, i64 496}
!59 = !{!13, !13, i64 0}
!60 = !{!12, !6, i64 768}
!61 = distinct !{!61, !25}
!62 = distinct !{!62, !25}
!63 = distinct !{!63, !25}
!64 = distinct !{!64, !25}


; 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: nounwind uwtable
declare hidden i32 @png_rtran_ok(ptr noalias noundef, i32 noundef) local_unnamed_addr #0

; 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) #1

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #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: nounwind uwtable
define dso_local void @png_set_quantize(ptr noalias noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef readonly %4, i32 noundef %5) local_unnamed_addr #0 {
  %7 = alloca %struct.png_color_struct, align 1
  %8 = tail call i32 @png_rtran_ok(ptr noundef %0, i32 noundef 0)
  %9 = icmp eq i32 %8, 0
  br i1 %9, label %486, label %10

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

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

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

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %16, 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 ]
  %21 = trunc i64 %indvars.iv to i8
  %22 = load ptr, ptr %18, align 8, !tbaa !20
  %23 = getelementptr inbounds i8, ptr %22, i64 %indvars.iv
  store i8 %21, ptr %23, align 1, !tbaa !21
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %24 = trunc i64 %indvars.iv.next to i8
  %25 = load ptr, ptr %18, align 8, !tbaa !20
  %26 = getelementptr inbounds i8, ptr %25, i64 %indvars.iv.next
  store i8 %24, ptr %26, align 1, !tbaa !21
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %27 = trunc i64 %indvars.iv.next.1 to i8
  %28 = load ptr, ptr %18, align 8, !tbaa !20
  %29 = getelementptr inbounds i8, ptr %28, i64 %indvars.iv.next.1
  store i8 %27, ptr %29, align 1, !tbaa !21
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %30 = trunc i64 %indvars.iv.next.2 to i8
  %31 = load ptr, ptr %18, align 8, !tbaa !20
  %32 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv.next.2
  store i8 %30, ptr %32, align 1, !tbaa !21
  %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 !22

.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 ]
  %33 = trunc i64 %indvars.iv.epil to i8
  %34 = load ptr, ptr %18, align 8, !tbaa !20
  %35 = getelementptr inbounds i8, ptr %34, i64 %indvars.iv.epil
  store i8 %33, ptr %35, align 1, !tbaa !21
  %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 !24

.loopexit469:                                     ; preds = %.loopexit469.loopexit.unr-lcssa, %.lr.ph.epil, %15, %10
  %36 = icmp sgt i32 %2, %3
  br i1 %36, label %37, label %418

37:                                               ; preds = %.loopexit469
  %.not = icmp eq ptr %4, null
  %38 = zext i32 %2 to i64
  %39 = tail call noalias ptr @png_malloc(ptr noundef nonnull %0, i64 noundef %38) #7
  br i1 %.not, label %170, label %40

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

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

.lr.ph478.preheader.new:                          ; preds = %.lr.ph478.preheader
  %unroll_iter692 = and i64 %38, 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 ]
  %44 = trunc i64 %indvars.iv546.epil to i8
  %45 = load ptr, ptr %41, align 8, !tbaa !26
  %46 = getelementptr inbounds i8, ptr %45, i64 %indvars.iv546.epil
  store i8 %44, ptr %46, align 1, !tbaa !21
  %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 !27

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

.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 ]
  %47 = trunc i64 %indvars.iv546 to i8
  %48 = load ptr, ptr %41, align 8, !tbaa !26
  %49 = getelementptr inbounds i8, ptr %48, i64 %indvars.iv546
  store i8 %47, ptr %49, align 1, !tbaa !21
  %indvars.iv.next547 = or disjoint i64 %indvars.iv546, 1
  %50 = trunc i64 %indvars.iv.next547 to i8
  %51 = load ptr, ptr %41, align 8, !tbaa !26
  %52 = getelementptr inbounds i8, ptr %51, i64 %indvars.iv.next547
  store i8 %50, ptr %52, align 1, !tbaa !21
  %indvars.iv.next547.1 = or disjoint i64 %indvars.iv546, 2
  %53 = trunc i64 %indvars.iv.next547.1 to i8
  %54 = load ptr, ptr %41, align 8, !tbaa !26
  %55 = getelementptr inbounds i8, ptr %54, i64 %indvars.iv.next547.1
  store i8 %53, ptr %55, align 1, !tbaa !21
  %indvars.iv.next547.2 = or disjoint i64 %indvars.iv546, 3
  %56 = trunc i64 %indvars.iv.next547.2 to i8
  %57 = load ptr, ptr %41, align 8, !tbaa !26
  %58 = getelementptr inbounds i8, ptr %57, i64 %indvars.iv.next547.2
  store i8 %56, ptr %58, align 1, !tbaa !21
  %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 !28

59:                                               ; 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 = %59
  %wide.trip.count556 = zext i32 %indvars.iv554 to i64
  br label %.lr.ph481

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

72:                                               ; preds = %.lr.ph481
  store i8 %67, ptr %61, align 1, !tbaa !21
  %73 = load ptr, ptr %41, align 8, !tbaa !26
  %74 = getelementptr inbounds i8, ptr %73, i64 %indvars.iv.next552
  store i8 %62, ptr %74, align 1, !tbaa !21
  br label %75

75:                                               ; preds = %.lr.ph481, %72
  %.1357 = phi i32 [ 0, %72 ], [ %.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 !30

._crit_edge:                                      ; preds = %75
  %.not430 = icmp eq i32 %.1357, 0
  br i1 %.not430, label %59, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %._crit_edge, %59
  %76 = icmp sgt i32 %3, 0
  br i1 %14, label %.preheader463, label %.preheader465

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

.lr.ph484:                                        ; preds = %.preheader465
  %77 = load ptr, ptr %41, align 8, !tbaa !26
  %wide.trip.count564 = zext nneg i32 %3 to i64
  %78 = trunc i32 %3 to i8
  br label %81

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

.lr.ph487:                                        ; preds = %.preheader463
  %79 = getelementptr inbounds i8, ptr %0, i64 776
  %wide.trip.count572 = zext nneg i32 %3 to i64
  %80 = trunc i32 %3 to i8
  br label %97

81:                                               ; preds = %.lr.ph484, %92
  %indvars.iv561 = phi i64 [ 0, %.lr.ph484 ], [ %indvars.iv.next562, %92 ]
  %.0363482 = phi i32 [ %2, %.lr.ph484 ], [ %.2365, %92 ]
  %82 = getelementptr inbounds i8, ptr %77, i64 %indvars.iv561
  %83 = load i8, ptr %82, align 1, !tbaa !21
  %84 = zext i8 %83 to i32
  %.not436 = icmp slt i32 %84, %3
  br i1 %.not436, label %92, label %.preheader464.preheader

.preheader464.preheader:                          ; preds = %81
  %85 = sext i32 %.0363482 to i64
  br label %.preheader464

.preheader464:                                    ; preds = %.preheader464.preheader, %.preheader464
  %indvars.iv558 = phi i64 [ %85, %.preheader464.preheader ], [ %indvars.iv.next559, %.preheader464 ]
  %indvars.iv.next559 = add nsw i64 %indvars.iv558, -1
  %86 = getelementptr inbounds i8, ptr %77, i64 %indvars.iv.next559
  %87 = load i8, ptr %86, align 1, !tbaa !21
  %.not437 = icmp ult i8 %87, %78
  br i1 %.not437, label %88, label %.preheader464, !llvm.loop !31

88:                                               ; preds = %.preheader464
  %89 = trunc nsw i64 %indvars.iv.next559 to i32
  %90 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv561
  %91 = 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) %90, ptr noundef nonnull align 1 dereferenceable(3) %91, i64 3, i1 false), !tbaa.struct !32
  br label %92

92:                                               ; preds = %81, %88
  %.2365 = phi i32 [ %89, %88 ], [ %.0363482, %81 ]
  %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 %81, !llvm.loop !33

.preheader461:                                    ; preds = %117, %.preheader463
  br i1 %42, label %.lr.ph496, label %.loopexit462

.lr.ph496:                                        ; preds = %.preheader461
  %93 = getelementptr inbounds i8, ptr %0, i64 776
  %94 = getelementptr inbounds i8, ptr %1, i64 1
  %95 = getelementptr inbounds i8, ptr %1, i64 2
  %96 = icmp sgt i32 %3, 1
  %wide.trip.count577 = zext nneg i32 %3 to i64
  br label %118

97:                                               ; preds = %.lr.ph487, %117
  %indvars.iv569 = phi i64 [ 0, %.lr.ph487 ], [ %indvars.iv.next570, %117 ]
  %.0366485 = phi i32 [ %2, %.lr.ph487 ], [ %.2368, %117 ]
  %98 = load ptr, ptr %41, align 8, !tbaa !26
  %99 = getelementptr inbounds i8, ptr %98, i64 %indvars.iv569
  %100 = load i8, ptr %99, align 1, !tbaa !21
  %101 = zext i8 %100 to i32
  %.not433 = icmp slt i32 %101, %3
  br i1 %.not433, label %117, label %102

102:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %7)
  %103 = sext i32 %.0366485 to i64
  br label %104

104:                                              ; preds = %104, %102
  %indvars.iv566 = phi i64 [ %indvars.iv.next567, %104 ], [ %103, %102 ]
  %indvars.iv.next567 = add nsw i64 %indvars.iv566, -1
  %105 = getelementptr inbounds i8, ptr %98, i64 %indvars.iv.next567
  %106 = load i8, ptr %105, align 1, !tbaa !21
  %.not434 = icmp ult i8 %106, %80
  br i1 %.not434, label %107, label %104, !llvm.loop !34

107:                                              ; preds = %104
  %108 = trunc nsw i64 %indvars.iv.next567 to i32
  %109 = 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) %109, i64 3, i1 false), !tbaa.struct !32
  %110 = 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) %109, ptr noundef nonnull align 1 dereferenceable(3) %110, i64 3, i1 false), !tbaa.struct !32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %110, ptr noundef nonnull align 1 dereferenceable(3) %7, i64 3, i1 false), !tbaa.struct !32
  %111 = trunc i64 %indvars.iv569 to i8
  %112 = load ptr, ptr %79, align 8, !tbaa !20
  %113 = getelementptr inbounds i8, ptr %112, i64 %indvars.iv.next567
  store i8 %111, ptr %113, align 1, !tbaa !21
  %114 = trunc i64 %indvars.iv.next567 to i8
  %115 = load ptr, ptr %79, align 8, !tbaa !20
  %116 = getelementptr inbounds i8, ptr %115, i64 %indvars.iv569
  store i8 %114, ptr %116, align 1, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %7)
  br label %117

117:                                              ; preds = %97, %107
  %.2368 = phi i32 [ %108, %107 ], [ %.0366485, %97 ]
  %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 %97, !llvm.loop !35

118:                                              ; preds = %.lr.ph496, %168
  %indvars.iv579 = phi i64 [ 0, %.lr.ph496 ], [ %indvars.iv.next580, %168 ]
  %119 = load ptr, ptr %93, align 8, !tbaa !20
  %120 = getelementptr inbounds i8, ptr %119, i64 %indvars.iv579
  %121 = load i8, ptr %120, align 1, !tbaa !21
  %122 = zext i8 %121 to i32
  %.not432 = icmp slt i32 %122, %3
  br i1 %.not432, label %168, label %123

123:                                              ; preds = %118
  %124 = zext i8 %121 to i64
  %125 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %124
  %126 = load i8, ptr %125, align 1, !tbaa !36
  %127 = zext i8 %126 to i32
  %128 = getelementptr inbounds i8, ptr %125, i64 1
  %129 = load i8, ptr %128, align 1, !tbaa !38
  %130 = zext i8 %129 to i32
  %131 = getelementptr inbounds i8, ptr %125, i64 2
  %132 = load i8, ptr %131, align 1, !tbaa !39
  %133 = zext i8 %132 to i32
  br i1 %96, label %.lr.ph492.preheader, label %._crit_edge493

.lr.ph492.preheader:                              ; preds = %123
  %134 = load i8, ptr %94, align 1, !tbaa !38
  %135 = zext i8 %134 to i32
  %136 = sub nsw i32 %130, %135
  %137 = tail call i32 @llvm.abs.i32(i32 %136, i1 true)
  %138 = load i8, ptr %1, align 1, !tbaa !36
  %139 = zext i8 %138 to i32
  %140 = sub nsw i32 %127, %139
  %141 = tail call i32 @llvm.abs.i32(i32 %140, i1 true)
  %142 = add nuw nsw i32 %137, %141
  %143 = load i8, ptr %95, align 1, !tbaa !39
  %144 = zext i8 %143 to i32
  %145 = sub nsw i32 %133, %144
  %146 = tail call i32 @llvm.abs.i32(i32 %145, i1 true)
  %147 = add nuw nsw i32 %142, %146
  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 [ %147, %.lr.ph492.preheader ], [ %spec.select438, %.lr.ph492 ]
  %.0372488 = phi i32 [ 0, %.lr.ph492.preheader ], [ %spec.select, %.lr.ph492 ]
  %148 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %indvars.iv574
  %149 = load i8, ptr %148, align 1, !tbaa !36
  %150 = zext i8 %149 to i32
  %151 = sub nsw i32 %127, %150
  %152 = tail call i32 @llvm.abs.i32(i32 %151, i1 true)
  %153 = getelementptr inbounds i8, ptr %148, i64 1
  %154 = load i8, ptr %153, align 1, !tbaa !38
  %155 = zext i8 %154 to i32
  %156 = sub nsw i32 %130, %155
  %157 = tail call i32 @llvm.abs.i32(i32 %156, i1 true)
  %158 = add nuw nsw i32 %157, %152
  %159 = getelementptr inbounds i8, ptr %148, i64 2
  %160 = load i8, ptr %159, align 1, !tbaa !39
  %161 = zext i8 %160 to i32
  %162 = sub nsw i32 %133, %161
  %163 = tail call i32 @llvm.abs.i32(i32 %162, i1 true)
  %164 = add nuw nsw i32 %158, %163
  %165 = icmp slt i32 %164, %.0369490
  %166 = trunc nuw nsw i64 %indvars.iv574 to i32
  %spec.select = select i1 %165, i32 %166, i32 %.0372488
  %spec.select438 = tail call i32 @llvm.smin.i32(i32 %164, 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 !40

._crit_edge493:                                   ; preds = %.lr.ph492, %123
  %.0372.lcssa = phi i32 [ 0, %123 ], [ %spec.select, %.lr.ph492 ]
  %167 = trunc i32 %.0372.lcssa to i8
  store i8 %167, ptr %120, align 1, !tbaa !21
  br label %168

168:                                              ; preds = %118, %._crit_edge493
  %indvars.iv.next580 = add nuw nsw i64 %indvars.iv579, 1
  %exitcond583.not = icmp eq i64 %indvars.iv.next580, %38
  br i1 %exitcond583.not, label %.loopexit462, label %118, !llvm.loop !41

.loopexit462:                                     ; preds = %92, %168, %.preheader465, %.preheader461
  %169 = load ptr, ptr %41, align 8, !tbaa !26
  tail call void @png_free(ptr noundef %0, ptr noundef %169) #7
  store ptr null, ptr %41, align 8, !tbaa !26
  br label %418

170:                                              ; preds = %37
  %171 = getelementptr inbounds i8, ptr %0, i64 912
  store ptr %39, ptr %171, align 8, !tbaa !42
  %172 = tail call noalias ptr @png_malloc(ptr noundef nonnull %0, i64 noundef %38) #7
  %173 = getelementptr inbounds i8, ptr %0, i64 920
  store ptr %172, ptr %173, align 8, !tbaa !43
  %174 = icmp sgt i32 %2, 0
  br i1 %174, label %.lr.ph499.preheader, label %.preheader459.lr.ph

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

.lr.ph499.preheader.new:                          ; preds = %.lr.ph499.preheader
  %unroll_iter697 = and i64 %38, 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 ]
  %176 = trunc i64 %indvars.iv584 to i8
  %177 = load ptr, ptr %171, align 8, !tbaa !42
  %178 = getelementptr inbounds i8, ptr %177, i64 %indvars.iv584
  store i8 %176, ptr %178, align 1, !tbaa !21
  %179 = load ptr, ptr %173, align 8, !tbaa !43
  %180 = getelementptr inbounds i8, ptr %179, i64 %indvars.iv584
  store i8 %176, ptr %180, align 1, !tbaa !21
  %indvars.iv.next585 = or disjoint i64 %indvars.iv584, 1
  %181 = trunc i64 %indvars.iv.next585 to i8
  %182 = load ptr, ptr %171, align 8, !tbaa !42
  %183 = getelementptr inbounds i8, ptr %182, i64 %indvars.iv.next585
  store i8 %181, ptr %183, align 1, !tbaa !21
  %184 = load ptr, ptr %173, align 8, !tbaa !43
  %185 = getelementptr inbounds i8, ptr %184, i64 %indvars.iv.next585
  store i8 %181, ptr %185, align 1, !tbaa !21
  %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 !44

.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
  %186 = trunc i64 %indvars.iv584.unr to i8
  %187 = load ptr, ptr %171, align 8, !tbaa !42
  %188 = getelementptr inbounds i8, ptr %187, i64 %indvars.iv584.unr
  store i8 %186, ptr %188, align 1, !tbaa !21
  %189 = load ptr, ptr %173, align 8, !tbaa !43
  %190 = getelementptr inbounds i8, ptr %189, i64 %indvars.iv584.unr
  store i8 %186, ptr %190, align 1, !tbaa !21
  br label %.preheader459.lr.ph

.preheader459.lr.ph:                              ; preds = %.lr.ph499.epil, %.preheader459.lr.ph.loopexit.unr-lcssa, %170
  %191 = tail call noalias ptr @png_calloc(ptr noundef nonnull %0, i64 noundef 6152) #7
  %192 = getelementptr inbounds i8, ptr %0, i64 776
  br label %.preheader459

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

194:                                              ; 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 %235, label %.lr.ph504

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

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

223:                                              ; preds = %199
  %224 = tail call noalias ptr @png_malloc_warn(ptr noundef %0, i64 noundef 16) #7
  %225 = icmp eq ptr %224, null
  br i1 %225, label %.thread450, label %226

226:                                              ; preds = %223
  %227 = zext nneg i32 %222 to i64
  %228 = getelementptr inbounds ptr, ptr %191, i64 %227
  %229 = load ptr, ptr %228, align 8, !tbaa !45
  store ptr %229, ptr %224, align 8, !tbaa !46
  %230 = getelementptr inbounds i8, ptr %224, i64 8
  store i8 %198, ptr %230, align 8, !tbaa !48
  %231 = trunc i64 %indvars.iv591 to i8
  %232 = getelementptr inbounds i8, ptr %224, i64 9
  store i8 %231, ptr %232, align 1, !tbaa !49
  store ptr %224, ptr %228, align 8, !tbaa !45
  br label %233

233:                                              ; preds = %226, %199
  %.4391.ph = phi ptr [ %.2389502, %199 ], [ %224, %226 ]
  %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 %199, !llvm.loop !50

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

235:                                              ; preds = %194
  %.not420 = icmp eq ptr %.1388, null
  br i1 %.not420, label %.thread450, label %.preheader457

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

.preheader457.split.us:                           ; preds = %.preheader457
  br i1 %174, 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 ]
  %236 = getelementptr inbounds ptr, ptr %191, i64 %indvars.iv618
  %237 = load ptr, ptr %236, align 8, !tbaa !45
  %.not422.us.us = icmp eq ptr %237, null
  br i1 %.not422.us.us, label %.split.us.us.split.us.us.thread, label %.preheader456.us.us

.split.us.us.split.us.us.thread:                  ; preds = %265, %.preheader457.split.us.split.us
  %.5.us.us = phi i32 [ %.1383511.us.us, %.preheader457.split.us.split.us ], [ %.3385.us.us.us.us, %265 ]
  %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 !51

.preheader456.us.us:                              ; preds = %.preheader457.split.us.split.us, %265
  %.2384510.us.us.us.us = phi i32 [ %.3385.us.us.us.us, %265 ], [ %.1383511.us.us, %.preheader457.split.us.split.us ]
  %.0395509.us.us.us.us = phi ptr [ %266, %265 ], [ %237, %.preheader457.split.us.split.us ]
  %238 = load ptr, ptr %171, align 8, !tbaa !42
  %239 = getelementptr inbounds i8, ptr %.0395509.us.us.us.us, i64 8
  %240 = load i8, ptr %239, align 8, !tbaa !48
  %241 = zext i8 %240 to i64
  %242 = getelementptr inbounds i8, ptr %238, i64 %241
  %243 = load i8, ptr %242, align 1, !tbaa !21
  %244 = zext i8 %243 to i32
  %245 = icmp sgt i32 %.2384510.us.us.us.us, %244
  br i1 %245, label %246, label %264

246:                                              ; preds = %.preheader456.us.us
  %247 = getelementptr inbounds i8, ptr %.0395509.us.us.us.us, i64 9
  %248 = load i8, ptr %247, align 1, !tbaa !49
  %249 = zext i8 %248 to i64
  %250 = getelementptr inbounds i8, ptr %238, i64 %249
  %251 = load i8, ptr %250, align 1, !tbaa !21
  %252 = zext i8 %251 to i32
  %253 = icmp ugt i32 %.2384510.us.us.us.us, %252
  br i1 %253, label %.preheader.us.us.us.us, label %264

.preheader.us.us.us.us:                           ; preds = %246
  %254 = and i32 %.2384510.us.us.us.us, 1
  %.not424.us.us.us.us = icmp eq i32 %254, 0
  %.440.us.us.us.us = select i1 %.not424.us.us.us.us, i8 %240, i8 %248
  %.441.us.us.us.us = select i1 %.not424.us.us.us.us, i8 %248, i8 %240
  %255 = add nsw i32 %.2384510.us.us.us.us, -1
  %256 = zext i8 %.441.us.us.us.us to i64
  %257 = getelementptr inbounds i8, ptr %238, i64 %256
  %258 = load i8, ptr %257, align 1, !tbaa !21
  %259 = zext i8 %258 to i64
  %260 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %259
  %261 = zext nneg i32 %255 to i64
  %262 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %261
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %260, ptr noundef nonnull align 1 dereferenceable(3) %262, i64 3, i1 false), !tbaa.struct !32
  %263 = zext i8 %.440.us.us.us.us to i64
  br label %267

264:                                              ; preds = %..loopexit_crit_edge.us.us.us.us, %246, %.preheader456.us.us
  %.3385.us.us.us.us = phi i32 [ %255, %..loopexit_crit_edge.us.us.us.us ], [ %.2384510.us.us.us.us, %246 ], [ %.2384510.us.us.us.us, %.preheader456.us.us ]
  %.not425.us.us.us.us = icmp sgt i32 %.3385.us.us.us.us, %3
  br i1 %.not425.us.us.us.us, label %265, label %.thread450

265:                                              ; preds = %264
  %266 = load ptr, ptr %.0395509.us.us.us.us, align 8, !tbaa !46
  %.not423.us.us.us.us = icmp eq ptr %266, null
  br i1 %.not423.us.us.us.us, label %.split.us.us.split.us.us.thread, label %.preheader456.us.us, !llvm.loop !52

267:                                              ; preds = %288, %.preheader.us.us.us.us
  %indvars.iv613 = phi i64 [ %indvars.iv.next614, %288 ], [ 0, %.preheader.us.us.us.us ]
  %268 = load ptr, ptr %192, align 8, !tbaa !20
  %269 = getelementptr inbounds i8, ptr %268, i64 %indvars.iv613
  %270 = load i8, ptr %269, align 1, !tbaa !21
  %271 = load ptr, ptr %171, align 8, !tbaa !42
  %272 = getelementptr inbounds i8, ptr %271, i64 %256
  %273 = load i8, ptr %272, align 1, !tbaa !21
  %274 = icmp eq i8 %270, %273
  br i1 %274, label %275, label %278

275:                                              ; preds = %267
  %276 = getelementptr inbounds i8, ptr %271, i64 %263
  %277 = load i8, ptr %276, align 1, !tbaa !21
  store i8 %277, ptr %269, align 1, !tbaa !21
  %.pre = load ptr, ptr %192, align 8, !tbaa !20
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.pre, i64 %indvars.iv613
  %.pre647 = load i8, ptr %.phi.trans.insert, align 1, !tbaa !21
  br label %278

278:                                              ; preds = %275, %267
  %279 = phi i8 [ %.pre647, %275 ], [ %270, %267 ]
  %280 = phi ptr [ %.pre, %275 ], [ %268, %267 ]
  %281 = zext i8 %279 to i32
  %282 = icmp eq i32 %255, %281
  br i1 %282, label %283, label %288

283:                                              ; preds = %278
  %284 = getelementptr inbounds i8, ptr %280, i64 %indvars.iv613
  %285 = load ptr, ptr %171, align 8, !tbaa !42
  %286 = getelementptr inbounds i8, ptr %285, i64 %256
  %287 = load i8, ptr %286, align 1, !tbaa !21
  store i8 %287, ptr %284, align 1, !tbaa !21
  br label %288

288:                                              ; preds = %283, %278
  %indvars.iv.next614 = add nuw nsw i64 %indvars.iv613, 1
  %exitcond617.not = icmp eq i64 %indvars.iv.next614, %38
  br i1 %exitcond617.not, label %..loopexit_crit_edge.us.us.us.us, label %267, !llvm.loop !53

..loopexit_crit_edge.us.us.us.us:                 ; preds = %288
  %289 = load ptr, ptr %171, align 8, !tbaa !42
  %290 = getelementptr inbounds i8, ptr %289, i64 %256
  %291 = load i8, ptr %290, align 1, !tbaa !21
  %292 = load ptr, ptr %173, align 8, !tbaa !43
  %293 = getelementptr inbounds i8, ptr %292, i64 %261
  %294 = load i8, ptr %293, align 1, !tbaa !21
  %295 = zext i8 %294 to i64
  %296 = getelementptr inbounds i8, ptr %289, i64 %295
  store i8 %291, ptr %296, align 1, !tbaa !21
  %297 = load ptr, ptr %173, align 8, !tbaa !43
  %298 = getelementptr inbounds i8, ptr %297, i64 %261
  %299 = load i8, ptr %298, align 1, !tbaa !21
  %300 = load ptr, ptr %171, align 8, !tbaa !42
  %301 = getelementptr inbounds i8, ptr %300, i64 %256
  %302 = load i8, ptr %301, align 1, !tbaa !21
  %303 = zext i8 %302 to i64
  %304 = getelementptr inbounds i8, ptr %297, i64 %303
  store i8 %299, ptr %304, align 1, !tbaa !21
  %305 = trunc i32 %255 to i8
  %306 = load ptr, ptr %171, align 8, !tbaa !42
  %307 = getelementptr inbounds i8, ptr %306, i64 %256
  store i8 %305, ptr %307, align 1, !tbaa !21
  %308 = load ptr, ptr %173, align 8, !tbaa !43
  %309 = getelementptr inbounds i8, ptr %308, i64 %261
  store i8 %.441.us.us.us.us, ptr %309, align 1, !tbaa !21
  br label %264

.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 ]
  %310 = getelementptr inbounds ptr, ptr %191, i64 %indvars.iv608
  %311 = load ptr, ptr %310, align 8, !tbaa !45
  %.not422.us = icmp eq ptr %311, null
  br i1 %.not422.us, label %.split.us.us.split.thread, label %.preheader456.us

.split.us.us.split.thread:                        ; preds = %357, %.preheader457.split.us.split
  %.5.us = phi i32 [ %.1383511.us, %.preheader457.split.us.split ], [ %.3385.us.us, %357 ]
  %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 !51

.preheader456.us:                                 ; preds = %.preheader457.split.us.split, %357
  %.2384510.us.us = phi i32 [ %.3385.us.us, %357 ], [ %.1383511.us, %.preheader457.split.us.split ]
  %.0395509.us.us = phi ptr [ %358, %357 ], [ %311, %.preheader457.split.us.split ]
  %312 = load ptr, ptr %171, align 8, !tbaa !42
  %313 = getelementptr inbounds i8, ptr %.0395509.us.us, i64 8
  %314 = load i8, ptr %313, align 8, !tbaa !48
  %315 = zext i8 %314 to i64
  %316 = getelementptr inbounds i8, ptr %312, i64 %315
  %317 = load i8, ptr %316, align 1, !tbaa !21
  %318 = zext i8 %317 to i32
  %319 = icmp sgt i32 %.2384510.us.us, %318
  br i1 %319, label %320, label %356

320:                                              ; preds = %.preheader456.us
  %321 = getelementptr inbounds i8, ptr %.0395509.us.us, i64 9
  %322 = load i8, ptr %321, align 1, !tbaa !49
  %323 = zext i8 %322 to i64
  %324 = getelementptr inbounds i8, ptr %312, i64 %323
  %325 = load i8, ptr %324, align 1, !tbaa !21
  %326 = zext i8 %325 to i32
  %327 = icmp ugt i32 %.2384510.us.us, %326
  br i1 %327, label %.preheader.us.us, label %356

.preheader.us.us:                                 ; preds = %320
  %328 = and i32 %.2384510.us.us, 1
  %.not424.us.us = icmp eq i32 %328, 0
  %.441.us.us = select i1 %.not424.us.us, i8 %322, i8 %314
  %329 = add nsw i32 %.2384510.us.us, -1
  %330 = zext i8 %.441.us.us to i64
  %331 = getelementptr inbounds i8, ptr %312, i64 %330
  %332 = load i8, ptr %331, align 1, !tbaa !21
  %333 = zext i8 %332 to i64
  %334 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %333
  %335 = zext nneg i32 %329 to i64
  %336 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %335
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %334, ptr noundef nonnull align 1 dereferenceable(3) %336, i64 3, i1 false), !tbaa.struct !32
  %337 = load i8, ptr %331, align 1, !tbaa !21
  %338 = load ptr, ptr %173, align 8, !tbaa !43
  %339 = getelementptr inbounds i8, ptr %338, i64 %335
  %340 = load i8, ptr %339, align 1, !tbaa !21
  %341 = zext i8 %340 to i64
  %342 = getelementptr inbounds i8, ptr %312, i64 %341
  store i8 %337, ptr %342, align 1, !tbaa !21
  %343 = load ptr, ptr %173, align 8, !tbaa !43
  %344 = getelementptr inbounds i8, ptr %343, i64 %335
  %345 = load i8, ptr %344, align 1, !tbaa !21
  %346 = load ptr, ptr %171, align 8, !tbaa !42
  %347 = getelementptr inbounds i8, ptr %346, i64 %330
  %348 = load i8, ptr %347, align 1, !tbaa !21
  %349 = zext i8 %348 to i64
  %350 = getelementptr inbounds i8, ptr %343, i64 %349
  store i8 %345, ptr %350, align 1, !tbaa !21
  %351 = trunc i32 %329 to i8
  %352 = load ptr, ptr %171, align 8, !tbaa !42
  %353 = getelementptr inbounds i8, ptr %352, i64 %330
  store i8 %351, ptr %353, align 1, !tbaa !21
  %354 = load ptr, ptr %173, align 8, !tbaa !43
  %355 = getelementptr inbounds i8, ptr %354, i64 %335
  store i8 %.441.us.us, ptr %355, align 1, !tbaa !21
  br label %356

356:                                              ; preds = %.preheader.us.us, %320, %.preheader456.us
  %.3385.us.us = phi i32 [ %329, %.preheader.us.us ], [ %.2384510.us.us, %320 ], [ %.2384510.us.us, %.preheader456.us ]
  %.not425.us.us = icmp sgt i32 %.3385.us.us, %3
  br i1 %.not425.us.us, label %357, label %.thread450

357:                                              ; preds = %356
  %358 = load ptr, ptr %.0395509.us.us, align 8, !tbaa !46
  %.not423.us.us = icmp eq ptr %358, null
  br i1 %.not423.us.us, label %.split.us.us.split.thread, label %.preheader456.us, !llvm.loop !52

.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 ]
  %359 = getelementptr inbounds ptr, ptr %191, i64 %indvars.iv601
  %360 = load ptr, ptr %359, align 8, !tbaa !45
  %.not422 = icmp eq ptr %360, null
  br i1 %.not422, label %.split.thread, label %.preheader456

.preheader456:                                    ; preds = %.preheader457.split, %407
  %.2384510 = phi i32 [ %.3385, %407 ], [ %.1383511, %.preheader457.split ]
  %.0395509 = phi ptr [ %408, %407 ], [ %360, %.preheader457.split ]
  %361 = load ptr, ptr %171, align 8, !tbaa !42
  %362 = getelementptr inbounds i8, ptr %.0395509, i64 8
  %363 = load i8, ptr %362, align 8, !tbaa !48
  %364 = zext i8 %363 to i64
  %365 = getelementptr inbounds i8, ptr %361, i64 %364
  %366 = load i8, ptr %365, align 1, !tbaa !21
  %367 = zext i8 %366 to i32
  %368 = icmp sgt i32 %.2384510, %367
  br i1 %368, label %369, label %406

369:                                              ; preds = %.preheader456
  %370 = getelementptr inbounds i8, ptr %.0395509, i64 9
  %371 = load i8, ptr %370, align 1, !tbaa !49
  %372 = zext i8 %371 to i64
  %373 = getelementptr inbounds i8, ptr %361, i64 %372
  %374 = load i8, ptr %373, align 1, !tbaa !21
  %375 = zext i8 %374 to i32
  %376 = icmp ugt i32 %.2384510, %375
  br i1 %376, label %377, label %406

377:                                              ; preds = %369
  %378 = and i32 %.2384510, 1
  %.not424 = icmp eq i32 %378, 0
  %.441 = select i1 %.not424, i8 %371, i8 %363
  %379 = add nsw i32 %.2384510, -1
  %380 = zext i8 %.441 to i64
  %381 = getelementptr inbounds i8, ptr %361, i64 %380
  %382 = load i8, ptr %381, align 1, !tbaa !21
  %383 = zext i8 %382 to i64
  %384 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %383
  %385 = zext nneg i32 %379 to i64
  %386 = getelementptr inbounds %struct.png_color_struct, ptr %1, i64 %385
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %384, ptr noundef nonnull align 1 dereferenceable(3) %386, i64 3, i1 false), !tbaa.struct !32
  %387 = load i8, ptr %381, align 1, !tbaa !21
  %388 = load ptr, ptr %173, align 8, !tbaa !43
  %389 = getelementptr inbounds i8, ptr %388, i64 %385
  %390 = load i8, ptr %389, align 1, !tbaa !21
  %391 = zext i8 %390 to i64
  %392 = getelementptr inbounds i8, ptr %361, i64 %391
  store i8 %387, ptr %392, align 1, !tbaa !21
  %393 = load ptr, ptr %173, align 8, !tbaa !43
  %394 = getelementptr inbounds i8, ptr %393, i64 %385
  %395 = load i8, ptr %394, align 1, !tbaa !21
  %396 = load ptr, ptr %171, align 8, !tbaa !42
  %397 = getelementptr inbounds i8, ptr %396, i64 %380
  %398 = load i8, ptr %397, align 1, !tbaa !21
  %399 = zext i8 %398 to i64
  %400 = getelementptr inbounds i8, ptr %393, i64 %399
  store i8 %395, ptr %400, align 1, !tbaa !21
  %401 = trunc i32 %379 to i8
  %402 = load ptr, ptr %171, align 8, !tbaa !42
  %403 = getelementptr inbounds i8, ptr %402, i64 %380
  store i8 %401, ptr %403, align 1, !tbaa !21
  %404 = load ptr, ptr %173, align 8, !tbaa !43
  %405 = getelementptr inbounds i8, ptr %404, i64 %385
  store i8 %.441, ptr %405, align 1, !tbaa !21
  br label %406

406:                                              ; preds = %377, %369, %.preheader456
  %.3385 = phi i32 [ %379, %377 ], [ %.2384510, %369 ], [ %.2384510, %.preheader456 ]
  %.not425 = icmp sgt i32 %.3385, %3
  br i1 %.not425, label %407, label %.thread450

407:                                              ; preds = %406
  %408 = load ptr, ptr %.0395509, align 8, !tbaa !46
  %.not423 = icmp eq ptr %408, null
  br i1 %.not423, label %.split.thread, label %.preheader456, !llvm.loop !52

.split.thread:                                    ; preds = %407, %.preheader457.split
  %.5 = phi i32 [ %.1383511, %.preheader457.split ], [ %.3385, %407 ]
  %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 !51

.thread450:                                       ; preds = %._crit_edge505, %.split.thread, %.split.us.us.split.thread, %.split.us.us.split.us.us.thread, %223, %406, %356, %264, %235
  %.6393453 = phi ptr [ null, %235 ], [ %.1388, %264 ], [ %.1388, %356 ], [ %.1388, %406 ], [ null, %223 ], [ %.1388, %.split.us.us.split.us.us.thread ], [ %.1388, %.split.us.us.split.thread ], [ %.1388, %.split.thread ], [ null, %._crit_edge505 ]
  %.6 = phi i32 [ %.0382519, %235 ], [ %.3385.us.us.us.us, %264 ], [ %.3385.us.us, %356 ], [ %.3385, %406 ], [ %.0382519, %223 ], [ %.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 %409

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

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

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

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

._crit_edge524:                                   ; preds = %413
  tail call void @png_free(ptr noundef %0, ptr noundef nonnull %191) #7
  %416 = load ptr, ptr %173, align 8, !tbaa !43
  tail call void @png_free(ptr noundef %0, ptr noundef %416) #7
  %417 = load ptr, ptr %171, align 8, !tbaa !42
  tail call void @png_free(ptr noundef %0, ptr noundef %417) #7
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %171, i8 0, i64 16, i1 false)
  br label %418

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

422:                                              ; preds = %418
  store ptr %1, ptr %419, align 8, !tbaa !57
  br label %423

423:                                              ; preds = %422, %418
  %424 = trunc i32 %.0 to i16
  %425 = getelementptr inbounds i8, ptr %0, i64 496
  store i16 %424, ptr %425, align 8, !tbaa !58
  br i1 %14, label %486, label %426

426:                                              ; preds = %423
  %427 = tail call noalias ptr @png_calloc(ptr noundef nonnull %0, i64 noundef 32768) #7
  %428 = getelementptr inbounds i8, ptr %0, i64 768
  store ptr %427, ptr %428, align 8, !tbaa !59
  %429 = tail call noalias 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) %429, i8 -1, i64 32768, i1 false)
  %430 = icmp sgt i32 %.0, 0
  br i1 %430, label %.lr.ph530.preheader, label %._crit_edge531

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

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

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

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

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

478:                                              ; preds = %464
  %479 = trunc i32 %473 to i8
  store i8 %479, ptr %474, align 1, !tbaa !21
  %480 = load ptr, ptr %428, align 8, !tbaa !59
  %481 = getelementptr inbounds i8, ptr %480, i64 %465
  store i8 %443, ptr %481, align 1, !tbaa !21
  br label %482

482:                                              ; preds = %478, %464
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %exitcond633.not = icmp eq i64 %indvars.iv.next631, 32
  br i1 %exitcond633.not, label %483, label %464, !llvm.loop !60

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

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

485:                                              ; preds = %484
  %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 !63

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

486:                                              ; preds = %6, %._crit_edge531, %423
  ret void
}

declare noalias ptr @png_malloc(ptr noundef, i64 noundef) local_unnamed_addr #4

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

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

declare noalias ptr @png_calloc(ptr noundef, i64 noundef) local_unnamed_addr #4

declare noalias ptr @png_malloc_warn(ptr noundef, i64 noundef) local_unnamed_addr #4

; 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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "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 #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !11, i64 292}
!6 = !{!"png_struct_def", !7, i64 0, !9, i64 200, !9, i64 208, !10, i64 216, !9, i64 224, !9, i64 232, !9, i64 240, !9, i64 248, !9, i64 256, !9, i64 264, !9, i64 272, !7, i64 280, !7, i64 281, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !12, i64 304, !11, i64 416, !11, i64 420, !11, i64 424, !11, i64 428, !10, i64 432, !11, i64 440, !11, i64 444, !11, i64 448, !9, i64 456, !9, i64 464, !10, i64 472, !11, i64 480, !11, i64 484, !9, i64 488, !13, i64 496, !11, i64 500, !13, i64 504, !7, i64 506, !7, i64 507, !7, i64 508, !7, i64 509, !7, i64 510, !7, i64 511, !7, i64 512, !7, i64 513, !7, i64 514, !7, i64 515, !7, i64 516, !7, i64 517, !7, i64 518, !13, i64 520, !7, i64 522, !11, i64 524, !14, i64 528, !14, i64 538, !11, i64 548, !11, i64 552, !9, i64 560, !9, i64 568, !9, i64 576, !9, i64 584, !9, i64 592, !9, i64 600, !15, i64 608, !15, i64 613, !9, i64 624, !14, i64 632, !9, i64 648, !9, i64 656, !9, i64 664, !9, i64 672, !9, i64 680, !9, i64 688, !9, i64 696, !9, i64 704, !9, i64 712, !11, i64 720, !11, i64 724, !10, i64 728, !10, i64 736, !10, i64 744, !10, i64 752, !11, i64 760, !11, i64 764, !9, i64 768, !9, i64 776, !7, i64 784, !7, i64 785, !11, i64 816, !9, i64 824, !9, i64 832, !11, i64 840, !11, i64 844, !9, i64 848, !7, i64 856, !7, i64 857, !13, i64 858, !13, i64 860, !11, i64 864, !7, i64 868, !9, i64 872, !9, i64 880, !9, i64 888, !9, i64 896, !9, i64 904, !9, i64 912, !9, i64 920, !7, i64 928, !11, i64 932, !11, i64 936, !11, i64 940, !10, i64 944, !16, i64 952, !10, i64 984, !9, i64 992, !10, i64 1000, !11, i64 1008, !11, i64 1012, !9, i64 1016, !7, i64 1024, !17, i64 1056}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!"z_stream_s", !9, i64 0, !11, i64 8, !10, i64 16, !9, i64 24, !11, i64 32, !10, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !11, i64 88, !10, i64 96, !10, i64 104}
!13 = !{!"short", !7, i64 0}
!14 = !{!"png_color_16_struct", !7, i64 0, !13, i64 2, !13, i64 4, !13, i64 6, !13, i64 8}
!15 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!16 = !{!"png_unknown_chunk_t", !7, i64 0, !9, i64 8, !10, i64 16, !7, i64 24}
!17 = !{!"png_colorspace", !11, i64 0, !18, i64 4, !19, i64 36, !13, i64 72, !13, i64 74}
!18 = !{!"png_xy", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28}
!19 = !{!"png_XYZ", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32}
!20 = !{!6, !9, i64 776}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.unroll.disable"}
!26 = !{!6, !9, i64 904}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !23}
!29 = !{!13, !13, i64 0}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = !{i64 0, i64 1, !21, i64 1, i64 1, !21, i64 2, i64 1, !21}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}
!36 = !{!37, !7, i64 0}
!37 = !{!"png_color_struct", !7, i64 0, !7, i64 1, !7, i64 2}
!38 = !{!37, !7, i64 1}
!39 = !{!37, !7, i64 2}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}
!42 = !{!6, !9, i64 912}
!43 = !{!6, !9, i64 920}
!44 = distinct !{!44, !23}
!45 = !{!9, !9, i64 0}
!46 = !{!47, !9, i64 0}
!47 = !{!"png_dsort_struct", !9, i64 0, !7, i64 8, !7, i64 9}
!48 = !{!47, !7, i64 8}
!49 = !{!47, !7, i64 9}
!50 = distinct !{!50, !23}
!51 = distinct !{!51, !23}
!52 = distinct !{!52, !23}
!53 = distinct !{!53, !23}
!54 = distinct !{!54, !23}
!55 = distinct !{!55, !23}
!56 = distinct !{!56, !23}
!57 = !{!6, !9, i64 488}
!58 = !{!6, !13, i64 496}
!59 = !{!6, !9, i64 768}
!60 = distinct !{!60, !23}
!61 = distinct !{!61, !23}
!62 = distinct !{!62, !23}
!63 = distinct !{!63, !23}


; 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