; LLVM IR from Try/Tempest :: Engine/thirdparty/libpng (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, ptr, ptr, i8, i8, i32, i32, i32, i32, %struct.z_stream_s, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, ptr, ptr, ptr, ptr, i64, i32, i32, ptr, i16, i32, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i8, i32, %struct.png_color_16_struct, %struct.png_color_16_struct, ptr, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_color_8_struct, %struct.png_color_8_struct, ptr, %struct.png_color_16_struct, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i64, i64, i64, i32, i32, ptr, ptr, i32, [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 %1131

66:                                               ; preds = %6
  %67 = load ptr, ptr %7, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.png_struct_def, ptr %67, i32 0, i32 17
  %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 %98

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 = zext i32 %75 to i64
  %77 = mul i64 %76, 1
  %78 = call noalias ptr @png_malloc(ptr noundef %74, i64 noundef %77)
  %79 = load ptr, ptr %7, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.png_struct_def, ptr %79, i32 0, i32 109
  store ptr %78, ptr %80, align 8, !tbaa !22
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %81

81:                                               ; preds = %94, %73
  %82 = load i32, ptr %13, align 4, !tbaa !9
  %83 = load i32, ptr %9, align 4, !tbaa !9
  %84 = icmp slt i32 %82, %83
  br i1 %84, label %85, label %97

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

94:                                               ; preds = %85
  %95 = load i32, ptr %13, align 4, !tbaa !9
  %96 = add nsw i32 %95, 1
  store i32 %96, ptr %13, align 4, !tbaa !9
  br label %81, !llvm.loop !24

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

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

102:                                              ; preds = %98
  %103 = load ptr, ptr %11, align 8, !tbaa !5
  %104 = icmp ne ptr %103, null
  br i1 %104, label %105, label %486

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

113:                                              ; preds = %126, %105
  %114 = load i32, ptr %14, align 4, !tbaa !9
  %115 = load i32, ptr %9, align 4, !tbaa !9
  %116 = icmp slt i32 %114, %115
  br i1 %116, label %117, label %129

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

126:                                              ; preds = %117
  %127 = load i32, ptr %14, align 4, !tbaa !9
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %14, align 4, !tbaa !9
  br label %113, !llvm.loop !27

129:                                              ; preds = %113
  %130 = load i32, ptr %9, align 4, !tbaa !9
  %131 = sub nsw i32 %130, 1
  store i32 %131, ptr %14, align 4, !tbaa !9
  br label %132

132:                                              ; preds = %210, %129
  %133 = load i32, ptr %14, align 4, !tbaa !9
  %134 = load i32, ptr %10, align 4, !tbaa !9
  %135 = icmp sge i32 %133, %134
  br i1 %135, label %136, label %213

136:                                              ; preds = %132
  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 %137

137:                                              ; preds = %199, %136
  %138 = load i32, ptr %16, align 4, !tbaa !9
  %139 = load i32, ptr %14, align 4, !tbaa !9
  %140 = icmp slt i32 %138, %139
  br i1 %140, label %141, label %202

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

168:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #6
  %169 = load ptr, ptr %7, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.png_struct_def, ptr %169, i32 0, i32 128
  %171 = load ptr, ptr %170, align 8, !tbaa !26
  %172 = load i32, ptr %16, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i8, ptr %171, i64 %173
  %175 = load i8, ptr %174, align 1, !tbaa !23
  store i8 %175, ptr %17, align 1, !tbaa !23
  %176 = load ptr, ptr %7, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.png_struct_def, ptr %176, i32 0, i32 128
  %178 = load ptr, ptr %177, align 8, !tbaa !26
  %179 = load i32, ptr %16, align 4, !tbaa !9
  %180 = add nsw i32 %179, 1
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i8, ptr %178, i64 %181
  %183 = load i8, ptr %182, align 1, !tbaa !23
  %184 = load ptr, ptr %7, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.png_struct_def, ptr %184, i32 0, i32 128
  %186 = load ptr, ptr %185, align 8, !tbaa !26
  %187 = load i32, ptr %16, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i8, ptr %186, i64 %188
  store i8 %183, ptr %189, align 1, !tbaa !23
  %190 = load i8, ptr %17, align 1, !tbaa !23
  %191 = load ptr, ptr %7, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.png_struct_def, ptr %191, i32 0, i32 128
  %193 = load ptr, ptr %192, align 8, !tbaa !26
  %194 = load i32, ptr %16, align 4, !tbaa !9
  %195 = add nsw i32 %194, 1
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i8, ptr %193, i64 %196
  store i8 %190, ptr %197, 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 %198

198:                                              ; preds = %168, %141
  br label %199

199:                                              ; preds = %198
  %200 = load i32, ptr %16, align 4, !tbaa !9
  %201 = add nsw i32 %200, 1
  store i32 %201, ptr %16, align 4, !tbaa !9
  br label %137, !llvm.loop !29

202:                                              ; preds = %137
  %203 = load i32, ptr %15, align 4, !tbaa !9
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %205, label %206

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

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

207:                                              ; preds = %206, %205
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  %208 = load i32, ptr %18, align 4
  switch i32 %208, label %1132 [
    i32 0, label %209
    i32 8, label %213
  ]

209:                                              ; preds = %207
  br label %210

210:                                              ; preds = %209
  %211 = load i32, ptr %14, align 4, !tbaa !9
  %212 = add nsw i32 %211, -1
  store i32 %212, ptr %14, align 4, !tbaa !9
  br label %132, !llvm.loop !30

213:                                              ; preds = %207, %132
  %214 = load i32, ptr %12, align 4, !tbaa !9
  %215 = icmp ne i32 %214, 0
  br i1 %215, label %216, label %262

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

218:                                              ; preds = %258, %216
  %219 = load i32, ptr %14, align 4, !tbaa !9
  %220 = load i32, ptr %10, align 4, !tbaa !9
  %221 = icmp slt i32 %219, %220
  br i1 %221, label %222, label %261

222:                                              ; preds = %218
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.png_struct_def, ptr %223, i32 0, i32 128
  %225 = load ptr, ptr %224, align 8, !tbaa !26
  %226 = load i32, ptr %14, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds i8, ptr %225, i64 %227
  %229 = load i8, ptr %228, align 1, !tbaa !23
  %230 = zext i8 %229 to i32
  %231 = load i32, ptr %10, align 4, !tbaa !9
  %232 = icmp sge i32 %230, %231
  br i1 %232, label %233, label %257

233:                                              ; preds = %222
  br label %234

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

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

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

257:                                              ; preds = %248, %222
  br label %258

258:                                              ; preds = %257
  %259 = load i32, ptr %14, align 4, !tbaa !9
  %260 = add nsw i32 %259, 1
  store i32 %260, ptr %14, align 4, !tbaa !9
  br label %218, !llvm.loop !33

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

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

264:                                              ; preds = %328, %262
  %265 = load i32, ptr %14, align 4, !tbaa !9
  %266 = load i32, ptr %10, align 4, !tbaa !9
  %267 = icmp slt i32 %265, %266
  br i1 %267, label %268, label %331

268:                                              ; preds = %264
  %269 = load ptr, ptr %7, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.png_struct_def, ptr %269, i32 0, i32 128
  %271 = load ptr, ptr %270, align 8, !tbaa !26
  %272 = load i32, ptr %14, align 4, !tbaa !9
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i8, ptr %271, i64 %273
  %275 = load i8, ptr %274, align 1, !tbaa !23
  %276 = zext i8 %275 to i32
  %277 = load i32, ptr %10, align 4, !tbaa !9
  %278 = icmp sge i32 %276, %277
  br i1 %278, label %279, label %327

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

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

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

294:                                              ; preds = %283
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  %296 = load i32, ptr %20, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds %struct.png_color_struct, ptr %295, i64 %297
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %21, ptr align 1 %298, i64 3, i1 false), !tbaa.struct !32
  %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
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = load i32, ptr %14, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds %struct.png_color_struct, ptr %303, i64 %305
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %302, ptr align 1 %306, i64 3, i1 false), !tbaa.struct !32
  %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 %310, ptr align 1 %21, i64 3, i1 false), !tbaa.struct !32
  %311 = load i32, ptr %14, align 4, !tbaa !9
  %312 = trunc i32 %311 to i8
  %313 = load ptr, ptr %7, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.png_struct_def, ptr %313, i32 0, i32 109
  %315 = load ptr, ptr %314, align 8, !tbaa !22
  %316 = load i32, ptr %20, align 4, !tbaa !9
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds i8, ptr %315, i64 %317
  store i8 %312, ptr %318, align 1, !tbaa !23
  %319 = load i32, ptr %20, align 4, !tbaa !9
  %320 = trunc i32 %319 to i8
  %321 = load ptr, ptr %7, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.png_struct_def, ptr %321, i32 0, i32 109
  %323 = load ptr, ptr %322, align 8, !tbaa !22
  %324 = load i32, ptr %14, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds i8, ptr %323, i64 %325
  store i8 %320, ptr %326, align 1, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 3, ptr %21) #6
  br label %327

327:                                              ; preds = %294, %268
  br label %328

328:                                              ; preds = %327
  %329 = load i32, ptr %14, align 4, !tbaa !9
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %14, align 4, !tbaa !9
  br label %264, !llvm.loop !35

331:                                              ; preds = %264
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %332

332:                                              ; preds = %475, %331
  %333 = load i32, ptr %14, align 4, !tbaa !9
  %334 = load i32, ptr %9, align 4, !tbaa !9
  %335 = icmp slt i32 %333, %334
  br i1 %335, label %336, label %478

336:                                              ; preds = %332
  %337 = load ptr, ptr %7, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.png_struct_def, ptr %337, i32 0, i32 109
  %339 = load ptr, ptr %338, align 8, !tbaa !22
  %340 = load i32, ptr %14, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds i8, ptr %339, i64 %341
  %343 = load i8, ptr %342, align 1, !tbaa !23
  %344 = zext i8 %343 to i32
  %345 = load i32, ptr %10, align 4, !tbaa !9
  %346 = icmp sge i32 %344, %345
  br i1 %346, label %347, label %474

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

400:                                              ; preds = %462, %347
  %401 = load i32, ptr %23, align 4, !tbaa !9
  %402 = load i32, ptr %10, align 4, !tbaa !9
  %403 = icmp slt i32 %401, %402
  br i1 %403, label %404, label %465

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

458:                                              ; preds = %404
  %459 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %459, ptr %22, align 4, !tbaa !9
  %460 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %460, ptr %24, align 4, !tbaa !9
  br label %461

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

462:                                              ; preds = %461
  %463 = load i32, ptr %23, align 4, !tbaa !9
  %464 = add nsw i32 %463, 1
  store i32 %464, ptr %23, align 4, !tbaa !9
  br label %400, !llvm.loop !40

465:                                              ; preds = %400
  %466 = load i32, ptr %24, align 4, !tbaa !9
  %467 = trunc i32 %466 to i8
  %468 = load ptr, ptr %7, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.png_struct_def, ptr %468, i32 0, i32 109
  %470 = load ptr, ptr %469, align 8, !tbaa !22
  %471 = load i32, ptr %14, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds i8, ptr %470, i64 %472
  store i8 %467, ptr %473, 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 %474

474:                                              ; preds = %465, %336
  br label %475

475:                                              ; preds = %474
  %476 = load i32, ptr %14, align 4, !tbaa !9
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %14, align 4, !tbaa !9
  br label %332, !llvm.loop !41

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

479:                                              ; preds = %478, %261
  %480 = load ptr, ptr %7, align 8, !tbaa !5
  %481 = load ptr, ptr %7, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.png_struct_def, ptr %481, i32 0, i32 128
  %483 = load ptr, ptr %482, align 8, !tbaa !26
  call void @png_free(ptr noundef %480, ptr noundef %483)
  %484 = load ptr, ptr %7, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.png_struct_def, ptr %484, i32 0, i32 128
  store ptr null, ptr %485, align 8, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %936

486:                                              ; preds = %102
  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
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  %488 = load i32, ptr %9, align 4, !tbaa !9
  %489 = zext i32 %488 to i64
  %490 = mul i64 %489, 1
  %491 = call noalias ptr @png_malloc(ptr noundef %487, i64 noundef %490)
  %492 = load ptr, ptr %7, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.png_struct_def, ptr %492, i32 0, i32 129
  store ptr %491, ptr %493, align 8, !tbaa !42
  %494 = load ptr, ptr %7, align 8, !tbaa !5
  %495 = load i32, ptr %9, align 4, !tbaa !9
  %496 = zext i32 %495 to i64
  %497 = mul i64 %496, 1
  %498 = call noalias ptr @png_malloc(ptr noundef %494, i64 noundef %497)
  %499 = load ptr, ptr %7, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.png_struct_def, ptr %499, i32 0, i32 130
  store ptr %498, ptr %500, align 8, !tbaa !43
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %501

501:                                              ; preds = %522, %486
  %502 = load i32, ptr %27, align 4, !tbaa !9
  %503 = load i32, ptr %9, align 4, !tbaa !9
  %504 = icmp slt i32 %502, %503
  br i1 %504, label %505, label %525

505:                                              ; preds = %501
  %506 = load i32, ptr %27, align 4, !tbaa !9
  %507 = trunc i32 %506 to i8
  %508 = load ptr, ptr %7, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.png_struct_def, ptr %508, i32 0, i32 129
  %510 = load ptr, ptr %509, align 8, !tbaa !42
  %511 = load i32, ptr %27, align 4, !tbaa !9
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds i8, ptr %510, i64 %512
  store i8 %507, ptr %513, align 1, !tbaa !23
  %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 130
  %518 = load ptr, ptr %517, align 8, !tbaa !43
  %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
  br label %522

522:                                              ; preds = %505
  %523 = load i32, ptr %27, align 4, !tbaa !9
  %524 = add nsw i32 %523, 1
  store i32 %524, ptr %27, align 4, !tbaa !9
  br label %501, !llvm.loop !44

525:                                              ; preds = %501
  %526 = load ptr, ptr %7, align 8, !tbaa !5
  %527 = call noalias ptr @png_calloc(ptr noundef %526, i64 noundef 6152)
  store ptr %527, ptr %31, align 8, !tbaa !5
  %528 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %528, ptr %29, align 4, !tbaa !9
  store i32 96, ptr %28, align 4, !tbaa !9
  br label %529

529:                                              ; preds = %918, %525
  %530 = load i32, ptr %29, align 4, !tbaa !9
  %531 = load i32, ptr %10, align 4, !tbaa !9
  %532 = icmp sgt i32 %530, %531
  br i1 %532, label %533, label %921

533:                                              ; preds = %529
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %534

534:                                              ; preds = %642, %533
  %535 = load i32, ptr %27, align 4, !tbaa !9
  %536 = load i32, ptr %29, align 4, !tbaa !9
  %537 = sub nsw i32 %536, 1
  %538 = icmp slt i32 %535, %537
  br i1 %538, label %539, label %645

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

542:                                              ; preds = %631, %539
  %543 = load i32, ptr %32, align 4, !tbaa !9
  %544 = load i32, ptr %29, align 4, !tbaa !9
  %545 = icmp slt i32 %543, %544
  br i1 %545, label %546, label %634

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

600:                                              ; preds = %546
  %601 = load ptr, ptr %7, align 8, !tbaa !5
  %602 = call noalias ptr @png_malloc_warn(ptr noundef %601, i64 noundef 16)
  store ptr %602, ptr %30, align 8, !tbaa !5
  %603 = load ptr, ptr %30, align 8, !tbaa !5
  %604 = icmp eq ptr %603, null
  br i1 %604, label %605, label %606

605:                                              ; preds = %600
  store i32 38, ptr %18, align 4
  br label %628

606:                                              ; preds = %600
  %607 = load ptr, ptr %31, align 8, !tbaa !5
  %608 = load i32, ptr %33, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds ptr, ptr %607, i64 %609
  %611 = load ptr, ptr %610, align 8, !tbaa !5
  %612 = load ptr, ptr %30, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.png_dsort_struct, ptr %612, i32 0, i32 0
  store ptr %611, ptr %613, align 8, !tbaa !45
  %614 = load i32, ptr %27, align 4, !tbaa !9
  %615 = trunc i32 %614 to i8
  %616 = load ptr, ptr %30, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.png_dsort_struct, ptr %616, i32 0, i32 1
  store i8 %615, ptr %617, align 8, !tbaa !47
  %618 = load i32, ptr %32, align 4, !tbaa !9
  %619 = trunc i32 %618 to i8
  %620 = load ptr, ptr %30, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.png_dsort_struct, ptr %620, i32 0, i32 2
  store i8 %619, ptr %621, align 1, !tbaa !48
  %622 = load ptr, ptr %30, align 8, !tbaa !5
  %623 = load ptr, ptr %31, align 8, !tbaa !5
  %624 = load i32, ptr %33, align 4, !tbaa !9
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds ptr, ptr %623, i64 %625
  store ptr %622, ptr %626, align 8, !tbaa !5
  br label %627

627:                                              ; preds = %606, %546
  store i32 0, ptr %18, align 4
  br label %628

628:                                              ; preds = %627, %605
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  %629 = load i32, ptr %18, align 4
  switch i32 %629, label %1132 [
    i32 0, label %630
    i32 38, label %634
  ]

630:                                              ; preds = %628
  br label %631

631:                                              ; preds = %630
  %632 = load i32, ptr %32, align 4, !tbaa !9
  %633 = add nsw i32 %632, 1
  store i32 %633, ptr %32, align 4, !tbaa !9
  br label %542, !llvm.loop !49

634:                                              ; preds = %628, %542
  %635 = load ptr, ptr %30, align 8, !tbaa !5
  %636 = icmp eq ptr %635, null
  br i1 %636, label %637, label %638

637:                                              ; preds = %634
  store i32 35, ptr %18, align 4
  br label %639

638:                                              ; preds = %634
  store i32 0, ptr %18, align 4
  br label %639

639:                                              ; preds = %638, %637
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  %640 = load i32, ptr %18, align 4
  switch i32 %640, label %1132 [
    i32 0, label %641
    i32 35, label %645
  ]

641:                                              ; preds = %639
  br label %642

642:                                              ; preds = %641
  %643 = load i32, ptr %27, align 4, !tbaa !9
  %644 = add nsw i32 %643, 1
  store i32 %644, ptr %27, align 4, !tbaa !9
  br label %534, !llvm.loop !50

645:                                              ; preds = %639, %534
  %646 = load ptr, ptr %30, align 8, !tbaa !5
  %647 = icmp ne ptr %646, null
  br i1 %647, label %648, label %882

648:                                              ; preds = %645
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %649

649:                                              ; preds = %878, %648
  %650 = load i32, ptr %27, align 4, !tbaa !9
  %651 = load i32, ptr %28, align 4, !tbaa !9
  %652 = icmp sle i32 %650, %651
  br i1 %652, label %653, label %881

653:                                              ; preds = %649
  %654 = load ptr, ptr %31, align 8, !tbaa !5
  %655 = load i32, ptr %27, align 4, !tbaa !9
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds ptr, ptr %654, i64 %656
  %658 = load ptr, ptr %657, align 8, !tbaa !5
  %659 = icmp ne ptr %658, null
  br i1 %659, label %660, label %877

660:                                              ; preds = %653
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %661 = load ptr, ptr %31, align 8, !tbaa !5
  %662 = load i32, ptr %27, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds ptr, ptr %661, i64 %663
  %665 = load ptr, ptr %664, align 8, !tbaa !5
  store ptr %665, ptr %34, align 8, !tbaa !5
  br label %666

666:                                              ; preds = %864, %660
  %667 = load ptr, ptr %34, align 8, !tbaa !5
  %668 = icmp ne ptr %667, null
  br i1 %668, label %669, label %868

669:                                              ; preds = %666
  %670 = load ptr, ptr %7, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.png_struct_def, ptr %670, i32 0, i32 129
  %672 = load ptr, ptr %671, align 8, !tbaa !42
  %673 = load ptr, ptr %34, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.png_dsort_struct, ptr %673, i32 0, i32 1
  %675 = load i8, ptr %674, align 8, !tbaa !47
  %676 = zext i8 %675 to i64
  %677 = getelementptr inbounds i8, ptr %672, i64 %676
  %678 = load i8, ptr %677, align 1, !tbaa !23
  %679 = zext i8 %678 to i32
  %680 = load i32, ptr %29, align 4, !tbaa !9
  %681 = icmp slt i32 %679, %680
  br i1 %681, label %682, label %858

682:                                              ; preds = %669
  %683 = load ptr, ptr %7, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.png_struct_def, ptr %683, i32 0, i32 129
  %685 = load ptr, ptr %684, align 8, !tbaa !42
  %686 = load ptr, ptr %34, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.png_dsort_struct, ptr %686, i32 0, i32 2
  %688 = load i8, ptr %687, align 1, !tbaa !48
  %689 = zext i8 %688 to i64
  %690 = getelementptr inbounds i8, ptr %685, i64 %689
  %691 = load i8, ptr %690, align 1, !tbaa !23
  %692 = zext i8 %691 to i32
  %693 = load i32, ptr %29, align 4, !tbaa !9
  %694 = icmp slt i32 %692, %693
  br i1 %694, label %695, label %858

695:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  %696 = load i32, ptr %29, align 4, !tbaa !9
  %697 = and i32 %696, 1
  %698 = icmp ne i32 %697, 0
  br i1 %698, label %699, label %708

699:                                              ; preds = %695
  %700 = load ptr, ptr %34, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.png_dsort_struct, ptr %700, i32 0, i32 1
  %702 = load i8, ptr %701, align 8, !tbaa !47
  %703 = zext i8 %702 to i32
  store i32 %703, ptr %35, align 4, !tbaa !9
  %704 = load ptr, ptr %34, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.png_dsort_struct, ptr %704, i32 0, i32 2
  %706 = load i8, ptr %705, align 1, !tbaa !48
  %707 = zext i8 %706 to i32
  store i32 %707, ptr %36, align 4, !tbaa !9
  br label %717

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

717:                                              ; preds = %708, %699
  %718 = load i32, ptr %29, align 4, !tbaa !9
  %719 = add nsw i32 %718, -1
  store i32 %719, ptr %29, align 4, !tbaa !9
  %720 = load ptr, ptr %8, align 8, !tbaa !5
  %721 = load ptr, ptr %7, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.png_struct_def, ptr %721, i32 0, i32 129
  %723 = load ptr, ptr %722, align 8, !tbaa !42
  %724 = load i32, ptr %35, align 4, !tbaa !9
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds i8, ptr %723, i64 %725
  %727 = load i8, ptr %726, align 1, !tbaa !23
  %728 = zext i8 %727 to i64
  %729 = getelementptr inbounds %struct.png_color_struct, ptr %720, i64 %728
  %730 = load ptr, ptr %8, align 8, !tbaa !5
  %731 = load i32, ptr %29, align 4, !tbaa !9
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds %struct.png_color_struct, ptr %730, i64 %732
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %729, ptr align 1 %733, i64 3, i1 false), !tbaa.struct !32
  %734 = load i32, ptr %12, align 4, !tbaa !9
  %735 = icmp eq i32 %734, 0
  br i1 %735, label %736, label %803

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

737:                                              ; preds = %799, %736
  %738 = load i32, ptr %37, align 4, !tbaa !9
  %739 = load i32, ptr %9, align 4, !tbaa !9
  %740 = icmp slt i32 %738, %739
  br i1 %740, label %741, label %802

741:                                              ; preds = %737
  %742 = load ptr, ptr %7, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.png_struct_def, ptr %742, i32 0, i32 109
  %744 = load ptr, ptr %743, align 8, !tbaa !22
  %745 = load i32, ptr %37, align 4, !tbaa !9
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds i8, ptr %744, i64 %746
  %748 = load i8, ptr %747, align 1, !tbaa !23
  %749 = zext i8 %748 to i32
  %750 = load ptr, ptr %7, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.png_struct_def, ptr %750, i32 0, i32 129
  %752 = load ptr, ptr %751, align 8, !tbaa !42
  %753 = load i32, ptr %35, 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 = icmp eq i32 %749, %757
  br i1 %758, label %759, label %773

759:                                              ; preds = %741
  %760 = load ptr, ptr %7, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.png_struct_def, ptr %760, i32 0, i32 129
  %762 = load ptr, ptr %761, align 8, !tbaa !42
  %763 = load i32, ptr %36, align 4, !tbaa !9
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds i8, ptr %762, i64 %764
  %766 = load i8, ptr %765, align 1, !tbaa !23
  %767 = load ptr, ptr %7, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.png_struct_def, ptr %767, i32 0, i32 109
  %769 = load ptr, ptr %768, align 8, !tbaa !22
  %770 = load i32, ptr %37, align 4, !tbaa !9
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds i8, ptr %769, i64 %771
  store i8 %766, ptr %772, align 1, !tbaa !23
  br label %773

773:                                              ; preds = %759, %741
  %774 = load ptr, ptr %7, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.png_struct_def, ptr %774, i32 0, i32 109
  %776 = load ptr, ptr %775, align 8, !tbaa !22
  %777 = load i32, ptr %37, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds i8, ptr %776, i64 %778
  %780 = load i8, ptr %779, align 1, !tbaa !23
  %781 = zext i8 %780 to i32
  %782 = load i32, ptr %29, align 4, !tbaa !9
  %783 = icmp eq i32 %781, %782
  br i1 %783, label %784, label %798

784:                                              ; preds = %773
  %785 = load ptr, ptr %7, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.png_struct_def, ptr %785, i32 0, i32 129
  %787 = load ptr, ptr %786, align 8, !tbaa !42
  %788 = load i32, ptr %35, align 4, !tbaa !9
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds i8, ptr %787, i64 %789
  %791 = load i8, ptr %790, align 1, !tbaa !23
  %792 = load ptr, ptr %7, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.png_struct_def, ptr %792, i32 0, i32 109
  %794 = load ptr, ptr %793, align 8, !tbaa !22
  %795 = load i32, ptr %37, align 4, !tbaa !9
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds i8, ptr %794, i64 %796
  store i8 %791, ptr %797, align 1, !tbaa !23
  br label %798

798:                                              ; preds = %784, %773
  br label %799

799:                                              ; preds = %798
  %800 = load i32, ptr %37, align 4, !tbaa !9
  %801 = add nsw i32 %800, 1
  store i32 %801, ptr %37, align 4, !tbaa !9
  br label %737, !llvm.loop !51

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

803:                                              ; preds = %802, %717
  %804 = load ptr, ptr %7, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.png_struct_def, ptr %804, i32 0, i32 129
  %806 = load ptr, ptr %805, align 8, !tbaa !42
  %807 = load i32, ptr %35, align 4, !tbaa !9
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds i8, ptr %806, i64 %808
  %810 = load i8, ptr %809, align 1, !tbaa !23
  %811 = load ptr, ptr %7, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.png_struct_def, ptr %811, i32 0, i32 129
  %813 = load ptr, ptr %812, align 8, !tbaa !42
  %814 = load ptr, ptr %7, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.png_struct_def, ptr %814, i32 0, i32 130
  %816 = load ptr, ptr %815, align 8, !tbaa !43
  %817 = load i32, ptr %29, align 4, !tbaa !9
  %818 = sext i32 %817 to i64
  %819 = getelementptr inbounds i8, ptr %816, i64 %818
  %820 = load i8, ptr %819, align 1, !tbaa !23
  %821 = zext i8 %820 to i64
  %822 = getelementptr inbounds i8, ptr %813, i64 %821
  store i8 %810, ptr %822, align 1, !tbaa !23
  %823 = load ptr, ptr %7, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.png_struct_def, ptr %823, i32 0, i32 130
  %825 = load ptr, ptr %824, align 8, !tbaa !43
  %826 = load i32, ptr %29, align 4, !tbaa !9
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds i8, ptr %825, i64 %827
  %829 = load i8, ptr %828, align 1, !tbaa !23
  %830 = load ptr, ptr %7, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.png_struct_def, ptr %830, i32 0, i32 130
  %832 = load ptr, ptr %831, align 8, !tbaa !43
  %833 = load ptr, ptr %7, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.png_struct_def, ptr %833, i32 0, i32 129
  %835 = load ptr, ptr %834, align 8, !tbaa !42
  %836 = load i32, ptr %35, align 4, !tbaa !9
  %837 = sext i32 %836 to i64
  %838 = getelementptr inbounds i8, ptr %835, i64 %837
  %839 = load i8, ptr %838, align 1, !tbaa !23
  %840 = zext i8 %839 to i64
  %841 = getelementptr inbounds i8, ptr %832, i64 %840
  store i8 %829, ptr %841, align 1, !tbaa !23
  %842 = load i32, ptr %29, align 4, !tbaa !9
  %843 = trunc i32 %842 to i8
  %844 = load ptr, ptr %7, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.png_struct_def, ptr %844, i32 0, i32 129
  %846 = load ptr, ptr %845, align 8, !tbaa !42
  %847 = load i32, ptr %35, align 4, !tbaa !9
  %848 = sext i32 %847 to i64
  %849 = getelementptr inbounds i8, ptr %846, i64 %848
  store i8 %843, ptr %849, align 1, !tbaa !23
  %850 = load i32, ptr %35, 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 130
  %854 = load ptr, ptr %853, align 8, !tbaa !43
  %855 = load i32, ptr %29, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %858

858:                                              ; preds = %803, %682, %669
  %859 = load i32, ptr %29, align 4, !tbaa !9
  %860 = load i32, ptr %10, align 4, !tbaa !9
  %861 = icmp sle i32 %859, %860
  br i1 %861, label %862, label %863

862:                                              ; preds = %858
  br label %868

863:                                              ; preds = %858
  br label %864

864:                                              ; preds = %863
  %865 = load ptr, ptr %34, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.png_dsort_struct, ptr %865, i32 0, i32 0
  %867 = load ptr, ptr %866, align 8, !tbaa !45
  store ptr %867, ptr %34, align 8, !tbaa !5
  br label %666, !llvm.loop !52

868:                                              ; preds = %862, %666
  %869 = load i32, ptr %29, align 4, !tbaa !9
  %870 = load i32, ptr %10, align 4, !tbaa !9
  %871 = icmp sle i32 %869, %870
  br i1 %871, label %872, label %873

872:                                              ; preds = %868
  store i32 41, ptr %18, align 4
  br label %874

873:                                              ; preds = %868
  store i32 0, ptr %18, align 4
  br label %874

874:                                              ; preds = %873, %872
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  %875 = load i32, ptr %18, align 4
  switch i32 %875, label %1132 [
    i32 0, label %876
    i32 41, label %881
  ]

876:                                              ; preds = %874
  br label %877

877:                                              ; preds = %876, %653
  br label %878

878:                                              ; preds = %877
  %879 = load i32, ptr %27, align 4, !tbaa !9
  %880 = add nsw i32 %879, 1
  store i32 %880, ptr %27, align 4, !tbaa !9
  br label %649, !llvm.loop !53

881:                                              ; preds = %874, %649
  br label %882

882:                                              ; preds = %881, %645
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %883

883:                                              ; preds = %915, %882
  %884 = load i32, ptr %27, align 4, !tbaa !9
  %885 = icmp slt i32 %884, 769
  br i1 %885, label %886, label %918

886:                                              ; preds = %883
  %887 = load ptr, ptr %31, align 8, !tbaa !5
  %888 = load i32, ptr %27, align 4, !tbaa !9
  %889 = sext i32 %888 to i64
  %890 = getelementptr inbounds ptr, ptr %887, i64 %889
  %891 = load ptr, ptr %890, align 8, !tbaa !5
  %892 = icmp ne ptr %891, null
  br i1 %892, label %893, label %910

893:                                              ; preds = %886
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %894 = load ptr, ptr %31, align 8, !tbaa !5
  %895 = load i32, ptr %27, align 4, !tbaa !9
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds ptr, ptr %894, i64 %896
  %898 = load ptr, ptr %897, align 8, !tbaa !5
  store ptr %898, ptr %38, align 8, !tbaa !5
  br label %899

899:                                              ; preds = %902, %893
  %900 = load ptr, ptr %38, align 8, !tbaa !5
  %901 = icmp ne ptr %900, null
  br i1 %901, label %902, label %909

902:                                              ; preds = %899
  %903 = load ptr, ptr %38, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.png_dsort_struct, ptr %903, i32 0, i32 0
  %905 = load ptr, ptr %904, align 8, !tbaa !45
  store ptr %905, ptr %30, align 8, !tbaa !5
  %906 = load ptr, ptr %7, align 8, !tbaa !5
  %907 = load ptr, ptr %38, align 8, !tbaa !5
  call void @png_free(ptr noundef %906, ptr noundef %907)
  %908 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %908, ptr %38, align 8, !tbaa !5
  br label %899, !llvm.loop !54

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

910:                                              ; preds = %909, %886
  %911 = load ptr, ptr %31, align 8, !tbaa !5
  %912 = load i32, ptr %27, align 4, !tbaa !9
  %913 = sext i32 %912 to i64
  %914 = getelementptr inbounds ptr, ptr %911, i64 %913
  store ptr null, ptr %914, align 8, !tbaa !5
  br label %915

915:                                              ; preds = %910
  %916 = load i32, ptr %27, align 4, !tbaa !9
  %917 = add nsw i32 %916, 1
  store i32 %917, ptr %27, align 4, !tbaa !9
  br label %883, !llvm.loop !55

918:                                              ; preds = %883
  %919 = load i32, ptr %28, align 4, !tbaa !9
  %920 = add nsw i32 %919, 96
  store i32 %920, ptr %28, align 4, !tbaa !9
  br label %529, !llvm.loop !56

921:                                              ; preds = %529
  %922 = load ptr, ptr %7, align 8, !tbaa !5
  %923 = load ptr, ptr %31, align 8, !tbaa !5
  call void @png_free(ptr noundef %922, ptr noundef %923)
  %924 = load ptr, ptr %7, align 8, !tbaa !5
  %925 = load ptr, ptr %7, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.png_struct_def, ptr %925, i32 0, i32 130
  %927 = load ptr, ptr %926, align 8, !tbaa !43
  call void @png_free(ptr noundef %924, ptr noundef %927)
  %928 = load ptr, ptr %7, align 8, !tbaa !5
  %929 = load ptr, ptr %7, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.png_struct_def, ptr %929, i32 0, i32 129
  %931 = load ptr, ptr %930, align 8, !tbaa !42
  call void @png_free(ptr noundef %928, ptr noundef %931)
  %932 = load ptr, ptr %7, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.png_struct_def, ptr %932, i32 0, i32 130
  store ptr null, ptr %933, align 8, !tbaa !43
  %934 = load ptr, ptr %7, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.png_struct_def, ptr %934, i32 0, i32 129
  store ptr null, ptr %935, 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 %936

936:                                              ; preds = %921, %479
  %937 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %937, ptr %9, align 4, !tbaa !9
  br label %938

938:                                              ; preds = %936, %98
  %939 = load ptr, ptr %7, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.png_struct_def, ptr %939, i32 0, i32 52
  %941 = load ptr, ptr %940, align 8, !tbaa !57
  %942 = icmp eq ptr %941, null
  br i1 %942, label %943, label %947

943:                                              ; preds = %938
  %944 = load ptr, ptr %8, align 8, !tbaa !5
  %945 = load ptr, ptr %7, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.png_struct_def, ptr %945, i32 0, i32 52
  store ptr %944, ptr %946, align 8, !tbaa !57
  br label %947

947:                                              ; preds = %943, %938
  %948 = load i32, ptr %9, align 4, !tbaa !9
  %949 = trunc i32 %948 to i16
  %950 = load ptr, ptr %7, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.png_struct_def, ptr %950, i32 0, i32 53
  store i16 %949, ptr %951, align 8, !tbaa !58
  %952 = load i32, ptr %12, align 4, !tbaa !9
  %953 = icmp ne i32 %952, 0
  br i1 %953, label %954, label %1131

954:                                              ; preds = %947
  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
  %955 = load i32, ptr %41, align 4, !tbaa !9
  %956 = zext i32 %955 to i64
  %957 = shl i64 1, %956
  store i64 %957, ptr %45, align 8, !tbaa !59
  %958 = load ptr, ptr %7, align 8, !tbaa !5
  %959 = load i64, ptr %45, align 8, !tbaa !59
  %960 = mul i64 %959, 1
  %961 = call noalias ptr @png_calloc(ptr noundef %958, i64 noundef %960)
  %962 = load ptr, ptr %7, align 8, !tbaa !5
  %963 = getelementptr inbounds %struct.png_struct_def, ptr %962, i32 0, i32 108
  store ptr %961, ptr %963, align 8, !tbaa !60
  %964 = load ptr, ptr %7, align 8, !tbaa !5
  %965 = load i64, ptr %45, align 8, !tbaa !59
  %966 = mul i64 %965, 1
  %967 = call noalias ptr @png_malloc(ptr noundef %964, i64 noundef %966)
  store ptr %967, ptr %40, align 8, !tbaa !5
  %968 = load ptr, ptr %40, align 8, !tbaa !5
  %969 = load i64, ptr %45, align 8, !tbaa !59
  %970 = mul i64 %969, 1
  call void @llvm.memset.p0.i64(ptr align 1 %968, i8 -1, i64 %970, i1 false)
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %971

971:                                              ; preds = %1125, %954
  %972 = load i32, ptr %39, align 4, !tbaa !9
  %973 = load i32, ptr %9, align 4, !tbaa !9
  %974 = icmp slt i32 %972, %973
  br i1 %974, label %975, label %1128

975:                                              ; preds = %971
  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
  %976 = load ptr, ptr %8, align 8, !tbaa !5
  %977 = load i32, ptr %39, align 4, !tbaa !9
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds %struct.png_color_struct, ptr %976, i64 %978
  %980 = getelementptr inbounds %struct.png_color_struct, ptr %979, i32 0, i32 0
  %981 = load i8, ptr %980, align 1, !tbaa !36
  %982 = zext i8 %981 to i32
  %983 = ashr i32 %982, 3
  store i32 %983, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  %984 = load ptr, ptr %8, align 8, !tbaa !5
  %985 = load i32, ptr %39, align 4, !tbaa !9
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds %struct.png_color_struct, ptr %984, i64 %986
  %988 = getelementptr inbounds %struct.png_color_struct, ptr %987, i32 0, i32 1
  %989 = load i8, ptr %988, align 1, !tbaa !38
  %990 = zext i8 %989 to i32
  %991 = ashr i32 %990, 3
  store i32 %991, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  %992 = load ptr, ptr %8, align 8, !tbaa !5
  %993 = load i32, ptr %39, align 4, !tbaa !9
  %994 = sext i32 %993 to i64
  %995 = getelementptr inbounds %struct.png_color_struct, ptr %992, i64 %994
  %996 = getelementptr inbounds %struct.png_color_struct, ptr %995, i32 0, i32 2
  %997 = load i8, ptr %996, align 1, !tbaa !39
  %998 = zext i8 %997 to i32
  %999 = ashr i32 %998, 3
  store i32 %999, ptr %51, align 4, !tbaa !9
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %1000

1000:                                             ; preds = %1121, %975
  %1001 = load i32, ptr %46, align 4, !tbaa !9
  %1002 = load i32, ptr %42, align 4, !tbaa !9
  %1003 = icmp slt i32 %1001, %1002
  br i1 %1003, label %1004, label %1124

1004:                                             ; preds = %1000
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  %1005 = load i32, ptr %46, align 4, !tbaa !9
  %1006 = load i32, ptr %49, align 4, !tbaa !9
  %1007 = icmp sgt i32 %1005, %1006
  br i1 %1007, label %1008, label %1012

1008:                                             ; preds = %1004
  %1009 = load i32, ptr %46, align 4, !tbaa !9
  %1010 = load i32, ptr %49, align 4, !tbaa !9
  %1011 = sub nsw i32 %1009, %1010
  br label %1016

1012:                                             ; preds = %1004
  %1013 = load i32, ptr %49, align 4, !tbaa !9
  %1014 = load i32, ptr %46, align 4, !tbaa !9
  %1015 = sub nsw i32 %1013, %1014
  br label %1016

1016:                                             ; preds = %1012, %1008
  %1017 = phi i32 [ %1011, %1008 ], [ %1015, %1012 ]
  store i32 %1017, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  %1018 = load i32, ptr %46, align 4, !tbaa !9
  %1019 = shl i32 %1018, 10
  store i32 %1019, ptr %53, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %1020

1020:                                             ; preds = %1117, %1016
  %1021 = load i32, ptr %47, align 4, !tbaa !9
  %1022 = load i32, ptr %43, align 4, !tbaa !9
  %1023 = icmp slt i32 %1021, %1022
  br i1 %1023, label %1024, label %1120

1024:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  %1025 = load i32, ptr %47, align 4, !tbaa !9
  %1026 = load i32, ptr %50, align 4, !tbaa !9
  %1027 = icmp sgt i32 %1025, %1026
  br i1 %1027, label %1028, label %1032

1028:                                             ; preds = %1024
  %1029 = load i32, ptr %47, align 4, !tbaa !9
  %1030 = load i32, ptr %50, align 4, !tbaa !9
  %1031 = sub nsw i32 %1029, %1030
  br label %1036

1032:                                             ; preds = %1024
  %1033 = load i32, ptr %50, align 4, !tbaa !9
  %1034 = load i32, ptr %47, align 4, !tbaa !9
  %1035 = sub nsw i32 %1033, %1034
  br label %1036

1036:                                             ; preds = %1032, %1028
  %1037 = phi i32 [ %1031, %1028 ], [ %1035, %1032 ]
  store i32 %1037, ptr %54, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  %1038 = load i32, ptr %52, align 4, !tbaa !9
  %1039 = load i32, ptr %54, align 4, !tbaa !9
  %1040 = add nsw i32 %1038, %1039
  store i32 %1040, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  %1041 = load i32, ptr %52, align 4, !tbaa !9
  %1042 = load i32, ptr %54, align 4, !tbaa !9
  %1043 = icmp sgt i32 %1041, %1042
  br i1 %1043, label %1044, label %1046

1044:                                             ; preds = %1036
  %1045 = load i32, ptr %52, align 4, !tbaa !9
  br label %1048

1046:                                             ; preds = %1036
  %1047 = load i32, ptr %54, align 4, !tbaa !9
  br label %1048

1048:                                             ; preds = %1046, %1044
  %1049 = phi i32 [ %1045, %1044 ], [ %1047, %1046 ]
  store i32 %1049, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  %1050 = load i32, ptr %53, align 4, !tbaa !9
  %1051 = load i32, ptr %47, align 4, !tbaa !9
  %1052 = shl i32 %1051, 5
  %1053 = or i32 %1050, %1052
  store i32 %1053, ptr %57, align 4, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %1054

1054:                                             ; preds = %1113, %1048
  %1055 = load i32, ptr %48, align 4, !tbaa !9
  %1056 = load i32, ptr %44, align 4, !tbaa !9
  %1057 = icmp slt i32 %1055, %1056
  br i1 %1057, label %1058, label %1116

1058:                                             ; preds = %1054
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %1059 = load i32, ptr %57, align 4, !tbaa !9
  %1060 = load i32, ptr %48, align 4, !tbaa !9
  %1061 = or i32 %1059, %1060
  store i32 %1061, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  %1062 = load i32, ptr %48, align 4, !tbaa !9
  %1063 = load i32, ptr %51, align 4, !tbaa !9
  %1064 = icmp sgt i32 %1062, %1063
  br i1 %1064, label %1065, label %1069

1065:                                             ; preds = %1058
  %1066 = load i32, ptr %48, align 4, !tbaa !9
  %1067 = load i32, ptr %51, align 4, !tbaa !9
  %1068 = sub nsw i32 %1066, %1067
  br label %1073

1069:                                             ; preds = %1058
  %1070 = load i32, ptr %51, align 4, !tbaa !9
  %1071 = load i32, ptr %48, align 4, !tbaa !9
  %1072 = sub nsw i32 %1070, %1071
  br label %1073

1073:                                             ; preds = %1069, %1065
  %1074 = phi i32 [ %1068, %1065 ], [ %1072, %1069 ]
  store i32 %1074, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  %1075 = load i32, ptr %56, align 4, !tbaa !9
  %1076 = load i32, ptr %59, align 4, !tbaa !9
  %1077 = icmp sgt i32 %1075, %1076
  br i1 %1077, label %1078, label %1080

1078:                                             ; preds = %1073
  %1079 = load i32, ptr %56, align 4, !tbaa !9
  br label %1082

1080:                                             ; preds = %1073
  %1081 = load i32, ptr %59, align 4, !tbaa !9
  br label %1082

1082:                                             ; preds = %1080, %1078
  %1083 = phi i32 [ %1079, %1078 ], [ %1081, %1080 ]
  store i32 %1083, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #6
  %1084 = load i32, ptr %60, align 4, !tbaa !9
  %1085 = load i32, ptr %55, align 4, !tbaa !9
  %1086 = add nsw i32 %1084, %1085
  %1087 = load i32, ptr %59, align 4, !tbaa !9
  %1088 = add nsw i32 %1086, %1087
  store i32 %1088, ptr %61, align 4, !tbaa !9
  %1089 = load i32, ptr %61, align 4, !tbaa !9
  %1090 = load ptr, ptr %40, align 8, !tbaa !5
  %1091 = load i32, ptr %58, align 4, !tbaa !9
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds i8, ptr %1090, i64 %1092
  %1094 = load i8, ptr %1093, align 1, !tbaa !23
  %1095 = zext i8 %1094 to i32
  %1096 = icmp slt i32 %1089, %1095
  br i1 %1096, label %1097, label %1112

1097:                                             ; preds = %1082
  %1098 = load i32, ptr %61, align 4, !tbaa !9
  %1099 = trunc i32 %1098 to i8
  %1100 = load ptr, ptr %40, align 8, !tbaa !5
  %1101 = load i32, ptr %58, align 4, !tbaa !9
  %1102 = sext i32 %1101 to i64
  %1103 = getelementptr inbounds i8, ptr %1100, i64 %1102
  store i8 %1099, ptr %1103, align 1, !tbaa !23
  %1104 = load i32, ptr %39, align 4, !tbaa !9
  %1105 = trunc i32 %1104 to i8
  %1106 = load ptr, ptr %7, align 8, !tbaa !5
  %1107 = getelementptr inbounds %struct.png_struct_def, ptr %1106, i32 0, i32 108
  %1108 = load ptr, ptr %1107, align 8, !tbaa !60
  %1109 = load i32, ptr %58, align 4, !tbaa !9
  %1110 = sext i32 %1109 to i64
  %1111 = getelementptr inbounds i8, ptr %1108, i64 %1110
  store i8 %1105, ptr %1111, align 1, !tbaa !23
  br label %1112

1112:                                             ; preds = %1097, %1082
  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 %1113

1113:                                             ; preds = %1112
  %1114 = load i32, ptr %48, align 4, !tbaa !9
  %1115 = add nsw i32 %1114, 1
  store i32 %1115, ptr %48, align 4, !tbaa !9
  br label %1054, !llvm.loop !61

1116:                                             ; preds = %1054
  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 %1117

1117:                                             ; preds = %1116
  %1118 = load i32, ptr %47, align 4, !tbaa !9
  %1119 = add nsw i32 %1118, 1
  store i32 %1119, ptr %47, align 4, !tbaa !9
  br label %1020, !llvm.loop !62

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

1121:                                             ; preds = %1120
  %1122 = load i32, ptr %46, align 4, !tbaa !9
  %1123 = add nsw i32 %1122, 1
  store i32 %1123, ptr %46, align 4, !tbaa !9
  br label %1000, !llvm.loop !63

1124:                                             ; preds = %1000
  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 %1125

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

1128:                                             ; preds = %971
  %1129 = load ptr, ptr %7, align 8, !tbaa !5
  %1130 = load ptr, ptr %40, align 8, !tbaa !5
  call void @png_free(ptr noundef %1129, ptr noundef %1130)
  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 %1131

1131:                                             ; preds = %1128, %947, %65
  ret void

1132:                                             ; preds = %874, %639, %628, %207
  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 308}
!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, !6, i64 280, !6, i64 288, !7, i64 296, !7, i64 297, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !14, i64 320, !6, i64 432, !10, i64 440, !10, i64 444, !10, i64 448, !10, i64 452, !10, i64 456, !10, i64 460, !10, i64 464, !10, i64 468, !10, i64 472, !10, i64 476, !10, i64 480, !10, i64 484, !10, i64 488, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !10, i64 512, !10, i64 516, !13, i64 520, !10, i64 528, !10, i64 532, !10, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !13, i64 576, !10, i64 584, !10, i64 588, !6, i64 592, !15, i64 600, !10, i64 604, !15, i64 608, !7, i64 610, !7, i64 611, !7, i64 612, !7, i64 613, !7, i64 614, !7, i64 615, !7, i64 616, !7, i64 617, !7, i64 618, !7, i64 619, !7, i64 620, !7, i64 621, !7, i64 622, !7, i64 623, !7, i64 624, !15, i64 626, !7, i64 628, !10, i64 632, !16, i64 636, !16, i64 646, !6, i64 656, !10, i64 664, !10, i64 668, !10, i64 672, !10, i64 676, !6, i64 680, !6, i64 688, !6, i64 696, !6, i64 704, !6, i64 712, !6, i64 720, !17, i64 728, !17, i64 733, !6, i64 744, !16, i64 752, !6, i64 768, !6, i64 776, !6, i64 784, !6, i64 792, !6, i64 800, !6, i64 808, !6, i64 816, !6, i64 824, !6, i64 832, !10, i64 840, !10, i64 844, !13, i64 848, !13, i64 856, !13, i64 864, !13, i64 872, !10, i64 880, !10, i64 884, !6, i64 888, !6, i64 896, !10, i64 904, !7, i64 908, !10, i64 940, !6, i64 944, !6, i64 952, !10, i64 960, !10, i64 964, !6, i64 968, !7, i64 976, !7, i64 977, !15, i64 978, !15, i64 980, !10, i64 984, !7, i64 988, !6, i64 992, !6, i64 1000, !6, i64 1008, !6, i64 1016, !6, i64 1024, !6, i64 1032, !6, i64 1040, !7, i64 1048, !10, i64 1052, !10, i64 1056, !10, i64 1060, !13, i64 1064, !18, i64 1072, !13, i64 1104, !6, i64 1112, !13, i64 1120, !10, i64 1128, !10, i64 1132, !6, i64 1136, !7, i64 1144, !19, i64 1176}
!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 896}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!12, !6, i64 1024}
!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 1032}
!43 = !{!12, !6, i64 1040}
!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 592}
!58 = !{!12, !15, i64 600}
!59 = !{!13, !13, i64 0}
!60 = !{!12, !6, i64 888}
!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 308
  %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 896
  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 1024
  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 896
  %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 896
  %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 1032
  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 1040
  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 896
  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 592
  %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 600
  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 888
  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 308}
!6 = !{!"png_struct_def", !7, i64 0, !9, i64 200, !9, i64 208, !10, i64 216, !9, i64 224, !9, i64 232, !9, i64 240, !9, i64 248, !9, i64 256, !9, i64 264, !9, i64 272, !9, i64 280, !9, i64 288, !7, i64 296, !7, i64 297, !11, i64 300, !11, i64 304, !11, i64 308, !11, i64 312, !12, i64 320, !9, i64 432, !11, i64 440, !11, i64 444, !11, i64 448, !11, i64 452, !11, i64 456, !11, i64 460, !11, i64 464, !11, i64 468, !11, i64 472, !11, i64 476, !11, i64 480, !11, i64 484, !11, i64 488, !11, i64 492, !11, i64 496, !11, i64 500, !11, i64 504, !11, i64 508, !11, i64 512, !11, i64 516, !10, i64 520, !11, i64 528, !11, i64 532, !11, i64 536, !9, i64 544, !9, i64 552, !9, i64 560, !9, i64 568, !10, i64 576, !11, i64 584, !11, i64 588, !9, i64 592, !13, i64 600, !11, i64 604, !13, i64 608, !7, i64 610, !7, i64 611, !7, i64 612, !7, i64 613, !7, i64 614, !7, i64 615, !7, i64 616, !7, i64 617, !7, i64 618, !7, i64 619, !7, i64 620, !7, i64 621, !7, i64 622, !7, i64 623, !7, i64 624, !13, i64 626, !7, i64 628, !11, i64 632, !14, i64 636, !14, i64 646, !9, i64 656, !11, i64 664, !11, i64 668, !11, i64 672, !11, i64 676, !9, i64 680, !9, i64 688, !9, i64 696, !9, i64 704, !9, i64 712, !9, i64 720, !15, i64 728, !15, i64 733, !9, i64 744, !14, i64 752, !9, i64 768, !9, i64 776, !9, i64 784, !9, i64 792, !9, i64 800, !9, i64 808, !9, i64 816, !9, i64 824, !9, i64 832, !11, i64 840, !11, i64 844, !10, i64 848, !10, i64 856, !10, i64 864, !10, i64 872, !11, i64 880, !11, i64 884, !9, i64 888, !9, i64 896, !11, i64 904, !7, i64 908, !11, i64 940, !9, i64 944, !9, i64 952, !11, i64 960, !11, i64 964, !9, i64 968, !7, i64 976, !7, i64 977, !13, i64 978, !13, i64 980, !11, i64 984, !7, i64 988, !9, i64 992, !9, i64 1000, !9, i64 1008, !9, i64 1016, !9, i64 1024, !9, i64 1032, !9, i64 1040, !7, i64 1048, !11, i64 1052, !11, i64 1056, !11, i64 1060, !10, i64 1064, !16, i64 1072, !10, i64 1104, !9, i64 1112, !10, i64 1120, !11, i64 1128, !11, i64 1132, !9, i64 1136, !7, i64 1144, !17, i64 1176}
!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 896}
!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 1024}
!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 1032}
!43 = !{!6, !9, i64 1040}
!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 592}
!58 = !{!6, !13, i64 600}
!59 = !{!6, !9, i64 888}
!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