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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.png_color_struct = type { i8, i8, i8 }
%struct.png_struct_def = type { [1 x %struct.__jmp_buf_tag], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i64, i64, i64, %struct.z_stream_s, ptr, i64, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_row_info_struct, i64, i64, ptr, i16, i16, [5 x i8], i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i8, float, %struct.png_color_16_struct, %struct.png_color_16_struct, ptr, i64, i64, i32, float, float, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_color_8_struct, %struct.png_color_8_struct, ptr, %struct.png_color_16_struct, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i64, i64, i64, i64, i32, i32, i64, i64, ptr, ptr, ptr, ptr, ptr, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, i32, ptr, i8, i16, i16, i16, i64, i64, i8, i8, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i64, i64, %struct.png_unknown_chunk_t, i64, i64, ptr }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.png_row_info_struct = type { i64, i64, i8, i8, i8, i8 }
%struct.png_color_8_struct = type { i8, i8, i8, i8, i8 }
%struct.png_color_16_struct = type { i8, i16, i16, i16, i16 }
%struct.png_unknown_chunk_t = type { [5 x i8], ptr, i64, i8 }
%struct.png_dsort_struct = type { ptr, i8, i8 }

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

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

64:                                               ; preds = %6
  br label %1136

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

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

80:                                               ; preds = %93, %72
  %81 = load i32, ptr %13, align 4, !tbaa !9
  %82 = load i32, ptr %9, align 4, !tbaa !9
  %83 = icmp slt i32 %81, %82
  br i1 %83, label %84, label %96

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

93:                                               ; preds = %84
  %94 = load i32, ptr %13, align 4, !tbaa !9
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %13, align 4, !tbaa !9
  br label %80, !llvm.loop !23

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

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

101:                                              ; preds = %97
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = icmp ne ptr %102, null
  br i1 %103, label %104, label %485

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

112:                                              ; preds = %125, %104
  %113 = load i32, ptr %14, align 4, !tbaa !9
  %114 = load i32, ptr %9, align 4, !tbaa !9
  %115 = icmp slt i32 %113, %114
  br i1 %115, label %116, label %128

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

125:                                              ; preds = %116
  %126 = load i32, ptr %14, align 4, !tbaa !9
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %14, align 4, !tbaa !9
  br label %112, !llvm.loop !26

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

131:                                              ; preds = %209, %128
  %132 = load i32, ptr %14, align 4, !tbaa !9
  %133 = load i32, ptr %10, align 4, !tbaa !9
  %134 = icmp sge i32 %132, %133
  br i1 %134, label %135, label %212

135:                                              ; preds = %131
  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 %136

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

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

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

197:                                              ; preds = %167, %140
  br label %198

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

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

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

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

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

208:                                              ; preds = %206
  br label %209

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

212:                                              ; preds = %206, %131
  %213 = load i32, ptr %12, align 4, !tbaa !9
  %214 = icmp ne i32 %213, 0
  br i1 %214, label %215, label %261

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

217:                                              ; preds = %257, %215
  %218 = load i32, ptr %14, align 4, !tbaa !9
  %219 = load i32, ptr %10, align 4, !tbaa !9
  %220 = icmp slt i32 %218, %219
  br i1 %220, label %221, label %260

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

232:                                              ; preds = %221
  br label %233

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

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

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

256:                                              ; preds = %247, %221
  br label %257

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

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

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

263:                                              ; preds = %327, %261
  %264 = load i32, ptr %14, align 4, !tbaa !9
  %265 = load i32, ptr %10, align 4, !tbaa !9
  %266 = icmp slt i32 %264, %265
  br i1 %266, label %267, label %330

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

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

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

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

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

326:                                              ; preds = %293, %267
  br label %327

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

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

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

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

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

399:                                              ; preds = %461, %346
  %400 = load i32, ptr %23, align 4, !tbaa !9
  %401 = load i32, ptr %10, align 4, !tbaa !9
  %402 = icmp slt i32 %400, %401
  br i1 %402, label %403, label %464

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

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

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

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

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

473:                                              ; preds = %464, %335
  br label %474

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

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

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

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

500:                                              ; preds = %521, %485
  %501 = load i32, ptr %27, align 4, !tbaa !9
  %502 = load i32, ptr %9, align 4, !tbaa !9
  %503 = icmp slt i32 %501, %502
  br i1 %503, label %504, label %524

504:                                              ; preds = %500
  %505 = load i32, ptr %27, align 4, !tbaa !9
  %506 = trunc i32 %505 to i8
  %507 = load ptr, ptr %7, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.png_struct_def, ptr %507, i32 0, i32 129
  %509 = load ptr, ptr %508, align 8, !tbaa !41
  %510 = load i32, ptr %27, align 4, !tbaa !9
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds i8, ptr %509, i64 %511
  store i8 %506, ptr %512, align 1, !tbaa !22
  %513 = load i32, ptr %27, align 4, !tbaa !9
  %514 = trunc i32 %513 to i8
  %515 = load ptr, ptr %7, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.png_struct_def, ptr %515, i32 0, i32 130
  %517 = load ptr, ptr %516, align 8, !tbaa !42
  %518 = load i32, ptr %27, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i8, ptr %517, i64 %519
  store i8 %514, ptr %520, align 1, !tbaa !22
  br label %521

521:                                              ; preds = %504
  %522 = load i32, ptr %27, align 4, !tbaa !9
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %27, align 4, !tbaa !9
  br label %500, !llvm.loop !43

524:                                              ; preds = %500
  %525 = load ptr, ptr %7, align 8, !tbaa !5
  %526 = call ptr @png_malloc(ptr noundef %525, i64 noundef 6152)
  store ptr %526, ptr %31, align 8, !tbaa !5
  %527 = load ptr, ptr %31, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %527, i8 0, i64 6152, i1 false)
  %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, %524
  %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 !35
  %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 !35
  %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 !37
  %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 !37
  %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 !38
  %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 !38
  %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 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 !44
  %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 !46
  %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 !47
  %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 %1137 [
    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 !48

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 %1137 [
    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 !49

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 !41
  %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 !46
  %676 = zext i8 %675 to i64
  %677 = getelementptr inbounds i8, ptr %672, i64 %676
  %678 = load i8, ptr %677, align 1, !tbaa !22
  %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 !41
  %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 !47
  %689 = zext i8 %688 to i64
  %690 = getelementptr inbounds i8, ptr %685, i64 %689
  %691 = load i8, ptr %690, align 1, !tbaa !22
  %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 !46
  %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 !47
  %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 !47
  %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 !46
  %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 !41
  %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 !22
  %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 !31
  %734 = load i32, ptr %12, align 4, !tbaa !9
  %735 = icmp ne i32 %734, 0
  br i1 %735, label %803, label %736

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 99
  %744 = load ptr, ptr %743, align 8, !tbaa !21
  %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 !22
  %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 !41
  %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 !22
  %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 !41
  %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 !22
  %767 = load ptr, ptr %7, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.png_struct_def, ptr %767, i32 0, i32 99
  %769 = load ptr, ptr %768, align 8, !tbaa !21
  %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 !22
  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 99
  %776 = load ptr, ptr %775, align 8, !tbaa !21
  %777 = load i32, ptr %37, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds i8, ptr %776, i64 %778
  %780 = load i8, ptr %779, align 1, !tbaa !22
  %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 !41
  %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 !22
  %792 = load ptr, ptr %7, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.png_struct_def, ptr %792, i32 0, i32 99
  %794 = load ptr, ptr %793, align 8, !tbaa !21
  %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 !22
  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 !50

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 !41
  %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 !22
  %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 !41
  %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 !42
  %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 !22
  %821 = zext i8 %820 to i64
  %822 = getelementptr inbounds i8, ptr %813, i64 %821
  store i8 %810, ptr %822, align 1, !tbaa !22
  %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 !42
  %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 !22
  %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 !42
  %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 !41
  %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 !22
  %840 = zext i8 %839 to i64
  %841 = getelementptr inbounds i8, ptr %832, i64 %840
  store i8 %829, ptr %841, align 1, !tbaa !22
  %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 !41
  %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 !22
  %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 !42
  %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 !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %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 !44
  store ptr %867, ptr %34, align 8, !tbaa !5
  br label %666, !llvm.loop !51

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 %1137 [
    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 !52

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 !44
  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 !53

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 !54

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 !55

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 !42
  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 !41
  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 !42
  %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 !41
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %936

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

938:                                              ; preds = %936, %97
  %939 = load ptr, ptr %7, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.png_struct_def, ptr %939, i32 0, i32 40
  %941 = load ptr, ptr %940, align 8, !tbaa !56
  %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 40
  store ptr %944, ptr %946, align 8, !tbaa !56
  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 41
  store i16 %949, ptr %951, align 8, !tbaa !57
  %952 = load i32, ptr %12, align 4, !tbaa !9
  %953 = icmp ne i32 %952, 0
  br i1 %953, label %954, label %1136

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 !58
  %958 = load ptr, ptr %7, align 8, !tbaa !5
  %959 = load i64, ptr %45, align 8, !tbaa !58
  %960 = mul i64 %959, 1
  %961 = call ptr @png_malloc(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 98
  store ptr %961, ptr %963, align 8, !tbaa !59
  %964 = load ptr, ptr %7, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct.png_struct_def, ptr %964, i32 0, i32 98
  %966 = load ptr, ptr %965, align 8, !tbaa !59
  %967 = load i64, ptr %45, align 8, !tbaa !58
  %968 = mul i64 %967, 1
  call void @llvm.memset.p0.i64(ptr align 1 %966, i8 0, i64 %968, i1 false)
  %969 = load ptr, ptr %7, align 8, !tbaa !5
  %970 = load i64, ptr %45, align 8, !tbaa !58
  %971 = mul i64 %970, 1
  %972 = call ptr @png_malloc(ptr noundef %969, i64 noundef %971)
  store ptr %972, ptr %40, align 8, !tbaa !5
  %973 = load ptr, ptr %40, align 8, !tbaa !5
  %974 = load i64, ptr %45, align 8, !tbaa !58
  %975 = mul i64 %974, 1
  call void @llvm.memset.p0.i64(ptr align 1 %973, i8 -1, i64 %975, i1 false)
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %976

976:                                              ; preds = %1130, %954
  %977 = load i32, ptr %39, align 4, !tbaa !9
  %978 = load i32, ptr %9, align 4, !tbaa !9
  %979 = icmp slt i32 %977, %978
  br i1 %979, label %980, label %1133

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

1005:                                             ; preds = %1126, %980
  %1006 = load i32, ptr %46, align 4, !tbaa !9
  %1007 = load i32, ptr %42, align 4, !tbaa !9
  %1008 = icmp slt i32 %1006, %1007
  br i1 %1008, label %1009, label %1129

1009:                                             ; preds = %1005
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  %1010 = load i32, ptr %46, align 4, !tbaa !9
  %1011 = load i32, ptr %49, align 4, !tbaa !9
  %1012 = icmp sgt i32 %1010, %1011
  br i1 %1012, label %1013, label %1017

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

1017:                                             ; preds = %1009
  %1018 = load i32, ptr %49, align 4, !tbaa !9
  %1019 = load i32, ptr %46, align 4, !tbaa !9
  %1020 = sub nsw i32 %1018, %1019
  br label %1021

1021:                                             ; preds = %1017, %1013
  %1022 = phi i32 [ %1016, %1013 ], [ %1020, %1017 ]
  store i32 %1022, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  %1023 = load i32, ptr %46, align 4, !tbaa !9
  %1024 = shl i32 %1023, 10
  store i32 %1024, ptr %53, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %1025

1025:                                             ; preds = %1122, %1021
  %1026 = load i32, ptr %47, align 4, !tbaa !9
  %1027 = load i32, ptr %43, align 4, !tbaa !9
  %1028 = icmp slt i32 %1026, %1027
  br i1 %1028, label %1029, label %1125

1029:                                             ; preds = %1025
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  %1030 = load i32, ptr %47, align 4, !tbaa !9
  %1031 = load i32, ptr %50, align 4, !tbaa !9
  %1032 = icmp sgt i32 %1030, %1031
  br i1 %1032, label %1033, label %1037

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

1037:                                             ; preds = %1029
  %1038 = load i32, ptr %50, align 4, !tbaa !9
  %1039 = load i32, ptr %47, align 4, !tbaa !9
  %1040 = sub nsw i32 %1038, %1039
  br label %1041

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

1049:                                             ; preds = %1041
  %1050 = load i32, ptr %52, align 4, !tbaa !9
  br label %1053

1051:                                             ; preds = %1041
  %1052 = load i32, ptr %54, align 4, !tbaa !9
  br label %1053

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

1059:                                             ; preds = %1118, %1053
  %1060 = load i32, ptr %48, align 4, !tbaa !9
  %1061 = load i32, ptr %44, align 4, !tbaa !9
  %1062 = icmp slt i32 %1060, %1061
  br i1 %1062, label %1063, label %1121

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

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

1074:                                             ; preds = %1063
  %1075 = load i32, ptr %51, align 4, !tbaa !9
  %1076 = load i32, ptr %48, align 4, !tbaa !9
  %1077 = sub nsw i32 %1075, %1076
  br label %1078

1078:                                             ; preds = %1074, %1070
  %1079 = phi i32 [ %1073, %1070 ], [ %1077, %1074 ]
  store i32 %1079, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  %1080 = load i32, ptr %56, align 4, !tbaa !9
  %1081 = load i32, ptr %59, align 4, !tbaa !9
  %1082 = icmp sgt i32 %1080, %1081
  br i1 %1082, label %1083, label %1085

1083:                                             ; preds = %1078
  %1084 = load i32, ptr %56, align 4, !tbaa !9
  br label %1087

1085:                                             ; preds = %1078
  %1086 = load i32, ptr %59, align 4, !tbaa !9
  br label %1087

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

1102:                                             ; preds = %1087
  %1103 = load i32, ptr %61, align 4, !tbaa !9
  %1104 = trunc i32 %1103 to i8
  %1105 = load ptr, ptr %40, align 8, !tbaa !5
  %1106 = load i32, ptr %58, align 4, !tbaa !9
  %1107 = sext i32 %1106 to i64
  %1108 = getelementptr inbounds i8, ptr %1105, i64 %1107
  store i8 %1104, ptr %1108, align 1, !tbaa !22
  %1109 = load i32, ptr %39, align 4, !tbaa !9
  %1110 = trunc i32 %1109 to i8
  %1111 = load ptr, ptr %7, align 8, !tbaa !5
  %1112 = getelementptr inbounds %struct.png_struct_def, ptr %1111, i32 0, i32 98
  %1113 = load ptr, ptr %1112, align 8, !tbaa !59
  %1114 = load i32, ptr %58, align 4, !tbaa !9
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds i8, ptr %1113, i64 %1115
  store i8 %1110, ptr %1116, align 1, !tbaa !22
  br label %1117

1117:                                             ; preds = %1102, %1087
  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 %1118

1118:                                             ; preds = %1117
  %1119 = load i32, ptr %48, align 4, !tbaa !9
  %1120 = add nsw i32 %1119, 1
  store i32 %1120, ptr %48, align 4, !tbaa !9
  br label %1059, !llvm.loop !60

1121:                                             ; preds = %1059
  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 %1122

1122:                                             ; preds = %1121
  %1123 = load i32, ptr %47, align 4, !tbaa !9
  %1124 = add nsw i32 %1123, 1
  store i32 %1124, ptr %47, align 4, !tbaa !9
  br label %1025, !llvm.loop !61

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

1126:                                             ; preds = %1125
  %1127 = load i32, ptr %46, align 4, !tbaa !9
  %1128 = add nsw i32 %1127, 1
  store i32 %1128, ptr %46, align 4, !tbaa !9
  br label %1005, !llvm.loop !62

1129:                                             ; preds = %1005
  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 %1130

1130:                                             ; preds = %1129
  %1131 = load i32, ptr %39, align 4, !tbaa !9
  %1132 = add nsw i32 %1131, 1
  store i32 %1132, ptr %39, align 4, !tbaa !9
  br label %976, !llvm.loop !63

1133:                                             ; preds = %976
  %1134 = load ptr, ptr %7, align 8, !tbaa !5
  %1135 = load ptr, ptr %40, align 8, !tbaa !5
  call void @png_free(ptr noundef %1134, ptr noundef %1135)
  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 %1136

1136:                                             ; preds = %1133, %947, %64
  ret void

1137:                                             ; preds = %874, %639, %628, %206
  unreachable
}

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }

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

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


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

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

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

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

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

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

.lr.ph.preheader:                                 ; preds = %13
  %wide.trip.count = zext nneg i32 %2 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %18 = icmp ult i32 %2, 4
  br i1 %18, label %.loopexit472.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

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

.loopexit472.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 %.loopexit472, label %.lr.ph.epil

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

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

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

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

.lr.ph481.preheader:                              ; preds = %38
  %wide.trip.count552 = zext nneg i32 %2 to i64
  %xtraiter692 = and i64 %wide.trip.count552, 3
  %41 = icmp ult i32 %2, 4
  br i1 %41, label %.preheader471.loopexit.unr-lcssa, label %.lr.ph481.preheader.new

.lr.ph481.preheader.new:                          ; preds = %.lr.ph481.preheader
  %unroll_iter695 = and i64 %wide.trip.count552, 2147483644
  br label %.lr.ph481

.preheader471.loopexit.unr-lcssa:                 ; preds = %.lr.ph481, %.lr.ph481.preheader
  %indvars.iv549.unr = phi i64 [ 0, %.lr.ph481.preheader ], [ %indvars.iv.next550.3, %.lr.ph481 ]
  %lcmp.mod694.not = icmp eq i64 %xtraiter692, 0
  br i1 %lcmp.mod694.not, label %.preheader471, label %.lr.ph481.epil

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

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

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

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

.lr.ph484.preheader:                              ; preds = %57
  %wide.trip.count559 = zext i32 %indvars.iv557 to i64
  br label %.lr.ph484

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

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

73:                                               ; preds = %.lr.ph484, %70
  %.1360 = phi i32 [ 0, %70 ], [ %.0359483, %.lr.ph484 ]
  %exitcond560.not = icmp eq i64 %indvars.iv.next555, %wide.trip.count559
  br i1 %exitcond560.not, label %._crit_edge, label %.lr.ph484, !llvm.loop !29

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

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

.preheader468:                                    ; preds = %._crit_edge.thread
  br i1 %74, label %.lr.ph487.preheader, label %.loopexit465

.lr.ph487.preheader:                              ; preds = %.preheader468
  %wide.trip.count567 = zext nneg i32 %3 to i64
  %75 = trunc i32 %3 to i8
  br label %.lr.ph487

.preheader466:                                    ; preds = %._crit_edge.thread
  br i1 %74, label %.lr.ph490, label %.preheader464

.lr.ph490:                                        ; preds = %.preheader466
  %76 = getelementptr inbounds i8, ptr %0, i64 968
  %wide.trip.count575 = zext nneg i32 %3 to i64
  %77 = trunc i32 %3 to i8
  br label %94

.lr.ph487:                                        ; preds = %.lr.ph487.preheader, %89
  %indvars.iv564 = phi i64 [ 0, %.lr.ph487.preheader ], [ %indvars.iv.next565, %89 ]
  %.0366485 = phi i32 [ %2, %.lr.ph487.preheader ], [ %.2368, %89 ]
  %78 = load ptr, ptr %39, align 8, !tbaa !25
  %79 = getelementptr inbounds i8, ptr %78, i64 %indvars.iv564
  %80 = load i8, ptr %79, align 1, !tbaa !20
  %81 = zext i8 %80 to i32
  %.not439 = icmp slt i32 %81, %3
  br i1 %.not439, label %89, label %.preheader467.preheader

.preheader467.preheader:                          ; preds = %.lr.ph487
  %82 = sext i32 %.0366485 to i64
  br label %.preheader467

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

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

89:                                               ; preds = %.lr.ph487, %85
  %.2368 = phi i32 [ %86, %85 ], [ %.0366485, %.lr.ph487 ]
  %indvars.iv.next565 = add nuw nsw i64 %indvars.iv564, 1
  %exitcond568.not = icmp eq i64 %indvars.iv.next565, %wide.trip.count567
  br i1 %exitcond568.not, label %.loopexit465, label %.lr.ph487, !llvm.loop !32

.preheader464:                                    ; preds = %114, %.preheader466
  br i1 %40, label %.lr.ph499, label %.loopexit465

.lr.ph499:                                        ; preds = %.preheader464
  %90 = getelementptr inbounds i8, ptr %0, i64 968
  %91 = getelementptr inbounds i8, ptr %1, i64 1
  %92 = getelementptr inbounds i8, ptr %1, i64 2
  %93 = icmp sgt i32 %3, 1
  %wide.trip.count585 = zext nneg i32 %2 to i64
  %wide.trip.count580 = zext nneg i32 %3 to i64
  br label %115

94:                                               ; preds = %.lr.ph490, %114
  %indvars.iv572 = phi i64 [ 0, %.lr.ph490 ], [ %indvars.iv.next573, %114 ]
  %.0369488 = phi i32 [ %2, %.lr.ph490 ], [ %.2371, %114 ]
  %95 = load ptr, ptr %39, align 8, !tbaa !25
  %96 = getelementptr inbounds i8, ptr %95, i64 %indvars.iv572
  %97 = load i8, ptr %96, align 1, !tbaa !20
  %98 = zext i8 %97 to i32
  %.not437 = icmp slt i32 %98, %3
  br i1 %.not437, label %114, label %99

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

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

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

114:                                              ; preds = %94, %104
  %.2371 = phi i32 [ %105, %104 ], [ %.0369488, %94 ]
  %indvars.iv.next573 = add nuw nsw i64 %indvars.iv572, 1
  %exitcond576.not = icmp eq i64 %indvars.iv.next573, %wide.trip.count575
  br i1 %exitcond576.not, label %.preheader464, label %94, !llvm.loop !34

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

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

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

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

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

165:                                              ; preds = %115, %._crit_edge496
  %indvars.iv.next583 = add nuw nsw i64 %indvars.iv582, 1
  %exitcond586.not = icmp eq i64 %indvars.iv.next583, %wide.trip.count585
  br i1 %exitcond586.not, label %.loopexit465, label %115, !llvm.loop !40

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

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

.lr.ph502.preheader:                              ; preds = %167
  %wide.trip.count590 = zext nneg i32 %2 to i64
  %xtraiter697 = and i64 %wide.trip.count590, 1
  %172 = icmp eq i32 %2, 1
  br i1 %172, label %.preheader462.lr.ph.loopexit.unr-lcssa, label %.lr.ph502.preheader.new

.lr.ph502.preheader.new:                          ; preds = %.lr.ph502.preheader
  %unroll_iter700 = and i64 %wide.trip.count590, 2147483646
  br label %.lr.ph502

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

.preheader462.lr.ph.loopexit.unr-lcssa:           ; preds = %.lr.ph502, %.lr.ph502.preheader
  %indvars.iv587.unr = phi i64 [ 0, %.lr.ph502.preheader ], [ %indvars.iv.next588.1, %.lr.ph502 ]
  %lcmp.mod699.not = icmp eq i64 %xtraiter697, 0
  br i1 %lcmp.mod699.not, label %.preheader462.lr.ph, label %.lr.ph502.epil

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

.preheader462.lr.ph:                              ; preds = %.lr.ph502.epil, %.preheader462.lr.ph.loopexit.unr-lcssa, %167
  %188 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 6152) #7
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(6152) %188, i8 0, i64 6152, i1 false)
  %189 = getelementptr inbounds i8, ptr %0, i64 968
  %wide.trip.count619 = zext nneg i32 %2 to i64
  br label %.preheader462

.preheader462:                                    ; preds = %.preheader462.lr.ph, %414
  %indvars.iv630 = phi i64 [ 97, %.preheader462.lr.ph ], [ %indvars.iv.next631, %414 ]
  %.0381523 = phi i32 [ 96, %.preheader462.lr.ph ], [ %415, %414 ]
  %.0385522 = phi i32 [ %2, %.preheader462.lr.ph ], [ %.6, %414 ]
  %.0390521 = phi ptr [ null, %.preheader462.lr.ph ], [ %.9, %414 ]
  %190 = tail call i32 @llvm.smax.i32(i32 %.0385522, i32 1)
  %smax = add nsw i32 %190, -1
  %wide.trip.count602 = zext nneg i32 %smax to i64
  %wide.trip.count597 = zext i32 %.0385522 to i64
  br label %191

191:                                              ; preds = %.preheader462, %._crit_edge508
  %indvars.iv599 = phi i64 [ 0, %.preheader462 ], [ %indvars.iv.next600, %._crit_edge508 ]
  %indvars.iv592 = phi i64 [ 1, %.preheader462 ], [ %indvars.iv.next593, %._crit_edge508 ]
  %.1391 = phi ptr [ %.0390521, %.preheader462 ], [ %.4394.ph, %._crit_edge508 ]
  %exitcond603.not = icmp eq i64 %indvars.iv599, %wide.trip.count602
  br i1 %exitcond603.not, label %232, label %.lr.ph507

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

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

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

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

230:                                              ; preds = %223, %196
  %.4394.ph = phi ptr [ %.2392505, %196 ], [ %221, %223 ]
  %indvars.iv.next595 = add nuw nsw i64 %indvars.iv594, 1
  %exitcond598.not = icmp eq i64 %indvars.iv.next595, %wide.trip.count597
  br i1 %exitcond598.not, label %._crit_edge508, label %196, !llvm.loop !49

._crit_edge508:                                   ; preds = %230
  %231 = icmp eq ptr %.4394.ph, null
  %indvars.iv.next593 = add nuw nsw i64 %indvars.iv592, 1
  br i1 %231, label %.thread453, label %191

232:                                              ; preds = %191
  %.not425 = icmp eq ptr %.1391, null
  br i1 %.not425, label %.thread453, label %.preheader460

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

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

.preheader460.split.us.split.us:                  ; preds = %.preheader460.split.us, %.split.us.us.split.us.us.thread
  %indvars.iv621 = phi i64 [ %indvars.iv.next622, %.split.us.us.split.us.us.thread ], [ 0, %.preheader460.split.us ]
  %.1386514.us.us = phi i32 [ %.5.us.us, %.split.us.us.split.us.us.thread ], [ %.0385522, %.preheader460.split.us ]
  %233 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv621
  %234 = load ptr, ptr %233, align 8, !tbaa !44
  %.not427.us.us = icmp eq ptr %234, null
  br i1 %.not427.us.us, label %.split.us.us.split.us.us.thread, label %.preheader459.us.us

.split.us.us.split.us.us.thread:                  ; preds = %262, %.preheader460.split.us.split.us
  %.5.us.us = phi i32 [ %.1386514.us.us, %.preheader460.split.us.split.us ], [ %.3388.us.us.us.us, %262 ]
  %indvars.iv.next622 = add nuw nsw i64 %indvars.iv621, 1
  %exitcond625.not = icmp eq i64 %indvars.iv.next622, %indvars.iv630
  br i1 %exitcond625.not, label %.thread453, label %.preheader460.split.us.split.us, !llvm.loop !50

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

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

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

261:                                              ; preds = %..loopexit_crit_edge.us.us.us.us, %243, %.preheader459.us.us
  %.3388.us.us.us.us = phi i32 [ %252, %..loopexit_crit_edge.us.us.us.us ], [ %.2387513.us.us.us.us, %243 ], [ %.2387513.us.us.us.us, %.preheader459.us.us ]
  %.not430.us.us.us.us = icmp sgt i32 %.3388.us.us.us.us, %3
  br i1 %.not430.us.us.us.us, label %262, label %.thread453

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

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

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

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

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

285:                                              ; preds = %280, %275
  %indvars.iv.next617 = add nuw nsw i64 %indvars.iv616, 1
  %exitcond620.not = icmp eq i64 %indvars.iv.next617, %wide.trip.count619
  br i1 %exitcond620.not, label %..loopexit_crit_edge.us.us.us.us, label %264, !llvm.loop !52

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

.preheader460.split.us.split:                     ; preds = %.preheader460.split.us, %.split.us.us.split.thread
  %indvars.iv611 = phi i64 [ %indvars.iv.next612, %.split.us.us.split.thread ], [ 0, %.preheader460.split.us ]
  %.1386514.us = phi i32 [ %.5.us, %.split.us.us.split.thread ], [ %.0385522, %.preheader460.split.us ]
  %307 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv611
  %308 = load ptr, ptr %307, align 8, !tbaa !44
  %.not427.us = icmp eq ptr %308, null
  br i1 %.not427.us, label %.split.us.us.split.thread, label %.preheader459.us

.split.us.us.split.thread:                        ; preds = %356, %.preheader460.split.us.split
  %.5.us = phi i32 [ %.1386514.us, %.preheader460.split.us.split ], [ %.3388.us.us, %356 ]
  %indvars.iv.next612 = add nuw nsw i64 %indvars.iv611, 1
  %exitcond615.not = icmp eq i64 %indvars.iv.next612, %indvars.iv630
  br i1 %exitcond615.not, label %.thread453, label %.preheader460.split.us.split, !llvm.loop !50

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

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

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

355:                                              ; preds = %.preheader.us.us, %317, %.preheader459.us
  %.3388.us.us = phi i32 [ %326, %.preheader.us.us ], [ %.2387513.us.us, %317 ], [ %.2387513.us.us, %.preheader459.us ]
  %.not430.us.us = icmp sgt i32 %.3388.us.us, %3
  br i1 %.not430.us.us, label %356, label %.thread453

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

.preheader460.split:                              ; preds = %.preheader460, %.split.thread
  %indvars.iv604 = phi i64 [ %indvars.iv.next605, %.split.thread ], [ 0, %.preheader460 ]
  %.1386514 = phi i32 [ %.5, %.split.thread ], [ %.0385522, %.preheader460 ]
  %358 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv604
  %359 = load ptr, ptr %358, align 8, !tbaa !44
  %.not427 = icmp eq ptr %359, null
  br i1 %.not427, label %.split.thread, label %.preheader459

.preheader459:                                    ; preds = %.preheader460.split, %408
  %.2387513 = phi i32 [ %.3388, %408 ], [ %.1386514, %.preheader460.split ]
  %.0398512 = phi ptr [ %409, %408 ], [ %359, %.preheader460.split ]
  %360 = load ptr, ptr %168, align 8, !tbaa !41
  %361 = getelementptr inbounds i8, ptr %.0398512, i64 8
  %362 = load i8, ptr %361, align 8, !tbaa !47
  %363 = zext i8 %362 to i64
  %364 = getelementptr inbounds i8, ptr %360, i64 %363
  %365 = load i8, ptr %364, align 1, !tbaa !20
  %366 = zext i8 %365 to i32
  %367 = icmp sgt i32 %.2387513, %366
  br i1 %367, label %368, label %407

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

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

407:                                              ; preds = %376, %368, %.preheader459
  %.3388 = phi i32 [ %378, %376 ], [ %.2387513, %368 ], [ %.2387513, %.preheader459 ]
  %.not430 = icmp sgt i32 %.3388, %3
  br i1 %.not430, label %408, label %.thread453

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

.split.thread:                                    ; preds = %408, %.preheader460.split
  %.5 = phi i32 [ %.1386514, %.preheader460.split ], [ %.3388, %408 ]
  %indvars.iv.next605 = add nuw nsw i64 %indvars.iv604, 1
  %exitcond610.not = icmp eq i64 %indvars.iv.next605, %indvars.iv630
  br i1 %exitcond610.not, label %.thread453, label %.preheader460.split, !llvm.loop !50

.thread453:                                       ; preds = %._crit_edge508, %.split.thread, %.split.us.us.split.thread, %.split.us.us.split.us.us.thread, %220, %407, %355, %261, %232
  %.6396456 = phi ptr [ null, %232 ], [ %.1391, %261 ], [ %.1391, %355 ], [ %.1391, %407 ], [ null, %220 ], [ %.1391, %.split.us.us.split.us.us.thread ], [ %.1391, %.split.us.us.split.thread ], [ %.1391, %.split.thread ], [ null, %._crit_edge508 ]
  %.6 = phi i32 [ %.0385522, %232 ], [ %.3388.us.us.us.us, %261 ], [ %.3388.us.us, %355 ], [ %.3388, %407 ], [ %.0385522, %220 ], [ %.5.us.us, %.split.us.us.split.us.us.thread ], [ %.5.us, %.split.us.us.split.thread ], [ %.5, %.split.thread ], [ %.0385522, %._crit_edge508 ]
  br label %410

410:                                              ; preds = %.thread453, %.loopexit458
  %indvars.iv626 = phi i64 [ 0, %.thread453 ], [ %indvars.iv.next627, %.loopexit458 ]
  %.7519 = phi ptr [ %.6396456, %.thread453 ], [ %.9, %.loopexit458 ]
  %411 = getelementptr inbounds ptr, ptr %188, i64 %indvars.iv626
  %412 = load ptr, ptr %411, align 8, !tbaa !44
  %.not432 = icmp eq ptr %412, null
  br i1 %.not432, label %.loopexit458, label %.preheader457

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

.loopexit458:                                     ; preds = %.preheader457, %410
  %.9 = phi ptr [ %.7519, %410 ], [ null, %.preheader457 ]
  store ptr null, ptr %411, align 8, !tbaa !44
  %indvars.iv.next627 = add nuw nsw i64 %indvars.iv626, 1
  %exitcond629.not = icmp eq i64 %indvars.iv.next627, 769
  br i1 %exitcond629.not, label %414, label %410, !llvm.loop !54

414:                                              ; preds = %.loopexit458
  %415 = add nuw nsw i32 %.0381523, 96
  %416 = icmp sgt i32 %.6, %3
  %indvars.iv.next631 = add nuw i64 %indvars.iv630, 96
  br i1 %416, label %.preheader462, label %._crit_edge527, !llvm.loop !55

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

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

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

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

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

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

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

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

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

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

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

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

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

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

486:                                              ; preds = %485
  %indvars.iv.next646 = add nuw nsw i64 %indvars.iv645, 1
  %exitcond649.not = icmp eq i64 %indvars.iv.next646, %wide.trip.count648
  br i1 %exitcond649.not, label %._crit_edge534, label %.lr.ph533, !llvm.loop !62

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }

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

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


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