; LLVM IR from niessner/Matterport :: code/gaps/pkgs/png (pngrtran)

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

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

@png_gamma_shift = external hidden constant [9 x i32], align 16

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

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

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

declare ptr @png_calloc(ptr noundef, i64 noundef) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #2

; Function Attrs: nounwind uwtable
define dso_local void @png_build_gamma_table(ptr noundef %0, i8 noundef zeroext %1) #3 {
  %3 = alloca ptr, align 8
  %4 = alloca i8, align 1
  %5 = alloca i32, align 4
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %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
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i8 %1, ptr %4, align 1, !tbaa !9
  %18 = load i8, ptr %4, align 1, !tbaa !9
  %19 = zext i8 %18 to i32
  %20 = icmp sle i32 %19, 8
  br i1 %20, label %21, label %144

21:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %22 = load ptr, ptr %3, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.png_struct_def, ptr %22, i32 0, i32 67
  %24 = load float, ptr %23, align 8, !tbaa !10
  %25 = fpext float %24 to double
  %26 = fcmp ogt double %25, 0x3EB0C6F7A0B5ED8D
  br i1 %26, label %27, label %37

27:                                               ; preds = %21
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.png_struct_def, ptr %28, i32 0, i32 66
  %30 = load float, ptr %29, align 4, !tbaa !21
  %31 = load ptr, ptr %3, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.png_struct_def, ptr %31, i32 0, i32 67
  %33 = load float, ptr %32, align 8, !tbaa !10
  %34 = fmul float %30, %33
  %35 = fpext float %34 to double
  %36 = fdiv double 1.000000e+00, %35
  store double %36, ptr %6, align 8, !tbaa !22
  br label %38

37:                                               ; preds = %21
  store double 1.000000e+00, ptr %6, align 8, !tbaa !22
  br label %38

38:                                               ; preds = %37, %27
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = call ptr @png_malloc(ptr noundef %39, i64 noundef 256)
  %41 = load ptr, ptr %3, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.png_struct_def, ptr %41, i32 0, i32 68
  store ptr %40, ptr %42, align 8, !tbaa !24
  store i32 0, ptr %5, align 4, !tbaa !25
  br label %43

43:                                               ; preds = %60, %38
  %44 = load i32, ptr %5, align 4, !tbaa !25
  %45 = icmp slt i32 %44, 256
  br i1 %45, label %46, label %63

46:                                               ; preds = %43
  %47 = load i32, ptr %5, align 4, !tbaa !25
  %48 = sitofp i32 %47 to double
  %49 = fdiv double %48, 2.550000e+02
  %50 = load double, ptr %6, align 8, !tbaa !22
  %51 = call double @pow(double noundef %49, double noundef %50) #5
  %52 = call double @llvm.fmuladd.f64(double %51, double 2.550000e+02, double 5.000000e-01)
  %53 = fptoui double %52 to i8
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.png_struct_def, ptr %54, i32 0, i32 68
  %56 = load ptr, ptr %55, align 8, !tbaa !24
  %57 = load i32, ptr %5, align 4, !tbaa !25
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds i8, ptr %56, i64 %58
  store i8 %53, ptr %59, align 1, !tbaa !9
  br label %60

60:                                               ; preds = %46
  %61 = load i32, ptr %5, align 4, !tbaa !25
  %62 = add nsw i32 %61, 1
  store i32 %62, ptr %5, align 4, !tbaa !25
  br label %43, !llvm.loop !26

63:                                               ; preds = %43
  %64 = load ptr, ptr %3, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.png_struct_def, ptr %64, i32 0, i32 15
  %66 = load i32, ptr %65, align 4, !tbaa !28
  %67 = zext i32 %66 to i64
  %68 = and i64 %67, 6291584
  %69 = icmp ne i64 %68, 0
  br i1 %69, label %70, label %143

70:                                               ; preds = %63
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.png_struct_def, ptr %71, i32 0, i32 66
  %73 = load float, ptr %72, align 4, !tbaa !21
  %74 = fpext float %73 to double
  %75 = fdiv double 1.000000e+00, %74
  store double %75, ptr %6, align 8, !tbaa !22
  %76 = load ptr, ptr %3, align 8, !tbaa !5
  %77 = call ptr @png_malloc(ptr noundef %76, i64 noundef 256)
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.png_struct_def, ptr %78, i32 0, i32 70
  store ptr %77, ptr %79, align 8, !tbaa !29
  store i32 0, ptr %5, align 4, !tbaa !25
  br label %80

80:                                               ; preds = %97, %70
  %81 = load i32, ptr %5, align 4, !tbaa !25
  %82 = icmp slt i32 %81, 256
  br i1 %82, label %83, label %100

83:                                               ; preds = %80
  %84 = load i32, ptr %5, align 4, !tbaa !25
  %85 = sitofp i32 %84 to double
  %86 = fdiv double %85, 2.550000e+02
  %87 = load double, ptr %6, align 8, !tbaa !22
  %88 = call double @pow(double noundef %86, double noundef %87) #5
  %89 = call double @llvm.fmuladd.f64(double %88, double 2.550000e+02, double 5.000000e-01)
  %90 = fptoui double %89 to i8
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.png_struct_def, ptr %91, i32 0, i32 70
  %93 = load ptr, ptr %92, align 8, !tbaa !29
  %94 = load i32, ptr %5, align 4, !tbaa !25
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds i8, ptr %93, i64 %95
  store i8 %90, ptr %96, align 1, !tbaa !9
  br label %97

97:                                               ; preds = %83
  %98 = load i32, ptr %5, align 4, !tbaa !25
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %5, align 4, !tbaa !25
  br label %80, !llvm.loop !30

100:                                              ; preds = %80
  %101 = load ptr, ptr %3, align 8, !tbaa !5
  %102 = call ptr @png_malloc(ptr noundef %101, i64 noundef 256)
  %103 = load ptr, ptr %3, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.png_struct_def, ptr %103, i32 0, i32 69
  store ptr %102, ptr %104, align 8, !tbaa !31
  %105 = load ptr, ptr %3, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.png_struct_def, ptr %105, i32 0, i32 67
  %107 = load float, ptr %106, align 8, !tbaa !10
  %108 = fpext float %107 to double
  %109 = fcmp ogt double %108, 0x3EB0C6F7A0B5ED8D
  br i1 %109, label %110, label %116

110:                                              ; preds = %100
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.png_struct_def, ptr %111, i32 0, i32 67
  %113 = load float, ptr %112, align 8, !tbaa !10
  %114 = fpext float %113 to double
  %115 = fdiv double 1.000000e+00, %114
  store double %115, ptr %6, align 8, !tbaa !22
  br label %121

116:                                              ; preds = %100
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.png_struct_def, ptr %117, i32 0, i32 66
  %119 = load float, ptr %118, align 4, !tbaa !21
  %120 = fpext float %119 to double
  store double %120, ptr %6, align 8, !tbaa !22
  br label %121

121:                                              ; preds = %116, %110
  store i32 0, ptr %5, align 4, !tbaa !25
  br label %122

122:                                              ; preds = %139, %121
  %123 = load i32, ptr %5, align 4, !tbaa !25
  %124 = icmp slt i32 %123, 256
  br i1 %124, label %125, label %142

125:                                              ; preds = %122
  %126 = load i32, ptr %5, align 4, !tbaa !25
  %127 = sitofp i32 %126 to double
  %128 = fdiv double %127, 2.550000e+02
  %129 = load double, ptr %6, align 8, !tbaa !22
  %130 = call double @pow(double noundef %128, double noundef %129) #5
  %131 = call double @llvm.fmuladd.f64(double %130, double 2.550000e+02, double 5.000000e-01)
  %132 = fptoui double %131 to i8
  %133 = load ptr, ptr %3, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.png_struct_def, ptr %133, i32 0, i32 69
  %135 = load ptr, ptr %134, align 8, !tbaa !31
  %136 = load i32, ptr %5, align 4, !tbaa !25
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds i8, ptr %135, i64 %137
  store i8 %132, ptr %138, align 1, !tbaa !9
  br label %139

139:                                              ; preds = %125
  %140 = load i32, ptr %5, align 4, !tbaa !25
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %5, align 4, !tbaa !25
  br label %122, !llvm.loop !32

142:                                              ; preds = %122
  br label %143

143:                                              ; preds = %142, %63
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  br label %562

144:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %145 = load ptr, ptr %3, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.png_struct_def, ptr %145, i32 0, i32 50
  %147 = load i8, ptr %146, align 2, !tbaa !33
  %148 = zext i8 %147 to i32
  %149 = and i32 %148, 2
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %185

151:                                              ; preds = %144
  %152 = load ptr, ptr %3, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.png_struct_def, ptr %152, i32 0, i32 74
  %154 = getelementptr inbounds %struct.png_color_8_struct, ptr %153, i32 0, i32 0
  %155 = load i8, ptr %154, align 8, !tbaa !34
  %156 = zext i8 %155 to i32
  store i32 %156, ptr %12, align 4, !tbaa !25
  %157 = load ptr, ptr %3, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.png_struct_def, ptr %157, i32 0, i32 74
  %159 = getelementptr inbounds %struct.png_color_8_struct, ptr %158, i32 0, i32 1
  %160 = load i8, ptr %159, align 1, !tbaa !35
  %161 = zext i8 %160 to i32
  %162 = load i32, ptr %12, align 4, !tbaa !25
  %163 = icmp sgt i32 %161, %162
  br i1 %163, label %164, label %170

164:                                              ; preds = %151
  %165 = load ptr, ptr %3, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.png_struct_def, ptr %165, i32 0, i32 74
  %167 = getelementptr inbounds %struct.png_color_8_struct, ptr %166, i32 0, i32 1
  %168 = load i8, ptr %167, align 1, !tbaa !35
  %169 = zext i8 %168 to i32
  store i32 %169, ptr %12, align 4, !tbaa !25
  br label %170

170:                                              ; preds = %164, %151
  %171 = load ptr, ptr %3, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.png_struct_def, ptr %171, i32 0, i32 74
  %173 = getelementptr inbounds %struct.png_color_8_struct, ptr %172, i32 0, i32 2
  %174 = load i8, ptr %173, align 2, !tbaa !36
  %175 = zext i8 %174 to i32
  %176 = load i32, ptr %12, align 4, !tbaa !25
  %177 = icmp sgt i32 %175, %176
  br i1 %177, label %178, label %184

178:                                              ; preds = %170
  %179 = load ptr, ptr %3, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.png_struct_def, ptr %179, i32 0, i32 74
  %181 = getelementptr inbounds %struct.png_color_8_struct, ptr %180, i32 0, i32 2
  %182 = load i8, ptr %181, align 2, !tbaa !36
  %183 = zext i8 %182 to i32
  store i32 %183, ptr %12, align 4, !tbaa !25
  br label %184

184:                                              ; preds = %178, %170
  br label %191

185:                                              ; preds = %144
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.png_struct_def, ptr %186, i32 0, i32 74
  %188 = getelementptr inbounds %struct.png_color_8_struct, ptr %187, i32 0, i32 3
  %189 = load i8, ptr %188, align 1, !tbaa !37
  %190 = zext i8 %189 to i32
  store i32 %190, ptr %12, align 4, !tbaa !25
  br label %191

191:                                              ; preds = %185, %184
  %192 = load i32, ptr %12, align 4, !tbaa !25
  %193 = icmp sgt i32 %192, 0
  br i1 %193, label %194, label %197

194:                                              ; preds = %191
  %195 = load i32, ptr %12, align 4, !tbaa !25
  %196 = sub nsw i32 16, %195
  store i32 %196, ptr %10, align 4, !tbaa !25
  br label %198

197:                                              ; preds = %191
  store i32 0, ptr %10, align 4, !tbaa !25
  br label %198

198:                                              ; preds = %197, %194
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.png_struct_def, ptr %199, i32 0, i32 15
  %201 = load i32, ptr %200, align 4, !tbaa !28
  %202 = and i32 %201, 1024
  %203 = icmp ne i32 %202, 0
  br i1 %203, label %204, label %209

204:                                              ; preds = %198
  %205 = load i32, ptr %10, align 4, !tbaa !25
  %206 = icmp slt i32 %205, 5
  br i1 %206, label %207, label %208

207:                                              ; preds = %204
  store i32 5, ptr %10, align 4, !tbaa !25
  br label %208

208:                                              ; preds = %207, %204
  br label %209

209:                                              ; preds = %208, %198
  %210 = load i32, ptr %10, align 4, !tbaa !25
  %211 = icmp sgt i32 %210, 8
  br i1 %211, label %212, label %213

212:                                              ; preds = %209
  store i32 8, ptr %10, align 4, !tbaa !25
  br label %213

213:                                              ; preds = %212, %209
  %214 = load i32, ptr %10, align 4, !tbaa !25
  %215 = icmp slt i32 %214, 0
  br i1 %215, label %216, label %217

216:                                              ; preds = %213
  store i32 0, ptr %10, align 4, !tbaa !25
  br label %217

217:                                              ; preds = %216, %213
  %218 = load i32, ptr %10, align 4, !tbaa !25
  %219 = trunc i32 %218 to i8
  %220 = zext i8 %219 to i32
  %221 = load ptr, ptr %3, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.png_struct_def, ptr %221, i32 0, i32 65
  store i32 %220, ptr %222, align 8, !tbaa !38
  %223 = load i32, ptr %10, align 4, !tbaa !25
  %224 = sub nsw i32 8, %223
  %225 = shl i32 1, %224
  store i32 %225, ptr %11, align 4, !tbaa !25
  %226 = load ptr, ptr %3, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.png_struct_def, ptr %226, i32 0, i32 67
  %228 = load float, ptr %227, align 8, !tbaa !10
  %229 = fpext float %228 to double
  %230 = fcmp ogt double %229, 0x3EB0C6F7A0B5ED8D
  br i1 %230, label %231, label %241

231:                                              ; preds = %217
  %232 = load ptr, ptr %3, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.png_struct_def, ptr %232, i32 0, i32 66
  %234 = load float, ptr %233, align 4, !tbaa !21
  %235 = load ptr, ptr %3, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.png_struct_def, ptr %235, i32 0, i32 67
  %237 = load float, ptr %236, align 8, !tbaa !10
  %238 = fmul float %234, %237
  %239 = fpext float %238 to double
  %240 = fdiv double 1.000000e+00, %239
  store double %240, ptr %7, align 8, !tbaa !22
  br label %242

241:                                              ; preds = %217
  store double 1.000000e+00, ptr %7, align 8, !tbaa !22
  br label %242

242:                                              ; preds = %241, %231
  %243 = load ptr, ptr %3, align 8, !tbaa !5
  %244 = load i32, ptr %11, align 4, !tbaa !25
  %245 = sext i32 %244 to i64
  %246 = mul i64 %245, 8
  %247 = trunc i64 %246 to i32
  %248 = zext i32 %247 to i64
  %249 = call ptr @png_calloc(ptr noundef %243, i64 noundef %248)
  %250 = load ptr, ptr %3, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.png_struct_def, ptr %250, i32 0, i32 71
  store ptr %249, ptr %251, align 8, !tbaa !39
  %252 = load ptr, ptr %3, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.png_struct_def, ptr %252, i32 0, i32 15
  %254 = load i32, ptr %253, align 4, !tbaa !28
  %255 = and i32 %254, 1152
  %256 = icmp ne i32 %255, 0
  br i1 %256, label %257, label %356

257:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %8, align 4, !tbaa !25
  br label %258

258:                                              ; preds = %271, %257
  %259 = load i32, ptr %8, align 4, !tbaa !25
  %260 = load i32, ptr %11, align 4, !tbaa !25
  %261 = icmp slt i32 %259, %260
  br i1 %261, label %262, label %274

262:                                              ; preds = %258
  %263 = load ptr, ptr %3, align 8, !tbaa !5
  %264 = call ptr @png_malloc(ptr noundef %263, i64 noundef 512)
  %265 = load ptr, ptr %3, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.png_struct_def, ptr %265, i32 0, i32 71
  %267 = load ptr, ptr %266, align 8, !tbaa !39
  %268 = load i32, ptr %8, align 4, !tbaa !25
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds ptr, ptr %267, i64 %269
  store ptr %264, ptr %270, align 8, !tbaa !5
  br label %271

271:                                              ; preds = %262
  %272 = load i32, ptr %8, align 4, !tbaa !25
  %273 = add nsw i32 %272, 1
  store i32 %273, ptr %8, align 4, !tbaa !25
  br label %258, !llvm.loop !40

274:                                              ; preds = %258
  %275 = load double, ptr %7, align 8, !tbaa !22
  %276 = fdiv double 1.000000e+00, %275
  store double %276, ptr %7, align 8, !tbaa !22
  store i32 0, ptr %16, align 4, !tbaa !25
  store i32 0, ptr %8, align 4, !tbaa !25
  br label %277

277:                                              ; preds = %327, %274
  %278 = load i32, ptr %8, align 4, !tbaa !25
  %279 = icmp slt i32 %278, 256
  br i1 %279, label %280, label %330

280:                                              ; preds = %277
  %281 = load i32, ptr %8, align 4, !tbaa !25
  %282 = sitofp i32 %281 to double
  %283 = fadd double %282, 5.000000e-01
  %284 = fdiv double %283, 2.560000e+02
  store double %284, ptr %15, align 8, !tbaa !22
  %285 = load double, ptr %15, align 8, !tbaa !22
  %286 = load double, ptr %7, align 8, !tbaa !22
  %287 = call double @pow(double noundef %285, double noundef %286) #5
  store double %287, ptr %14, align 8, !tbaa !22
  %288 = load double, ptr %14, align 8, !tbaa !22
  %289 = load i32, ptr %11, align 4, !tbaa !25
  %290 = shl i32 %289, 8
  %291 = uitofp i32 %290 to double
  %292 = fmul double %288, %291
  %293 = fptoui double %292 to i32
  store i32 %293, ptr %17, align 4, !tbaa !25
  br label %294

294:                                              ; preds = %298, %280
  %295 = load i32, ptr %16, align 4, !tbaa !25
  %296 = load i32, ptr %17, align 4, !tbaa !25
  %297 = icmp ule i32 %295, %296
  br i1 %297, label %298, label %326

298:                                              ; preds = %294
  %299 = load i32, ptr %8, align 4, !tbaa !25
  %300 = trunc i32 %299 to i16
  %301 = zext i16 %300 to i32
  %302 = load i32, ptr %8, align 4, !tbaa !25
  %303 = trunc i32 %302 to i16
  %304 = zext i16 %303 to i32
  %305 = shl i32 %304, 8
  %306 = or i32 %301, %305
  %307 = trunc i32 %306 to i16
  %308 = load ptr, ptr %3, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.png_struct_def, ptr %308, i32 0, i32 71
  %310 = load ptr, ptr %309, align 8, !tbaa !39
  %311 = load i32, ptr %16, align 4, !tbaa !25
  %312 = load i32, ptr %10, align 4, !tbaa !25
  %313 = ashr i32 255, %312
  %314 = and i32 %311, %313
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds ptr, ptr %310, i64 %315
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = load i32, ptr %16, align 4, !tbaa !25
  %319 = load i32, ptr %10, align 4, !tbaa !25
  %320 = sub nsw i32 8, %319
  %321 = lshr i32 %318, %320
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i16, ptr %317, i64 %322
  store i16 %307, ptr %323, align 2, !tbaa !41
  %324 = load i32, ptr %16, align 4, !tbaa !25
  %325 = add i32 %324, 1
  store i32 %325, ptr %16, align 4, !tbaa !25
  br label %294, !llvm.loop !42

326:                                              ; preds = %294
  br label %327

327:                                              ; preds = %326
  %328 = load i32, ptr %8, align 4, !tbaa !25
  %329 = add nsw i32 %328, 1
  store i32 %329, ptr %8, align 4, !tbaa !25
  br label %277, !llvm.loop !43

330:                                              ; preds = %277
  br label %331

331:                                              ; preds = %336, %330
  %332 = load i32, ptr %16, align 4, !tbaa !25
  %333 = load i32, ptr %11, align 4, !tbaa !25
  %334 = shl i32 %333, 8
  %335 = icmp ult i32 %332, %334
  br i1 %335, label %336, label %355

336:                                              ; preds = %331
  %337 = load ptr, ptr %3, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.png_struct_def, ptr %337, i32 0, i32 71
  %339 = load ptr, ptr %338, align 8, !tbaa !39
  %340 = load i32, ptr %16, align 4, !tbaa !25
  %341 = load i32, ptr %10, align 4, !tbaa !25
  %342 = ashr i32 255, %341
  %343 = and i32 %340, %342
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds ptr, ptr %339, i64 %344
  %346 = load ptr, ptr %345, align 8, !tbaa !5
  %347 = load i32, ptr %16, align 4, !tbaa !25
  %348 = load i32, ptr %10, align 4, !tbaa !25
  %349 = sub nsw i32 8, %348
  %350 = lshr i32 %347, %349
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds i16, ptr %346, i64 %351
  store i16 -1, ptr %352, align 2, !tbaa !41
  %353 = load i32, ptr %16, align 4, !tbaa !25
  %354 = add i32 %353, 1
  store i32 %354, ptr %16, align 4, !tbaa !25
  br label %331, !llvm.loop !44

355:                                              ; preds = %331
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  br label %409

356:                                              ; preds = %242
  store i32 0, ptr %8, align 4, !tbaa !25
  br label %357

357:                                              ; preds = %405, %356
  %358 = load i32, ptr %8, align 4, !tbaa !25
  %359 = load i32, ptr %11, align 4, !tbaa !25
  %360 = icmp slt i32 %358, %359
  br i1 %360, label %361, label %408

361:                                              ; preds = %357
  %362 = load ptr, ptr %3, align 8, !tbaa !5
  %363 = call ptr @png_malloc(ptr noundef %362, i64 noundef 512)
  %364 = load ptr, ptr %3, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.png_struct_def, ptr %364, i32 0, i32 71
  %366 = load ptr, ptr %365, align 8, !tbaa !39
  %367 = load i32, ptr %8, align 4, !tbaa !25
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds ptr, ptr %366, i64 %368
  store ptr %363, ptr %369, align 8, !tbaa !5
  %370 = load i32, ptr %8, align 4, !tbaa !25
  %371 = load i32, ptr %10, align 4, !tbaa !25
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [9 x i32], ptr @png_gamma_shift, i64 0, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !25
  %375 = mul i32 %370, %374
  %376 = lshr i32 %375, 4
  store i32 %376, ptr %13, align 4, !tbaa !25
  store i32 0, ptr %9, align 4, !tbaa !25
  br label %377

377:                                              ; preds = %401, %361
  %378 = load i32, ptr %9, align 4, !tbaa !25
  %379 = icmp slt i32 %378, 256
  br i1 %379, label %380, label %404

380:                                              ; preds = %377
  %381 = load i32, ptr %13, align 4, !tbaa !25
  %382 = load i32, ptr %9, align 4, !tbaa !25
  %383 = shl i32 %382, 8
  %384 = add i32 %381, %383
  %385 = uitofp i32 %384 to double
  %386 = fdiv double %385, 6.553500e+04
  %387 = load double, ptr %7, align 8, !tbaa !22
  %388 = call double @pow(double noundef %386, double noundef %387) #5
  %389 = call double @llvm.fmuladd.f64(double %388, double 6.553500e+04, double 5.000000e-01)
  %390 = fptoui double %389 to i16
  %391 = load ptr, ptr %3, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.png_struct_def, ptr %391, i32 0, i32 71
  %393 = load ptr, ptr %392, align 8, !tbaa !39
  %394 = load i32, ptr %8, align 4, !tbaa !25
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds ptr, ptr %393, i64 %395
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  %398 = load i32, ptr %9, align 4, !tbaa !25
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i16, ptr %397, i64 %399
  store i16 %390, ptr %400, align 2, !tbaa !41
  br label %401

401:                                              ; preds = %380
  %402 = load i32, ptr %9, align 4, !tbaa !25
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %9, align 4, !tbaa !25
  br label %377, !llvm.loop !45

404:                                              ; preds = %377
  br label %405

405:                                              ; preds = %404
  %406 = load i32, ptr %8, align 4, !tbaa !25
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %8, align 4, !tbaa !25
  br label %357, !llvm.loop !46

408:                                              ; preds = %357
  br label %409

409:                                              ; preds = %408, %355
  %410 = load ptr, ptr %3, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.png_struct_def, ptr %410, i32 0, i32 15
  %412 = load i32, ptr %411, align 4, !tbaa !28
  %413 = zext i32 %412 to i64
  %414 = and i64 %413, 6291584
  %415 = icmp ne i64 %414, 0
  br i1 %415, label %416, label %561

416:                                              ; preds = %409
  %417 = load ptr, ptr %3, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.png_struct_def, ptr %417, i32 0, i32 66
  %419 = load float, ptr %418, align 4, !tbaa !21
  %420 = fpext float %419 to double
  %421 = fdiv double 1.000000e+00, %420
  store double %421, ptr %7, align 8, !tbaa !22
  %422 = load ptr, ptr %3, align 8, !tbaa !5
  %423 = load i32, ptr %11, align 4, !tbaa !25
  %424 = sext i32 %423 to i64
  %425 = mul i64 %424, 8
  %426 = trunc i64 %425 to i32
  %427 = zext i32 %426 to i64
  %428 = call ptr @png_calloc(ptr noundef %422, i64 noundef %427)
  %429 = load ptr, ptr %3, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.png_struct_def, ptr %429, i32 0, i32 73
  store ptr %428, ptr %430, align 8, !tbaa !47
  store i32 0, ptr %8, align 4, !tbaa !25
  br label %431

431:                                              ; preds = %479, %416
  %432 = load i32, ptr %8, align 4, !tbaa !25
  %433 = load i32, ptr %11, align 4, !tbaa !25
  %434 = icmp slt i32 %432, %433
  br i1 %434, label %435, label %482

435:                                              ; preds = %431
  %436 = load ptr, ptr %3, align 8, !tbaa !5
  %437 = call ptr @png_malloc(ptr noundef %436, i64 noundef 512)
  %438 = load ptr, ptr %3, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.png_struct_def, ptr %438, i32 0, i32 73
  %440 = load ptr, ptr %439, align 8, !tbaa !47
  %441 = load i32, ptr %8, align 4, !tbaa !25
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds ptr, ptr %440, i64 %442
  store ptr %437, ptr %443, align 8, !tbaa !5
  %444 = load i32, ptr %8, align 4, !tbaa !25
  %445 = load i32, ptr %10, align 4, !tbaa !25
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds [9 x i32], ptr @png_gamma_shift, i64 0, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !25
  %449 = mul i32 %444, %448
  %450 = lshr i32 %449, 4
  store i32 %450, ptr %13, align 4, !tbaa !25
  store i32 0, ptr %9, align 4, !tbaa !25
  br label %451

451:                                              ; preds = %475, %435
  %452 = load i32, ptr %9, align 4, !tbaa !25
  %453 = icmp slt i32 %452, 256
  br i1 %453, label %454, label %478

454:                                              ; preds = %451
  %455 = load i32, ptr %13, align 4, !tbaa !25
  %456 = load i32, ptr %9, align 4, !tbaa !25
  %457 = shl i32 %456, 8
  %458 = add i32 %455, %457
  %459 = uitofp i32 %458 to double
  %460 = fdiv double %459, 6.553500e+04
  %461 = load double, ptr %7, align 8, !tbaa !22
  %462 = call double @pow(double noundef %460, double noundef %461) #5
  %463 = call double @llvm.fmuladd.f64(double %462, double 6.553500e+04, double 5.000000e-01)
  %464 = fptoui double %463 to i16
  %465 = load ptr, ptr %3, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.png_struct_def, ptr %465, i32 0, i32 73
  %467 = load ptr, ptr %466, align 8, !tbaa !47
  %468 = load i32, ptr %8, align 4, !tbaa !25
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds ptr, ptr %467, i64 %469
  %471 = load ptr, ptr %470, align 8, !tbaa !5
  %472 = load i32, ptr %9, align 4, !tbaa !25
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds i16, ptr %471, i64 %473
  store i16 %464, ptr %474, align 2, !tbaa !41
  br label %475

475:                                              ; preds = %454
  %476 = load i32, ptr %9, align 4, !tbaa !25
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %9, align 4, !tbaa !25
  br label %451, !llvm.loop !48

478:                                              ; preds = %451
  br label %479

479:                                              ; preds = %478
  %480 = load i32, ptr %8, align 4, !tbaa !25
  %481 = add nsw i32 %480, 1
  store i32 %481, ptr %8, align 4, !tbaa !25
  br label %431, !llvm.loop !49

482:                                              ; preds = %431
  %483 = load ptr, ptr %3, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.png_struct_def, ptr %483, i32 0, i32 67
  %485 = load float, ptr %484, align 8, !tbaa !10
  %486 = fpext float %485 to double
  %487 = fcmp ogt double %486, 0x3EB0C6F7A0B5ED8D
  br i1 %487, label %488, label %494

488:                                              ; preds = %482
  %489 = load ptr, ptr %3, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.png_struct_def, ptr %489, i32 0, i32 67
  %491 = load float, ptr %490, align 8, !tbaa !10
  %492 = fpext float %491 to double
  %493 = fdiv double 1.000000e+00, %492
  store double %493, ptr %7, align 8, !tbaa !22
  br label %499

494:                                              ; preds = %482
  %495 = load ptr, ptr %3, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.png_struct_def, ptr %495, i32 0, i32 66
  %497 = load float, ptr %496, align 4, !tbaa !21
  %498 = fpext float %497 to double
  store double %498, ptr %7, align 8, !tbaa !22
  br label %499

499:                                              ; preds = %494, %488
  %500 = load ptr, ptr %3, align 8, !tbaa !5
  %501 = load i32, ptr %11, align 4, !tbaa !25
  %502 = sext i32 %501 to i64
  %503 = mul i64 %502, 8
  %504 = trunc i64 %503 to i32
  %505 = zext i32 %504 to i64
  %506 = call ptr @png_calloc(ptr noundef %500, i64 noundef %505)
  %507 = load ptr, ptr %3, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.png_struct_def, ptr %507, i32 0, i32 72
  store ptr %506, ptr %508, align 8, !tbaa !50
  store i32 0, ptr %8, align 4, !tbaa !25
  br label %509

509:                                              ; preds = %557, %499
  %510 = load i32, ptr %8, align 4, !tbaa !25
  %511 = load i32, ptr %11, align 4, !tbaa !25
  %512 = icmp slt i32 %510, %511
  br i1 %512, label %513, label %560

513:                                              ; preds = %509
  %514 = load ptr, ptr %3, align 8, !tbaa !5
  %515 = call ptr @png_malloc(ptr noundef %514, i64 noundef 512)
  %516 = load ptr, ptr %3, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.png_struct_def, ptr %516, i32 0, i32 72
  %518 = load ptr, ptr %517, align 8, !tbaa !50
  %519 = load i32, ptr %8, align 4, !tbaa !25
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds ptr, ptr %518, i64 %520
  store ptr %515, ptr %521, align 8, !tbaa !5
  %522 = load i32, ptr %8, align 4, !tbaa !25
  %523 = load i32, ptr %10, align 4, !tbaa !25
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds [9 x i32], ptr @png_gamma_shift, i64 0, i64 %524
  %526 = load i32, ptr %525, align 4, !tbaa !25
  %527 = mul i32 %522, %526
  %528 = lshr i32 %527, 4
  store i32 %528, ptr %13, align 4, !tbaa !25
  store i32 0, ptr %9, align 4, !tbaa !25
  br label %529

529:                                              ; preds = %553, %513
  %530 = load i32, ptr %9, align 4, !tbaa !25
  %531 = icmp slt i32 %530, 256
  br i1 %531, label %532, label %556

532:                                              ; preds = %529
  %533 = load i32, ptr %13, align 4, !tbaa !25
  %534 = load i32, ptr %9, align 4, !tbaa !25
  %535 = shl i32 %534, 8
  %536 = add i32 %533, %535
  %537 = uitofp i32 %536 to double
  %538 = fdiv double %537, 6.553500e+04
  %539 = load double, ptr %7, align 8, !tbaa !22
  %540 = call double @pow(double noundef %538, double noundef %539) #5
  %541 = call double @llvm.fmuladd.f64(double %540, double 6.553500e+04, double 5.000000e-01)
  %542 = fptoui double %541 to i16
  %543 = load ptr, ptr %3, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.png_struct_def, ptr %543, i32 0, i32 72
  %545 = load ptr, ptr %544, align 8, !tbaa !50
  %546 = load i32, ptr %8, align 4, !tbaa !25
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds ptr, ptr %545, i64 %547
  %549 = load ptr, ptr %548, align 8, !tbaa !5
  %550 = load i32, ptr %9, align 4, !tbaa !25
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds i16, ptr %549, i64 %551
  store i16 %542, ptr %552, align 2, !tbaa !41
  br label %553

553:                                              ; preds = %532
  %554 = load i32, ptr %9, align 4, !tbaa !25
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %9, align 4, !tbaa !25
  br label %529, !llvm.loop !51

556:                                              ; preds = %529
  br label %557

557:                                              ; preds = %556
  %558 = load i32, ptr %8, align 4, !tbaa !25
  %559 = add nsw i32 %558, 1
  store i32 %559, ptr %8, align 4, !tbaa !25
  br label %509, !llvm.loop !52

560:                                              ; preds = %509
  br label %561

561:                                              ; preds = %560, %409
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  br label %562

562:                                              ; preds = %561, %143
  ret void
}

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #4

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = !{!7, !7, i64 0}
!10 = !{!11, !17, i64 656}
!11 = !{!"png_struct_def", !7, i64 0, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !7, i64 280, !7, i64 281, !12, i64 284, !12, i64 288, !12, i64 292, !13, i64 296, !6, i64 408, !14, i64 416, !12, i64 424, !12, i64 428, !12, i64 432, !12, i64 436, !12, i64 440, !12, i64 444, !12, i64 448, !12, i64 452, !12, i64 456, !14, i64 464, !14, i64 472, !12, i64 480, !12, i64 484, !6, i64 488, !6, i64 496, !6, i64 504, !6, i64 512, !6, i64 520, !6, i64 528, !15, i64 536, !12, i64 560, !12, i64 564, !6, i64 568, !16, i64 576, !16, i64 578, !7, i64 580, !7, i64 585, !7, i64 586, !7, i64 587, !7, i64 588, !7, i64 589, !7, i64 590, !7, i64 591, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !16, i64 598, !7, i64 600, !17, i64 604, !18, i64 608, !18, i64 618, !6, i64 632, !12, i64 640, !12, i64 644, !12, i64 648, !17, i64 652, !17, i64 656, !6, i64 664, !6, i64 672, !6, i64 680, !6, i64 688, !6, i64 696, !6, i64 704, !19, i64 712, !19, i64 717, !6, i64 728, !18, i64 736, !6, i64 752, !6, i64 760, !6, i64 768, !6, i64 776, !6, i64 784, !6, i64 792, !6, i64 800, !6, i64 808, !6, i64 816, !12, i64 824, !12, i64 828, !14, i64 832, !14, i64 840, !14, i64 848, !14, i64 856, !12, i64 864, !12, i64 868, !14, i64 872, !14, i64 880, !6, i64 888, !6, i64 896, !6, i64 904, !6, i64 912, !6, i64 920, !7, i64 928, !7, i64 929, !6, i64 936, !6, i64 944, !6, i64 952, !6, i64 960, !6, i64 968, !6, i64 976, !12, i64 984, !6, i64 992, !6, i64 1000, !12, i64 1008, !6, i64 1016, !7, i64 1024, !16, i64 1026, !16, i64 1028, !16, i64 1030, !12, i64 1032, !12, i64 1036, !7, i64 1040, !6, i64 1048, !6, i64 1056, !6, i64 1064, !6, i64 1072, !6, i64 1080, !6, i64 1088, !6, i64 1096, !7, i64 1104, !12, i64 1108, !12, i64 1112, !12, i64 1116, !20, i64 1120, !12, i64 1152, !12, i64 1156, !6, i64 1160, !12, i64 1168}
!12 = !{!"int", !7, i64 0}
!13 = !{!"z_stream_s", !6, i64 0, !12, i64 8, !14, i64 16, !6, i64 24, !12, i64 32, !14, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !12, i64 88, !14, i64 96, !14, i64 104}
!14 = !{!"long", !7, i64 0}
!15 = !{!"png_row_info_struct", !12, i64 0, !14, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!16 = !{!"short", !7, i64 0}
!17 = !{!"float", !7, i64 0}
!18 = !{!"png_color_16_struct", !7, i64 0, !16, i64 2, !16, i64 4, !16, i64 6, !16, i64 8}
!19 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!20 = !{!"png_unknown_chunk_t", !7, i64 0, !6, i64 8, !14, i64 16, !7, i64 24}
!21 = !{!11, !17, i64 652}
!22 = !{!23, !23, i64 0}
!23 = !{!"double", !7, i64 0}
!24 = !{!11, !6, i64 664}
!25 = !{!12, !12, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!11, !12, i64 292}
!29 = !{!11, !6, i64 680}
!30 = distinct !{!30, !27}
!31 = !{!11, !6, i64 672}
!32 = distinct !{!32, !27}
!33 = !{!11, !7, i64 590}
!34 = !{!11, !7, i64 712}
!35 = !{!11, !7, i64 713}
!36 = !{!11, !7, i64 714}
!37 = !{!11, !7, i64 715}
!38 = !{!11, !12, i64 648}
!39 = !{!11, !6, i64 688}
!40 = distinct !{!40, !27}
!41 = !{!16, !16, i64 0}
!42 = distinct !{!42, !27}
!43 = distinct !{!43, !27}
!44 = distinct !{!44, !27}
!45 = distinct !{!45, !27}
!46 = distinct !{!46, !27}
!47 = !{!11, !6, i64 704}
!48 = distinct !{!48, !27}
!49 = distinct !{!49, !27}
!50 = !{!11, !6, i64 696}
!51 = distinct !{!51, !27}
!52 = distinct !{!52, !27}


; 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"

@png_gamma_shift = external hidden local_unnamed_addr constant [9 x i32], align 16

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

declare ptr @png_calloc(ptr noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; Function Attrs: nounwind uwtable
define dso_local void @png_build_gamma_table(ptr noundef %0, i8 noundef zeroext %1) local_unnamed_addr #2 {
  %3 = icmp ult i8 %1, 9
  br i1 %3, label %4, label %92

4:                                                ; preds = %2
  %5 = getelementptr inbounds i8, ptr %0, i64 656
  %6 = load float, ptr %5, align 8, !tbaa !5
  %7 = fpext float %6 to double
  %8 = fcmp ogt double %7, 0x3EB0C6F7A0B5ED8D
  br i1 %8, label %9, label %15

9:                                                ; preds = %4
  %10 = getelementptr inbounds i8, ptr %0, i64 652
  %11 = load float, ptr %10, align 4, !tbaa !19
  %12 = fmul float %6, %11
  %13 = fpext float %12 to double
  %14 = fdiv double 1.000000e+00, %13
  br label %15

15:                                               ; preds = %4, %9
  %.0153 = phi double [ %14, %9 ], [ 1.000000e+00, %4 ]
  %16 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 256) #5
  %17 = getelementptr inbounds i8, ptr %0, i64 664
  store ptr %16, ptr %17, align 8, !tbaa !20
  br label %18

18:                                               ; preds = %18, %15
  %indvars.iv237 = phi i64 [ 0, %15 ], [ %indvars.iv.next238.1, %18 ]
  %19 = trunc nuw nsw i64 %indvars.iv237 to i32
  %20 = uitofp nneg i32 %19 to double
  %21 = fdiv double %20, 2.550000e+02
  %22 = tail call double @pow(double noundef %21, double noundef %.0153) #5
  %23 = tail call double @llvm.fmuladd.f64(double %22, double 2.550000e+02, double 5.000000e-01)
  %24 = fptoui double %23 to i8
  %25 = load ptr, ptr %17, align 8, !tbaa !20
  %26 = getelementptr inbounds i8, ptr %25, i64 %indvars.iv237
  store i8 %24, ptr %26, align 1, !tbaa !21
  %indvars.iv.next238 = or disjoint i64 %indvars.iv237, 1
  %27 = trunc nuw nsw i64 %indvars.iv.next238 to i32
  %28 = uitofp nneg i32 %27 to double
  %29 = fdiv double %28, 2.550000e+02
  %30 = tail call double @pow(double noundef %29, double noundef %.0153) #5
  %31 = tail call double @llvm.fmuladd.f64(double %30, double 2.550000e+02, double 5.000000e-01)
  %32 = fptoui double %31 to i8
  %33 = load ptr, ptr %17, align 8, !tbaa !20
  %34 = getelementptr inbounds i8, ptr %33, i64 %indvars.iv.next238
  store i8 %32, ptr %34, align 1, !tbaa !21
  %indvars.iv.next238.1 = add nuw nsw i64 %indvars.iv237, 2
  %exitcond240.not.1 = icmp eq i64 %indvars.iv.next238.1, 256
  br i1 %exitcond240.not.1, label %35, label %18, !llvm.loop !22

35:                                               ; preds = %18
  %36 = getelementptr inbounds i8, ptr %0, i64 292
  %37 = load i32, ptr %36, align 4, !tbaa !24
  %38 = and i32 %37, 6291584
  %.not179 = icmp eq i32 %38, 0
  br i1 %.not179, label %.loopexit, label %39

39:                                               ; preds = %35
  %40 = getelementptr inbounds i8, ptr %0, i64 652
  %41 = load float, ptr %40, align 4, !tbaa !19
  %42 = fpext float %41 to double
  %43 = fdiv double 1.000000e+00, %42
  %44 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 256) #5
  %45 = getelementptr inbounds i8, ptr %0, i64 680
  store ptr %44, ptr %45, align 8, !tbaa !25
  br label %46

46:                                               ; preds = %46, %39
  %indvars.iv241 = phi i64 [ 0, %39 ], [ %indvars.iv.next242.1, %46 ]
  %47 = trunc nuw nsw i64 %indvars.iv241 to i32
  %48 = uitofp nneg i32 %47 to double
  %49 = fdiv double %48, 2.550000e+02
  %50 = tail call double @pow(double noundef %49, double noundef %43) #5
  %51 = tail call double @llvm.fmuladd.f64(double %50, double 2.550000e+02, double 5.000000e-01)
  %52 = fptoui double %51 to i8
  %53 = load ptr, ptr %45, align 8, !tbaa !25
  %54 = getelementptr inbounds i8, ptr %53, i64 %indvars.iv241
  store i8 %52, ptr %54, align 1, !tbaa !21
  %indvars.iv.next242 = or disjoint i64 %indvars.iv241, 1
  %55 = trunc nuw nsw i64 %indvars.iv.next242 to i32
  %56 = uitofp nneg i32 %55 to double
  %57 = fdiv double %56, 2.550000e+02
  %58 = tail call double @pow(double noundef %57, double noundef %43) #5
  %59 = tail call double @llvm.fmuladd.f64(double %58, double 2.550000e+02, double 5.000000e-01)
  %60 = fptoui double %59 to i8
  %61 = load ptr, ptr %45, align 8, !tbaa !25
  %62 = getelementptr inbounds i8, ptr %61, i64 %indvars.iv.next242
  store i8 %60, ptr %62, align 1, !tbaa !21
  %indvars.iv.next242.1 = add nuw nsw i64 %indvars.iv241, 2
  %exitcond244.not.1 = icmp eq i64 %indvars.iv.next242.1, 256
  br i1 %exitcond244.not.1, label %63, label %46, !llvm.loop !26

63:                                               ; preds = %46
  %64 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 256) #5
  %65 = getelementptr inbounds i8, ptr %0, i64 672
  store ptr %64, ptr %65, align 8, !tbaa !27
  %66 = load float, ptr %5, align 8, !tbaa !5
  %67 = fpext float %66 to double
  %68 = fcmp ogt double %67, 0x3EB0C6F7A0B5ED8D
  br i1 %68, label %69, label %71

69:                                               ; preds = %63
  %70 = fdiv double 1.000000e+00, %67
  br label %74

71:                                               ; preds = %63
  %72 = load float, ptr %40, align 4, !tbaa !19
  %73 = fpext float %72 to double
  br label %74

74:                                               ; preds = %71, %69
  %.1154 = phi double [ %70, %69 ], [ %73, %71 ]
  br label %75

75:                                               ; preds = %75, %74
  %indvars.iv245 = phi i64 [ 0, %74 ], [ %indvars.iv.next246.1, %75 ]
  %76 = trunc nuw nsw i64 %indvars.iv245 to i32
  %77 = uitofp nneg i32 %76 to double
  %78 = fdiv double %77, 2.550000e+02
  %79 = tail call double @pow(double noundef %78, double noundef %.1154) #5
  %80 = tail call double @llvm.fmuladd.f64(double %79, double 2.550000e+02, double 5.000000e-01)
  %81 = fptoui double %80 to i8
  %82 = load ptr, ptr %65, align 8, !tbaa !27
  %83 = getelementptr inbounds i8, ptr %82, i64 %indvars.iv245
  store i8 %81, ptr %83, align 1, !tbaa !21
  %indvars.iv.next246 = or disjoint i64 %indvars.iv245, 1
  %84 = trunc nuw nsw i64 %indvars.iv.next246 to i32
  %85 = uitofp nneg i32 %84 to double
  %86 = fdiv double %85, 2.550000e+02
  %87 = tail call double @pow(double noundef %86, double noundef %.1154) #5
  %88 = tail call double @llvm.fmuladd.f64(double %87, double 2.550000e+02, double 5.000000e-01)
  %89 = fptoui double %88 to i8
  %90 = load ptr, ptr %65, align 8, !tbaa !27
  %91 = getelementptr inbounds i8, ptr %90, i64 %indvars.iv.next246
  store i8 %89, ptr %91, align 1, !tbaa !21
  %indvars.iv.next246.1 = add nuw nsw i64 %indvars.iv245, 2
  %exitcond248.not.1 = icmp eq i64 %indvars.iv.next246.1, 256
  br i1 %exitcond248.not.1, label %.loopexit, label %75, !llvm.loop !28

92:                                               ; preds = %2
  %93 = getelementptr inbounds i8, ptr %0, i64 590
  %94 = load i8, ptr %93, align 2, !tbaa !29
  %95 = and i8 %94, 2
  %.not = icmp eq i8 %95, 0
  br i1 %.not, label %103, label %96

96:                                               ; preds = %92
  %97 = getelementptr inbounds i8, ptr %0, i64 712
  %98 = load i8, ptr %97, align 8, !tbaa !30
  %99 = getelementptr inbounds i8, ptr %0, i64 713
  %100 = load i8, ptr %99, align 1, !tbaa !31
  %spec.select = tail call i8 @llvm.umax.i8(i8 %100, i8 %98)
  %101 = getelementptr inbounds i8, ptr %0, i64 714
  %102 = load i8, ptr %101, align 2, !tbaa !32
  %spec.select180 = tail call i8 @llvm.umax.i8(i8 %102, i8 %spec.select)
  br label %106

103:                                              ; preds = %92
  %104 = getelementptr inbounds i8, ptr %0, i64 715
  %105 = load i8, ptr %104, align 1, !tbaa !33
  br label %106

106:                                              ; preds = %96, %103
  %.1158.in = phi i8 [ %105, %103 ], [ %spec.select180, %96 ]
  %.not174 = icmp eq i8 %.1158.in, 0
  %.1158 = zext i8 %.1158.in to i32
  %107 = sub nsw i32 16, %.1158
  %.0162 = select i1 %.not174, i32 0, i32 %107
  %108 = getelementptr inbounds i8, ptr %0, i64 292
  %109 = load i32, ptr %108, align 4, !tbaa !24
  %110 = and i32 %109, 1024
  %.not175 = icmp eq i32 %110, 0
  %spec.store.select = tail call i32 @llvm.smax.i32(i32 %.0162, i32 5)
  %.1163 = select i1 %.not175, i32 %.0162, i32 %spec.store.select
  %spec.store.select1 = tail call i32 @llvm.smin.i32(i32 %.1163, i32 8)
  %spec.store.select2 = tail call i32 @llvm.smax.i32(i32 %spec.store.select1, i32 0)
  %111 = getelementptr inbounds i8, ptr %0, i64 648
  store i32 %spec.store.select2, ptr %111, align 8, !tbaa !34
  %112 = sub nuw nsw i32 8, %spec.store.select2
  %113 = shl nuw nsw i32 1, %112
  %114 = getelementptr inbounds i8, ptr %0, i64 656
  %115 = load float, ptr %114, align 8, !tbaa !5
  %116 = fpext float %115 to double
  %117 = fcmp ogt double %116, 0x3EB0C6F7A0B5ED8D
  br i1 %117, label %118, label %124

118:                                              ; preds = %106
  %119 = getelementptr inbounds i8, ptr %0, i64 652
  %120 = load float, ptr %119, align 4, !tbaa !19
  %121 = fmul float %115, %120
  %122 = fpext float %121 to double
  %123 = fdiv double 1.000000e+00, %122
  br label %124

124:                                              ; preds = %106, %118
  %.0155 = phi double [ %123, %118 ], [ 1.000000e+00, %106 ]
  %125 = shl nuw nsw i32 8, %112
  %126 = zext nneg i32 %125 to i64
  %127 = tail call ptr @png_calloc(ptr noundef nonnull %0, i64 noundef %126) #5
  %128 = getelementptr inbounds i8, ptr %0, i64 688
  store ptr %127, ptr %128, align 8, !tbaa !35
  %129 = load i32, ptr %108, align 4, !tbaa !24
  %130 = and i32 %129, 1152
  %.not176 = icmp eq i32 %130, 0
  br i1 %.not176, label %.preheader, label %.preheader185.preheader

.preheader185.preheader:                          ; preds = %124
  %wide.trip.count = zext nneg i32 %113 to i64
  br label %.preheader185

.preheader:                                       ; preds = %124
  %131 = zext nneg i32 %spec.store.select2 to i64
  %132 = getelementptr inbounds [9 x i32], ptr @png_gamma_shift, i64 0, i64 %131
  %wide.trip.count215 = zext nneg i32 %113 to i64
  br label %188

.preheader185:                                    ; preds = %.preheader185.preheader, %.preheader185
  %indvars.iv = phi i64 [ 0, %.preheader185.preheader ], [ %indvars.iv.next, %.preheader185 ]
  %133 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 512) #5
  %134 = load ptr, ptr %128, align 8, !tbaa !35
  %135 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv
  store ptr %133, ptr %135, align 8, !tbaa !36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %136, label %.preheader185, !llvm.loop !37

136:                                              ; preds = %.preheader185
  %137 = fdiv double 1.000000e+00, %.0155
  %138 = shl nuw nsw i32 256, %112
  %139 = uitofp nneg i32 %138 to double
  %140 = lshr i32 255, %spec.store.select2
  br label %152

.preheader183:                                    ; preds = %._crit_edge
  %141 = icmp ult i32 %.1151.lcssa, %138
  br i1 %141, label %.lr.ph192, label %.loopexit182

.lr.ph192:                                        ; preds = %.preheader183
  %142 = load ptr, ptr %128, align 8, !tbaa !35
  %.neg = add i32 %.1151.lcssa, 1
  %xtraiter = and i32 %.1151.lcssa, 1
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph192
  %143 = and i32 %.1151.lcssa, %140
  %144 = zext nneg i32 %143 to i64
  %145 = getelementptr inbounds ptr, ptr %142, i64 %144
  %146 = load ptr, ptr %145, align 8, !tbaa !36
  %147 = lshr i32 %.1151.lcssa, %112
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds i16, ptr %146, i64 %148
  store i16 -1, ptr %149, align 2, !tbaa !38
  %150 = add nuw nsw i32 %.1151.lcssa, 1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph192
  %.2152191.unr = phi i32 [ %.1151.lcssa, %.lr.ph192 ], [ %150, %.prol.loopexit.unr-lcssa ]
  %151 = icmp eq i32 %138, %.neg
  br i1 %151, label %.loopexit182, label %.lr.ph192.new

152:                                              ; preds = %136, %._crit_edge
  %.0150190 = phi i32 [ 0, %136 ], [ %.1151.lcssa, %._crit_edge ]
  %.1160189 = phi i32 [ 0, %136 ], [ %171, %._crit_edge ]
  %153 = uitofp nneg i32 %.1160189 to double
  %154 = fadd double %153, 5.000000e-01
  %155 = fmul double %154, 3.906250e-03
  %156 = tail call double @pow(double noundef %155, double noundef %137) #5
  %157 = fmul double %156, %139
  %158 = fptoui double %157 to i32
  %.not178187 = icmp ugt i32 %.0150190, %158
  br i1 %.not178187, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %152
  %159 = trunc i32 %.1160189 to i16
  %160 = mul i16 %159, 257
  %161 = load ptr, ptr %128, align 8, !tbaa !35
  br label %162

162:                                              ; preds = %.lr.ph, %162
  %.1151188 = phi i32 [ %.0150190, %.lr.ph ], [ %170, %162 ]
  %163 = and i32 %.1151188, %140
  %164 = zext nneg i32 %163 to i64
  %165 = getelementptr inbounds ptr, ptr %161, i64 %164
  %166 = load ptr, ptr %165, align 8, !tbaa !36
  %167 = lshr i32 %.1151188, %112
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds i16, ptr %166, i64 %168
  store i16 %160, ptr %169, align 2, !tbaa !38
  %170 = add i32 %.1151188, 1
  %.not178 = icmp ugt i32 %170, %158
  br i1 %.not178, label %._crit_edge, label %162, !llvm.loop !39

._crit_edge:                                      ; preds = %162, %152
  %.1151.lcssa = phi i32 [ %.0150190, %152 ], [ %170, %162 ]
  %171 = add nuw nsw i32 %.1160189, 1
  %exitcond205.not = icmp eq i32 %171, 256
  br i1 %exitcond205.not, label %.preheader183, label %152, !llvm.loop !40

.lr.ph192.new:                                    ; preds = %.prol.loopexit, %.lr.ph192.new
  %.2152191 = phi i32 [ %187, %.lr.ph192.new ], [ %.2152191.unr, %.prol.loopexit ]
  %172 = and i32 %.2152191, %140
  %173 = zext nneg i32 %172 to i64
  %174 = getelementptr inbounds ptr, ptr %142, i64 %173
  %175 = load ptr, ptr %174, align 8, !tbaa !36
  %176 = lshr i32 %.2152191, %112
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i16, ptr %175, i64 %177
  store i16 -1, ptr %178, align 2, !tbaa !38
  %179 = add nuw nsw i32 %.2152191, 1
  %180 = and i32 %179, %140
  %181 = zext nneg i32 %180 to i64
  %182 = getelementptr inbounds ptr, ptr %142, i64 %181
  %183 = load ptr, ptr %182, align 8, !tbaa !36
  %184 = lshr i32 %179, %112
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i16, ptr %183, i64 %185
  store i16 -1, ptr %186, align 2, !tbaa !38
  %187 = add nuw nsw i32 %.2152191, 2
  %exitcond206.not.1 = icmp eq i32 %187, %138
  br i1 %exitcond206.not.1, label %.loopexit182, label %.lr.ph192.new, !llvm.loop !41

188:                                              ; preds = %.preheader, %219
  %indvars.iv211 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next212, %219 ]
  %189 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 512) #5
  %190 = load ptr, ptr %128, align 8, !tbaa !35
  %191 = getelementptr inbounds ptr, ptr %190, i64 %indvars.iv211
  store ptr %189, ptr %191, align 8, !tbaa !36
  %192 = load i32, ptr %132, align 4, !tbaa !42
  %193 = trunc nuw nsw i64 %indvars.iv211 to i32
  %194 = mul i32 %192, %193
  %195 = lshr i32 %194, 4
  br label %196

196:                                              ; preds = %196, %188
  %indvars.iv207 = phi i64 [ 0, %188 ], [ %indvars.iv.next208.1, %196 ]
  %indvars.iv207.tr = trunc i64 %indvars.iv207 to i32
  %197 = shl i32 %indvars.iv207.tr, 8
  %198 = add nuw nsw i32 %197, %195
  %199 = uitofp nneg i32 %198 to double
  %200 = fdiv double %199, 6.553500e+04
  %201 = tail call double @pow(double noundef %200, double noundef %.0155) #5
  %202 = tail call double @llvm.fmuladd.f64(double %201, double 6.553500e+04, double 5.000000e-01)
  %203 = fptoui double %202 to i16
  %204 = load ptr, ptr %128, align 8, !tbaa !35
  %205 = getelementptr inbounds ptr, ptr %204, i64 %indvars.iv211
  %206 = load ptr, ptr %205, align 8, !tbaa !36
  %207 = getelementptr inbounds i16, ptr %206, i64 %indvars.iv207
  store i16 %203, ptr %207, align 2, !tbaa !38
  %indvars.iv.next208 = or disjoint i64 %indvars.iv207, 1
  %indvars.iv207.tr.1 = trunc i64 %indvars.iv.next208 to i32
  %208 = shl i32 %indvars.iv207.tr.1, 8
  %209 = add nuw nsw i32 %208, %195
  %210 = uitofp nneg i32 %209 to double
  %211 = fdiv double %210, 6.553500e+04
  %212 = tail call double @pow(double noundef %211, double noundef %.0155) #5
  %213 = tail call double @llvm.fmuladd.f64(double %212, double 6.553500e+04, double 5.000000e-01)
  %214 = fptoui double %213 to i16
  %215 = load ptr, ptr %128, align 8, !tbaa !35
  %216 = getelementptr inbounds ptr, ptr %215, i64 %indvars.iv211
  %217 = load ptr, ptr %216, align 8, !tbaa !36
  %218 = getelementptr inbounds i16, ptr %217, i64 %indvars.iv.next208
  store i16 %214, ptr %218, align 2, !tbaa !38
  %indvars.iv.next208.1 = add nuw nsw i64 %indvars.iv207, 2
  %exitcond210.not.1 = icmp eq i64 %indvars.iv.next208.1, 256
  br i1 %exitcond210.not.1, label %219, label %196, !llvm.loop !43

219:                                              ; preds = %196
  %indvars.iv.next212 = add nuw nsw i64 %indvars.iv211, 1
  %exitcond216.not = icmp eq i64 %indvars.iv.next212, %wide.trip.count215
  br i1 %exitcond216.not, label %.loopexit182, label %188, !llvm.loop !44

.loopexit182:                                     ; preds = %.prol.loopexit, %.lr.ph192.new, %219, %.preheader183
  %220 = load i32, ptr %108, align 4, !tbaa !24
  %221 = and i32 %220, 6291584
  %.not177 = icmp eq i32 %221, 0
  br i1 %.not177, label %.loopexit, label %222

222:                                              ; preds = %.loopexit182
  %223 = getelementptr inbounds i8, ptr %0, i64 652
  %224 = load float, ptr %223, align 4, !tbaa !19
  %225 = fpext float %224 to double
  %226 = fdiv double 1.000000e+00, %225
  %227 = tail call ptr @png_calloc(ptr noundef nonnull %0, i64 noundef %126) #5
  %228 = getelementptr inbounds i8, ptr %0, i64 704
  store ptr %227, ptr %228, align 8, !tbaa !45
  %229 = zext nneg i32 %spec.store.select2 to i64
  %230 = getelementptr inbounds [9 x i32], ptr @png_gamma_shift, i64 0, i64 %229
  %wide.trip.count225 = zext nneg i32 %113 to i64
  br label %231

231:                                              ; preds = %222, %262
  %indvars.iv221 = phi i64 [ 0, %222 ], [ %indvars.iv.next222, %262 ]
  %232 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 512) #5
  %233 = load ptr, ptr %228, align 8, !tbaa !45
  %234 = getelementptr inbounds ptr, ptr %233, i64 %indvars.iv221
  store ptr %232, ptr %234, align 8, !tbaa !36
  %235 = load i32, ptr %230, align 4, !tbaa !42
  %236 = trunc nuw nsw i64 %indvars.iv221 to i32
  %237 = mul i32 %235, %236
  %238 = lshr i32 %237, 4
  br label %239

239:                                              ; preds = %239, %231
  %indvars.iv217 = phi i64 [ 0, %231 ], [ %indvars.iv.next218.1, %239 ]
  %indvars.iv217.tr = trunc i64 %indvars.iv217 to i32
  %240 = shl i32 %indvars.iv217.tr, 8
  %241 = add nuw nsw i32 %240, %238
  %242 = uitofp nneg i32 %241 to double
  %243 = fdiv double %242, 6.553500e+04
  %244 = tail call double @pow(double noundef %243, double noundef %226) #5
  %245 = tail call double @llvm.fmuladd.f64(double %244, double 6.553500e+04, double 5.000000e-01)
  %246 = fptoui double %245 to i16
  %247 = load ptr, ptr %228, align 8, !tbaa !45
  %248 = getelementptr inbounds ptr, ptr %247, i64 %indvars.iv221
  %249 = load ptr, ptr %248, align 8, !tbaa !36
  %250 = getelementptr inbounds i16, ptr %249, i64 %indvars.iv217
  store i16 %246, ptr %250, align 2, !tbaa !38
  %indvars.iv.next218 = or disjoint i64 %indvars.iv217, 1
  %indvars.iv217.tr.1 = trunc i64 %indvars.iv.next218 to i32
  %251 = shl i32 %indvars.iv217.tr.1, 8
  %252 = add nuw nsw i32 %251, %238
  %253 = uitofp nneg i32 %252 to double
  %254 = fdiv double %253, 6.553500e+04
  %255 = tail call double @pow(double noundef %254, double noundef %226) #5
  %256 = tail call double @llvm.fmuladd.f64(double %255, double 6.553500e+04, double 5.000000e-01)
  %257 = fptoui double %256 to i16
  %258 = load ptr, ptr %228, align 8, !tbaa !45
  %259 = getelementptr inbounds ptr, ptr %258, i64 %indvars.iv221
  %260 = load ptr, ptr %259, align 8, !tbaa !36
  %261 = getelementptr inbounds i16, ptr %260, i64 %indvars.iv.next218
  store i16 %257, ptr %261, align 2, !tbaa !38
  %indvars.iv.next218.1 = add nuw nsw i64 %indvars.iv217, 2
  %exitcond220.not.1 = icmp eq i64 %indvars.iv.next218.1, 256
  br i1 %exitcond220.not.1, label %262, label %239, !llvm.loop !46

262:                                              ; preds = %239
  %indvars.iv.next222 = add nuw nsw i64 %indvars.iv221, 1
  %exitcond226.not = icmp eq i64 %indvars.iv.next222, %wide.trip.count225
  br i1 %exitcond226.not, label %263, label %231, !llvm.loop !47

263:                                              ; preds = %262
  %264 = load float, ptr %114, align 8, !tbaa !5
  %265 = fpext float %264 to double
  %266 = fcmp ogt double %265, 0x3EB0C6F7A0B5ED8D
  br i1 %266, label %267, label %269

267:                                              ; preds = %263
  %268 = fdiv double 1.000000e+00, %265
  br label %272

269:                                              ; preds = %263
  %270 = load float, ptr %223, align 4, !tbaa !19
  %271 = fpext float %270 to double
  br label %272

272:                                              ; preds = %269, %267
  %.1156 = phi double [ %268, %267 ], [ %271, %269 ]
  %273 = tail call ptr @png_calloc(ptr noundef nonnull %0, i64 noundef %126) #5
  %274 = getelementptr inbounds i8, ptr %0, i64 696
  store ptr %273, ptr %274, align 8, !tbaa !48
  br label %275

275:                                              ; preds = %272, %305
  %indvars.iv231 = phi i64 [ 0, %272 ], [ %indvars.iv.next232, %305 ]
  %276 = tail call ptr @png_malloc(ptr noundef nonnull %0, i64 noundef 512) #5
  %277 = load ptr, ptr %274, align 8, !tbaa !48
  %278 = getelementptr inbounds ptr, ptr %277, i64 %indvars.iv231
  store ptr %276, ptr %278, align 8, !tbaa !36
  %279 = trunc nuw nsw i64 %indvars.iv231 to i32
  %280 = mul i32 %235, %279
  %281 = lshr i32 %280, 4
  br label %282

282:                                              ; preds = %282, %275
  %indvars.iv227 = phi i64 [ 0, %275 ], [ %indvars.iv.next228.1, %282 ]
  %indvars.iv227.tr = trunc i64 %indvars.iv227 to i32
  %283 = shl i32 %indvars.iv227.tr, 8
  %284 = add nuw nsw i32 %283, %281
  %285 = uitofp nneg i32 %284 to double
  %286 = fdiv double %285, 6.553500e+04
  %287 = tail call double @pow(double noundef %286, double noundef %.1156) #5
  %288 = tail call double @llvm.fmuladd.f64(double %287, double 6.553500e+04, double 5.000000e-01)
  %289 = fptoui double %288 to i16
  %290 = load ptr, ptr %274, align 8, !tbaa !48
  %291 = getelementptr inbounds ptr, ptr %290, i64 %indvars.iv231
  %292 = load ptr, ptr %291, align 8, !tbaa !36
  %293 = getelementptr inbounds i16, ptr %292, i64 %indvars.iv227
  store i16 %289, ptr %293, align 2, !tbaa !38
  %indvars.iv.next228 = or disjoint i64 %indvars.iv227, 1
  %indvars.iv227.tr.1 = trunc i64 %indvars.iv.next228 to i32
  %294 = shl i32 %indvars.iv227.tr.1, 8
  %295 = add nuw nsw i32 %294, %281
  %296 = uitofp nneg i32 %295 to double
  %297 = fdiv double %296, 6.553500e+04
  %298 = tail call double @pow(double noundef %297, double noundef %.1156) #5
  %299 = tail call double @llvm.fmuladd.f64(double %298, double 6.553500e+04, double 5.000000e-01)
  %300 = fptoui double %299 to i16
  %301 = load ptr, ptr %274, align 8, !tbaa !48
  %302 = getelementptr inbounds ptr, ptr %301, i64 %indvars.iv231
  %303 = load ptr, ptr %302, align 8, !tbaa !36
  %304 = getelementptr inbounds i16, ptr %303, i64 %indvars.iv.next228
  store i16 %300, ptr %304, align 2, !tbaa !38
  %indvars.iv.next228.1 = add nuw nsw i64 %indvars.iv227, 2
  %exitcond230.not.1 = icmp eq i64 %indvars.iv.next228.1, 256
  br i1 %exitcond230.not.1, label %305, label %282, !llvm.loop !49

305:                                              ; preds = %282
  %indvars.iv.next232 = add nuw nsw i64 %indvars.iv231, 1
  %exitcond236.not = icmp eq i64 %indvars.iv.next232, %wide.trip.count225
  br i1 %exitcond236.not, label %.loopexit, label %275, !llvm.loop !50

.loopexit:                                        ; preds = %305, %75, %.loopexit182, %35
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @pow(double noundef, double noundef) local_unnamed_addr #3

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i8 @llvm.umax.i8(i8, i8) #4

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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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, !15, i64 656}
!6 = !{!"png_struct_def", !7, i64 0, !9, i64 200, !9, i64 208, !9, i64 216, !9, i64 224, !9, i64 232, !9, i64 240, !9, i64 248, !9, i64 256, !9, i64 264, !9, i64 272, !7, i64 280, !7, i64 281, !10, i64 284, !10, i64 288, !10, i64 292, !11, i64 296, !9, i64 408, !12, i64 416, !10, i64 424, !10, i64 428, !10, i64 432, !10, i64 436, !10, i64 440, !10, i64 444, !10, i64 448, !10, i64 452, !10, i64 456, !12, i64 464, !12, i64 472, !10, i64 480, !10, i64 484, !9, i64 488, !9, i64 496, !9, i64 504, !9, i64 512, !9, i64 520, !9, i64 528, !13, i64 536, !10, i64 560, !10, i64 564, !9, i64 568, !14, i64 576, !14, i64 578, !7, i64 580, !7, i64 585, !7, i64 586, !7, i64 587, !7, i64 588, !7, i64 589, !7, i64 590, !7, i64 591, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !14, i64 598, !7, i64 600, !15, i64 604, !16, i64 608, !16, i64 618, !9, i64 632, !10, i64 640, !10, i64 644, !10, i64 648, !15, i64 652, !15, i64 656, !9, i64 664, !9, i64 672, !9, i64 680, !9, i64 688, !9, i64 696, !9, i64 704, !17, i64 712, !17, i64 717, !9, i64 728, !16, i64 736, !9, i64 752, !9, i64 760, !9, i64 768, !9, i64 776, !9, i64 784, !9, i64 792, !9, i64 800, !9, i64 808, !9, i64 816, !10, i64 824, !10, i64 828, !12, i64 832, !12, i64 840, !12, i64 848, !12, i64 856, !10, i64 864, !10, i64 868, !12, i64 872, !12, i64 880, !9, i64 888, !9, i64 896, !9, i64 904, !9, i64 912, !9, i64 920, !7, i64 928, !7, i64 929, !9, i64 936, !9, i64 944, !9, i64 952, !9, i64 960, !9, i64 968, !9, i64 976, !10, i64 984, !9, i64 992, !9, i64 1000, !10, i64 1008, !9, i64 1016, !7, i64 1024, !14, i64 1026, !14, i64 1028, !14, i64 1030, !10, i64 1032, !10, i64 1036, !7, i64 1040, !9, i64 1048, !9, i64 1056, !9, i64 1064, !9, i64 1072, !9, i64 1080, !9, i64 1088, !9, i64 1096, !7, i64 1104, !10, i64 1108, !10, i64 1112, !10, i64 1116, !18, i64 1120, !10, i64 1152, !10, i64 1156, !9, i64 1160, !10, i64 1168}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!"z_stream_s", !9, i64 0, !10, i64 8, !12, i64 16, !9, i64 24, !10, i64 32, !12, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !10, i64 88, !12, i64 96, !12, i64 104}
!12 = !{!"long", !7, i64 0}
!13 = !{!"png_row_info_struct", !10, i64 0, !12, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!14 = !{!"short", !7, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = !{!"png_color_16_struct", !7, i64 0, !14, i64 2, !14, i64 4, !14, i64 6, !14, i64 8}
!17 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!18 = !{!"png_unknown_chunk_t", !7, i64 0, !9, i64 8, !12, i64 16, !7, i64 24}
!19 = !{!6, !15, i64 652}
!20 = !{!6, !9, i64 664}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!6, !10, i64 292}
!25 = !{!6, !9, i64 680}
!26 = distinct !{!26, !23}
!27 = !{!6, !9, i64 672}
!28 = distinct !{!28, !23}
!29 = !{!6, !7, i64 590}
!30 = !{!6, !7, i64 712}
!31 = !{!6, !7, i64 713}
!32 = !{!6, !7, i64 714}
!33 = !{!6, !7, i64 715}
!34 = !{!6, !10, i64 648}
!35 = !{!6, !9, i64 688}
!36 = !{!9, !9, i64 0}
!37 = distinct !{!37, !23}
!38 = !{!14, !14, i64 0}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}
!42 = !{!10, !10, i64 0}
!43 = distinct !{!43, !23}
!44 = distinct !{!44, !23}
!45 = !{!6, !9, i64 704}
!46 = distinct !{!46, !23}
!47 = distinct !{!47, !23}
!48 = !{!6, !9, i64 696}
!49 = distinct !{!49, !23}
!50 = distinct !{!50, !23}


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