; LLVM IR from EyalAr/lwip :: src/lib/png (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 %463

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 %104

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

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

112:                                              ; preds = %104
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = load ptr, ptr %6, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.png_info_def, ptr %114, i32 0, i32 48
  %116 = load ptr, ptr %115, align 8, !tbaa !30
  call void @png_free(ptr noundef %113, ptr noundef %116)
  %117 = load ptr, ptr %5, align 8, !tbaa !5
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.png_info_def, ptr %118, i32 0, i32 49
  %120 = load ptr, ptr %119, align 8, !tbaa !31
  call void @png_free(ptr noundef %117, ptr noundef %120)
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.png_info_def, ptr %121, i32 0, i32 48
  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 49
  store ptr null, ptr %124, align 8, !tbaa !31
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.png_info_def, ptr %125, i32 0, i32 2
  %127 = load i32, ptr %126, align 8, !tbaa !27
  %128 = and i32 %127, -16385
  store i32 %128, ptr %126, align 8, !tbaa !27
  br label %129

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

137:                                              ; preds = %129
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.png_info_def, ptr %139, i32 0, i32 35
  %141 = load ptr, ptr %140, align 8, !tbaa !32
  call void @png_free(ptr noundef %138, ptr noundef %141)
  %142 = load ptr, ptr %5, align 8, !tbaa !5
  %143 = load ptr, ptr %6, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.png_info_def, ptr %143, i32 0, i32 38
  %145 = load ptr, ptr %144, align 8, !tbaa !33
  call void @png_free(ptr noundef %142, ptr noundef %145)
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.png_info_def, ptr %146, i32 0, i32 35
  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 38
  store ptr null, ptr %149, align 8, !tbaa !33
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.png_info_def, ptr %150, i32 0, i32 39
  %152 = load ptr, ptr %151, align 8, !tbaa !34
  %153 = icmp ne ptr %152, null
  br i1 %153, label %154, label %181

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

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

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

171:                                              ; preds = %162
  %172 = load i32, ptr %10, align 4, !tbaa !9
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %10, align 4, !tbaa !9
  br label %155, !llvm.loop !36

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

181:                                              ; preds = %174, %137
  %182 = load ptr, ptr %6, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.png_info_def, ptr %182, i32 0, i32 2
  %184 = load i32, ptr %183, align 8, !tbaa !27
  %185 = and i32 %184, -1025
  store i32 %185, ptr %183, align 8, !tbaa !27
  br label %186

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

194:                                              ; preds = %186
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.png_info_def, ptr %196, i32 0, i32 17
  %198 = load ptr, ptr %197, align 8, !tbaa !37
  call void @png_free(ptr noundef %195, ptr noundef %198)
  %199 = load ptr, ptr %5, align 8, !tbaa !5
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.png_info_def, ptr %200, i32 0, i32 18
  %202 = load ptr, ptr %201, align 8, !tbaa !38
  call void @png_free(ptr noundef %199, ptr noundef %202)
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.png_info_def, ptr %203, i32 0, i32 17
  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 18
  store ptr null, ptr %206, align 8, !tbaa !38
  %207 = load ptr, ptr %6, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.png_info_def, ptr %207, i32 0, i32 2
  %209 = load i32, ptr %208, align 8, !tbaa !27
  %210 = and i32 %209, -4097
  store i32 %210, ptr %208, align 8, !tbaa !27
  br label %211

211:                                              ; preds = %194, %186
  %212 = load ptr, ptr %6, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.png_info_def, ptr %212, i32 0, i32 45
  %214 = load ptr, ptr %213, align 8, !tbaa !39
  %215 = icmp ne ptr %214, null
  br i1 %215, label %216, label %303

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

224:                                              ; preds = %216
  %225 = load i32, ptr %8, align 4, !tbaa !9
  %226 = icmp ne i32 %225, -1
  br i1 %226, label %227, label %260

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

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

261:                                              ; preds = %286, %260
  %262 = load i32, ptr %11, align 4, !tbaa !9
  %263 = load ptr, ptr %6, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.png_info_def, ptr %263, i32 0, i32 46
  %265 = load i32, ptr %264, align 8, !tbaa !43
  %266 = icmp slt i32 %262, %265
  br i1 %266, label %267, label %289

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

286:                                              ; preds = %267
  %287 = load i32, ptr %11, align 4, !tbaa !9
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %11, align 4, !tbaa !9
  br label %261, !llvm.loop !44

289:                                              ; preds = %261
  %290 = load ptr, ptr %5, align 8, !tbaa !5
  %291 = load ptr, ptr %6, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.png_info_def, ptr %291, i32 0, i32 45
  %293 = load ptr, ptr %292, align 8, !tbaa !39
  call void @png_free(ptr noundef %290, ptr noundef %293)
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.png_info_def, ptr %294, i32 0, i32 45
  store ptr null, ptr %295, align 8, !tbaa !39
  %296 = load ptr, ptr %6, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.png_info_def, ptr %296, i32 0, i32 46
  store i32 0, ptr %297, align 8, !tbaa !43
  %298 = load ptr, ptr %6, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.png_info_def, ptr %298, i32 0, i32 2
  %300 = load i32, ptr %299, align 8, !tbaa !27
  %301 = and i32 %300, -8193
  store i32 %301, ptr %299, align 8, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  br label %302

302:                                              ; preds = %289, %227
  br label %303

303:                                              ; preds = %302, %216, %211
  %304 = load ptr, ptr %6, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.png_info_def, ptr %304, i32 0, i32 43
  %306 = load ptr, ptr %305, align 8, !tbaa !45
  %307 = icmp ne ptr %306, null
  br i1 %307, label %308, label %366

308:                                              ; preds = %303
  %309 = load i32, ptr %7, align 4, !tbaa !9
  %310 = and i32 %309, 512
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.png_info_def, ptr %311, i32 0, i32 42
  %313 = load i32, ptr %312, align 4, !tbaa !21
  %314 = and i32 %310, %313
  %315 = icmp ne i32 %314, 0
  br i1 %315, label %316, label %366

316:                                              ; preds = %308
  %317 = load i32, ptr %8, align 4, !tbaa !9
  %318 = icmp ne i32 %317, -1
  br i1 %318, label %319, label %336

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

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

337:                                              ; preds = %353, %336
  %338 = load i32, ptr %12, align 4, !tbaa !9
  %339 = load ptr, ptr %6, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.png_info_def, ptr %339, i32 0, i32 44
  %341 = load i32, ptr %340, align 8, !tbaa !48
  %342 = icmp slt i32 %338, %341
  br i1 %342, label %343, label %356

343:                                              ; preds = %337
  %344 = load ptr, ptr %5, align 8, !tbaa !5
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.png_info_def, ptr %345, i32 0, i32 43
  %347 = load ptr, ptr %346, align 8, !tbaa !45
  %348 = load i32, ptr %12, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %347, i64 %349
  %351 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %350, i32 0, i32 1
  %352 = load ptr, ptr %351, align 8, !tbaa !46
  call void @png_free(ptr noundef %344, ptr noundef %352)
  br label %353

353:                                              ; preds = %343
  %354 = load i32, ptr %12, align 4, !tbaa !9
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %12, align 4, !tbaa !9
  br label %337, !llvm.loop !49

356:                                              ; preds = %337
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = load ptr, ptr %6, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.png_info_def, ptr %358, i32 0, i32 43
  %360 = load ptr, ptr %359, align 8, !tbaa !45
  call void @png_free(ptr noundef %357, ptr noundef %360)
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.png_info_def, ptr %361, i32 0, i32 43
  store ptr null, ptr %362, align 8, !tbaa !45
  %363 = load ptr, ptr %6, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.png_info_def, ptr %363, i32 0, i32 44
  store i32 0, ptr %364, align 8, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  br label %365

365:                                              ; preds = %356, %319
  br label %366

366:                                              ; preds = %365, %308, %303
  %367 = load i32, ptr %7, align 4, !tbaa !9
  %368 = and i32 %367, 8
  %369 = load ptr, ptr %6, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.png_info_def, ptr %369, i32 0, i32 42
  %371 = load i32, ptr %370, align 4, !tbaa !21
  %372 = and i32 %368, %371
  %373 = icmp ne i32 %372, 0
  br i1 %373, label %374, label %385

374:                                              ; preds = %366
  %375 = load ptr, ptr %5, align 8, !tbaa !5
  %376 = load ptr, ptr %6, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.png_info_def, ptr %376, i32 0, i32 34
  %378 = load ptr, ptr %377, align 8, !tbaa !50
  call void @png_free(ptr noundef %375, ptr noundef %378)
  %379 = load ptr, ptr %6, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.png_info_def, ptr %379, i32 0, i32 34
  store ptr null, ptr %380, align 8, !tbaa !50
  %381 = load ptr, ptr %6, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.png_info_def, ptr %381, i32 0, i32 2
  %383 = load i32, ptr %382, align 8, !tbaa !27
  %384 = and i32 %383, -65
  store i32 %384, ptr %382, align 8, !tbaa !27
  br label %385

385:                                              ; preds = %374, %366
  %386 = load i32, ptr %7, align 4, !tbaa !9
  %387 = and i32 %386, 4096
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.png_info_def, ptr %388, i32 0, i32 42
  %390 = load i32, ptr %389, align 4, !tbaa !21
  %391 = and i32 %387, %390
  %392 = icmp ne i32 %391, 0
  br i1 %392, label %393, label %406

393:                                              ; preds = %385
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = load ptr, ptr %6, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.png_info_def, ptr %395, i32 0, i32 4
  %397 = load ptr, ptr %396, align 8, !tbaa !51
  call void @png_free(ptr noundef %394, ptr noundef %397)
  %398 = load ptr, ptr %6, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.png_info_def, ptr %398, i32 0, i32 4
  store ptr null, ptr %399, align 8, !tbaa !51
  %400 = load ptr, ptr %6, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.png_info_def, ptr %400, i32 0, i32 2
  %402 = load i32, ptr %401, align 8, !tbaa !27
  %403 = and i32 %402, -9
  store i32 %403, ptr %401, align 8, !tbaa !27
  %404 = load ptr, ptr %6, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.png_info_def, ptr %404, i32 0, i32 5
  store i16 0, ptr %405, align 8, !tbaa !52
  br label %406

406:                                              ; preds = %393, %385
  %407 = load i32, ptr %7, align 4, !tbaa !9
  %408 = and i32 %407, 64
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.png_info_def, ptr %409, i32 0, i32 42
  %411 = load i32, ptr %410, align 4, !tbaa !21
  %412 = and i32 %408, %411
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %414, label %450

414:                                              ; preds = %406
  %415 = load ptr, ptr %6, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.png_info_def, ptr %415, i32 0, i32 50
  %417 = load ptr, ptr %416, align 8, !tbaa !53
  %418 = icmp ne ptr %417, null
  br i1 %418, label %419, label %445

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

420:                                              ; preds = %435, %419
  %421 = load i32, ptr %13, align 4, !tbaa !9
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.png_info_def, ptr %422, i32 0, i32 1
  %424 = load i32, ptr %423, align 4, !tbaa !54
  %425 = icmp ult i32 %421, %424
  br i1 %425, label %426, label %438

426:                                              ; preds = %420
  %427 = load ptr, ptr %5, align 8, !tbaa !5
  %428 = load ptr, ptr %6, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.png_info_def, ptr %428, i32 0, i32 50
  %430 = load ptr, ptr %429, align 8, !tbaa !53
  %431 = load i32, ptr %13, align 4, !tbaa !9
  %432 = zext i32 %431 to i64
  %433 = getelementptr inbounds ptr, ptr %430, i64 %432
  %434 = load ptr, ptr %433, align 8, !tbaa !5
  call void @png_free(ptr noundef %427, ptr noundef %434)
  br label %435

435:                                              ; preds = %426
  %436 = load i32, ptr %13, align 4, !tbaa !9
  %437 = add i32 %436, 1
  store i32 %437, ptr %13, align 4, !tbaa !9
  br label %420, !llvm.loop !55

438:                                              ; preds = %420
  %439 = load ptr, ptr %5, align 8, !tbaa !5
  %440 = load ptr, ptr %6, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.png_info_def, ptr %440, i32 0, i32 50
  %442 = load ptr, ptr %441, align 8, !tbaa !53
  call void @png_free(ptr noundef %439, ptr noundef %442)
  %443 = load ptr, ptr %6, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.png_info_def, ptr %443, i32 0, i32 50
  store ptr null, ptr %444, align 8, !tbaa !53
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  br label %445

445:                                              ; preds = %438, %414
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.png_info_def, ptr %446, i32 0, i32 2
  %448 = load i32, ptr %447, align 8, !tbaa !27
  %449 = and i32 %448, -32769
  store i32 %449, ptr %447, align 8, !tbaa !27
  br label %450

450:                                              ; preds = %445, %406
  %451 = load i32, ptr %8, align 4, !tbaa !9
  %452 = icmp ne i32 %451, -1
  br i1 %452, label %453, label %456

453:                                              ; preds = %450
  %454 = load i32, ptr %7, align 4, !tbaa !9
  %455 = and i32 %454, -16929
  store i32 %455, ptr %7, align 4, !tbaa !9
  br label %456

456:                                              ; preds = %453, %450
  %457 = load i32, ptr %7, align 4, !tbaa !9
  %458 = xor i32 %457, -1
  %459 = load ptr, ptr %6, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.png_info_def, ptr %459, i32 0, i32 42
  %461 = load i32, ptr %460, align 4, !tbaa !21
  %462 = and i32 %461, %458
  store i32 %462, ptr %460, align 4, !tbaa !21
  br label %463

463:                                              ; preds = %456, %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, !10, i64 8}
!28 = !{!12, !6, i64 184}
!29 = !{!12, !14, i64 34}
!30 = !{!12, !6, i64 320}
!31 = !{!12, !6, i64 328}
!32 = !{!12, !6, i64 248}
!33 = !{!12, !6, i64 264}
!34 = !{!12, !6, i64 272}
!35 = !{!12, !7, i64 281}
!36 = distinct !{!36, !26}
!37 = !{!12, !6, i64 128}
!38 = !{!12, !6, i64 136}
!39 = !{!12, !6, i64 304}
!40 = !{!41, !6, i64 0}
!41 = !{!"png_sPLT_struct", !6, i64 0, !7, i64 8, !6, i64 16, !10, i64 24}
!42 = !{!41, !6, i64 16}
!43 = !{!12, !10, i64 312}
!44 = distinct !{!44, !26}
!45 = !{!12, !6, i64 288}
!46 = !{!47, !6, i64 8}
!47 = !{!"png_unknown_chunk_t", !7, i64 0, !6, i64 8, !13, i64 16, !7, i64 24}
!48 = !{!12, !10, i64 296}
!49 = distinct !{!49, !26}
!50 = !{!12, !6, i64 240}
!51 = !{!12, !6, i64 24}
!52 = !{!12, !14, i64 32}
!53 = !{!12, !6, i64 336}
!54 = !{!12, !10, i64 4}
!55 = distinct !{!55, !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 %196, 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
  %.not153 = icmp eq i32 %14, 0
  br i1 %.not153, label %32, label %15

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

.preheader174:                                    ; 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 = %.preheader174, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %.preheader174 ]
  %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, %.preheader174
  %31 = phi ptr [ %.pre, %._crit_edge.loopexit ], [ %9, %.preheader174 ]
  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
  %.not155 = icmp eq i32 %36, 0
  br i1 %.not155, label %44, label %37

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

44:                                               ; preds = %37, %32
  %45 = phi i32 [ %.pre205, %37 ], [ %35, %32 ]
  %46 = and i32 %2, 256
  %47 = and i32 %46, %45
  %.not156 = icmp eq i32 %47, 0
  br i1 %.not156, label %56, label %48

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

56:                                               ; preds = %48, %44
  %57 = phi i32 [ %.pre206, %48 ], [ %45, %44 ]
  %58 = and i32 %2, 128
  %59 = and i32 %58, %57
  %.not157 = icmp eq i32 %59, 0
  br i1 %.not157, label %80, label %60

60:                                               ; preds = %56
  %61 = getelementptr inbounds i8, ptr %1, i64 248
  %62 = load ptr, ptr %61, align 8, !tbaa !30
  tail call void @png_free(ptr noundef %0, ptr noundef %62) #3
  %63 = getelementptr inbounds i8, ptr %1, i64 264
  %64 = load ptr, ptr %63, align 8, !tbaa !31
  tail call void @png_free(ptr noundef %0, ptr noundef %64) #3
  store ptr null, ptr %61, align 8, !tbaa !30
  store ptr null, ptr %63, align 8, !tbaa !31
  %65 = getelementptr inbounds i8, ptr %1, i64 272
  %66 = load ptr, ptr %65, align 8, !tbaa !32
  %.not158 = icmp eq ptr %66, null
  br i1 %.not158, label %76, label %.preheader173

.preheader173:                                    ; preds = %60
  %67 = getelementptr inbounds i8, ptr %1, i64 281
  %68 = load i8, ptr %67, align 1, !tbaa !33
  %.not190 = icmp eq i8 %68, 0
  br i1 %.not190, label %._crit_edge180, label %.lr.ph179

.lr.ph179:                                        ; preds = %.preheader173, %.lr.ph179
  %indvars.iv193 = phi i64 [ %indvars.iv.next194, %.lr.ph179 ], [ 0, %.preheader173 ]
  %69 = load ptr, ptr %65, align 8, !tbaa !32
  %70 = getelementptr inbounds ptr, ptr %69, i64 %indvars.iv193
  %71 = load ptr, ptr %70, align 8, !tbaa !34
  tail call void @png_free(ptr noundef %0, ptr noundef %71) #3
  %indvars.iv.next194 = add nuw nsw i64 %indvars.iv193, 1
  %72 = load i8, ptr %67, align 1, !tbaa !33
  %73 = zext i8 %72 to i64
  %74 = icmp ult i64 %indvars.iv.next194, %73
  br i1 %74, label %.lr.ph179, label %._crit_edge180.loopexit, !llvm.loop !35

._crit_edge180.loopexit:                          ; preds = %.lr.ph179
  %.pre207 = load ptr, ptr %65, align 8, !tbaa !32
  br label %._crit_edge180

._crit_edge180:                                   ; preds = %._crit_edge180.loopexit, %.preheader173
  %75 = phi ptr [ %.pre207, %._crit_edge180.loopexit ], [ %66, %.preheader173 ]
  tail call void @png_free(ptr noundef %0, ptr noundef %75) #3
  store ptr null, ptr %65, align 8, !tbaa !32
  br label %76

76:                                               ; preds = %._crit_edge180, %60
  %77 = getelementptr inbounds i8, ptr %1, i64 8
  %78 = load i32, ptr %77, align 8, !tbaa !25
  %79 = and i32 %78, -1025
  store i32 %79, ptr %77, align 8, !tbaa !25
  %.pre208 = load i32, ptr %34, align 4, !tbaa !19
  br label %80

80:                                               ; preds = %76, %56
  %81 = phi i32 [ %.pre208, %76 ], [ %57, %56 ]
  %82 = and i32 %2, 16
  %83 = and i32 %82, %81
  %.not159 = icmp eq i32 %83, 0
  br i1 %.not159, label %92, label %84

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

92:                                               ; preds = %84, %80
  %93 = getelementptr inbounds i8, ptr %1, i64 304
  %94 = load ptr, ptr %93, align 8, !tbaa !38
  %.not160 = icmp eq ptr %94, null
  br i1 %.not160, label %126, label %95

95:                                               ; preds = %92
  %96 = and i32 %2, 32
  %97 = load i32, ptr %34, align 4, !tbaa !19
  %98 = and i32 %96, %97
  %.not161 = icmp eq i32 %98, 0
  br i1 %.not161, label %126, label %99

99:                                               ; preds = %95
  %.not162 = icmp eq i32 %3, -1
  br i1 %.not162, label %.preheader172, label %103

.preheader172:                                    ; preds = %99
  %100 = getelementptr inbounds i8, ptr %1, i64 312
  %101 = load i32, ptr %100, align 8, !tbaa !39
  %102 = icmp sgt i32 %101, 0
  br i1 %102, label %.lr.ph182, label %._crit_edge183

103:                                              ; preds = %99
  %104 = sext i32 %3 to i64
  %105 = getelementptr inbounds %struct.png_sPLT_struct, ptr %94, i64 %104
  %106 = load ptr, ptr %105, align 8, !tbaa !40
  tail call void @png_free(ptr noundef %0, ptr noundef %106) #3
  %107 = load ptr, ptr %93, align 8, !tbaa !38
  %108 = getelementptr inbounds %struct.png_sPLT_struct, ptr %107, i64 %104, i32 2
  %109 = load ptr, ptr %108, align 8, !tbaa !42
  tail call void @png_free(ptr noundef %0, ptr noundef %109) #3
  %110 = load ptr, ptr %93, align 8, !tbaa !38
  %111 = getelementptr inbounds %struct.png_sPLT_struct, ptr %110, i64 %104
  store ptr null, ptr %111, align 8, !tbaa !40
  %112 = getelementptr inbounds %struct.png_sPLT_struct, ptr %110, i64 %104, i32 2
  store ptr null, ptr %112, align 8, !tbaa !42
  br label %126

.lr.ph182:                                        ; preds = %.preheader172, %.lr.ph182
  %indvars.iv196 = phi i64 [ %indvars.iv.next197, %.lr.ph182 ], [ 0, %.preheader172 ]
  %113 = load ptr, ptr %93, align 8, !tbaa !38
  %114 = getelementptr inbounds %struct.png_sPLT_struct, ptr %113, i64 %indvars.iv196
  %115 = load ptr, ptr %114, align 8, !tbaa !40
  tail call void @png_free(ptr noundef %0, ptr noundef %115) #3
  %116 = load ptr, ptr %93, align 8, !tbaa !38
  %117 = getelementptr inbounds %struct.png_sPLT_struct, ptr %116, i64 %indvars.iv196, i32 2
  %118 = load ptr, ptr %117, align 8, !tbaa !42
  tail call void @png_free(ptr noundef %0, ptr noundef %118) #3
  %indvars.iv.next197 = add nuw nsw i64 %indvars.iv196, 1
  %119 = load i32, ptr %100, align 8, !tbaa !39
  %120 = sext i32 %119 to i64
  %121 = icmp slt i64 %indvars.iv.next197, %120
  br i1 %121, label %.lr.ph182, label %._crit_edge183.loopexit, !llvm.loop !43

._crit_edge183.loopexit:                          ; preds = %.lr.ph182
  %.pre209 = load ptr, ptr %93, align 8, !tbaa !38
  br label %._crit_edge183

._crit_edge183:                                   ; preds = %._crit_edge183.loopexit, %.preheader172
  %122 = phi ptr [ %.pre209, %._crit_edge183.loopexit ], [ %94, %.preheader172 ]
  tail call void @png_free(ptr noundef %0, ptr noundef %122) #3
  store ptr null, ptr %93, align 8, !tbaa !38
  store i32 0, ptr %100, align 8, !tbaa !39
  %123 = getelementptr inbounds i8, ptr %1, i64 8
  %124 = load i32, ptr %123, align 8, !tbaa !25
  %125 = and i32 %124, -8193
  store i32 %125, ptr %123, align 8, !tbaa !25
  br label %126

126:                                              ; preds = %103, %._crit_edge183, %95, %92
  %127 = getelementptr inbounds i8, ptr %1, i64 288
  %128 = load ptr, ptr %127, align 8, !tbaa !44
  %.not163 = icmp eq ptr %128, null
  br i1 %.not163, label %150, label %129

129:                                              ; preds = %126
  %130 = and i32 %2, 512
  %131 = load i32, ptr %34, align 4, !tbaa !19
  %132 = and i32 %130, %131
  %.not164 = icmp eq i32 %132, 0
  br i1 %.not164, label %150, label %133

133:                                              ; preds = %129
  %.not165 = icmp eq i32 %3, -1
  br i1 %.not165, label %.preheader171, label %137

.preheader171:                                    ; preds = %133
  %134 = getelementptr inbounds i8, ptr %1, i64 296
  %135 = load i32, ptr %134, align 8, !tbaa !45
  %136 = icmp sgt i32 %135, 0
  br i1 %136, label %.lr.ph185, label %._crit_edge186

137:                                              ; preds = %133
  %138 = sext i32 %3 to i64
  %139 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %128, i64 %138, i32 1
  %140 = load ptr, ptr %139, align 8, !tbaa !46
  tail call void @png_free(ptr noundef %0, ptr noundef %140) #3
  %141 = load ptr, ptr %127, align 8, !tbaa !44
  %142 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %141, i64 %138, i32 1
  store ptr null, ptr %142, align 8, !tbaa !46
  br label %150

.lr.ph185:                                        ; preds = %.preheader171, %.lr.ph185
  %indvars.iv199 = phi i64 [ %indvars.iv.next200, %.lr.ph185 ], [ 0, %.preheader171 ]
  %143 = load ptr, ptr %127, align 8, !tbaa !44
  %144 = getelementptr inbounds %struct.png_unknown_chunk_t, ptr %143, i64 %indvars.iv199, i32 1
  %145 = load ptr, ptr %144, align 8, !tbaa !46
  tail call void @png_free(ptr noundef %0, ptr noundef %145) #3
  %indvars.iv.next200 = add nuw nsw i64 %indvars.iv199, 1
  %146 = load i32, ptr %134, align 8, !tbaa !45
  %147 = sext i32 %146 to i64
  %148 = icmp slt i64 %indvars.iv.next200, %147
  br i1 %148, label %.lr.ph185, label %._crit_edge186.loopexit, !llvm.loop !48

._crit_edge186.loopexit:                          ; preds = %.lr.ph185
  %.pre210 = load ptr, ptr %127, align 8, !tbaa !44
  br label %._crit_edge186

._crit_edge186:                                   ; preds = %._crit_edge186.loopexit, %.preheader171
  %149 = phi ptr [ %.pre210, %._crit_edge186.loopexit ], [ %128, %.preheader171 ]
  tail call void @png_free(ptr noundef %0, ptr noundef %149) #3
  store ptr null, ptr %127, align 8, !tbaa !44
  store i32 0, ptr %134, align 8, !tbaa !45
  br label %150

150:                                              ; preds = %137, %._crit_edge186, %129, %126
  %151 = and i32 %2, 8
  %152 = load i32, ptr %34, align 4, !tbaa !19
  %153 = and i32 %151, %152
  %.not166 = icmp eq i32 %153, 0
  br i1 %.not166, label %160, label %154

154:                                              ; preds = %150
  %155 = getelementptr inbounds i8, ptr %1, i64 240
  %156 = load ptr, ptr %155, align 8, !tbaa !49
  tail call void @png_free(ptr noundef %0, ptr noundef %156) #3
  store ptr null, ptr %155, align 8, !tbaa !49
  %157 = getelementptr inbounds i8, ptr %1, i64 8
  %158 = load i32, ptr %157, align 8, !tbaa !25
  %159 = and i32 %158, -65
  store i32 %159, ptr %157, align 8, !tbaa !25
  %.pre211 = load i32, ptr %34, align 4, !tbaa !19
  br label %160

160:                                              ; preds = %154, %150
  %161 = phi i32 [ %.pre211, %154 ], [ %152, %150 ]
  %162 = and i32 %2, 4096
  %163 = and i32 %162, %161
  %.not167 = icmp eq i32 %163, 0
  br i1 %.not167, label %171, label %164

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

171:                                              ; preds = %164, %160
  %172 = phi i32 [ %.pre212, %164 ], [ %161, %160 ]
  %173 = and i32 %2, 64
  %174 = and i32 %173, %172
  %.not168 = icmp eq i32 %174, 0
  br i1 %.not168, label %191, label %175

175:                                              ; preds = %171
  %176 = getelementptr inbounds i8, ptr %1, i64 336
  %177 = load ptr, ptr %176, align 8, !tbaa !52
  %.not169 = icmp eq ptr %177, null
  br i1 %.not169, label %187, label %.preheader

.preheader:                                       ; preds = %175
  %178 = getelementptr inbounds i8, ptr %1, i64 4
  %179 = load i32, ptr %178, align 4, !tbaa !53
  %.not191 = icmp eq i32 %179, 0
  br i1 %.not191, label %._crit_edge189, label %.lr.ph188

.lr.ph188:                                        ; preds = %.preheader, %.lr.ph188
  %indvars.iv202 = phi i64 [ %indvars.iv.next203, %.lr.ph188 ], [ 0, %.preheader ]
  %180 = load ptr, ptr %176, align 8, !tbaa !52
  %181 = getelementptr inbounds ptr, ptr %180, i64 %indvars.iv202
  %182 = load ptr, ptr %181, align 8, !tbaa !34
  tail call void @png_free(ptr noundef %0, ptr noundef %182) #3
  %indvars.iv.next203 = add nuw nsw i64 %indvars.iv202, 1
  %183 = load i32, ptr %178, align 4, !tbaa !53
  %184 = zext i32 %183 to i64
  %185 = icmp ult i64 %indvars.iv.next203, %184
  br i1 %185, label %.lr.ph188, label %._crit_edge189.loopexit, !llvm.loop !54

._crit_edge189.loopexit:                          ; preds = %.lr.ph188
  %.pre213 = load ptr, ptr %176, align 8, !tbaa !52
  br label %._crit_edge189

._crit_edge189:                                   ; preds = %._crit_edge189.loopexit, %.preheader
  %186 = phi ptr [ %.pre213, %._crit_edge189.loopexit ], [ %177, %.preheader ]
  tail call void @png_free(ptr noundef %0, ptr noundef %186) #3
  store ptr null, ptr %176, align 8, !tbaa !52
  %.pre214.pre = load i32, ptr %34, align 4, !tbaa !19
  br label %187

187:                                              ; preds = %._crit_edge189, %175
  %.pre214 = phi i32 [ %.pre214.pre, %._crit_edge189 ], [ %172, %175 ]
  %188 = getelementptr inbounds i8, ptr %1, i64 8
  %189 = load i32, ptr %188, align 8, !tbaa !25
  %190 = and i32 %189, -32769
  store i32 %190, ptr %188, align 8, !tbaa !25
  br label %191

191:                                              ; preds = %187, %171
  %192 = phi i32 [ %.pre214, %187 ], [ %172, %171 ]
  %.not170 = icmp eq i32 %3, -1
  %193 = and i32 %2, -16929
  %spec.select = select i1 %.not170, i32 %2, i32 %193
  %194 = xor i32 %spec.select, -1
  %195 = and i32 %192, %194
  store i32 %195, ptr %34, align 4, !tbaa !19
  br label %196

196:                                              ; preds = %4, %191
  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, !7, i64 8}
!26 = !{!6, !11, i64 184}
!27 = !{!6, !12, i64 34}
!28 = !{!6, !11, i64 320}
!29 = !{!6, !11, i64 328}
!30 = !{!6, !11, i64 248}
!31 = !{!6, !11, i64 264}
!32 = !{!6, !11, i64 272}
!33 = !{!6, !8, i64 281}
!34 = !{!11, !11, i64 0}
!35 = distinct !{!35, !24}
!36 = !{!6, !11, i64 128}
!37 = !{!6, !11, i64 136}
!38 = !{!6, !11, i64 304}
!39 = !{!6, !7, i64 312}
!40 = !{!41, !11, i64 0}
!41 = !{!"png_sPLT_struct", !11, i64 0, !8, i64 8, !11, i64 16, !7, i64 24}
!42 = !{!41, !11, i64 16}
!43 = distinct !{!43, !24}
!44 = !{!6, !11, i64 288}
!45 = !{!6, !7, i64 296}
!46 = !{!47, !11, i64 8}
!47 = !{!"png_unknown_chunk_t", !8, i64 0, !11, i64 8, !10, i64 16, !8, i64 24}
!48 = distinct !{!48, !24}
!49 = !{!6, !11, i64 240}
!50 = !{!6, !11, i64 24}
!51 = !{!6, !12, i64 32}
!52 = !{!6, !11, i64 336}
!53 = !{!6, !7, i64 4}
!54 = distinct !{!54, !24}


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