; LLVM IR from corentinartaud/graphics :: ThirdParty/FreeImage-3170/Source/LibPNG (png)

; 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_info_def = type { i32, i32, i32, i64, ptr, i16, i16, i8, i8, i8, i8, i8, i8, i8, i8, [8 x i8], %struct.png_colorspace, ptr, ptr, i32, i32, i32, ptr, %struct.png_time_struct, %struct.png_color_8_struct, ptr, %struct.png_color_16_struct, %struct.png_color_16_struct, i32, i32, i8, i32, i32, i8, ptr, ptr, i32, i32, ptr, ptr, i8, i8, i32, ptr, i32, ptr, i32, i8, ptr, ptr, ptr }
%struct.png_colorspace = type { i32, %struct.png_xy, %struct.png_XYZ, i16, i16 }
%struct.png_xy = type { i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.png_XYZ = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.png_time_struct = type { i16, i8, 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_text_struct = type { i32, ptr, ptr, i64, i64, ptr, ptr }
%struct.png_sPLT_struct = type { ptr, i8, ptr, i32 }
%struct.png_unknown_chunk_t = type { [5 x i8], ptr, i64, i8 }

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @png_free_data(ptr noalias noundef %0, ptr noalias noundef %1, i32 noundef %2, i32 noundef %3) #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !9
  %14 = load ptr, ptr %5, align 8, !tbaa !5
  %15 = icmp eq ptr %14, null
  br i1 %15, label %19, label %16

16:                                               ; preds = %4
  %17 = load ptr, ptr %6, align 8, !tbaa !5
  %18 = icmp eq ptr %17, null
  br i1 %18, label %19, label %20

19:                                               ; preds = %16, %4
  br label %473

20:                                               ; preds = %16
  %21 = load ptr, ptr %6, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.png_info_def, ptr %21, i32 0, i32 22
  %23 = load ptr, ptr %22, align 8, !tbaa !11
  %24 = icmp ne ptr %23, null
  br i1 %24, label %25, label %83

25:                                               ; preds = %20
  %26 = load i32, ptr %7, align 4, !tbaa !9
  %27 = and i32 %26, 16384
  %28 = load ptr, ptr %6, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.png_info_def, ptr %28, i32 0, i32 42
  %30 = load i32, ptr %29, align 4, !tbaa !21
  %31 = and i32 %27, %30
  %32 = icmp ne i32 %31, 0
  br i1 %32, label %33, label %83

33:                                               ; preds = %25
  %34 = load i32, ptr %8, align 4, !tbaa !9
  %35 = icmp ne i32 %34, -1
  br i1 %35, label %36, label %53

36:                                               ; preds = %33
  %37 = load ptr, ptr %5, align 8, !tbaa !5
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.png_info_def, ptr %38, i32 0, i32 22
  %40 = load ptr, ptr %39, align 8, !tbaa !11
  %41 = load i32, ptr %8, align 4, !tbaa !9
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds %struct.png_text_struct, ptr %40, i64 %42
  %44 = getelementptr inbounds %struct.png_text_struct, ptr %43, i32 0, i32 1
  %45 = load ptr, ptr %44, align 8, !tbaa !22
  call void @png_free(ptr noundef %37, ptr noundef %45)
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.png_info_def, ptr %46, i32 0, i32 22
  %48 = load ptr, ptr %47, align 8, !tbaa !11
  %49 = load i32, ptr %8, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds %struct.png_text_struct, ptr %48, i64 %50
  %52 = getelementptr inbounds %struct.png_text_struct, ptr %51, i32 0, i32 1
  store ptr null, ptr %52, align 8, !tbaa !22
  br label %82

53:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %54

54:                                               ; preds = %70, %53
  %55 = load i32, ptr %9, align 4, !tbaa !9
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.png_info_def, ptr %56, i32 0, i32 20
  %58 = load i32, ptr %57, align 4, !tbaa !24
  %59 = icmp slt i32 %55, %58
  br i1 %59, label %60, label %73

60:                                               ; preds = %54
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.png_info_def, ptr %62, i32 0, i32 22
  %64 = load ptr, ptr %63, align 8, !tbaa !11
  %65 = load i32, ptr %9, align 4, !tbaa !9
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds %struct.png_text_struct, ptr %64, i64 %66
  %68 = getelementptr inbounds %struct.png_text_struct, ptr %67, i32 0, i32 1
  %69 = load ptr, ptr %68, align 8, !tbaa !22
  call void @png_free(ptr noundef %61, ptr noundef %69)
  br label %70

70:                                               ; preds = %60
  %71 = load i32, ptr %9, align 4, !tbaa !9
  %72 = add nsw i32 %71, 1
  store i32 %72, ptr %9, align 4, !tbaa !9
  br label %54, !llvm.loop !25

73:                                               ; preds = %54
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.png_info_def, ptr %75, i32 0, i32 22
  %77 = load ptr, ptr %76, align 8, !tbaa !11
  call void @png_free(ptr noundef %74, ptr noundef %77)
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.png_info_def, ptr %78, i32 0, i32 22
  store ptr null, ptr %79, align 8, !tbaa !11
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.png_info_def, ptr %80, i32 0, i32 20
  store i32 0, ptr %81, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  br label %82

82:                                               ; preds = %73, %36
  br label %83

83:                                               ; preds = %82, %25, %20
  %84 = load i32, ptr %7, align 4, !tbaa !9
  %85 = and i32 %84, 8192
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.png_info_def, ptr %86, i32 0, i32 42
  %88 = load i32, ptr %87, align 4, !tbaa !21
  %89 = and i32 %85, %88
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %91, label %102

91:                                               ; preds = %83
  %92 = load ptr, ptr %5, align 8, !tbaa !5
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.png_info_def, ptr %93, i32 0, i32 25
  %95 = load ptr, ptr %94, align 8, !tbaa !27
  call void @png_free(ptr noundef %92, ptr noundef %95)
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.png_info_def, ptr %96, i32 0, i32 25
  store ptr null, ptr %97, align 8, !tbaa !27
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.png_info_def, ptr %98, i32 0, i32 2
  %100 = load i32, ptr %99, align 8, !tbaa !28
  %101 = and i32 %100, -17
  store i32 %101, ptr %99, align 8, !tbaa !28
  br label %102

102:                                              ; preds = %91, %83
  %103 = load i32, ptr %7, align 4, !tbaa !9
  %104 = and i32 %103, 256
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.png_info_def, ptr %105, i32 0, i32 42
  %107 = load i32, ptr %106, align 4, !tbaa !21
  %108 = and i32 %104, %107
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %110, label %127

110:                                              ; preds = %102
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.png_info_def, ptr %112, i32 0, i32 48
  %114 = load ptr, ptr %113, align 8, !tbaa !29
  call void @png_free(ptr noundef %111, ptr noundef %114)
  %115 = load ptr, ptr %5, align 8, !tbaa !5
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.png_info_def, ptr %116, i32 0, i32 49
  %118 = load ptr, ptr %117, align 8, !tbaa !30
  call void @png_free(ptr noundef %115, ptr noundef %118)
  %119 = load ptr, ptr %6, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.png_info_def, ptr %119, i32 0, i32 48
  store ptr null, ptr %120, align 8, !tbaa !29
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.png_info_def, ptr %121, i32 0, i32 49
  store ptr null, ptr %122, align 8, !tbaa !30
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.png_info_def, ptr %123, i32 0, i32 2
  %125 = load i32, ptr %124, align 8, !tbaa !28
  %126 = and i32 %125, -16385
  store i32 %126, ptr %124, align 8, !tbaa !28
  br label %127

127:                                              ; preds = %110, %102
  %128 = load i32, ptr %7, align 4, !tbaa !9
  %129 = and i32 %128, 128
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.png_info_def, ptr %130, i32 0, i32 42
  %132 = load i32, ptr %131, align 4, !tbaa !21
  %133 = and i32 %129, %132
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %135, label %184

135:                                              ; preds = %127
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = load ptr, ptr %6, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.png_info_def, ptr %137, i32 0, i32 35
  %139 = load ptr, ptr %138, align 8, !tbaa !31
  call void @png_free(ptr noundef %136, ptr noundef %139)
  %140 = load ptr, ptr %5, align 8, !tbaa !5
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.png_info_def, ptr %141, i32 0, i32 38
  %143 = load ptr, ptr %142, align 8, !tbaa !32
  call void @png_free(ptr noundef %140, ptr noundef %143)
  %144 = load ptr, ptr %6, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.png_info_def, ptr %144, i32 0, i32 35
  store ptr null, ptr %145, align 8, !tbaa !31
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.png_info_def, ptr %146, i32 0, i32 38
  store ptr null, ptr %147, align 8, !tbaa !32
  %148 = load ptr, ptr %6, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.png_info_def, ptr %148, i32 0, i32 39
  %150 = load ptr, ptr %149, align 8, !tbaa !33
  %151 = icmp ne ptr %150, null
  br i1 %151, label %152, label %179

152:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %169, %152
  %154 = load i32, ptr %10, align 4, !tbaa !9
  %155 = load ptr, ptr %6, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.png_info_def, ptr %155, i32 0, i32 41
  %157 = load i8, ptr %156, align 1, !tbaa !34
  %158 = zext i8 %157 to i32
  %159 = icmp slt i32 %154, %158
  br i1 %159, label %160, label %172

160:                                              ; preds = %153
  %161 = load ptr, ptr %5, align 8, !tbaa !5
  %162 = load ptr, ptr %6, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.png_info_def, ptr %162, i32 0, i32 39
  %164 = load ptr, ptr %163, align 8, !tbaa !33
  %165 = load i32, ptr %10, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds ptr, ptr %164, i64 %166
  %168 = load ptr, ptr %167, align 8, !tbaa !5
  call void @png_free(ptr noundef %161, ptr noundef %168)
  br label %169

169:                                              ; preds = %160
  %170 = load i32, ptr %10, align 4, !tbaa !9
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %10, align 4, !tbaa !9
  br label %153, !llvm.loop !35

172:                                              ; preds = %153
  %173 = load ptr, ptr %5, align 8, !tbaa !5
  %174 = load ptr, ptr %6, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.png_info_def, ptr %174, i32 0, i32 39
  %176 = load ptr, ptr %175, align 8, !tbaa !33
  call void @png_free(ptr noundef %173, ptr noundef %176)
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.png_info_def, ptr %177, i32 0, i32 39
  store ptr null, ptr %178, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  br label %179

179:                                              ; preds = %172, %135
  %180 = load ptr, ptr %6, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.png_info_def, ptr %180, i32 0, i32 2
  %182 = load i32, ptr %181, align 8, !tbaa !28
  %183 = and i32 %182, -1025
  store i32 %183, ptr %181, align 8, !tbaa !28
  br label %184

184:                                              ; preds = %179, %127
  %185 = load i32, ptr %7, align 4, !tbaa !9
  %186 = and i32 %185, 16
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.png_info_def, ptr %187, i32 0, i32 42
  %189 = load i32, ptr %188, align 4, !tbaa !21
  %190 = and i32 %186, %189
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %209

192:                                              ; preds = %184
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.png_info_def, ptr %194, i32 0, i32 17
  %196 = load ptr, ptr %195, align 8, !tbaa !36
  call void @png_free(ptr noundef %193, ptr noundef %196)
  %197 = load ptr, ptr %5, align 8, !tbaa !5
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.png_info_def, ptr %198, i32 0, i32 18
  %200 = load ptr, ptr %199, align 8, !tbaa !37
  call void @png_free(ptr noundef %197, ptr noundef %200)
  %201 = load ptr, ptr %6, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.png_info_def, ptr %201, i32 0, i32 17
  store ptr null, ptr %202, align 8, !tbaa !36
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.png_info_def, ptr %203, i32 0, i32 18
  store ptr null, ptr %204, align 8, !tbaa !37
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.png_info_def, ptr %205, i32 0, i32 2
  %207 = load i32, ptr %206, align 8, !tbaa !28
  %208 = and i32 %207, -4097
  store i32 %208, ptr %206, align 8, !tbaa !28
  br label %209

209:                                              ; preds = %192, %184
  %210 = load ptr, ptr %6, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.png_info_def, ptr %210, i32 0, i32 45
  %212 = load ptr, ptr %211, align 8, !tbaa !38
  %213 = icmp ne ptr %212, null
  br i1 %213, label %214, label %307

214:                                              ; preds = %209
  %215 = load i32, ptr %7, align 4, !tbaa !9
  %216 = and i32 %215, 32
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.png_info_def, ptr %217, i32 0, i32 42
  %219 = load i32, ptr %218, align 4, !tbaa !21
  %220 = and i32 %216, %219
  %221 = icmp ne i32 %220, 0
  br i1 %221, label %222, label %307

222:                                              ; preds = %214
  %223 = load i32, ptr %8, align 4, !tbaa !9
  %224 = icmp ne i32 %223, -1
  br i1 %224, label %225, label %258

225:                                              ; preds = %222
  %226 = load ptr, ptr %5, align 8, !tbaa !5
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.png_info_def, ptr %227, i32 0, i32 45
  %229 = load ptr, ptr %228, align 8, !tbaa !38
  %230 = load i32, ptr %8, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.png_sPLT_struct, ptr %229, i64 %231
  %233 = getelementptr inbounds %struct.png_sPLT_struct, ptr %232, i32 0, i32 0
  %234 = load ptr, ptr %233, align 8, !tbaa !39
  call void @png_free(ptr noundef %226, ptr noundef %234)
  %235 = load ptr, ptr %5, align 8, !tbaa !5
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.png_info_def, ptr %236, i32 0, i32 45
  %238 = load ptr, ptr %237, align 8, !tbaa !38
  %239 = load i32, ptr %8, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds %struct.png_sPLT_struct, ptr %238, i64 %240
  %242 = getelementptr inbounds %struct.png_sPLT_struct, ptr %241, i32 0, i32 2
  %243 = load ptr, ptr %242, align 8, !tbaa !41
  call void @png_free(ptr noundef %235, ptr noundef %243)
  %244 = load ptr, ptr %6, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.png_info_def, ptr %244, i32 0, i32 45
  %246 = load ptr, ptr %245, align 8, !tbaa !38
  %247 = load i32, ptr %8, align 4, !tbaa !9
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds %struct.png_sPLT_struct, ptr %246, i64 %248
  %250 = getelementptr inbounds %struct.png_sPLT_struct, ptr %249, i32 0, i32 0
  store ptr null, ptr %250, align 8, !tbaa !39
  %251 = load ptr, ptr %6, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.png_info_def, ptr %251, i32 0, i32 45
  %253 = load ptr, ptr %252, align 8, !tbaa !38
  %254 = load i32, ptr %8, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds %struct.png_sPLT_struct, ptr %253, i64 %255
  %257 = getelementptr inbounds %struct.png_sPLT_struct, ptr %256, i32 0, i32 2
  store ptr null, ptr %257, align 8, !tbaa !41
  br label %306

258:                                              ; preds = %222
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.png_info_def, ptr %259, i32 0, i32 46
  %261 = load i32, ptr %260, align 8, !tbaa !42
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %263, label %301

263:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %264

264:                                              ; preds = %289, %263
  %265 = load i32, ptr %11, align 4, !tbaa !9
  %266 = load ptr, ptr %6, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.png_info_def, ptr %266, i32 0, i32 46
  %268 = load i32, ptr %267, align 8, !tbaa !42
  %269 = icmp slt i32 %265, %268
  br i1 %269, label %270, label %292

270:                                              ; preds = %264
  %271 = load ptr, ptr %5, align 8, !tbaa !5
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.png_info_def, ptr %272, i32 0, i32 45
  %274 = load ptr, ptr %273, align 8, !tbaa !38
  %275 = load i32, ptr %11, align 4, !tbaa !9
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds %struct.png_sPLT_struct, ptr %274, i64 %276
  %278 = getelementptr inbounds %struct.png_sPLT_struct, ptr %277, i32 0, i32 0
  %279 = load ptr, ptr %278, align 8, !tbaa !39
  call void @png_free(ptr noundef %271, ptr noundef %279)
  %280 = load ptr, ptr %5, align 8, !tbaa !5
  %281 = load ptr, ptr %6, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.png_info_def, ptr %281, i32 0, i32 45
  %283 = load ptr, ptr %282, align 8, !tbaa !38
  %284 = load i32, ptr %11, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds %struct.png_sPLT_struct, ptr %283, i64 %285
  %287 = getelementptr inbounds %struct.png_sPLT_struct, ptr %286, i32 0, i32 2
  %288 = load ptr, ptr %287, align 8, !tbaa !41
  call void @png_free(ptr noundef %280, ptr noundef %288)
  br label %289

289:                                              ; preds = %270
  %290 = load i32, ptr %11, align 4, !tbaa !9
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %11, align 4, !tbaa !9
  br label %264, !llvm.loop !43

292:                                              ; preds = %264
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.png_info_def, ptr %294, i32 0, i32 45
  %296 = load ptr, ptr %295, align 8, !tbaa !38
  call void @png_free(ptr noundef %293, ptr noundef %296)
  %297 = load ptr, ptr %6, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.png_info_def, ptr %297, i32 0, i32 45
  store ptr null, ptr %298, align 8, !tbaa !38
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.png_info_def, ptr %299, i32 0, i32 46
  store i32 0, ptr %300, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  br label %301

301:                                              ; preds = %292, %258
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.png_info_def, ptr %302, i32 0, i32 2
  %304 = load i32, ptr %303, align 8, !tbaa !28
  %305 = and i32 %304, -8193
  store i32 %305, ptr %303, align 8, !tbaa !28
  br label %306

306:                                              ; preds = %301, %225
  br label %307

307:                                              ; preds = %306, %214, %209
  %308 = load ptr, ptr %6, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.png_info_def, ptr %308, i32 0, i32 43
  %310 = load ptr, ptr %309, align 8, !tbaa !44
  %311 = icmp ne ptr %310, null
  br i1 %311, label %312, label %376

312:                                              ; preds = %307
  %313 = load i32, ptr %7, align 4, !tbaa !9
  %314 = and i32 %313, 512
  %315 = load ptr, ptr %6, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.png_info_def, ptr %315, i32 0, i32 42
  %317 = load i32, ptr %316, align 4, !tbaa !21
  %318 = and i32 %314, %317
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %376

320:                                              ; preds = %312
  %321 = load i32, ptr %8, align 4, !tbaa !9
  %322 = icmp ne i32 %321, -1
  br i1 %322, label %323, label %340

323:                                              ; preds = %320
  %324 = load ptr, ptr %5, align 8, !tbaa !5
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.png_info_def, ptr %325, i32 0, i32 43
  %327 = load ptr, ptr %326, align 8, !tbaa !44
  %328 = load i32, ptr %8, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %327, i64 %329
  %331 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %330, i32 0, i32 1
  %332 = load ptr, ptr %331, align 8, !tbaa !45
  call void @png_free(ptr noundef %324, ptr noundef %332)
  %333 = load ptr, ptr %6, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.png_info_def, ptr %333, i32 0, i32 43
  %335 = load ptr, ptr %334, align 8, !tbaa !44
  %336 = load i32, ptr %8, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %335, i64 %337
  %339 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %338, i32 0, i32 1
  store ptr null, ptr %339, align 8, !tbaa !45
  br label %375

340:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %341 = load ptr, ptr %6, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.png_info_def, ptr %341, i32 0, i32 44
  %343 = load i32, ptr %342, align 8, !tbaa !47
  %344 = icmp ne i32 %343, 0
  br i1 %344, label %345, label %374

345:                                              ; preds = %340
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %346

346:                                              ; preds = %362, %345
  %347 = load i32, ptr %12, align 4, !tbaa !9
  %348 = load ptr, ptr %6, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.png_info_def, ptr %348, i32 0, i32 44
  %350 = load i32, ptr %349, align 8, !tbaa !47
  %351 = icmp slt i32 %347, %350
  br i1 %351, label %352, label %365

352:                                              ; preds = %346
  %353 = load ptr, ptr %5, align 8, !tbaa !5
  %354 = load ptr, ptr %6, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.png_info_def, ptr %354, i32 0, i32 43
  %356 = load ptr, ptr %355, align 8, !tbaa !44
  %357 = load i32, ptr %12, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %356, i64 %358
  %360 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %359, i32 0, i32 1
  %361 = load ptr, ptr %360, align 8, !tbaa !45
  call void @png_free(ptr noundef %353, ptr noundef %361)
  br label %362

362:                                              ; preds = %352
  %363 = load i32, ptr %12, align 4, !tbaa !9
  %364 = add nsw i32 %363, 1
  store i32 %364, ptr %12, align 4, !tbaa !9
  br label %346, !llvm.loop !48

365:                                              ; preds = %346
  %366 = load ptr, ptr %5, align 8, !tbaa !5
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.png_info_def, ptr %367, i32 0, i32 43
  %369 = load ptr, ptr %368, align 8, !tbaa !44
  call void @png_free(ptr noundef %366, ptr noundef %369)
  %370 = load ptr, ptr %6, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.png_info_def, ptr %370, i32 0, i32 43
  store ptr null, ptr %371, align 8, !tbaa !44
  %372 = load ptr, ptr %6, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.png_info_def, ptr %372, i32 0, i32 44
  store i32 0, ptr %373, align 8, !tbaa !47
  br label %374

374:                                              ; preds = %365, %340
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  br label %375

375:                                              ; preds = %374, %323
  br label %376

376:                                              ; preds = %375, %312, %307
  %377 = load i32, ptr %7, align 4, !tbaa !9
  %378 = and i32 %377, 8
  %379 = load ptr, ptr %6, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.png_info_def, ptr %379, i32 0, i32 42
  %381 = load i32, ptr %380, align 4, !tbaa !21
  %382 = and i32 %378, %381
  %383 = icmp ne i32 %382, 0
  br i1 %383, label %384, label %395

384:                                              ; preds = %376
  %385 = load ptr, ptr %5, align 8, !tbaa !5
  %386 = load ptr, ptr %6, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.png_info_def, ptr %386, i32 0, i32 34
  %388 = load ptr, ptr %387, align 8, !tbaa !49
  call void @png_free(ptr noundef %385, ptr noundef %388)
  %389 = load ptr, ptr %6, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.png_info_def, ptr %389, i32 0, i32 34
  store ptr null, ptr %390, align 8, !tbaa !49
  %391 = load ptr, ptr %6, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.png_info_def, ptr %391, i32 0, i32 2
  %393 = load i32, ptr %392, align 8, !tbaa !28
  %394 = and i32 %393, -65
  store i32 %394, ptr %392, align 8, !tbaa !28
  br label %395

395:                                              ; preds = %384, %376
  %396 = load i32, ptr %7, align 4, !tbaa !9
  %397 = and i32 %396, 4096
  %398 = load ptr, ptr %6, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.png_info_def, ptr %398, i32 0, i32 42
  %400 = load i32, ptr %399, align 4, !tbaa !21
  %401 = and i32 %397, %400
  %402 = icmp ne i32 %401, 0
  br i1 %402, label %403, label %416

403:                                              ; preds = %395
  %404 = load ptr, ptr %5, align 8, !tbaa !5
  %405 = load ptr, ptr %6, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.png_info_def, ptr %405, i32 0, i32 4
  %407 = load ptr, ptr %406, align 8, !tbaa !50
  call void @png_free(ptr noundef %404, ptr noundef %407)
  %408 = load ptr, ptr %6, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.png_info_def, ptr %408, i32 0, i32 4
  store ptr null, ptr %409, align 8, !tbaa !50
  %410 = load ptr, ptr %6, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.png_info_def, ptr %410, i32 0, i32 2
  %412 = load i32, ptr %411, align 8, !tbaa !28
  %413 = and i32 %412, -9
  store i32 %413, ptr %411, align 8, !tbaa !28
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.png_info_def, ptr %414, i32 0, i32 5
  store i16 0, ptr %415, align 8, !tbaa !51
  br label %416

416:                                              ; preds = %403, %395
  %417 = load i32, ptr %7, align 4, !tbaa !9
  %418 = and i32 %417, 64
  %419 = load ptr, ptr %6, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.png_info_def, ptr %419, i32 0, i32 42
  %421 = load i32, ptr %420, align 4, !tbaa !21
  %422 = and i32 %418, %421
  %423 = icmp ne i32 %422, 0
  br i1 %423, label %424, label %460

424:                                              ; preds = %416
  %425 = load ptr, ptr %6, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.png_info_def, ptr %425, i32 0, i32 50
  %427 = load ptr, ptr %426, align 8, !tbaa !52
  %428 = icmp ne ptr %427, null
  br i1 %428, label %429, label %455

429:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %430

430:                                              ; preds = %445, %429
  %431 = load i32, ptr %13, align 4, !tbaa !9
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.png_info_def, ptr %432, i32 0, i32 1
  %434 = load i32, ptr %433, align 4, !tbaa !53
  %435 = icmp ult i32 %431, %434
  br i1 %435, label %436, label %448

436:                                              ; preds = %430
  %437 = load ptr, ptr %5, align 8, !tbaa !5
  %438 = load ptr, ptr %6, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.png_info_def, ptr %438, i32 0, i32 50
  %440 = load ptr, ptr %439, align 8, !tbaa !52
  %441 = load i32, ptr %13, align 4, !tbaa !9
  %442 = zext i32 %441 to i64
  %443 = getelementptr inbounds ptr, ptr %440, i64 %442
  %444 = load ptr, ptr %443, align 8, !tbaa !5
  call void @png_free(ptr noundef %437, ptr noundef %444)
  br label %445

445:                                              ; preds = %436
  %446 = load i32, ptr %13, align 4, !tbaa !9
  %447 = add i32 %446, 1
  store i32 %447, ptr %13, align 4, !tbaa !9
  br label %430, !llvm.loop !54

448:                                              ; preds = %430
  %449 = load ptr, ptr %5, align 8, !tbaa !5
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.png_info_def, ptr %450, i32 0, i32 50
  %452 = load ptr, ptr %451, align 8, !tbaa !52
  call void @png_free(ptr noundef %449, ptr noundef %452)
  %453 = load ptr, ptr %6, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.png_info_def, ptr %453, i32 0, i32 50
  store ptr null, ptr %454, align 8, !tbaa !52
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  br label %455

455:                                              ; preds = %448, %424
  %456 = load ptr, ptr %6, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.png_info_def, ptr %456, i32 0, i32 2
  %458 = load i32, ptr %457, align 8, !tbaa !28
  %459 = and i32 %458, -32769
  store i32 %459, ptr %457, align 8, !tbaa !28
  br label %460

460:                                              ; preds = %455, %416
  %461 = load i32, ptr %8, align 4, !tbaa !9
  %462 = icmp ne i32 %461, -1
  br i1 %462, label %463, label %466

463:                                              ; preds = %460
  %464 = load i32, ptr %7, align 4, !tbaa !9
  %465 = and i32 %464, -16929
  store i32 %465, ptr %7, align 4, !tbaa !9
  br label %466

466:                                              ; preds = %463, %460
  %467 = load i32, ptr %7, align 4, !tbaa !9
  %468 = xor i32 %467, -1
  %469 = load ptr, ptr %6, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.png_info_def, ptr %469, i32 0, i32 42
  %471 = load i32, ptr %470, align 4, !tbaa !21
  %472 = and i32 %471, %468
  store i32 %472, ptr %470, align 4, !tbaa !21
  br label %473

473:                                              ; preds = %466, %19
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind 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 #3 = { 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, !6, i64 160}
!12 = !{!"png_info_def", !10, i64 0, !10, i64 4, !10, i64 8, !13, i64 16, !6, i64 24, !14, i64 32, !14, i64 34, !7, i64 36, !7, i64 37, !7, i64 38, !7, i64 39, !7, i64 40, !7, i64 41, !7, i64 42, !7, i64 43, !7, i64 44, !15, i64 52, !6, i64 128, !6, i64 136, !10, i64 144, !10, i64 148, !10, i64 152, !6, i64 160, !18, i64 168, !19, i64 176, !6, i64 184, !20, i64 192, !20, i64 202, !10, i64 212, !10, i64 216, !7, i64 220, !10, i64 224, !10, i64 228, !7, i64 232, !6, i64 240, !6, i64 248, !10, i64 256, !10, i64 260, !6, i64 264, !6, i64 272, !7, i64 280, !7, i64 281, !10, i64 284, !6, i64 288, !10, i64 296, !6, i64 304, !10, i64 312, !7, i64 316, !6, i64 320, !6, i64 328, !6, i64 336}
!13 = !{!"long", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!"png_colorspace", !10, i64 0, !16, i64 4, !17, i64 36, !14, i64 72, !14, i64 74}
!16 = !{!"png_xy", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!17 = !{!"png_XYZ", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32}
!18 = !{!"png_time_struct", !14, i64 0, !7, i64 2, !7, i64 3, !7, i64 4, !7, i64 5, !7, i64 6}
!19 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!20 = !{!"png_color_16_struct", !7, i64 0, !14, i64 2, !14, i64 4, !14, i64 6, !14, i64 8}
!21 = !{!12, !10, i64 284}
!22 = !{!23, !6, i64 8}
!23 = !{!"png_text_struct", !10, i64 0, !6, i64 8, !6, i64 16, !13, i64 24, !13, i64 32, !6, i64 40, !6, i64 48}
!24 = !{!12, !10, i64 148}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!12, !6, i64 184}
!28 = !{!12, !10, i64 8}
!29 = !{!12, !6, i64 320}
!30 = !{!12, !6, i64 328}
!31 = !{!12, !6, i64 248}
!32 = !{!12, !6, i64 264}
!33 = !{!12, !6, i64 272}
!34 = !{!12, !7, i64 281}
!35 = distinct !{!35, !26}
!36 = !{!12, !6, i64 128}
!37 = !{!12, !6, i64 136}
!38 = !{!12, !6, i64 304}
!39 = !{!40, !6, i64 0}
!40 = !{!"png_sPLT_struct", !6, i64 0, !7, i64 8, !6, i64 16, !10, i64 24}
!41 = !{!40, !6, i64 16}
!42 = !{!12, !10, i64 312}
!43 = distinct !{!43, !26}
!44 = !{!12, !6, i64 288}
!45 = !{!46, !6, i64 8}
!46 = !{!"png_unknown_chunk_t", !7, i64 0, !6, i64 8, !13, i64 16, !7, i64 24}
!47 = !{!12, !10, i64 296}
!48 = distinct !{!48, !26}
!49 = !{!12, !6, i64 240}
!50 = !{!12, !6, i64 24}
!51 = !{!12, !14, i64 32}
!52 = !{!12, !6, i64 336}
!53 = !{!12, !10, i64 4}
!54 = distinct !{!54, !26}


; 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_text_struct = type { i32, ptr, ptr, i64, i64, ptr, ptr }
%struct.png_sPLT_struct = type { ptr, i8, ptr, i32 }
%struct.png_unknown_chunk_t = type { [5 x i8], ptr, i64, i8 }

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

; Function Attrs: nounwind uwtable
define dso_local void @png_free_data(ptr noalias noundef %0, ptr noalias noundef %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #1 {
  %5 = icmp eq ptr %0, null
  %6 = icmp eq ptr %1, null
  %or.cond = or i1 %5, %6
  br i1 %or.cond, label %198, label %7

7:                                                ; preds = %4
  %8 = getelementptr inbounds i8, ptr %1, i64 160
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %.not = icmp eq ptr %9, null
  br i1 %.not, label %32, label %10

10:                                               ; preds = %7
  %11 = and i32 %2, 16384
  %12 = getelementptr inbounds i8, ptr %1, i64 284
  %13 = load i32, ptr %12, align 4, !tbaa !19
  %14 = and i32 %11, %13
  %.not154 = icmp eq i32 %14, 0
  br i1 %.not154, label %32, label %15

15:                                               ; preds = %10
  %.not155 = icmp eq i32 %3, -1
  br i1 %.not155, label %.preheader177, label %19

.preheader177:                                    ; preds = %15
  %16 = getelementptr inbounds i8, ptr %1, i64 148
  %17 = load i32, ptr %16, align 4, !tbaa !20
  %18 = icmp sgt i32 %17, 0
  br i1 %18, label %.lr.ph, label %._crit_edge

19:                                               ; preds = %15
  %20 = sext i32 %3 to i64
  %21 = getelementptr inbounds %struct.png_text_struct, ptr %9, i64 %20, i32 1
  %22 = load ptr, ptr %21, align 8, !tbaa !21
  tail call void @png_free(ptr noundef nonnull %0, ptr noundef %22) #3
  %23 = load ptr, ptr %8, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.png_text_struct, ptr %23, i64 %20, i32 1
  store ptr null, ptr %24, align 8, !tbaa !21
  br label %32

.lr.ph:                                           ; preds = %.preheader177, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %.preheader177 ]
  %25 = load ptr, ptr %8, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.png_text_struct, ptr %25, i64 %indvars.iv, i32 1
  %27 = load ptr, ptr %26, align 8, !tbaa !21
  tail call void @png_free(ptr noundef %0, ptr noundef %27) #3
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %28 = load i32, ptr %16, align 4, !tbaa !20
  %29 = sext i32 %28 to i64
  %30 = icmp slt i64 %indvars.iv.next, %29
  br i1 %30, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !23

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.pre = load ptr, ptr %8, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader177
  %31 = phi ptr [ %.pre, %._crit_edge.loopexit ], [ %9, %.preheader177 ]
  tail call void @png_free(ptr noundef %0, ptr noundef %31) #3
  store ptr null, ptr %8, align 8, !tbaa !5
  store i32 0, ptr %16, align 4, !tbaa !20
  br label %32

32:                                               ; preds = %19, %._crit_edge, %10, %7
  %33 = and i32 %2, 8192
  %34 = getelementptr inbounds i8, ptr %1, i64 284
  %35 = load i32, ptr %34, align 4, !tbaa !19
  %36 = and i32 %33, %35
  %.not156 = icmp eq i32 %36, 0
  br i1 %.not156, label %43, label %37

37:                                               ; preds = %32
  %38 = getelementptr inbounds i8, ptr %1, i64 184
  %39 = load ptr, ptr %38, align 8, !tbaa !25
  tail call void @png_free(ptr noundef %0, ptr noundef %39) #3
  store ptr null, ptr %38, align 8, !tbaa !25
  %40 = getelementptr inbounds i8, ptr %1, i64 8
  %41 = load i32, ptr %40, align 8, !tbaa !26
  %42 = and i32 %41, -17
  store i32 %42, ptr %40, align 8, !tbaa !26
  %.pre206 = load i32, ptr %34, align 4, !tbaa !19
  br label %43

43:                                               ; preds = %37, %32
  %44 = phi i32 [ %.pre206, %37 ], [ %35, %32 ]
  %45 = and i32 %2, 256
  %46 = and i32 %45, %44
  %.not157 = icmp eq i32 %46, 0
  br i1 %.not157, label %55, label %47

47:                                               ; preds = %43
  %48 = getelementptr inbounds i8, ptr %1, i64 320
  %49 = load ptr, ptr %48, align 8, !tbaa !27
  tail call void @png_free(ptr noundef %0, ptr noundef %49) #3
  %50 = getelementptr inbounds i8, ptr %1, i64 328
  %51 = load ptr, ptr %50, align 8, !tbaa !28
  tail call void @png_free(ptr noundef %0, ptr noundef %51) #3
  %52 = getelementptr inbounds i8, ptr %1, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %48, i8 0, i64 16, i1 false)
  %53 = load i32, ptr %52, align 8, !tbaa !26
  %54 = and i32 %53, -16385
  store i32 %54, ptr %52, align 8, !tbaa !26
  %.pre207 = load i32, ptr %34, align 4, !tbaa !19
  br label %55

55:                                               ; preds = %47, %43
  %56 = phi i32 [ %.pre207, %47 ], [ %44, %43 ]
  %57 = and i32 %2, 128
  %58 = and i32 %57, %56
  %.not158 = icmp eq i32 %58, 0
  br i1 %.not158, label %79, label %59

59:                                               ; preds = %55
  %60 = getelementptr inbounds i8, ptr %1, i64 248
  %61 = load ptr, ptr %60, align 8, !tbaa !29
  tail call void @png_free(ptr noundef %0, ptr noundef %61) #3
  %62 = getelementptr inbounds i8, ptr %1, i64 264
  %63 = load ptr, ptr %62, align 8, !tbaa !30
  tail call void @png_free(ptr noundef %0, ptr noundef %63) #3
  store ptr null, ptr %60, align 8, !tbaa !29
  store ptr null, ptr %62, align 8, !tbaa !30
  %64 = getelementptr inbounds i8, ptr %1, i64 272
  %65 = load ptr, ptr %64, align 8, !tbaa !31
  %.not159 = icmp eq ptr %65, null
  br i1 %.not159, label %75, label %.preheader176

.preheader176:                                    ; preds = %59
  %66 = getelementptr inbounds i8, ptr %1, i64 281
  %67 = load i8, ptr %66, align 1, !tbaa !32
  %.not191 = icmp eq i8 %67, 0
  br i1 %.not191, label %._crit_edge181, label %.lr.ph180

.lr.ph180:                                        ; preds = %.preheader176, %.lr.ph180
  %indvars.iv194 = phi i64 [ %indvars.iv.next195, %.lr.ph180 ], [ 0, %.preheader176 ]
  %68 = load ptr, ptr %64, align 8, !tbaa !31
  %69 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv194
  %70 = load ptr, ptr %69, align 8, !tbaa !33
  tail call void @png_free(ptr noundef %0, ptr noundef %70) #3
  %indvars.iv.next195 = add nuw nsw i64 %indvars.iv194, 1
  %71 = load i8, ptr %66, align 1, !tbaa !32
  %72 = zext i8 %71 to i64
  %73 = icmp ult i64 %indvars.iv.next195, %72
  br i1 %73, label %.lr.ph180, label %._crit_edge181.loopexit, !llvm.loop !34

._crit_edge181.loopexit:                          ; preds = %.lr.ph180
  %.pre208 = load ptr, ptr %64, align 8, !tbaa !31
  br label %._crit_edge181

._crit_edge181:                                   ; preds = %._crit_edge181.loopexit, %.preheader176
  %74 = phi ptr [ %.pre208, %._crit_edge181.loopexit ], [ %65, %.preheader176 ]
  tail call void @png_free(ptr noundef %0, ptr noundef %74) #3
  store ptr null, ptr %64, align 8, !tbaa !31
  br label %75

75:                                               ; preds = %._crit_edge181, %59
  %76 = getelementptr inbounds i8, ptr %1, i64 8
  %77 = load i32, ptr %76, align 8, !tbaa !26
  %78 = and i32 %77, -1025
  store i32 %78, ptr %76, align 8, !tbaa !26
  %.pre209 = load i32, ptr %34, align 4, !tbaa !19
  br label %79

79:                                               ; preds = %75, %55
  %80 = phi i32 [ %.pre209, %75 ], [ %56, %55 ]
  %81 = and i32 %2, 16
  %82 = and i32 %81, %80
  %.not160 = icmp eq i32 %82, 0
  br i1 %.not160, label %91, label %83

83:                                               ; preds = %79
  %84 = getelementptr inbounds i8, ptr %1, i64 128
  %85 = load ptr, ptr %84, align 8, !tbaa !35
  tail call void @png_free(ptr noundef %0, ptr noundef %85) #3
  %86 = getelementptr inbounds i8, ptr %1, i64 136
  %87 = load ptr, ptr %86, align 8, !tbaa !36
  tail call void @png_free(ptr noundef %0, ptr noundef %87) #3
  %88 = getelementptr inbounds i8, ptr %1, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %84, i8 0, i64 16, i1 false)
  %89 = load i32, ptr %88, align 8, !tbaa !26
  %90 = and i32 %89, -4097
  store i32 %90, ptr %88, align 8, !tbaa !26
  br label %91

91:                                               ; preds = %83, %79
  %92 = getelementptr inbounds i8, ptr %1, i64 304
  %93 = load ptr, ptr %92, align 8, !tbaa !37
  %.not161 = icmp eq ptr %93, null
  br i1 %.not161, label %127, label %94

94:                                               ; preds = %91
  %95 = and i32 %2, 32
  %96 = load i32, ptr %34, align 4, !tbaa !19
  %97 = and i32 %95, %96
  %.not162 = icmp eq i32 %97, 0
  br i1 %.not162, label %127, label %98

98:                                               ; preds = %94
  %.not163 = icmp eq i32 %3, -1
  br i1 %.not163, label %109, label %99

99:                                               ; preds = %98
  %100 = sext i32 %3 to i64
  %101 = getelementptr inbounds %struct.png_sPLT_struct, ptr %93, i64 %100
  %102 = load ptr, ptr %101, align 8, !tbaa !38
  tail call void @png_free(ptr noundef %0, ptr noundef %102) #3
  %103 = load ptr, ptr %92, align 8, !tbaa !37
  %104 = getelementptr inbounds %struct.png_sPLT_struct, ptr %103, i64 %100, i32 2
  %105 = load ptr, ptr %104, align 8, !tbaa !40
  tail call void @png_free(ptr noundef %0, ptr noundef %105) #3
  %106 = load ptr, ptr %92, align 8, !tbaa !37
  %107 = getelementptr inbounds %struct.png_sPLT_struct, ptr %106, i64 %100
  store ptr null, ptr %107, align 8, !tbaa !38
  %108 = getelementptr inbounds %struct.png_sPLT_struct, ptr %106, i64 %100, i32 2
  store ptr null, ptr %108, align 8, !tbaa !40
  br label %127

109:                                              ; preds = %98
  %110 = getelementptr inbounds i8, ptr %1, i64 312
  %111 = load i32, ptr %110, align 8, !tbaa !41
  %.not164 = icmp eq i32 %111, 0
  br i1 %.not164, label %123, label %.preheader175

.preheader175:                                    ; preds = %109
  %112 = icmp sgt i32 %111, 0
  br i1 %112, label %.lr.ph183, label %._crit_edge184

.lr.ph183:                                        ; preds = %.preheader175, %.lr.ph183
  %indvars.iv197 = phi i64 [ %indvars.iv.next198, %.lr.ph183 ], [ 0, %.preheader175 ]
  %113 = load ptr, ptr %92, align 8, !tbaa !37
  %114 = getelementptr inbounds %struct.png_sPLT_struct, ptr %113, i64 %indvars.iv197
  %115 = load ptr, ptr %114, align 8, !tbaa !38
  tail call void @png_free(ptr noundef %0, ptr noundef %115) #3
  %116 = load ptr, ptr %92, align 8, !tbaa !37
  %117 = getelementptr inbounds %struct.png_sPLT_struct, ptr %116, i64 %indvars.iv197, i32 2
  %118 = load ptr, ptr %117, align 8, !tbaa !40
  tail call void @png_free(ptr noundef %0, ptr noundef %118) #3
  %indvars.iv.next198 = add nuw nsw i64 %indvars.iv197, 1
  %119 = load i32, ptr %110, align 8, !tbaa !41
  %120 = sext i32 %119 to i64
  %121 = icmp slt i64 %indvars.iv.next198, %120
  br i1 %121, label %.lr.ph183, label %._crit_edge184.loopexit, !llvm.loop !42

._crit_edge184.loopexit:                          ; preds = %.lr.ph183
  %.pre210 = load ptr, ptr %92, align 8, !tbaa !37
  br label %._crit_edge184

._crit_edge184:                                   ; preds = %._crit_edge184.loopexit, %.preheader175
  %122 = phi ptr [ %.pre210, %._crit_edge184.loopexit ], [ %93, %.preheader175 ]
  tail call void @png_free(ptr noundef %0, ptr noundef %122) #3
  store ptr null, ptr %92, align 8, !tbaa !37
  store i32 0, ptr %110, align 8, !tbaa !41
  br label %123

123:                                              ; preds = %._crit_edge184, %109
  %124 = getelementptr inbounds i8, ptr %1, i64 8
  %125 = load i32, ptr %124, align 8, !tbaa !26
  %126 = and i32 %125, -8193
  store i32 %126, ptr %124, align 8, !tbaa !26
  br label %127

127:                                              ; preds = %99, %123, %94, %91
  %128 = getelementptr inbounds i8, ptr %1, i64 288
  %129 = load ptr, ptr %128, align 8, !tbaa !43
  %.not165 = icmp eq ptr %129, null
  br i1 %.not165, label %152, label %130

130:                                              ; preds = %127
  %131 = and i32 %2, 512
  %132 = load i32, ptr %34, align 4, !tbaa !19
  %133 = and i32 %131, %132
  %.not166 = icmp eq i32 %133, 0
  br i1 %.not166, label %152, label %134

134:                                              ; preds = %130
  %.not167 = icmp eq i32 %3, -1
  br i1 %.not167, label %141, label %135

135:                                              ; preds = %134
  %136 = sext i32 %3 to i64
  %137 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %129, i64 %136, i32 1
  %138 = load ptr, ptr %137, align 8, !tbaa !44
  tail call void @png_free(ptr noundef %0, ptr noundef %138) #3
  %139 = load ptr, ptr %128, align 8, !tbaa !43
  %140 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %139, i64 %136, i32 1
  store ptr null, ptr %140, align 8, !tbaa !44
  br label %152

141:                                              ; preds = %134
  %142 = getelementptr inbounds i8, ptr %1, i64 296
  %143 = load i32, ptr %142, align 8, !tbaa !46
  %.not168 = icmp eq i32 %143, 0
  br i1 %.not168, label %152, label %.preheader174

.preheader174:                                    ; preds = %141
  %144 = icmp sgt i32 %143, 0
  br i1 %144, label %.lr.ph186, label %._crit_edge187

.lr.ph186:                                        ; preds = %.preheader174, %.lr.ph186
  %indvars.iv200 = phi i64 [ %indvars.iv.next201, %.lr.ph186 ], [ 0, %.preheader174 ]
  %145 = load ptr, ptr %128, align 8, !tbaa !43
  %146 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %145, i64 %indvars.iv200, i32 1
  %147 = load ptr, ptr %146, align 8, !tbaa !44
  tail call void @png_free(ptr noundef %0, ptr noundef %147) #3
  %indvars.iv.next201 = add nuw nsw i64 %indvars.iv200, 1
  %148 = load i32, ptr %142, align 8, !tbaa !46
  %149 = sext i32 %148 to i64
  %150 = icmp slt i64 %indvars.iv.next201, %149
  br i1 %150, label %.lr.ph186, label %._crit_edge187.loopexit, !llvm.loop !47

._crit_edge187.loopexit:                          ; preds = %.lr.ph186
  %.pre211 = load ptr, ptr %128, align 8, !tbaa !43
  br label %._crit_edge187

._crit_edge187:                                   ; preds = %._crit_edge187.loopexit, %.preheader174
  %151 = phi ptr [ %.pre211, %._crit_edge187.loopexit ], [ %129, %.preheader174 ]
  tail call void @png_free(ptr noundef %0, ptr noundef %151) #3
  store ptr null, ptr %128, align 8, !tbaa !43
  store i32 0, ptr %142, align 8, !tbaa !46
  br label %152

152:                                              ; preds = %141, %._crit_edge187, %135, %130, %127
  %153 = and i32 %2, 8
  %154 = load i32, ptr %34, align 4, !tbaa !19
  %155 = and i32 %153, %154
  %.not169 = icmp eq i32 %155, 0
  br i1 %.not169, label %162, label %156

156:                                              ; preds = %152
  %157 = getelementptr inbounds i8, ptr %1, i64 240
  %158 = load ptr, ptr %157, align 8, !tbaa !48
  tail call void @png_free(ptr noundef %0, ptr noundef %158) #3
  store ptr null, ptr %157, align 8, !tbaa !48
  %159 = getelementptr inbounds i8, ptr %1, i64 8
  %160 = load i32, ptr %159, align 8, !tbaa !26
  %161 = and i32 %160, -65
  store i32 %161, ptr %159, align 8, !tbaa !26
  %.pre212 = load i32, ptr %34, align 4, !tbaa !19
  br label %162

162:                                              ; preds = %156, %152
  %163 = phi i32 [ %.pre212, %156 ], [ %154, %152 ]
  %164 = and i32 %2, 4096
  %165 = and i32 %164, %163
  %.not170 = icmp eq i32 %165, 0
  br i1 %.not170, label %173, label %166

166:                                              ; preds = %162
  %167 = getelementptr inbounds i8, ptr %1, i64 24
  %168 = load ptr, ptr %167, align 8, !tbaa !49
  tail call void @png_free(ptr noundef %0, ptr noundef %168) #3
  store ptr null, ptr %167, align 8, !tbaa !49
  %169 = getelementptr inbounds i8, ptr %1, i64 8
  %170 = load i32, ptr %169, align 8, !tbaa !26
  %171 = and i32 %170, -9
  store i32 %171, ptr %169, align 8, !tbaa !26
  %172 = getelementptr inbounds i8, ptr %1, i64 32
  store i16 0, ptr %172, align 8, !tbaa !50
  %.pre213 = load i32, ptr %34, align 4, !tbaa !19
  br label %173

173:                                              ; preds = %166, %162
  %174 = phi i32 [ %.pre213, %166 ], [ %163, %162 ]
  %175 = and i32 %2, 64
  %176 = and i32 %175, %174
  %.not171 = icmp eq i32 %176, 0
  br i1 %.not171, label %193, label %177

177:                                              ; preds = %173
  %178 = getelementptr inbounds i8, ptr %1, i64 336
  %179 = load ptr, ptr %178, align 8, !tbaa !51
  %.not172 = icmp eq ptr %179, null
  br i1 %.not172, label %189, label %.preheader

.preheader:                                       ; preds = %177
  %180 = getelementptr inbounds i8, ptr %1, i64 4
  %181 = load i32, ptr %180, align 4, !tbaa !52
  %.not192 = icmp eq i32 %181, 0
  br i1 %.not192, label %._crit_edge190, label %.lr.ph189

.lr.ph189:                                        ; preds = %.preheader, %.lr.ph189
  %indvars.iv203 = phi i64 [ %indvars.iv.next204, %.lr.ph189 ], [ 0, %.preheader ]
  %182 = load ptr, ptr %178, align 8, !tbaa !51
  %183 = getelementptr inbounds ptr, ptr %182, i64 %indvars.iv203
  %184 = load ptr, ptr %183, align 8, !tbaa !33
  tail call void @png_free(ptr noundef %0, ptr noundef %184) #3
  %indvars.iv.next204 = add nuw nsw i64 %indvars.iv203, 1
  %185 = load i32, ptr %180, align 4, !tbaa !52
  %186 = zext i32 %185 to i64
  %187 = icmp ult i64 %indvars.iv.next204, %186
  br i1 %187, label %.lr.ph189, label %._crit_edge190.loopexit, !llvm.loop !53

._crit_edge190.loopexit:                          ; preds = %.lr.ph189
  %.pre214 = load ptr, ptr %178, align 8, !tbaa !51
  br label %._crit_edge190

._crit_edge190:                                   ; preds = %._crit_edge190.loopexit, %.preheader
  %188 = phi ptr [ %.pre214, %._crit_edge190.loopexit ], [ %179, %.preheader ]
  tail call void @png_free(ptr noundef %0, ptr noundef %188) #3
  store ptr null, ptr %178, align 8, !tbaa !51
  %.pre215.pre = load i32, ptr %34, align 4, !tbaa !19
  br label %189

189:                                              ; preds = %._crit_edge190, %177
  %.pre215 = phi i32 [ %.pre215.pre, %._crit_edge190 ], [ %174, %177 ]
  %190 = getelementptr inbounds i8, ptr %1, i64 8
  %191 = load i32, ptr %190, align 8, !tbaa !26
  %192 = and i32 %191, -32769
  store i32 %192, ptr %190, align 8, !tbaa !26
  br label %193

193:                                              ; preds = %189, %173
  %194 = phi i32 [ %.pre215, %189 ], [ %174, %173 ]
  %.not173 = icmp eq i32 %3, -1
  %195 = and i32 %2, -16929
  %spec.select = select i1 %.not173, i32 %2, i32 %195
  %196 = xor i32 %spec.select, -1
  %197 = and i32 %194, %196
  store i32 %197, ptr %34, align 4, !tbaa !19
  br label %198

198:                                              ; preds = %4, %193
  ret void
}

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 nounwind willreturn memory(argmem: write) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 160}
!6 = !{!"png_info_def", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !11, i64 24, !12, i64 32, !12, i64 34, !8, i64 36, !8, i64 37, !8, i64 38, !8, i64 39, !8, i64 40, !8, i64 41, !8, i64 42, !8, i64 43, !8, i64 44, !13, i64 52, !11, i64 128, !11, i64 136, !7, i64 144, !7, i64 148, !7, i64 152, !11, i64 160, !16, i64 168, !17, i64 176, !11, i64 184, !18, i64 192, !18, i64 202, !7, i64 212, !7, i64 216, !8, i64 220, !7, i64 224, !7, i64 228, !8, i64 232, !11, i64 240, !11, i64 248, !7, i64 256, !7, i64 260, !11, i64 264, !11, i64 272, !8, i64 280, !8, i64 281, !7, i64 284, !11, i64 288, !7, i64 296, !11, i64 304, !7, i64 312, !8, i64 316, !11, i64 320, !11, i64 328, !11, i64 336}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"short", !8, i64 0}
!13 = !{!"png_colorspace", !7, i64 0, !14, i64 4, !15, i64 36, !12, i64 72, !12, i64 74}
!14 = !{!"png_xy", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!15 = !{!"png_XYZ", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32}
!16 = !{!"png_time_struct", !12, i64 0, !8, i64 2, !8, i64 3, !8, i64 4, !8, i64 5, !8, i64 6}
!17 = !{!"png_color_8_struct", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3, !8, i64 4}
!18 = !{!"png_color_16_struct", !8, i64 0, !12, i64 2, !12, i64 4, !12, i64 6, !12, i64 8}
!19 = !{!6, !7, i64 284}
!20 = !{!6, !7, i64 148}
!21 = !{!22, !11, i64 8}
!22 = !{!"png_text_struct", !7, i64 0, !11, i64 8, !11, i64 16, !10, i64 24, !10, i64 32, !11, i64 40, !11, i64 48}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!6, !11, i64 184}
!26 = !{!6, !7, i64 8}
!27 = !{!6, !11, i64 320}
!28 = !{!6, !11, i64 328}
!29 = !{!6, !11, i64 248}
!30 = !{!6, !11, i64 264}
!31 = !{!6, !11, i64 272}
!32 = !{!6, !8, i64 281}
!33 = !{!11, !11, i64 0}
!34 = distinct !{!34, !24}
!35 = !{!6, !11, i64 128}
!36 = !{!6, !11, i64 136}
!37 = !{!6, !11, i64 304}
!38 = !{!39, !11, i64 0}
!39 = !{!"png_sPLT_struct", !11, i64 0, !8, i64 8, !11, i64 16, !7, i64 24}
!40 = !{!39, !11, i64 16}
!41 = !{!6, !7, i64 312}
!42 = distinct !{!42, !24}
!43 = !{!6, !11, i64 288}
!44 = !{!45, !11, i64 8}
!45 = !{!"png_unknown_chunk_t", !8, i64 0, !11, i64 8, !10, i64 16, !8, i64 24}
!46 = !{!6, !7, i64 296}
!47 = distinct !{!47, !24}
!48 = !{!6, !11, i64 240}
!49 = !{!6, !11, i64 24}
!50 = !{!6, !12, i64 32}
!51 = !{!6, !11, i64 336}
!52 = !{!6, !7, i64 4}
!53 = distinct !{!53, !24}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass