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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @png_init_read_transformations(ptr noundef %0) #3 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %struct.png_color_struct, align 1
  %9 = alloca %struct.png_color_struct, align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i16, align 2
  %18 = alloca i16, align 2
  %19 = alloca i16, align 2
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %struct.png_color_struct, align 1
  %29 = alloca ptr, align 8
  %30 = alloca i16, align 2
  %31 = alloca i16, align 2
  %32 = alloca i16, align 2
  %33 = alloca i16, align 2
  %34 = alloca i16, align 2
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #5
  %38 = load ptr, ptr %2, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.png_struct_def, ptr %38, i32 0, i32 49
  %40 = load i8, ptr %39, align 2, !tbaa !9
  %41 = zext i8 %40 to i32
  store i32 %41, ptr %3, align 4, !tbaa !20
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.png_struct_def, ptr %42, i32 0, i32 14
  %44 = load i64, ptr %43, align 8, !tbaa !21
  %45 = and i64 %44, 256
  %46 = icmp ne i64 %45, 0
  br i1 %46, label %47, label %56

47:                                               ; preds = %1
  %48 = load i32, ptr %3, align 4, !tbaa !20
  %49 = and i32 %48, 2
  %50 = icmp ne i32 %49, 0
  br i1 %50, label %56, label %51

51:                                               ; preds = %47
  %52 = load ptr, ptr %2, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.png_struct_def, ptr %52, i32 0, i32 12
  %54 = load i64, ptr %53, align 8, !tbaa !22
  %55 = or i64 %54, 2048
  store i64 %55, ptr %53, align 8, !tbaa !22
  br label %111

56:                                               ; preds = %47, %1
  %57 = load ptr, ptr %2, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.png_struct_def, ptr %57, i32 0, i32 14
  %59 = load i64, ptr %58, align 8, !tbaa !21
  %60 = and i64 %59, 128
  %61 = icmp ne i64 %60, 0
  br i1 %61, label %62, label %110

62:                                               ; preds = %56
  %63 = load ptr, ptr %2, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.png_struct_def, ptr %63, i32 0, i32 14
  %65 = load i64, ptr %64, align 8, !tbaa !21
  %66 = and i64 %65, 256
  %67 = icmp ne i64 %66, 0
  br i1 %67, label %110, label %68

68:                                               ; preds = %62
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.png_struct_def, ptr %69, i32 0, i32 14
  %71 = load i64, ptr %70, align 8, !tbaa !21
  %72 = and i64 %71, 16384
  %73 = icmp ne i64 %72, 0
  br i1 %73, label %74, label %110

74:                                               ; preds = %68
  %75 = load ptr, ptr %2, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.png_struct_def, ptr %75, i32 0, i32 59
  %77 = getelementptr inbounds %struct.png_color_16_struct, ptr %76, i32 0, i32 1
  %78 = load i16, ptr %77, align 2, !tbaa !23
  %79 = zext i16 %78 to i32
  %80 = load ptr, ptr %2, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.png_struct_def, ptr %80, i32 0, i32 59
  %82 = getelementptr inbounds %struct.png_color_16_struct, ptr %81, i32 0, i32 2
  %83 = load i16, ptr %82, align 4, !tbaa !24
  %84 = zext i16 %83 to i32
  %85 = icmp eq i32 %79, %84
  br i1 %85, label %86, label %110

86:                                               ; preds = %74
  %87 = load ptr, ptr %2, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.png_struct_def, ptr %87, i32 0, i32 59
  %89 = getelementptr inbounds %struct.png_color_16_struct, ptr %88, i32 0, i32 1
  %90 = load i16, ptr %89, align 2, !tbaa !23
  %91 = zext i16 %90 to i32
  %92 = load ptr, ptr %2, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.png_struct_def, ptr %92, i32 0, i32 59
  %94 = getelementptr inbounds %struct.png_color_16_struct, ptr %93, i32 0, i32 3
  %95 = load i16, ptr %94, align 2, !tbaa !25
  %96 = zext i16 %95 to i32
  %97 = icmp eq i32 %91, %96
  br i1 %97, label %98, label %110

98:                                               ; preds = %86
  %99 = load ptr, ptr %2, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.png_struct_def, ptr %99, i32 0, i32 12
  %101 = load i64, ptr %100, align 8, !tbaa !22
  %102 = or i64 %101, 2048
  store i64 %102, ptr %100, align 8, !tbaa !22
  %103 = load ptr, ptr %2, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.png_struct_def, ptr %103, i32 0, i32 59
  %105 = getelementptr inbounds %struct.png_color_16_struct, ptr %104, i32 0, i32 1
  %106 = load i16, ptr %105, align 2, !tbaa !23
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.png_struct_def, ptr %107, i32 0, i32 59
  %109 = getelementptr inbounds %struct.png_color_16_struct, ptr %108, i32 0, i32 4
  store i16 %106, ptr %109, align 8, !tbaa !26
  br label %110

110:                                              ; preds = %98, %86, %74, %68, %62, %56
  br label %111

111:                                              ; preds = %110, %51
  %112 = load ptr, ptr %2, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.png_struct_def, ptr %112, i32 0, i32 14
  %114 = load i64, ptr %113, align 8, !tbaa !21
  %115 = and i64 %114, 256
  %116 = icmp ne i64 %115, 0
  br i1 %116, label %117, label %385

117:                                              ; preds = %111
  %118 = load ptr, ptr %2, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.png_struct_def, ptr %118, i32 0, i32 14
  %120 = load i64, ptr %119, align 8, !tbaa !21
  %121 = and i64 %120, 4096
  %122 = icmp ne i64 %121, 0
  br i1 %122, label %123, label %385

123:                                              ; preds = %117
  %124 = load i32, ptr %3, align 4, !tbaa !20
  %125 = and i32 %124, 2
  %126 = icmp ne i32 %125, 0
  br i1 %126, label %291, label %127

127:                                              ; preds = %123
  %128 = load ptr, ptr %2, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.png_struct_def, ptr %128, i32 0, i32 50
  %130 = load i8, ptr %129, align 1, !tbaa !27
  %131 = zext i8 %130 to i32
  switch i32 %131, label %290 [
    i32 1, label %132
    i32 2, label %180
    i32 4, label %228
    i32 8, label %276
    i32 16, label %276
  ]

132:                                              ; preds = %127
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.png_struct_def, ptr %133, i32 0, i32 59
  %135 = getelementptr inbounds %struct.png_color_16_struct, ptr %134, i32 0, i32 4
  %136 = load i16, ptr %135, align 8, !tbaa !26
  %137 = zext i16 %136 to i32
  %138 = mul nsw i32 %137, 255
  %139 = trunc i32 %138 to i16
  store i16 %139, ptr %135, align 8, !tbaa !26
  %140 = load ptr, ptr %2, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.png_struct_def, ptr %140, i32 0, i32 59
  %142 = getelementptr inbounds %struct.png_color_16_struct, ptr %141, i32 0, i32 4
  %143 = load i16, ptr %142, align 8, !tbaa !26
  %144 = load ptr, ptr %2, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.png_struct_def, ptr %144, i32 0, i32 59
  %146 = getelementptr inbounds %struct.png_color_16_struct, ptr %145, i32 0, i32 3
  store i16 %143, ptr %146, align 2, !tbaa !25
  %147 = load ptr, ptr %2, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.png_struct_def, ptr %147, i32 0, i32 59
  %149 = getelementptr inbounds %struct.png_color_16_struct, ptr %148, i32 0, i32 2
  store i16 %143, ptr %149, align 4, !tbaa !24
  %150 = load ptr, ptr %2, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.png_struct_def, ptr %150, i32 0, i32 59
  %152 = getelementptr inbounds %struct.png_color_16_struct, ptr %151, i32 0, i32 1
  store i16 %143, ptr %152, align 2, !tbaa !23
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.png_struct_def, ptr %153, i32 0, i32 14
  %155 = load i64, ptr %154, align 8, !tbaa !21
  %156 = and i64 %155, 33554432
  %157 = icmp ne i64 %156, 0
  br i1 %157, label %179, label %158

158:                                              ; preds = %132
  %159 = load ptr, ptr %2, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.png_struct_def, ptr %159, i32 0, i32 76
  %161 = getelementptr inbounds %struct.png_color_16_struct, ptr %160, i32 0, i32 4
  %162 = load i16, ptr %161, align 8, !tbaa !28
  %163 = zext i16 %162 to i32
  %164 = mul nsw i32 %163, 255
  %165 = trunc i32 %164 to i16
  store i16 %165, ptr %161, align 8, !tbaa !28
  %166 = load ptr, ptr %2, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.png_struct_def, ptr %166, i32 0, i32 76
  %168 = getelementptr inbounds %struct.png_color_16_struct, ptr %167, i32 0, i32 4
  %169 = load i16, ptr %168, align 8, !tbaa !28
  %170 = load ptr, ptr %2, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.png_struct_def, ptr %170, i32 0, i32 76
  %172 = getelementptr inbounds %struct.png_color_16_struct, ptr %171, i32 0, i32 3
  store i16 %169, ptr %172, align 2, !tbaa !29
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.png_struct_def, ptr %173, i32 0, i32 76
  %175 = getelementptr inbounds %struct.png_color_16_struct, ptr %174, i32 0, i32 2
  store i16 %169, ptr %175, align 4, !tbaa !30
  %176 = load ptr, ptr %2, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.png_struct_def, ptr %176, i32 0, i32 76
  %178 = getelementptr inbounds %struct.png_color_16_struct, ptr %177, i32 0, i32 1
  store i16 %169, ptr %178, align 2, !tbaa !31
  br label %179

179:                                              ; preds = %158, %132
  br label %290

180:                                              ; preds = %127
  %181 = load ptr, ptr %2, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.png_struct_def, ptr %181, i32 0, i32 59
  %183 = getelementptr inbounds %struct.png_color_16_struct, ptr %182, i32 0, i32 4
  %184 = load i16, ptr %183, align 8, !tbaa !26
  %185 = zext i16 %184 to i32
  %186 = mul nsw i32 %185, 85
  %187 = trunc i32 %186 to i16
  store i16 %187, ptr %183, align 8, !tbaa !26
  %188 = load ptr, ptr %2, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.png_struct_def, ptr %188, i32 0, i32 59
  %190 = getelementptr inbounds %struct.png_color_16_struct, ptr %189, i32 0, i32 4
  %191 = load i16, ptr %190, align 8, !tbaa !26
  %192 = load ptr, ptr %2, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.png_struct_def, ptr %192, i32 0, i32 59
  %194 = getelementptr inbounds %struct.png_color_16_struct, ptr %193, i32 0, i32 3
  store i16 %191, ptr %194, align 2, !tbaa !25
  %195 = load ptr, ptr %2, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.png_struct_def, ptr %195, i32 0, i32 59
  %197 = getelementptr inbounds %struct.png_color_16_struct, ptr %196, i32 0, i32 2
  store i16 %191, ptr %197, align 4, !tbaa !24
  %198 = load ptr, ptr %2, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.png_struct_def, ptr %198, i32 0, i32 59
  %200 = getelementptr inbounds %struct.png_color_16_struct, ptr %199, i32 0, i32 1
  store i16 %191, ptr %200, align 2, !tbaa !23
  %201 = load ptr, ptr %2, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.png_struct_def, ptr %201, i32 0, i32 14
  %203 = load i64, ptr %202, align 8, !tbaa !21
  %204 = and i64 %203, 33554432
  %205 = icmp ne i64 %204, 0
  br i1 %205, label %227, label %206

206:                                              ; preds = %180
  %207 = load ptr, ptr %2, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.png_struct_def, ptr %207, i32 0, i32 76
  %209 = getelementptr inbounds %struct.png_color_16_struct, ptr %208, i32 0, i32 4
  %210 = load i16, ptr %209, align 8, !tbaa !28
  %211 = zext i16 %210 to i32
  %212 = mul nsw i32 %211, 85
  %213 = trunc i32 %212 to i16
  store i16 %213, ptr %209, align 8, !tbaa !28
  %214 = load ptr, ptr %2, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.png_struct_def, ptr %214, i32 0, i32 76
  %216 = getelementptr inbounds %struct.png_color_16_struct, ptr %215, i32 0, i32 4
  %217 = load i16, ptr %216, align 8, !tbaa !28
  %218 = load ptr, ptr %2, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.png_struct_def, ptr %218, i32 0, i32 76
  %220 = getelementptr inbounds %struct.png_color_16_struct, ptr %219, i32 0, i32 3
  store i16 %217, ptr %220, align 2, !tbaa !29
  %221 = load ptr, ptr %2, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.png_struct_def, ptr %221, i32 0, i32 76
  %223 = getelementptr inbounds %struct.png_color_16_struct, ptr %222, i32 0, i32 2
  store i16 %217, ptr %223, align 4, !tbaa !30
  %224 = load ptr, ptr %2, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.png_struct_def, ptr %224, i32 0, i32 76
  %226 = getelementptr inbounds %struct.png_color_16_struct, ptr %225, i32 0, i32 1
  store i16 %217, ptr %226, align 2, !tbaa !31
  br label %227

227:                                              ; preds = %206, %180
  br label %290

228:                                              ; preds = %127
  %229 = load ptr, ptr %2, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.png_struct_def, ptr %229, i32 0, i32 59
  %231 = getelementptr inbounds %struct.png_color_16_struct, ptr %230, i32 0, i32 4
  %232 = load i16, ptr %231, align 8, !tbaa !26
  %233 = zext i16 %232 to i32
  %234 = mul nsw i32 %233, 17
  %235 = trunc i32 %234 to i16
  store i16 %235, ptr %231, align 8, !tbaa !26
  %236 = load ptr, ptr %2, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.png_struct_def, ptr %236, i32 0, i32 59
  %238 = getelementptr inbounds %struct.png_color_16_struct, ptr %237, i32 0, i32 4
  %239 = load i16, ptr %238, align 8, !tbaa !26
  %240 = load ptr, ptr %2, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.png_struct_def, ptr %240, i32 0, i32 59
  %242 = getelementptr inbounds %struct.png_color_16_struct, ptr %241, i32 0, i32 3
  store i16 %239, ptr %242, align 2, !tbaa !25
  %243 = load ptr, ptr %2, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.png_struct_def, ptr %243, i32 0, i32 59
  %245 = getelementptr inbounds %struct.png_color_16_struct, ptr %244, i32 0, i32 2
  store i16 %239, ptr %245, align 4, !tbaa !24
  %246 = load ptr, ptr %2, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.png_struct_def, ptr %246, i32 0, i32 59
  %248 = getelementptr inbounds %struct.png_color_16_struct, ptr %247, i32 0, i32 1
  store i16 %239, ptr %248, align 2, !tbaa !23
  %249 = load ptr, ptr %2, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.png_struct_def, ptr %249, i32 0, i32 14
  %251 = load i64, ptr %250, align 8, !tbaa !21
  %252 = and i64 %251, 33554432
  %253 = icmp ne i64 %252, 0
  br i1 %253, label %275, label %254

254:                                              ; preds = %228
  %255 = load ptr, ptr %2, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.png_struct_def, ptr %255, i32 0, i32 76
  %257 = getelementptr inbounds %struct.png_color_16_struct, ptr %256, i32 0, i32 4
  %258 = load i16, ptr %257, align 8, !tbaa !28
  %259 = zext i16 %258 to i32
  %260 = mul nsw i32 %259, 17
  %261 = trunc i32 %260 to i16
  store i16 %261, ptr %257, align 8, !tbaa !28
  %262 = load ptr, ptr %2, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.png_struct_def, ptr %262, i32 0, i32 76
  %264 = getelementptr inbounds %struct.png_color_16_struct, ptr %263, i32 0, i32 4
  %265 = load i16, ptr %264, align 8, !tbaa !28
  %266 = load ptr, ptr %2, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.png_struct_def, ptr %266, i32 0, i32 76
  %268 = getelementptr inbounds %struct.png_color_16_struct, ptr %267, i32 0, i32 3
  store i16 %265, ptr %268, align 2, !tbaa !29
  %269 = load ptr, ptr %2, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.png_struct_def, ptr %269, i32 0, i32 76
  %271 = getelementptr inbounds %struct.png_color_16_struct, ptr %270, i32 0, i32 2
  store i16 %265, ptr %271, align 4, !tbaa !30
  %272 = load ptr, ptr %2, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.png_struct_def, ptr %272, i32 0, i32 76
  %274 = getelementptr inbounds %struct.png_color_16_struct, ptr %273, i32 0, i32 1
  store i16 %265, ptr %274, align 2, !tbaa !31
  br label %275

275:                                              ; preds = %254, %228
  br label %290

276:                                              ; preds = %127, %127
  %277 = load ptr, ptr %2, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.png_struct_def, ptr %277, i32 0, i32 59
  %279 = getelementptr inbounds %struct.png_color_16_struct, ptr %278, i32 0, i32 4
  %280 = load i16, ptr %279, align 8, !tbaa !26
  %281 = load ptr, ptr %2, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.png_struct_def, ptr %281, i32 0, i32 59
  %283 = getelementptr inbounds %struct.png_color_16_struct, ptr %282, i32 0, i32 3
  store i16 %280, ptr %283, align 2, !tbaa !25
  %284 = load ptr, ptr %2, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.png_struct_def, ptr %284, i32 0, i32 59
  %286 = getelementptr inbounds %struct.png_color_16_struct, ptr %285, i32 0, i32 2
  store i16 %280, ptr %286, align 4, !tbaa !24
  %287 = load ptr, ptr %2, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.png_struct_def, ptr %287, i32 0, i32 59
  %289 = getelementptr inbounds %struct.png_color_16_struct, ptr %288, i32 0, i32 1
  store i16 %280, ptr %289, align 2, !tbaa !23
  br label %290

290:                                              ; preds = %276, %275, %227, %179, %127
  br label %384

291:                                              ; preds = %123
  %292 = load i32, ptr %3, align 4, !tbaa !20
  %293 = icmp eq i32 %292, 3
  br i1 %293, label %294, label %383

294:                                              ; preds = %291
  %295 = load ptr, ptr %2, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.png_struct_def, ptr %295, i32 0, i32 40
  %297 = load ptr, ptr %296, align 8, !tbaa !32
  %298 = load ptr, ptr %2, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.png_struct_def, ptr %298, i32 0, i32 59
  %300 = getelementptr inbounds %struct.png_color_16_struct, ptr %299, i32 0, i32 0
  %301 = load i8, ptr %300, align 8, !tbaa !33
  %302 = zext i8 %301 to i64
  %303 = getelementptr inbounds %struct.png_color_struct, ptr %297, i64 %302
  %304 = getelementptr inbounds %struct.png_color_struct, ptr %303, i32 0, i32 0
  %305 = load i8, ptr %304, align 1, !tbaa !34
  %306 = zext i8 %305 to i16
  %307 = load ptr, ptr %2, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.png_struct_def, ptr %307, i32 0, i32 59
  %309 = getelementptr inbounds %struct.png_color_16_struct, ptr %308, i32 0, i32 1
  store i16 %306, ptr %309, align 2, !tbaa !23
  %310 = load ptr, ptr %2, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.png_struct_def, ptr %310, i32 0, i32 40
  %312 = load ptr, ptr %311, align 8, !tbaa !32
  %313 = load ptr, ptr %2, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.png_struct_def, ptr %313, i32 0, i32 59
  %315 = getelementptr inbounds %struct.png_color_16_struct, ptr %314, i32 0, i32 0
  %316 = load i8, ptr %315, align 8, !tbaa !33
  %317 = zext i8 %316 to i64
  %318 = getelementptr inbounds %struct.png_color_struct, ptr %312, i64 %317
  %319 = getelementptr inbounds %struct.png_color_struct, ptr %318, i32 0, i32 1
  %320 = load i8, ptr %319, align 1, !tbaa !36
  %321 = zext i8 %320 to i16
  %322 = load ptr, ptr %2, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.png_struct_def, ptr %322, i32 0, i32 59
  %324 = getelementptr inbounds %struct.png_color_16_struct, ptr %323, i32 0, i32 2
  store i16 %321, ptr %324, align 4, !tbaa !24
  %325 = load ptr, ptr %2, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.png_struct_def, ptr %325, i32 0, i32 40
  %327 = load ptr, ptr %326, align 8, !tbaa !32
  %328 = load ptr, ptr %2, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.png_struct_def, ptr %328, i32 0, i32 59
  %330 = getelementptr inbounds %struct.png_color_16_struct, ptr %329, i32 0, i32 0
  %331 = load i8, ptr %330, align 8, !tbaa !33
  %332 = zext i8 %331 to i64
  %333 = getelementptr inbounds %struct.png_color_struct, ptr %327, i64 %332
  %334 = getelementptr inbounds %struct.png_color_struct, ptr %333, i32 0, i32 2
  %335 = load i8, ptr %334, align 1, !tbaa !37
  %336 = zext i8 %335 to i16
  %337 = load ptr, ptr %2, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.png_struct_def, ptr %337, i32 0, i32 59
  %339 = getelementptr inbounds %struct.png_color_16_struct, ptr %338, i32 0, i32 3
  store i16 %336, ptr %339, align 2, !tbaa !25
  %340 = load ptr, ptr %2, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.png_struct_def, ptr %340, i32 0, i32 14
  %342 = load i64, ptr %341, align 8, !tbaa !21
  %343 = and i64 %342, 524288
  %344 = icmp ne i64 %343, 0
  br i1 %344, label %345, label %382

345:                                              ; preds = %294
  %346 = load ptr, ptr %2, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.png_struct_def, ptr %346, i32 0, i32 14
  %348 = load i64, ptr %347, align 8, !tbaa !21
  %349 = and i64 %348, 33554432
  %350 = icmp ne i64 %349, 0
  br i1 %350, label %381, label %351

351:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  %352 = load ptr, ptr %2, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.png_struct_def, ptr %352, i32 0, i32 42
  %354 = load i16, ptr %353, align 2, !tbaa !38
  %355 = zext i16 %354 to i32
  store i32 %355, ptr %5, align 4, !tbaa !20
  store i32 0, ptr %4, align 4, !tbaa !20
  br label %356

356:                                              ; preds = %377, %351
  %357 = load i32, ptr %4, align 4, !tbaa !20
  %358 = load i32, ptr %5, align 4, !tbaa !20
  %359 = icmp slt i32 %357, %358
  br i1 %359, label %360, label %380

360:                                              ; preds = %356
  %361 = load ptr, ptr %2, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.png_struct_def, ptr %361, i32 0, i32 75
  %363 = load ptr, ptr %362, align 8, !tbaa !39
  %364 = load i32, ptr %4, align 4, !tbaa !20
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i8, ptr %363, i64 %365
  %367 = load i8, ptr %366, align 1, !tbaa !40
  %368 = zext i8 %367 to i32
  %369 = sub nsw i32 255, %368
  %370 = trunc i32 %369 to i8
  %371 = load ptr, ptr %2, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.png_struct_def, ptr %371, i32 0, i32 75
  %373 = load ptr, ptr %372, align 8, !tbaa !39
  %374 = load i32, ptr %4, align 4, !tbaa !20
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds i8, ptr %373, i64 %375
  store i8 %370, ptr %376, align 1, !tbaa !40
  br label %377

377:                                              ; preds = %360
  %378 = load i32, ptr %4, align 4, !tbaa !20
  %379 = add nsw i32 %378, 1
  store i32 %379, ptr %4, align 4, !tbaa !20
  br label %356, !llvm.loop !41

380:                                              ; preds = %356
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  br label %381

381:                                              ; preds = %380, %345
  br label %382

382:                                              ; preds = %381, %294
  br label %383

383:                                              ; preds = %382, %291
  br label %384

384:                                              ; preds = %383, %290
  br label %385

385:                                              ; preds = %384, %117, %111
  %386 = load ptr, ptr %2, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.png_struct_def, ptr %386, i32 0, i32 60
  %388 = load ptr, ptr %2, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.png_struct_def, ptr %388, i32 0, i32 59
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %387, ptr align 8 %389, i64 10, i1 false), !tbaa.struct !43
  %390 = load i32, ptr %3, align 4, !tbaa !20
  %391 = icmp eq i32 %390, 3
  br i1 %391, label %392, label %452

392:                                              ; preds = %385
  %393 = load ptr, ptr %2, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.png_struct_def, ptr %393, i32 0, i32 42
  %395 = load i16, ptr %394, align 2, !tbaa !38
  %396 = zext i16 %395 to i32
  %397 = icmp ne i32 %396, 0
  br i1 %397, label %398, label %452

398:                                              ; preds = %392
  %399 = load ptr, ptr %2, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.png_struct_def, ptr %399, i32 0, i32 66
  %401 = load float, ptr %400, align 8, !tbaa !45
  %402 = load ptr, ptr %2, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.png_struct_def, ptr %402, i32 0, i32 65
  %404 = load float, ptr %403, align 4, !tbaa !46
  %405 = fmul float %401, %404
  %406 = fpext float %405 to double
  %407 = fsub double %406, 1.000000e+00
  %408 = call double @llvm.fabs.f64(double %407)
  %409 = fcmp olt double %408, 5.000000e-02
  br i1 %409, label %410, label %452

410:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  store i32 0, ptr %7, align 4, !tbaa !20
  store i32 0, ptr %6, align 4, !tbaa !20
  br label %411

411:                                              ; preds = %440, %410
  %412 = load i32, ptr %6, align 4, !tbaa !20
  %413 = load ptr, ptr %2, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.png_struct_def, ptr %413, i32 0, i32 42
  %415 = load i16, ptr %414, align 2, !tbaa !38
  %416 = zext i16 %415 to i32
  %417 = icmp slt i32 %412, %416
  br i1 %417, label %418, label %443

418:                                              ; preds = %411
  %419 = load ptr, ptr %2, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.png_struct_def, ptr %419, i32 0, i32 75
  %421 = load ptr, ptr %420, align 8, !tbaa !39
  %422 = load i32, ptr %6, align 4, !tbaa !20
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i8, ptr %421, i64 %423
  %425 = load i8, ptr %424, align 1, !tbaa !40
  %426 = zext i8 %425 to i32
  %427 = icmp ne i32 %426, 0
  br i1 %427, label %428, label %439

428:                                              ; preds = %418
  %429 = load ptr, ptr %2, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.png_struct_def, ptr %429, i32 0, i32 75
  %431 = load ptr, ptr %430, align 8, !tbaa !39
  %432 = load i32, ptr %6, align 4, !tbaa !20
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i8, ptr %431, i64 %433
  %435 = load i8, ptr %434, align 1, !tbaa !40
  %436 = zext i8 %435 to i32
  %437 = icmp ne i32 %436, 255
  br i1 %437, label %438, label %439

438:                                              ; preds = %428
  store i32 1, ptr %7, align 4, !tbaa !20
  br label %439

439:                                              ; preds = %438, %428, %418
  br label %440

440:                                              ; preds = %439
  %441 = load i32, ptr %6, align 4, !tbaa !20
  %442 = add nsw i32 %441, 1
  store i32 %442, ptr %6, align 4, !tbaa !20
  br label %411, !llvm.loop !47

443:                                              ; preds = %411
  %444 = load i32, ptr %7, align 4, !tbaa !20
  %445 = icmp eq i32 %444, 0
  br i1 %445, label %446, label %451

446:                                              ; preds = %443
  %447 = load ptr, ptr %2, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.png_struct_def, ptr %447, i32 0, i32 14
  %449 = load i64, ptr %448, align 8, !tbaa !21
  %450 = and i64 %449, -8193
  store i64 %450, ptr %448, align 8, !tbaa !21
  br label %451

451:                                              ; preds = %446, %443
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  br label %452

452:                                              ; preds = %451, %398, %392, %385
  %453 = load ptr, ptr %2, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.png_struct_def, ptr %453, i32 0, i32 14
  %455 = load i64, ptr %454, align 8, !tbaa !21
  %456 = and i64 %455, 6299648
  %457 = icmp ne i64 %456, 0
  br i1 %457, label %458, label %1301

458:                                              ; preds = %452
  %459 = load ptr, ptr %2, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.png_struct_def, ptr %459, i32 0, i32 65
  %461 = load float, ptr %460, align 4, !tbaa !46
  %462 = fpext float %461 to double
  %463 = fcmp une double %462, 0.000000e+00
  br i1 %463, label %464, label %1301

464:                                              ; preds = %458
  %465 = load ptr, ptr %2, align 8, !tbaa !5
  call void @png_build_gamma_table(ptr noundef %465)
  %466 = load ptr, ptr %2, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.png_struct_def, ptr %466, i32 0, i32 14
  %468 = load i64, ptr %467, align 8, !tbaa !21
  %469 = and i64 %468, 128
  %470 = icmp ne i64 %469, 0
  br i1 %470, label %471, label %1224

471:                                              ; preds = %464
  %472 = load i32, ptr %3, align 4, !tbaa !20
  %473 = icmp eq i32 %472, 3
  br i1 %473, label %474, label %990

474:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 3, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 3, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %475 = load ptr, ptr %2, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.png_struct_def, ptr %475, i32 0, i32 40
  %477 = load ptr, ptr %476, align 8, !tbaa !32
  store ptr %477, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %478 = load ptr, ptr %2, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.png_struct_def, ptr %478, i32 0, i32 41
  %480 = load i16, ptr %479, align 8, !tbaa !48
  %481 = zext i16 %480 to i32
  store i32 %481, ptr %11, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %482 = load ptr, ptr %2, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.png_struct_def, ptr %482, i32 0, i32 57
  %484 = load i8, ptr %483, align 8, !tbaa !49
  %485 = zext i8 %484 to i32
  %486 = icmp eq i32 %485, 2
  br i1 %486, label %487, label %554

487:                                              ; preds = %474
  %488 = load ptr, ptr %2, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.png_struct_def, ptr %488, i32 0, i32 67
  %490 = load ptr, ptr %489, align 8, !tbaa !50
  %491 = load ptr, ptr %2, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.png_struct_def, ptr %491, i32 0, i32 59
  %493 = getelementptr inbounds %struct.png_color_16_struct, ptr %492, i32 0, i32 1
  %494 = load i16, ptr %493, align 2, !tbaa !23
  %495 = zext i16 %494 to i64
  %496 = getelementptr inbounds i8, ptr %490, i64 %495
  %497 = load i8, ptr %496, align 1, !tbaa !40
  %498 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 0
  store i8 %497, ptr %498, align 1, !tbaa !34
  %499 = load ptr, ptr %2, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.png_struct_def, ptr %499, i32 0, i32 67
  %501 = load ptr, ptr %500, align 8, !tbaa !50
  %502 = load ptr, ptr %2, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.png_struct_def, ptr %502, i32 0, i32 59
  %504 = getelementptr inbounds %struct.png_color_16_struct, ptr %503, i32 0, i32 2
  %505 = load i16, ptr %504, align 4, !tbaa !24
  %506 = zext i16 %505 to i64
  %507 = getelementptr inbounds i8, ptr %501, i64 %506
  %508 = load i8, ptr %507, align 1, !tbaa !40
  %509 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 1
  store i8 %508, ptr %509, align 1, !tbaa !36
  %510 = load ptr, ptr %2, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.png_struct_def, ptr %510, i32 0, i32 67
  %512 = load ptr, ptr %511, align 8, !tbaa !50
  %513 = load ptr, ptr %2, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.png_struct_def, ptr %513, i32 0, i32 59
  %515 = getelementptr inbounds %struct.png_color_16_struct, ptr %514, i32 0, i32 3
  %516 = load i16, ptr %515, align 2, !tbaa !25
  %517 = zext i16 %516 to i64
  %518 = getelementptr inbounds i8, ptr %512, i64 %517
  %519 = load i8, ptr %518, align 1, !tbaa !40
  %520 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 2
  store i8 %519, ptr %520, align 1, !tbaa !37
  %521 = load ptr, ptr %2, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.png_struct_def, ptr %521, i32 0, i32 69
  %523 = load ptr, ptr %522, align 8, !tbaa !51
  %524 = load ptr, ptr %2, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.png_struct_def, ptr %524, i32 0, i32 59
  %526 = getelementptr inbounds %struct.png_color_16_struct, ptr %525, i32 0, i32 1
  %527 = load i16, ptr %526, align 2, !tbaa !23
  %528 = zext i16 %527 to i64
  %529 = getelementptr inbounds i8, ptr %523, i64 %528
  %530 = load i8, ptr %529, align 1, !tbaa !40
  %531 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 0
  store i8 %530, ptr %531, align 1, !tbaa !34
  %532 = load ptr, ptr %2, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.png_struct_def, ptr %532, i32 0, i32 69
  %534 = load ptr, ptr %533, align 8, !tbaa !51
  %535 = load ptr, ptr %2, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.png_struct_def, ptr %535, i32 0, i32 59
  %537 = getelementptr inbounds %struct.png_color_16_struct, ptr %536, i32 0, i32 2
  %538 = load i16, ptr %537, align 4, !tbaa !24
  %539 = zext i16 %538 to i64
  %540 = getelementptr inbounds i8, ptr %534, i64 %539
  %541 = load i8, ptr %540, align 1, !tbaa !40
  %542 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 1
  store i8 %541, ptr %542, align 1, !tbaa !36
  %543 = load ptr, ptr %2, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.png_struct_def, ptr %543, i32 0, i32 69
  %545 = load ptr, ptr %544, align 8, !tbaa !51
  %546 = load ptr, ptr %2, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.png_struct_def, ptr %546, i32 0, i32 59
  %548 = getelementptr inbounds %struct.png_color_16_struct, ptr %547, i32 0, i32 3
  %549 = load i16, ptr %548, align 2, !tbaa !25
  %550 = zext i16 %549 to i64
  %551 = getelementptr inbounds i8, ptr %545, i64 %550
  %552 = load i8, ptr %551, align 1, !tbaa !40
  %553 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 2
  store i8 %552, ptr %553, align 1, !tbaa !37
  br label %687

554:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %555 = load ptr, ptr %2, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.png_struct_def, ptr %555, i32 0, i32 57
  %557 = load i8, ptr %556, align 8, !tbaa !49
  %558 = zext i8 %557 to i32
  switch i32 %558, label %594 [
    i32 1, label %559
    i32 2, label %564
    i32 3, label %579
  ]

559:                                              ; preds = %554
  %560 = load ptr, ptr %2, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.png_struct_def, ptr %560, i32 0, i32 66
  %562 = load float, ptr %561, align 8, !tbaa !45
  %563 = fpext float %562 to double
  store double %563, ptr %13, align 8, !tbaa !52
  store double 1.000000e+00, ptr %14, align 8, !tbaa !52
  br label %595

564:                                              ; preds = %554
  %565 = load ptr, ptr %2, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.png_struct_def, ptr %565, i32 0, i32 65
  %567 = load float, ptr %566, align 4, !tbaa !46
  %568 = fpext float %567 to double
  %569 = fdiv double 1.000000e+00, %568
  store double %569, ptr %13, align 8, !tbaa !52
  %570 = load ptr, ptr %2, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.png_struct_def, ptr %570, i32 0, i32 65
  %572 = load float, ptr %571, align 4, !tbaa !46
  %573 = load ptr, ptr %2, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.png_struct_def, ptr %573, i32 0, i32 66
  %575 = load float, ptr %574, align 8, !tbaa !45
  %576 = fmul float %572, %575
  %577 = fpext float %576 to double
  %578 = fdiv double 1.000000e+00, %577
  store double %578, ptr %14, align 8, !tbaa !52
  br label %595

579:                                              ; preds = %554
  %580 = load ptr, ptr %2, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.png_struct_def, ptr %580, i32 0, i32 58
  %582 = load float, ptr %581, align 4, !tbaa !54
  %583 = fpext float %582 to double
  %584 = fdiv double 1.000000e+00, %583
  store double %584, ptr %13, align 8, !tbaa !52
  %585 = load ptr, ptr %2, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.png_struct_def, ptr %585, i32 0, i32 58
  %587 = load float, ptr %586, align 4, !tbaa !54
  %588 = load ptr, ptr %2, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.png_struct_def, ptr %588, i32 0, i32 66
  %590 = load float, ptr %589, align 8, !tbaa !45
  %591 = fmul float %587, %590
  %592 = fpext float %591 to double
  %593 = fdiv double 1.000000e+00, %592
  store double %593, ptr %14, align 8, !tbaa !52
  br label %595

594:                                              ; preds = %554
  store double 1.000000e+00, ptr %13, align 8, !tbaa !52
  store double 1.000000e+00, ptr %14, align 8, !tbaa !52
  br label %595

595:                                              ; preds = %594, %579, %564, %559
  %596 = load double, ptr %14, align 8, !tbaa !52
  %597 = fsub double %596, 1.000000e+00
  %598 = call double @llvm.fabs.f64(double %597)
  %599 = fcmp olt double %598, 5.000000e-02
  br i1 %599, label %600, label %619

600:                                              ; preds = %595
  %601 = load ptr, ptr %2, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.png_struct_def, ptr %601, i32 0, i32 59
  %603 = getelementptr inbounds %struct.png_color_16_struct, ptr %602, i32 0, i32 1
  %604 = load i16, ptr %603, align 2, !tbaa !23
  %605 = trunc i16 %604 to i8
  %606 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 0
  store i8 %605, ptr %606, align 1, !tbaa !34
  %607 = load ptr, ptr %2, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.png_struct_def, ptr %607, i32 0, i32 59
  %609 = getelementptr inbounds %struct.png_color_16_struct, ptr %608, i32 0, i32 2
  %610 = load i16, ptr %609, align 4, !tbaa !24
  %611 = trunc i16 %610 to i8
  %612 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 1
  store i8 %611, ptr %612, align 1, !tbaa !36
  %613 = load ptr, ptr %2, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.png_struct_def, ptr %613, i32 0, i32 59
  %615 = getelementptr inbounds %struct.png_color_16_struct, ptr %614, i32 0, i32 3
  %616 = load i16, ptr %615, align 2, !tbaa !25
  %617 = trunc i16 %616 to i8
  %618 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 2
  store i8 %617, ptr %618, align 1, !tbaa !37
  br label %653

619:                                              ; preds = %595
  %620 = load ptr, ptr %2, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.png_struct_def, ptr %620, i32 0, i32 59
  %622 = getelementptr inbounds %struct.png_color_16_struct, ptr %621, i32 0, i32 1
  %623 = load i16, ptr %622, align 2, !tbaa !23
  %624 = uitofp i16 %623 to double
  %625 = fdiv double %624, 2.550000e+02
  %626 = load double, ptr %14, align 8, !tbaa !52
  %627 = call double @pow(double noundef %625, double noundef %626) #5
  %628 = call double @llvm.fmuladd.f64(double %627, double 2.550000e+02, double 5.000000e-01)
  %629 = fptoui double %628 to i8
  %630 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 0
  store i8 %629, ptr %630, align 1, !tbaa !34
  %631 = load ptr, ptr %2, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.png_struct_def, ptr %631, i32 0, i32 59
  %633 = getelementptr inbounds %struct.png_color_16_struct, ptr %632, i32 0, i32 2
  %634 = load i16, ptr %633, align 4, !tbaa !24
  %635 = uitofp i16 %634 to double
  %636 = fdiv double %635, 2.550000e+02
  %637 = load double, ptr %14, align 8, !tbaa !52
  %638 = call double @pow(double noundef %636, double noundef %637) #5
  %639 = call double @llvm.fmuladd.f64(double %638, double 2.550000e+02, double 5.000000e-01)
  %640 = fptoui double %639 to i8
  %641 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 1
  store i8 %640, ptr %641, align 1, !tbaa !36
  %642 = load ptr, ptr %2, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.png_struct_def, ptr %642, i32 0, i32 59
  %644 = getelementptr inbounds %struct.png_color_16_struct, ptr %643, i32 0, i32 3
  %645 = load i16, ptr %644, align 2, !tbaa !25
  %646 = uitofp i16 %645 to double
  %647 = fdiv double %646, 2.550000e+02
  %648 = load double, ptr %14, align 8, !tbaa !52
  %649 = call double @pow(double noundef %647, double noundef %648) #5
  %650 = call double @llvm.fmuladd.f64(double %649, double 2.550000e+02, double 5.000000e-01)
  %651 = fptoui double %650 to i8
  %652 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 2
  store i8 %651, ptr %652, align 1, !tbaa !37
  br label %653

653:                                              ; preds = %619, %600
  %654 = load ptr, ptr %2, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.png_struct_def, ptr %654, i32 0, i32 59
  %656 = getelementptr inbounds %struct.png_color_16_struct, ptr %655, i32 0, i32 1
  %657 = load i16, ptr %656, align 2, !tbaa !23
  %658 = uitofp i16 %657 to double
  %659 = fdiv double %658, 2.550000e+02
  %660 = load double, ptr %13, align 8, !tbaa !52
  %661 = call double @pow(double noundef %659, double noundef %660) #5
  %662 = call double @llvm.fmuladd.f64(double %661, double 2.550000e+02, double 5.000000e-01)
  %663 = fptoui double %662 to i8
  %664 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 0
  store i8 %663, ptr %664, align 1, !tbaa !34
  %665 = load ptr, ptr %2, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.png_struct_def, ptr %665, i32 0, i32 59
  %667 = getelementptr inbounds %struct.png_color_16_struct, ptr %666, i32 0, i32 2
  %668 = load i16, ptr %667, align 4, !tbaa !24
  %669 = uitofp i16 %668 to double
  %670 = fdiv double %669, 2.550000e+02
  %671 = load double, ptr %13, align 8, !tbaa !52
  %672 = call double @pow(double noundef %670, double noundef %671) #5
  %673 = call double @llvm.fmuladd.f64(double %672, double 2.550000e+02, double 5.000000e-01)
  %674 = fptoui double %673 to i8
  %675 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 1
  store i8 %674, ptr %675, align 1, !tbaa !36
  %676 = load ptr, ptr %2, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.png_struct_def, ptr %676, i32 0, i32 59
  %678 = getelementptr inbounds %struct.png_color_16_struct, ptr %677, i32 0, i32 3
  %679 = load i16, ptr %678, align 2, !tbaa !25
  %680 = uitofp i16 %679 to double
  %681 = fdiv double %680, 2.550000e+02
  %682 = load double, ptr %13, align 8, !tbaa !52
  %683 = call double @pow(double noundef %681, double noundef %682) #5
  %684 = call double @llvm.fmuladd.f64(double %683, double 2.550000e+02, double 5.000000e-01)
  %685 = fptoui double %684 to i8
  %686 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 2
  store i8 %685, ptr %686, align 1, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %687

687:                                              ; preds = %653, %487
  store i32 0, ptr %12, align 4, !tbaa !20
  br label %688

688:                                              ; preds = %974, %687
  %689 = load i32, ptr %12, align 4, !tbaa !20
  %690 = load i32, ptr %11, align 4, !tbaa !20
  %691 = icmp slt i32 %689, %690
  br i1 %691, label %692, label %977

692:                                              ; preds = %688
  %693 = load i32, ptr %12, align 4, !tbaa !20
  %694 = load ptr, ptr %2, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.png_struct_def, ptr %694, i32 0, i32 42
  %696 = load i16, ptr %695, align 2, !tbaa !38
  %697 = zext i16 %696 to i32
  %698 = icmp slt i32 %693, %697
  br i1 %698, label %699, label %921

699:                                              ; preds = %692
  %700 = load ptr, ptr %2, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.png_struct_def, ptr %700, i32 0, i32 75
  %702 = load ptr, ptr %701, align 8, !tbaa !39
  %703 = load i32, ptr %12, align 4, !tbaa !20
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds i8, ptr %702, i64 %704
  %706 = load i8, ptr %705, align 1, !tbaa !40
  %707 = zext i8 %706 to i32
  %708 = icmp ne i32 %707, 255
  br i1 %708, label %709, label %921

709:                                              ; preds = %699
  %710 = load ptr, ptr %2, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.png_struct_def, ptr %710, i32 0, i32 75
  %712 = load ptr, ptr %711, align 8, !tbaa !39
  %713 = load i32, ptr %12, align 4, !tbaa !20
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds i8, ptr %712, i64 %714
  %716 = load i8, ptr %715, align 1, !tbaa !40
  %717 = zext i8 %716 to i32
  %718 = icmp eq i32 %717, 0
  br i1 %718, label %719, label %724

719:                                              ; preds = %709
  %720 = load ptr, ptr %10, align 8, !tbaa !5
  %721 = load i32, ptr %12, align 4, !tbaa !20
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds %struct.png_color_struct, ptr %720, i64 %722
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %723, ptr align 1 %8, i64 3, i1 false), !tbaa.struct !55
  br label %920

724:                                              ; preds = %709
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #5
  %725 = load ptr, ptr %2, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.png_struct_def, ptr %725, i32 0, i32 69
  %727 = load ptr, ptr %726, align 8, !tbaa !51
  %728 = load ptr, ptr %10, align 8, !tbaa !5
  %729 = load i32, ptr %12, align 4, !tbaa !20
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds %struct.png_color_struct, ptr %728, i64 %730
  %732 = getelementptr inbounds %struct.png_color_struct, ptr %731, i32 0, i32 0
  %733 = load i8, ptr %732, align 1, !tbaa !34
  %734 = zext i8 %733 to i64
  %735 = getelementptr inbounds i8, ptr %727, i64 %734
  %736 = load i8, ptr %735, align 1, !tbaa !40
  store i8 %736, ptr %15, align 1, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #5
  %737 = load i8, ptr %15, align 1, !tbaa !40
  %738 = zext i8 %737 to i16
  %739 = zext i16 %738 to i32
  %740 = load ptr, ptr %2, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.png_struct_def, ptr %740, i32 0, i32 75
  %742 = load ptr, ptr %741, align 8, !tbaa !39
  %743 = load i32, ptr %12, align 4, !tbaa !20
  %744 = sext i32 %743 to i64
  %745 = getelementptr inbounds i8, ptr %742, i64 %744
  %746 = load i8, ptr %745, align 1, !tbaa !40
  %747 = zext i8 %746 to i16
  %748 = zext i16 %747 to i32
  %749 = mul nsw i32 %739, %748
  %750 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 0
  %751 = load i8, ptr %750, align 1, !tbaa !34
  %752 = zext i8 %751 to i16
  %753 = zext i16 %752 to i32
  %754 = load ptr, ptr %2, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.png_struct_def, ptr %754, i32 0, i32 75
  %756 = load ptr, ptr %755, align 8, !tbaa !39
  %757 = load i32, ptr %12, align 4, !tbaa !20
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds i8, ptr %756, i64 %758
  %760 = load i8, ptr %759, align 1, !tbaa !40
  %761 = zext i8 %760 to i16
  %762 = zext i16 %761 to i32
  %763 = sub nsw i32 255, %762
  %764 = trunc i32 %763 to i16
  %765 = zext i16 %764 to i32
  %766 = mul nsw i32 %753, %765
  %767 = add nsw i32 %749, %766
  %768 = add nsw i32 %767, 128
  %769 = trunc i32 %768 to i16
  store i16 %769, ptr %17, align 2, !tbaa !44
  %770 = load i16, ptr %17, align 2, !tbaa !44
  %771 = zext i16 %770 to i32
  %772 = load i16, ptr %17, align 2, !tbaa !44
  %773 = zext i16 %772 to i32
  %774 = ashr i32 %773, 8
  %775 = add nsw i32 %771, %774
  %776 = ashr i32 %775, 8
  %777 = trunc i32 %776 to i8
  store i8 %777, ptr %16, align 1, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #5
  %778 = load ptr, ptr %2, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.png_struct_def, ptr %778, i32 0, i32 68
  %780 = load ptr, ptr %779, align 8, !tbaa !56
  %781 = load i8, ptr %16, align 1, !tbaa !40
  %782 = zext i8 %781 to i64
  %783 = getelementptr inbounds i8, ptr %780, i64 %782
  %784 = load i8, ptr %783, align 1, !tbaa !40
  %785 = load ptr, ptr %10, align 8, !tbaa !5
  %786 = load i32, ptr %12, align 4, !tbaa !20
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds %struct.png_color_struct, ptr %785, i64 %787
  %789 = getelementptr inbounds %struct.png_color_struct, ptr %788, i32 0, i32 0
  store i8 %784, ptr %789, align 1, !tbaa !34
  %790 = load ptr, ptr %2, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.png_struct_def, ptr %790, i32 0, i32 69
  %792 = load ptr, ptr %791, align 8, !tbaa !51
  %793 = load ptr, ptr %10, align 8, !tbaa !5
  %794 = load i32, ptr %12, align 4, !tbaa !20
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds %struct.png_color_struct, ptr %793, i64 %795
  %797 = getelementptr inbounds %struct.png_color_struct, ptr %796, i32 0, i32 1
  %798 = load i8, ptr %797, align 1, !tbaa !36
  %799 = zext i8 %798 to i64
  %800 = getelementptr inbounds i8, ptr %792, i64 %799
  %801 = load i8, ptr %800, align 1, !tbaa !40
  store i8 %801, ptr %15, align 1, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #5
  %802 = load i8, ptr %15, align 1, !tbaa !40
  %803 = zext i8 %802 to i16
  %804 = zext i16 %803 to i32
  %805 = load ptr, ptr %2, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.png_struct_def, ptr %805, i32 0, i32 75
  %807 = load ptr, ptr %806, align 8, !tbaa !39
  %808 = load i32, ptr %12, align 4, !tbaa !20
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds i8, ptr %807, i64 %809
  %811 = load i8, ptr %810, align 1, !tbaa !40
  %812 = zext i8 %811 to i16
  %813 = zext i16 %812 to i32
  %814 = mul nsw i32 %804, %813
  %815 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 1
  %816 = load i8, ptr %815, align 1, !tbaa !36
  %817 = zext i8 %816 to i16
  %818 = zext i16 %817 to i32
  %819 = load ptr, ptr %2, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.png_struct_def, ptr %819, i32 0, i32 75
  %821 = load ptr, ptr %820, align 8, !tbaa !39
  %822 = load i32, ptr %12, align 4, !tbaa !20
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i8, ptr %821, i64 %823
  %825 = load i8, ptr %824, align 1, !tbaa !40
  %826 = zext i8 %825 to i16
  %827 = zext i16 %826 to i32
  %828 = sub nsw i32 255, %827
  %829 = trunc i32 %828 to i16
  %830 = zext i16 %829 to i32
  %831 = mul nsw i32 %818, %830
  %832 = add nsw i32 %814, %831
  %833 = add nsw i32 %832, 128
  %834 = trunc i32 %833 to i16
  store i16 %834, ptr %18, align 2, !tbaa !44
  %835 = load i16, ptr %18, align 2, !tbaa !44
  %836 = zext i16 %835 to i32
  %837 = load i16, ptr %18, align 2, !tbaa !44
  %838 = zext i16 %837 to i32
  %839 = ashr i32 %838, 8
  %840 = add nsw i32 %836, %839
  %841 = ashr i32 %840, 8
  %842 = trunc i32 %841 to i8
  store i8 %842, ptr %16, align 1, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #5
  %843 = load ptr, ptr %2, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.png_struct_def, ptr %843, i32 0, i32 68
  %845 = load ptr, ptr %844, align 8, !tbaa !56
  %846 = load i8, ptr %16, align 1, !tbaa !40
  %847 = zext i8 %846 to i64
  %848 = getelementptr inbounds i8, ptr %845, i64 %847
  %849 = load i8, ptr %848, align 1, !tbaa !40
  %850 = load ptr, ptr %10, align 8, !tbaa !5
  %851 = load i32, ptr %12, align 4, !tbaa !20
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds %struct.png_color_struct, ptr %850, i64 %852
  %854 = getelementptr inbounds %struct.png_color_struct, ptr %853, i32 0, i32 1
  store i8 %849, ptr %854, align 1, !tbaa !36
  %855 = load ptr, ptr %2, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.png_struct_def, ptr %855, i32 0, i32 69
  %857 = load ptr, ptr %856, align 8, !tbaa !51
  %858 = load ptr, ptr %10, align 8, !tbaa !5
  %859 = load i32, ptr %12, align 4, !tbaa !20
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds %struct.png_color_struct, ptr %858, i64 %860
  %862 = getelementptr inbounds %struct.png_color_struct, ptr %861, i32 0, i32 2
  %863 = load i8, ptr %862, align 1, !tbaa !37
  %864 = zext i8 %863 to i64
  %865 = getelementptr inbounds i8, ptr %857, i64 %864
  %866 = load i8, ptr %865, align 1, !tbaa !40
  store i8 %866, ptr %15, align 1, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #5
  %867 = load i8, ptr %15, align 1, !tbaa !40
  %868 = zext i8 %867 to i16
  %869 = zext i16 %868 to i32
  %870 = load ptr, ptr %2, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.png_struct_def, ptr %870, i32 0, i32 75
  %872 = load ptr, ptr %871, align 8, !tbaa !39
  %873 = load i32, ptr %12, align 4, !tbaa !20
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds i8, ptr %872, i64 %874
  %876 = load i8, ptr %875, align 1, !tbaa !40
  %877 = zext i8 %876 to i16
  %878 = zext i16 %877 to i32
  %879 = mul nsw i32 %869, %878
  %880 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 2
  %881 = load i8, ptr %880, align 1, !tbaa !37
  %882 = zext i8 %881 to i16
  %883 = zext i16 %882 to i32
  %884 = load ptr, ptr %2, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.png_struct_def, ptr %884, i32 0, i32 75
  %886 = load ptr, ptr %885, align 8, !tbaa !39
  %887 = load i32, ptr %12, align 4, !tbaa !20
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds i8, ptr %886, i64 %888
  %890 = load i8, ptr %889, align 1, !tbaa !40
  %891 = zext i8 %890 to i16
  %892 = zext i16 %891 to i32
  %893 = sub nsw i32 255, %892
  %894 = trunc i32 %893 to i16
  %895 = zext i16 %894 to i32
  %896 = mul nsw i32 %883, %895
  %897 = add nsw i32 %879, %896
  %898 = add nsw i32 %897, 128
  %899 = trunc i32 %898 to i16
  store i16 %899, ptr %19, align 2, !tbaa !44
  %900 = load i16, ptr %19, align 2, !tbaa !44
  %901 = zext i16 %900 to i32
  %902 = load i16, ptr %19, align 2, !tbaa !44
  %903 = zext i16 %902 to i32
  %904 = ashr i32 %903, 8
  %905 = add nsw i32 %901, %904
  %906 = ashr i32 %905, 8
  %907 = trunc i32 %906 to i8
  store i8 %907, ptr %16, align 1, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #5
  %908 = load ptr, ptr %2, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.png_struct_def, ptr %908, i32 0, i32 68
  %910 = load ptr, ptr %909, align 8, !tbaa !56
  %911 = load i8, ptr %16, align 1, !tbaa !40
  %912 = zext i8 %911 to i64
  %913 = getelementptr inbounds i8, ptr %910, i64 %912
  %914 = load i8, ptr %913, align 1, !tbaa !40
  %915 = load ptr, ptr %10, align 8, !tbaa !5
  %916 = load i32, ptr %12, align 4, !tbaa !20
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds %struct.png_color_struct, ptr %915, i64 %917
  %919 = getelementptr inbounds %struct.png_color_struct, ptr %918, i32 0, i32 2
  store i8 %914, ptr %919, align 1, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  br label %920

920:                                              ; preds = %724, %719
  br label %973

921:                                              ; preds = %699, %692
  %922 = load ptr, ptr %2, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.png_struct_def, ptr %922, i32 0, i32 67
  %924 = load ptr, ptr %923, align 8, !tbaa !50
  %925 = load ptr, ptr %10, align 8, !tbaa !5
  %926 = load i32, ptr %12, align 4, !tbaa !20
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds %struct.png_color_struct, ptr %925, i64 %927
  %929 = getelementptr inbounds %struct.png_color_struct, ptr %928, i32 0, i32 0
  %930 = load i8, ptr %929, align 1, !tbaa !34
  %931 = zext i8 %930 to i64
  %932 = getelementptr inbounds i8, ptr %924, i64 %931
  %933 = load i8, ptr %932, align 1, !tbaa !40
  %934 = load ptr, ptr %10, align 8, !tbaa !5
  %935 = load i32, ptr %12, align 4, !tbaa !20
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds %struct.png_color_struct, ptr %934, i64 %936
  %938 = getelementptr inbounds %struct.png_color_struct, ptr %937, i32 0, i32 0
  store i8 %933, ptr %938, align 1, !tbaa !34
  %939 = load ptr, ptr %2, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.png_struct_def, ptr %939, i32 0, i32 67
  %941 = load ptr, ptr %940, align 8, !tbaa !50
  %942 = load ptr, ptr %10, align 8, !tbaa !5
  %943 = load i32, ptr %12, align 4, !tbaa !20
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds %struct.png_color_struct, ptr %942, i64 %944
  %946 = getelementptr inbounds %struct.png_color_struct, ptr %945, i32 0, i32 1
  %947 = load i8, ptr %946, align 1, !tbaa !36
  %948 = zext i8 %947 to i64
  %949 = getelementptr inbounds i8, ptr %941, i64 %948
  %950 = load i8, ptr %949, align 1, !tbaa !40
  %951 = load ptr, ptr %10, align 8, !tbaa !5
  %952 = load i32, ptr %12, align 4, !tbaa !20
  %953 = sext i32 %952 to i64
  %954 = getelementptr inbounds %struct.png_color_struct, ptr %951, i64 %953
  %955 = getelementptr inbounds %struct.png_color_struct, ptr %954, i32 0, i32 1
  store i8 %950, ptr %955, align 1, !tbaa !36
  %956 = load ptr, ptr %2, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.png_struct_def, ptr %956, i32 0, i32 67
  %958 = load ptr, ptr %957, align 8, !tbaa !50
  %959 = load ptr, ptr %10, align 8, !tbaa !5
  %960 = load i32, ptr %12, align 4, !tbaa !20
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds %struct.png_color_struct, ptr %959, i64 %961
  %963 = getelementptr inbounds %struct.png_color_struct, ptr %962, i32 0, i32 2
  %964 = load i8, ptr %963, align 1, !tbaa !37
  %965 = zext i8 %964 to i64
  %966 = getelementptr inbounds i8, ptr %958, i64 %965
  %967 = load i8, ptr %966, align 1, !tbaa !40
  %968 = load ptr, ptr %10, align 8, !tbaa !5
  %969 = load i32, ptr %12, align 4, !tbaa !20
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds %struct.png_color_struct, ptr %968, i64 %970
  %972 = getelementptr inbounds %struct.png_color_struct, ptr %971, i32 0, i32 2
  store i8 %967, ptr %972, align 1, !tbaa !37
  br label %973

973:                                              ; preds = %921, %920
  br label %974

974:                                              ; preds = %973
  %975 = load i32, ptr %12, align 4, !tbaa !20
  %976 = add nsw i32 %975, 1
  store i32 %976, ptr %12, align 4, !tbaa !20
  br label %688, !llvm.loop !57

977:                                              ; preds = %688
  %978 = load ptr, ptr %2, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.png_struct_def, ptr %978, i32 0, i32 14
  %980 = load i64, ptr %979, align 8, !tbaa !21
  %981 = and i64 %980, -129
  store i64 %981, ptr %979, align 8, !tbaa !21
  %982 = load ptr, ptr %2, align 8, !tbaa !5
  %983 = getelementptr inbounds %struct.png_struct_def, ptr %982, i32 0, i32 14
  %984 = load i64, ptr %983, align 8, !tbaa !21
  %985 = and i64 %984, -8193
  store i64 %985, ptr %983, align 8, !tbaa !21
  %986 = load ptr, ptr %2, align 8, !tbaa !5
  %987 = getelementptr inbounds %struct.png_struct_def, ptr %986, i32 0, i32 14
  %988 = load i64, ptr %987, align 8, !tbaa !21
  %989 = or i64 %988, 262144
  store i64 %989, ptr %987, align 8, !tbaa !21
  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 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 3, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 3, ptr %8) #5
  br label %1223

990:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %991 = load ptr, ptr %2, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.png_struct_def, ptr %991, i32 0, i32 50
  %993 = load i8, ptr %992, align 1, !tbaa !27
  %994 = zext i8 %993 to i32
  %995 = zext i32 %994 to i64
  %996 = shl i64 1, %995
  %997 = sub i64 %996, 1
  %998 = uitofp i64 %997 to double
  store double %998, ptr %20, align 8, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  store double 1.000000e+00, ptr %21, align 8, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  store double 1.000000e+00, ptr %22, align 8, !tbaa !52
  %999 = load ptr, ptr %2, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.png_struct_def, ptr %999, i32 0, i32 57
  %1001 = load i8, ptr %1000, align 8, !tbaa !49
  %1002 = zext i8 %1001 to i32
  switch i32 %1002, label %1038 [
    i32 1, label %1003
    i32 2, label %1008
    i32 3, label %1023
  ]

1003:                                             ; preds = %990
  %1004 = load ptr, ptr %2, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.png_struct_def, ptr %1004, i32 0, i32 66
  %1006 = load float, ptr %1005, align 8, !tbaa !45
  %1007 = fpext float %1006 to double
  store double %1007, ptr %21, align 8, !tbaa !52
  store double 1.000000e+00, ptr %22, align 8, !tbaa !52
  br label %1038

1008:                                             ; preds = %990
  %1009 = load ptr, ptr %2, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.png_struct_def, ptr %1009, i32 0, i32 65
  %1011 = load float, ptr %1010, align 4, !tbaa !46
  %1012 = fpext float %1011 to double
  %1013 = fdiv double 1.000000e+00, %1012
  store double %1013, ptr %21, align 8, !tbaa !52
  %1014 = load ptr, ptr %2, align 8, !tbaa !5
  %1015 = getelementptr inbounds %struct.png_struct_def, ptr %1014, i32 0, i32 65
  %1016 = load float, ptr %1015, align 4, !tbaa !46
  %1017 = load ptr, ptr %2, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.png_struct_def, ptr %1017, i32 0, i32 66
  %1019 = load float, ptr %1018, align 8, !tbaa !45
  %1020 = fmul float %1016, %1019
  %1021 = fpext float %1020 to double
  %1022 = fdiv double 1.000000e+00, %1021
  store double %1022, ptr %22, align 8, !tbaa !52
  br label %1038

1023:                                             ; preds = %990
  %1024 = load ptr, ptr %2, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.png_struct_def, ptr %1024, i32 0, i32 58
  %1026 = load float, ptr %1025, align 4, !tbaa !54
  %1027 = fpext float %1026 to double
  %1028 = fdiv double 1.000000e+00, %1027
  store double %1028, ptr %21, align 8, !tbaa !52
  %1029 = load ptr, ptr %2, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.png_struct_def, ptr %1029, i32 0, i32 58
  %1031 = load float, ptr %1030, align 4, !tbaa !54
  %1032 = load ptr, ptr %2, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.png_struct_def, ptr %1032, i32 0, i32 66
  %1034 = load float, ptr %1033, align 8, !tbaa !45
  %1035 = fmul float %1031, %1034
  %1036 = fpext float %1035 to double
  %1037 = fdiv double 1.000000e+00, %1036
  store double %1037, ptr %22, align 8, !tbaa !52
  br label %1038

1038:                                             ; preds = %1023, %1008, %1003, %990
  %1039 = load ptr, ptr %2, align 8, !tbaa !5
  %1040 = getelementptr inbounds %struct.png_struct_def, ptr %1039, i32 0, i32 59
  %1041 = getelementptr inbounds %struct.png_color_16_struct, ptr %1040, i32 0, i32 4
  %1042 = load i16, ptr %1041, align 8, !tbaa !26
  %1043 = uitofp i16 %1042 to double
  %1044 = load double, ptr %20, align 8, !tbaa !52
  %1045 = fdiv double %1043, %1044
  %1046 = load double, ptr %21, align 8, !tbaa !52
  %1047 = call double @pow(double noundef %1045, double noundef %1046) #5
  %1048 = load double, ptr %20, align 8, !tbaa !52
  %1049 = call double @llvm.fmuladd.f64(double %1047, double %1048, double 5.000000e-01)
  %1050 = fptoui double %1049 to i16
  %1051 = load ptr, ptr %2, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.png_struct_def, ptr %1051, i32 0, i32 60
  %1053 = getelementptr inbounds %struct.png_color_16_struct, ptr %1052, i32 0, i32 4
  store i16 %1050, ptr %1053, align 2, !tbaa !58
  %1054 = load ptr, ptr %2, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.png_struct_def, ptr %1054, i32 0, i32 59
  %1056 = getelementptr inbounds %struct.png_color_16_struct, ptr %1055, i32 0, i32 4
  %1057 = load i16, ptr %1056, align 8, !tbaa !26
  %1058 = uitofp i16 %1057 to double
  %1059 = load double, ptr %20, align 8, !tbaa !52
  %1060 = fdiv double %1058, %1059
  %1061 = load double, ptr %22, align 8, !tbaa !52
  %1062 = call double @pow(double noundef %1060, double noundef %1061) #5
  %1063 = load double, ptr %20, align 8, !tbaa !52
  %1064 = call double @llvm.fmuladd.f64(double %1062, double %1063, double 5.000000e-01)
  %1065 = fptoui double %1064 to i16
  %1066 = load ptr, ptr %2, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.png_struct_def, ptr %1066, i32 0, i32 59
  %1068 = getelementptr inbounds %struct.png_color_16_struct, ptr %1067, i32 0, i32 4
  store i16 %1065, ptr %1068, align 8, !tbaa !26
  %1069 = load ptr, ptr %2, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.png_struct_def, ptr %1069, i32 0, i32 59
  %1071 = getelementptr inbounds %struct.png_color_16_struct, ptr %1070, i32 0, i32 1
  %1072 = load i16, ptr %1071, align 2, !tbaa !23
  %1073 = zext i16 %1072 to i32
  %1074 = load ptr, ptr %2, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.png_struct_def, ptr %1074, i32 0, i32 59
  %1076 = getelementptr inbounds %struct.png_color_16_struct, ptr %1075, i32 0, i32 2
  %1077 = load i16, ptr %1076, align 4, !tbaa !24
  %1078 = zext i16 %1077 to i32
  %1079 = icmp ne i32 %1073, %1078
  br i1 %1079, label %1104, label %1080

1080:                                             ; preds = %1038
  %1081 = load ptr, ptr %2, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.png_struct_def, ptr %1081, i32 0, i32 59
  %1083 = getelementptr inbounds %struct.png_color_16_struct, ptr %1082, i32 0, i32 1
  %1084 = load i16, ptr %1083, align 2, !tbaa !23
  %1085 = zext i16 %1084 to i32
  %1086 = load ptr, ptr %2, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.png_struct_def, ptr %1086, i32 0, i32 59
  %1088 = getelementptr inbounds %struct.png_color_16_struct, ptr %1087, i32 0, i32 3
  %1089 = load i16, ptr %1088, align 2, !tbaa !25
  %1090 = zext i16 %1089 to i32
  %1091 = icmp ne i32 %1085, %1090
  br i1 %1091, label %1104, label %1092

1092:                                             ; preds = %1080
  %1093 = load ptr, ptr %2, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct.png_struct_def, ptr %1093, i32 0, i32 59
  %1095 = getelementptr inbounds %struct.png_color_16_struct, ptr %1094, i32 0, i32 1
  %1096 = load i16, ptr %1095, align 2, !tbaa !23
  %1097 = zext i16 %1096 to i32
  %1098 = load ptr, ptr %2, align 8, !tbaa !5
  %1099 = getelementptr inbounds %struct.png_struct_def, ptr %1098, i32 0, i32 59
  %1100 = getelementptr inbounds %struct.png_color_16_struct, ptr %1099, i32 0, i32 4
  %1101 = load i16, ptr %1100, align 8, !tbaa !26
  %1102 = zext i16 %1101 to i32
  %1103 = icmp ne i32 %1097, %1102
  br i1 %1103, label %1104, label %1195

1104:                                             ; preds = %1092, %1080, %1038
  %1105 = load ptr, ptr %2, align 8, !tbaa !5
  %1106 = getelementptr inbounds %struct.png_struct_def, ptr %1105, i32 0, i32 59
  %1107 = getelementptr inbounds %struct.png_color_16_struct, ptr %1106, i32 0, i32 1
  %1108 = load i16, ptr %1107, align 2, !tbaa !23
  %1109 = uitofp i16 %1108 to double
  %1110 = load double, ptr %20, align 8, !tbaa !52
  %1111 = fdiv double %1109, %1110
  %1112 = load double, ptr %21, align 8, !tbaa !52
  %1113 = call double @pow(double noundef %1111, double noundef %1112) #5
  %1114 = load double, ptr %20, align 8, !tbaa !52
  %1115 = call double @llvm.fmuladd.f64(double %1113, double %1114, double 5.000000e-01)
  %1116 = fptoui double %1115 to i16
  %1117 = load ptr, ptr %2, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.png_struct_def, ptr %1117, i32 0, i32 60
  %1119 = getelementptr inbounds %struct.png_color_16_struct, ptr %1118, i32 0, i32 1
  store i16 %1116, ptr %1119, align 2, !tbaa !59
  %1120 = load ptr, ptr %2, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.png_struct_def, ptr %1120, i32 0, i32 59
  %1122 = getelementptr inbounds %struct.png_color_16_struct, ptr %1121, i32 0, i32 2
  %1123 = load i16, ptr %1122, align 4, !tbaa !24
  %1124 = uitofp i16 %1123 to double
  %1125 = load double, ptr %20, align 8, !tbaa !52
  %1126 = fdiv double %1124, %1125
  %1127 = load double, ptr %21, align 8, !tbaa !52
  %1128 = call double @pow(double noundef %1126, double noundef %1127) #5
  %1129 = load double, ptr %20, align 8, !tbaa !52
  %1130 = call double @llvm.fmuladd.f64(double %1128, double %1129, double 5.000000e-01)
  %1131 = fptoui double %1130 to i16
  %1132 = load ptr, ptr %2, align 8, !tbaa !5
  %1133 = getelementptr inbounds %struct.png_struct_def, ptr %1132, i32 0, i32 60
  %1134 = getelementptr inbounds %struct.png_color_16_struct, ptr %1133, i32 0, i32 2
  store i16 %1131, ptr %1134, align 2, !tbaa !60
  %1135 = load ptr, ptr %2, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.png_struct_def, ptr %1135, i32 0, i32 59
  %1137 = getelementptr inbounds %struct.png_color_16_struct, ptr %1136, i32 0, i32 3
  %1138 = load i16, ptr %1137, align 2, !tbaa !25
  %1139 = uitofp i16 %1138 to double
  %1140 = load double, ptr %20, align 8, !tbaa !52
  %1141 = fdiv double %1139, %1140
  %1142 = load double, ptr %21, align 8, !tbaa !52
  %1143 = call double @pow(double noundef %1141, double noundef %1142) #5
  %1144 = load double, ptr %20, align 8, !tbaa !52
  %1145 = call double @llvm.fmuladd.f64(double %1143, double %1144, double 5.000000e-01)
  %1146 = fptoui double %1145 to i16
  %1147 = load ptr, ptr %2, align 8, !tbaa !5
  %1148 = getelementptr inbounds %struct.png_struct_def, ptr %1147, i32 0, i32 60
  %1149 = getelementptr inbounds %struct.png_color_16_struct, ptr %1148, i32 0, i32 3
  store i16 %1146, ptr %1149, align 2, !tbaa !61
  %1150 = load ptr, ptr %2, align 8, !tbaa !5
  %1151 = getelementptr inbounds %struct.png_struct_def, ptr %1150, i32 0, i32 59
  %1152 = getelementptr inbounds %struct.png_color_16_struct, ptr %1151, i32 0, i32 1
  %1153 = load i16, ptr %1152, align 2, !tbaa !23
  %1154 = uitofp i16 %1153 to double
  %1155 = load double, ptr %20, align 8, !tbaa !52
  %1156 = fdiv double %1154, %1155
  %1157 = load double, ptr %22, align 8, !tbaa !52
  %1158 = call double @pow(double noundef %1156, double noundef %1157) #5
  %1159 = load double, ptr %20, align 8, !tbaa !52
  %1160 = call double @llvm.fmuladd.f64(double %1158, double %1159, double 5.000000e-01)
  %1161 = fptoui double %1160 to i16
  %1162 = load ptr, ptr %2, align 8, !tbaa !5
  %1163 = getelementptr inbounds %struct.png_struct_def, ptr %1162, i32 0, i32 59
  %1164 = getelementptr inbounds %struct.png_color_16_struct, ptr %1163, i32 0, i32 1
  store i16 %1161, ptr %1164, align 2, !tbaa !23
  %1165 = load ptr, ptr %2, align 8, !tbaa !5
  %1166 = getelementptr inbounds %struct.png_struct_def, ptr %1165, i32 0, i32 59
  %1167 = getelementptr inbounds %struct.png_color_16_struct, ptr %1166, i32 0, i32 2
  %1168 = load i16, ptr %1167, align 4, !tbaa !24
  %1169 = uitofp i16 %1168 to double
  %1170 = load double, ptr %20, align 8, !tbaa !52
  %1171 = fdiv double %1169, %1170
  %1172 = load double, ptr %22, align 8, !tbaa !52
  %1173 = call double @pow(double noundef %1171, double noundef %1172) #5
  %1174 = load double, ptr %20, align 8, !tbaa !52
  %1175 = call double @llvm.fmuladd.f64(double %1173, double %1174, double 5.000000e-01)
  %1176 = fptoui double %1175 to i16
  %1177 = load ptr, ptr %2, align 8, !tbaa !5
  %1178 = getelementptr inbounds %struct.png_struct_def, ptr %1177, i32 0, i32 59
  %1179 = getelementptr inbounds %struct.png_color_16_struct, ptr %1178, i32 0, i32 2
  store i16 %1176, ptr %1179, align 4, !tbaa !24
  %1180 = load ptr, ptr %2, align 8, !tbaa !5
  %1181 = getelementptr inbounds %struct.png_struct_def, ptr %1180, i32 0, i32 59
  %1182 = getelementptr inbounds %struct.png_color_16_struct, ptr %1181, i32 0, i32 3
  %1183 = load i16, ptr %1182, align 2, !tbaa !25
  %1184 = uitofp i16 %1183 to double
  %1185 = load double, ptr %20, align 8, !tbaa !52
  %1186 = fdiv double %1184, %1185
  %1187 = load double, ptr %22, align 8, !tbaa !52
  %1188 = call double @pow(double noundef %1186, double noundef %1187) #5
  %1189 = load double, ptr %20, align 8, !tbaa !52
  %1190 = call double @llvm.fmuladd.f64(double %1188, double %1189, double 5.000000e-01)
  %1191 = fptoui double %1190 to i16
  %1192 = load ptr, ptr %2, align 8, !tbaa !5
  %1193 = getelementptr inbounds %struct.png_struct_def, ptr %1192, i32 0, i32 59
  %1194 = getelementptr inbounds %struct.png_color_16_struct, ptr %1193, i32 0, i32 3
  store i16 %1191, ptr %1194, align 2, !tbaa !25
  br label %1222

1195:                                             ; preds = %1092
  %1196 = load ptr, ptr %2, align 8, !tbaa !5
  %1197 = getelementptr inbounds %struct.png_struct_def, ptr %1196, i32 0, i32 60
  %1198 = getelementptr inbounds %struct.png_color_16_struct, ptr %1197, i32 0, i32 4
  %1199 = load i16, ptr %1198, align 2, !tbaa !58
  %1200 = load ptr, ptr %2, align 8, !tbaa !5
  %1201 = getelementptr inbounds %struct.png_struct_def, ptr %1200, i32 0, i32 60
  %1202 = getelementptr inbounds %struct.png_color_16_struct, ptr %1201, i32 0, i32 3
  store i16 %1199, ptr %1202, align 2, !tbaa !61
  %1203 = load ptr, ptr %2, align 8, !tbaa !5
  %1204 = getelementptr inbounds %struct.png_struct_def, ptr %1203, i32 0, i32 60
  %1205 = getelementptr inbounds %struct.png_color_16_struct, ptr %1204, i32 0, i32 2
  store i16 %1199, ptr %1205, align 2, !tbaa !60
  %1206 = load ptr, ptr %2, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.png_struct_def, ptr %1206, i32 0, i32 60
  %1208 = getelementptr inbounds %struct.png_color_16_struct, ptr %1207, i32 0, i32 1
  store i16 %1199, ptr %1208, align 2, !tbaa !59
  %1209 = load ptr, ptr %2, align 8, !tbaa !5
  %1210 = getelementptr inbounds %struct.png_struct_def, ptr %1209, i32 0, i32 59
  %1211 = getelementptr inbounds %struct.png_color_16_struct, ptr %1210, i32 0, i32 4
  %1212 = load i16, ptr %1211, align 8, !tbaa !26
  %1213 = load ptr, ptr %2, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.png_struct_def, ptr %1213, i32 0, i32 59
  %1215 = getelementptr inbounds %struct.png_color_16_struct, ptr %1214, i32 0, i32 3
  store i16 %1212, ptr %1215, align 2, !tbaa !25
  %1216 = load ptr, ptr %2, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.png_struct_def, ptr %1216, i32 0, i32 59
  %1218 = getelementptr inbounds %struct.png_color_16_struct, ptr %1217, i32 0, i32 2
  store i16 %1212, ptr %1218, align 4, !tbaa !24
  %1219 = load ptr, ptr %2, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.png_struct_def, ptr %1219, i32 0, i32 59
  %1221 = getelementptr inbounds %struct.png_color_16_struct, ptr %1220, i32 0, i32 1
  store i16 %1212, ptr %1221, align 2, !tbaa !23
  br label %1222

1222:                                             ; preds = %1195, %1104
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %1223

1223:                                             ; preds = %1222, %977
  br label %1300

1224:                                             ; preds = %464
  %1225 = load i32, ptr %3, align 4, !tbaa !20
  %1226 = icmp eq i32 %1225, 3
  br i1 %1226, label %1227, label %1299

1227:                                             ; preds = %1224
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %1228 = load ptr, ptr %2, align 8, !tbaa !5
  %1229 = getelementptr inbounds %struct.png_struct_def, ptr %1228, i32 0, i32 40
  %1230 = load ptr, ptr %1229, align 8, !tbaa !32
  store ptr %1230, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %1231 = load ptr, ptr %2, align 8, !tbaa !5
  %1232 = getelementptr inbounds %struct.png_struct_def, ptr %1231, i32 0, i32 41
  %1233 = load i16, ptr %1232, align 8, !tbaa !48
  %1234 = zext i16 %1233 to i32
  store i32 %1234, ptr %24, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  store i32 0, ptr %25, align 4, !tbaa !20
  br label %1235

1235:                                             ; preds = %1291, %1227
  %1236 = load i32, ptr %25, align 4, !tbaa !20
  %1237 = load i32, ptr %24, align 4, !tbaa !20
  %1238 = icmp slt i32 %1236, %1237
  br i1 %1238, label %1239, label %1294

1239:                                             ; preds = %1235
  %1240 = load ptr, ptr %2, align 8, !tbaa !5
  %1241 = getelementptr inbounds %struct.png_struct_def, ptr %1240, i32 0, i32 67
  %1242 = load ptr, ptr %1241, align 8, !tbaa !50
  %1243 = load ptr, ptr %23, align 8, !tbaa !5
  %1244 = load i32, ptr %25, align 4, !tbaa !20
  %1245 = sext i32 %1244 to i64
  %1246 = getelementptr inbounds %struct.png_color_struct, ptr %1243, i64 %1245
  %1247 = getelementptr inbounds %struct.png_color_struct, ptr %1246, i32 0, i32 0
  %1248 = load i8, ptr %1247, align 1, !tbaa !34
  %1249 = zext i8 %1248 to i64
  %1250 = getelementptr inbounds i8, ptr %1242, i64 %1249
  %1251 = load i8, ptr %1250, align 1, !tbaa !40
  %1252 = load ptr, ptr %23, align 8, !tbaa !5
  %1253 = load i32, ptr %25, align 4, !tbaa !20
  %1254 = sext i32 %1253 to i64
  %1255 = getelementptr inbounds %struct.png_color_struct, ptr %1252, i64 %1254
  %1256 = getelementptr inbounds %struct.png_color_struct, ptr %1255, i32 0, i32 0
  store i8 %1251, ptr %1256, align 1, !tbaa !34
  %1257 = load ptr, ptr %2, align 8, !tbaa !5
  %1258 = getelementptr inbounds %struct.png_struct_def, ptr %1257, i32 0, i32 67
  %1259 = load ptr, ptr %1258, align 8, !tbaa !50
  %1260 = load ptr, ptr %23, align 8, !tbaa !5
  %1261 = load i32, ptr %25, align 4, !tbaa !20
  %1262 = sext i32 %1261 to i64
  %1263 = getelementptr inbounds %struct.png_color_struct, ptr %1260, i64 %1262
  %1264 = getelementptr inbounds %struct.png_color_struct, ptr %1263, i32 0, i32 1
  %1265 = load i8, ptr %1264, align 1, !tbaa !36
  %1266 = zext i8 %1265 to i64
  %1267 = getelementptr inbounds i8, ptr %1259, i64 %1266
  %1268 = load i8, ptr %1267, align 1, !tbaa !40
  %1269 = load ptr, ptr %23, align 8, !tbaa !5
  %1270 = load i32, ptr %25, align 4, !tbaa !20
  %1271 = sext i32 %1270 to i64
  %1272 = getelementptr inbounds %struct.png_color_struct, ptr %1269, i64 %1271
  %1273 = getelementptr inbounds %struct.png_color_struct, ptr %1272, i32 0, i32 1
  store i8 %1268, ptr %1273, align 1, !tbaa !36
  %1274 = load ptr, ptr %2, align 8, !tbaa !5
  %1275 = getelementptr inbounds %struct.png_struct_def, ptr %1274, i32 0, i32 67
  %1276 = load ptr, ptr %1275, align 8, !tbaa !50
  %1277 = load ptr, ptr %23, align 8, !tbaa !5
  %1278 = load i32, ptr %25, align 4, !tbaa !20
  %1279 = sext i32 %1278 to i64
  %1280 = getelementptr inbounds %struct.png_color_struct, ptr %1277, i64 %1279
  %1281 = getelementptr inbounds %struct.png_color_struct, ptr %1280, i32 0, i32 2
  %1282 = load i8, ptr %1281, align 1, !tbaa !37
  %1283 = zext i8 %1282 to i64
  %1284 = getelementptr inbounds i8, ptr %1276, i64 %1283
  %1285 = load i8, ptr %1284, align 1, !tbaa !40
  %1286 = load ptr, ptr %23, align 8, !tbaa !5
  %1287 = load i32, ptr %25, align 4, !tbaa !20
  %1288 = sext i32 %1287 to i64
  %1289 = getelementptr inbounds %struct.png_color_struct, ptr %1286, i64 %1288
  %1290 = getelementptr inbounds %struct.png_color_struct, ptr %1289, i32 0, i32 2
  store i8 %1285, ptr %1290, align 1, !tbaa !37
  br label %1291

1291:                                             ; preds = %1239
  %1292 = load i32, ptr %25, align 4, !tbaa !20
  %1293 = add nsw i32 %1292, 1
  store i32 %1293, ptr %25, align 4, !tbaa !20
  br label %1235, !llvm.loop !62

1294:                                             ; preds = %1235
  %1295 = load ptr, ptr %2, align 8, !tbaa !5
  %1296 = getelementptr inbounds %struct.png_struct_def, ptr %1295, i32 0, i32 14
  %1297 = load i64, ptr %1296, align 8, !tbaa !21
  %1298 = and i64 %1297, -8193
  store i64 %1298, ptr %1296, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %1299

1299:                                             ; preds = %1294, %1224
  br label %1300

1300:                                             ; preds = %1299, %1223
  br label %1534

1301:                                             ; preds = %458, %452
  %1302 = load ptr, ptr %2, align 8, !tbaa !5
  %1303 = getelementptr inbounds %struct.png_struct_def, ptr %1302, i32 0, i32 14
  %1304 = load i64, ptr %1303, align 8, !tbaa !21
  %1305 = and i64 %1304, 128
  %1306 = icmp ne i64 %1305, 0
  br i1 %1306, label %1307, label %1533

1307:                                             ; preds = %1301
  %1308 = load i32, ptr %3, align 4, !tbaa !20
  %1309 = icmp eq i32 %1308, 3
  br i1 %1309, label %1310, label %1533

1310:                                             ; preds = %1307
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %1311 = load ptr, ptr %2, align 8, !tbaa !5
  %1312 = getelementptr inbounds %struct.png_struct_def, ptr %1311, i32 0, i32 42
  %1313 = load i16, ptr %1312, align 2, !tbaa !38
  %1314 = zext i16 %1313 to i32
  store i32 %1314, ptr %27, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 3, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %1315 = load ptr, ptr %2, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.png_struct_def, ptr %1315, i32 0, i32 40
  %1317 = load ptr, ptr %1316, align 8, !tbaa !32
  store ptr %1317, ptr %29, align 8, !tbaa !5
  %1318 = load ptr, ptr %2, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.png_struct_def, ptr %1318, i32 0, i32 59
  %1320 = getelementptr inbounds %struct.png_color_16_struct, ptr %1319, i32 0, i32 1
  %1321 = load i16, ptr %1320, align 2, !tbaa !23
  %1322 = trunc i16 %1321 to i8
  %1323 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 0
  store i8 %1322, ptr %1323, align 1, !tbaa !34
  %1324 = load ptr, ptr %2, align 8, !tbaa !5
  %1325 = getelementptr inbounds %struct.png_struct_def, ptr %1324, i32 0, i32 59
  %1326 = getelementptr inbounds %struct.png_color_16_struct, ptr %1325, i32 0, i32 2
  %1327 = load i16, ptr %1326, align 4, !tbaa !24
  %1328 = trunc i16 %1327 to i8
  %1329 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 1
  store i8 %1328, ptr %1329, align 1, !tbaa !36
  %1330 = load ptr, ptr %2, align 8, !tbaa !5
  %1331 = getelementptr inbounds %struct.png_struct_def, ptr %1330, i32 0, i32 59
  %1332 = getelementptr inbounds %struct.png_color_16_struct, ptr %1331, i32 0, i32 3
  %1333 = load i16, ptr %1332, align 2, !tbaa !25
  %1334 = trunc i16 %1333 to i8
  %1335 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 2
  store i8 %1334, ptr %1335, align 1, !tbaa !37
  store i32 0, ptr %26, align 4, !tbaa !20
  br label %1336

1336:                                             ; preds = %1521, %1310
  %1337 = load i32, ptr %26, align 4, !tbaa !20
  %1338 = load i32, ptr %27, align 4, !tbaa !20
  %1339 = icmp slt i32 %1337, %1338
  br i1 %1339, label %1340, label %1524

1340:                                             ; preds = %1336
  %1341 = load ptr, ptr %2, align 8, !tbaa !5
  %1342 = getelementptr inbounds %struct.png_struct_def, ptr %1341, i32 0, i32 75
  %1343 = load ptr, ptr %1342, align 8, !tbaa !39
  %1344 = load i32, ptr %26, align 4, !tbaa !20
  %1345 = sext i32 %1344 to i64
  %1346 = getelementptr inbounds i8, ptr %1343, i64 %1345
  %1347 = load i8, ptr %1346, align 1, !tbaa !40
  %1348 = zext i8 %1347 to i32
  %1349 = icmp eq i32 %1348, 0
  br i1 %1349, label %1350, label %1355

1350:                                             ; preds = %1340
  %1351 = load ptr, ptr %29, align 8, !tbaa !5
  %1352 = load i32, ptr %26, align 4, !tbaa !20
  %1353 = sext i32 %1352 to i64
  %1354 = getelementptr inbounds %struct.png_color_struct, ptr %1351, i64 %1353
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1354, ptr align 1 %28, i64 3, i1 false), !tbaa.struct !55
  br label %1520

1355:                                             ; preds = %1340
  %1356 = load ptr, ptr %2, align 8, !tbaa !5
  %1357 = getelementptr inbounds %struct.png_struct_def, ptr %1356, i32 0, i32 75
  %1358 = load ptr, ptr %1357, align 8, !tbaa !39
  %1359 = load i32, ptr %26, align 4, !tbaa !20
  %1360 = sext i32 %1359 to i64
  %1361 = getelementptr inbounds i8, ptr %1358, i64 %1360
  %1362 = load i8, ptr %1361, align 1, !tbaa !40
  %1363 = zext i8 %1362 to i32
  %1364 = icmp ne i32 %1363, 255
  br i1 %1364, label %1365, label %1519

1365:                                             ; preds = %1355
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #5
  %1366 = load ptr, ptr %29, align 8, !tbaa !5
  %1367 = load i32, ptr %26, align 4, !tbaa !20
  %1368 = sext i32 %1367 to i64
  %1369 = getelementptr inbounds %struct.png_color_struct, ptr %1366, i64 %1368
  %1370 = getelementptr inbounds %struct.png_color_struct, ptr %1369, i32 0, i32 0
  %1371 = load i8, ptr %1370, align 1, !tbaa !34
  %1372 = zext i8 %1371 to i16
  %1373 = zext i16 %1372 to i32
  %1374 = load ptr, ptr %2, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct.png_struct_def, ptr %1374, i32 0, i32 75
  %1376 = load ptr, ptr %1375, align 8, !tbaa !39
  %1377 = load i32, ptr %26, align 4, !tbaa !20
  %1378 = sext i32 %1377 to i64
  %1379 = getelementptr inbounds i8, ptr %1376, i64 %1378
  %1380 = load i8, ptr %1379, align 1, !tbaa !40
  %1381 = zext i8 %1380 to i16
  %1382 = zext i16 %1381 to i32
  %1383 = mul nsw i32 %1373, %1382
  %1384 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 0
  %1385 = load i8, ptr %1384, align 1, !tbaa !34
  %1386 = zext i8 %1385 to i16
  %1387 = zext i16 %1386 to i32
  %1388 = load ptr, ptr %2, align 8, !tbaa !5
  %1389 = getelementptr inbounds %struct.png_struct_def, ptr %1388, i32 0, i32 75
  %1390 = load ptr, ptr %1389, align 8, !tbaa !39
  %1391 = load i32, ptr %26, align 4, !tbaa !20
  %1392 = sext i32 %1391 to i64
  %1393 = getelementptr inbounds i8, ptr %1390, i64 %1392
  %1394 = load i8, ptr %1393, align 1, !tbaa !40
  %1395 = zext i8 %1394 to i16
  %1396 = zext i16 %1395 to i32
  %1397 = sub nsw i32 255, %1396
  %1398 = trunc i32 %1397 to i16
  %1399 = zext i16 %1398 to i32
  %1400 = mul nsw i32 %1387, %1399
  %1401 = add nsw i32 %1383, %1400
  %1402 = add nsw i32 %1401, 128
  %1403 = trunc i32 %1402 to i16
  store i16 %1403, ptr %30, align 2, !tbaa !44
  %1404 = load i16, ptr %30, align 2, !tbaa !44
  %1405 = zext i16 %1404 to i32
  %1406 = load i16, ptr %30, align 2, !tbaa !44
  %1407 = zext i16 %1406 to i32
  %1408 = ashr i32 %1407, 8
  %1409 = add nsw i32 %1405, %1408
  %1410 = ashr i32 %1409, 8
  %1411 = trunc i32 %1410 to i8
  %1412 = load ptr, ptr %29, align 8, !tbaa !5
  %1413 = load i32, ptr %26, align 4, !tbaa !20
  %1414 = sext i32 %1413 to i64
  %1415 = getelementptr inbounds %struct.png_color_struct, ptr %1412, i64 %1414
  %1416 = getelementptr inbounds %struct.png_color_struct, ptr %1415, i32 0, i32 0
  store i8 %1411, ptr %1416, align 1, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #5
  %1417 = load ptr, ptr %29, align 8, !tbaa !5
  %1418 = load i32, ptr %26, align 4, !tbaa !20
  %1419 = sext i32 %1418 to i64
  %1420 = getelementptr inbounds %struct.png_color_struct, ptr %1417, i64 %1419
  %1421 = getelementptr inbounds %struct.png_color_struct, ptr %1420, i32 0, i32 1
  %1422 = load i8, ptr %1421, align 1, !tbaa !36
  %1423 = zext i8 %1422 to i16
  %1424 = zext i16 %1423 to i32
  %1425 = load ptr, ptr %2, align 8, !tbaa !5
  %1426 = getelementptr inbounds %struct.png_struct_def, ptr %1425, i32 0, i32 75
  %1427 = load ptr, ptr %1426, align 8, !tbaa !39
  %1428 = load i32, ptr %26, align 4, !tbaa !20
  %1429 = sext i32 %1428 to i64
  %1430 = getelementptr inbounds i8, ptr %1427, i64 %1429
  %1431 = load i8, ptr %1430, align 1, !tbaa !40
  %1432 = zext i8 %1431 to i16
  %1433 = zext i16 %1432 to i32
  %1434 = mul nsw i32 %1424, %1433
  %1435 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 1
  %1436 = load i8, ptr %1435, align 1, !tbaa !36
  %1437 = zext i8 %1436 to i16
  %1438 = zext i16 %1437 to i32
  %1439 = load ptr, ptr %2, align 8, !tbaa !5
  %1440 = getelementptr inbounds %struct.png_struct_def, ptr %1439, i32 0, i32 75
  %1441 = load ptr, ptr %1440, align 8, !tbaa !39
  %1442 = load i32, ptr %26, align 4, !tbaa !20
  %1443 = sext i32 %1442 to i64
  %1444 = getelementptr inbounds i8, ptr %1441, i64 %1443
  %1445 = load i8, ptr %1444, align 1, !tbaa !40
  %1446 = zext i8 %1445 to i16
  %1447 = zext i16 %1446 to i32
  %1448 = sub nsw i32 255, %1447
  %1449 = trunc i32 %1448 to i16
  %1450 = zext i16 %1449 to i32
  %1451 = mul nsw i32 %1438, %1450
  %1452 = add nsw i32 %1434, %1451
  %1453 = add nsw i32 %1452, 128
  %1454 = trunc i32 %1453 to i16
  store i16 %1454, ptr %31, align 2, !tbaa !44
  %1455 = load i16, ptr %31, align 2, !tbaa !44
  %1456 = zext i16 %1455 to i32
  %1457 = load i16, ptr %31, align 2, !tbaa !44
  %1458 = zext i16 %1457 to i32
  %1459 = ashr i32 %1458, 8
  %1460 = add nsw i32 %1456, %1459
  %1461 = ashr i32 %1460, 8
  %1462 = trunc i32 %1461 to i8
  %1463 = load ptr, ptr %29, align 8, !tbaa !5
  %1464 = load i32, ptr %26, align 4, !tbaa !20
  %1465 = sext i32 %1464 to i64
  %1466 = getelementptr inbounds %struct.png_color_struct, ptr %1463, i64 %1465
  %1467 = getelementptr inbounds %struct.png_color_struct, ptr %1466, i32 0, i32 1
  store i8 %1462, ptr %1467, align 1, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr %32) #5
  %1468 = load ptr, ptr %29, align 8, !tbaa !5
  %1469 = load i32, ptr %26, align 4, !tbaa !20
  %1470 = sext i32 %1469 to i64
  %1471 = getelementptr inbounds %struct.png_color_struct, ptr %1468, i64 %1470
  %1472 = getelementptr inbounds %struct.png_color_struct, ptr %1471, i32 0, i32 2
  %1473 = load i8, ptr %1472, align 1, !tbaa !37
  %1474 = zext i8 %1473 to i16
  %1475 = zext i16 %1474 to i32
  %1476 = load ptr, ptr %2, align 8, !tbaa !5
  %1477 = getelementptr inbounds %struct.png_struct_def, ptr %1476, i32 0, i32 75
  %1478 = load ptr, ptr %1477, align 8, !tbaa !39
  %1479 = load i32, ptr %26, align 4, !tbaa !20
  %1480 = sext i32 %1479 to i64
  %1481 = getelementptr inbounds i8, ptr %1478, i64 %1480
  %1482 = load i8, ptr %1481, align 1, !tbaa !40
  %1483 = zext i8 %1482 to i16
  %1484 = zext i16 %1483 to i32
  %1485 = mul nsw i32 %1475, %1484
  %1486 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 2
  %1487 = load i8, ptr %1486, align 1, !tbaa !37
  %1488 = zext i8 %1487 to i16
  %1489 = zext i16 %1488 to i32
  %1490 = load ptr, ptr %2, align 8, !tbaa !5
  %1491 = getelementptr inbounds %struct.png_struct_def, ptr %1490, i32 0, i32 75
  %1492 = load ptr, ptr %1491, align 8, !tbaa !39
  %1493 = load i32, ptr %26, align 4, !tbaa !20
  %1494 = sext i32 %1493 to i64
  %1495 = getelementptr inbounds i8, ptr %1492, i64 %1494
  %1496 = load i8, ptr %1495, align 1, !tbaa !40
  %1497 = zext i8 %1496 to i16
  %1498 = zext i16 %1497 to i32
  %1499 = sub nsw i32 255, %1498
  %1500 = trunc i32 %1499 to i16
  %1501 = zext i16 %1500 to i32
  %1502 = mul nsw i32 %1489, %1501
  %1503 = add nsw i32 %1485, %1502
  %1504 = add nsw i32 %1503, 128
  %1505 = trunc i32 %1504 to i16
  store i16 %1505, ptr %32, align 2, !tbaa !44
  %1506 = load i16, ptr %32, align 2, !tbaa !44
  %1507 = zext i16 %1506 to i32
  %1508 = load i16, ptr %32, align 2, !tbaa !44
  %1509 = zext i16 %1508 to i32
  %1510 = ashr i32 %1509, 8
  %1511 = add nsw i32 %1507, %1510
  %1512 = ashr i32 %1511, 8
  %1513 = trunc i32 %1512 to i8
  %1514 = load ptr, ptr %29, align 8, !tbaa !5
  %1515 = load i32, ptr %26, align 4, !tbaa !20
  %1516 = sext i32 %1515 to i64
  %1517 = getelementptr inbounds %struct.png_color_struct, ptr %1514, i64 %1516
  %1518 = getelementptr inbounds %struct.png_color_struct, ptr %1517, i32 0, i32 2
  store i8 %1513, ptr %1518, align 1, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #5
  br label %1519

1519:                                             ; preds = %1365, %1355
  br label %1520

1520:                                             ; preds = %1519, %1350
  br label %1521

1521:                                             ; preds = %1520
  %1522 = load i32, ptr %26, align 4, !tbaa !20
  %1523 = add nsw i32 %1522, 1
  store i32 %1523, ptr %26, align 4, !tbaa !20
  br label %1336, !llvm.loop !63

1524:                                             ; preds = %1336
  %1525 = load ptr, ptr %2, align 8, !tbaa !5
  %1526 = getelementptr inbounds %struct.png_struct_def, ptr %1525, i32 0, i32 14
  %1527 = load i64, ptr %1526, align 8, !tbaa !21
  %1528 = and i64 %1527, -129
  store i64 %1528, ptr %1526, align 8, !tbaa !21
  %1529 = load ptr, ptr %2, align 8, !tbaa !5
  %1530 = getelementptr inbounds %struct.png_struct_def, ptr %1529, i32 0, i32 14
  %1531 = load i64, ptr %1530, align 8, !tbaa !21
  %1532 = or i64 %1531, 262144
  store i64 %1532, ptr %1530, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 3, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  br label %1533

1533:                                             ; preds = %1524, %1307, %1301
  br label %1534

1534:                                             ; preds = %1533, %1300
  %1535 = load ptr, ptr %2, align 8, !tbaa !5
  %1536 = getelementptr inbounds %struct.png_struct_def, ptr %1535, i32 0, i32 14
  %1537 = load i64, ptr %1536, align 8, !tbaa !21
  %1538 = and i64 %1537, 8
  %1539 = icmp ne i64 %1538, 0
  br i1 %1539, label %1540, label %1633

1540:                                             ; preds = %1534
  %1541 = load i32, ptr %3, align 4, !tbaa !20
  %1542 = icmp eq i32 %1541, 3
  br i1 %1542, label %1543, label %1633

1543:                                             ; preds = %1540
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #5
  %1544 = load ptr, ptr %2, align 8, !tbaa !5
  %1545 = getelementptr inbounds %struct.png_struct_def, ptr %1544, i32 0, i32 41
  %1546 = load i16, ptr %1545, align 8, !tbaa !48
  store i16 %1546, ptr %34, align 2, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %1547 = load ptr, ptr %2, align 8, !tbaa !5
  %1548 = getelementptr inbounds %struct.png_struct_def, ptr %1547, i32 0, i32 73
  %1549 = getelementptr inbounds %struct.png_color_8_struct, ptr %1548, i32 0, i32 0
  %1550 = load i8, ptr %1549, align 8, !tbaa !64
  %1551 = zext i8 %1550 to i32
  %1552 = sub nsw i32 8, %1551
  store i32 %1552, ptr %35, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %1553 = load ptr, ptr %2, align 8, !tbaa !5
  %1554 = getelementptr inbounds %struct.png_struct_def, ptr %1553, i32 0, i32 73
  %1555 = getelementptr inbounds %struct.png_color_8_struct, ptr %1554, i32 0, i32 1
  %1556 = load i8, ptr %1555, align 1, !tbaa !65
  %1557 = zext i8 %1556 to i32
  %1558 = sub nsw i32 8, %1557
  store i32 %1558, ptr %36, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %1559 = load ptr, ptr %2, align 8, !tbaa !5
  %1560 = getelementptr inbounds %struct.png_struct_def, ptr %1559, i32 0, i32 73
  %1561 = getelementptr inbounds %struct.png_color_8_struct, ptr %1560, i32 0, i32 2
  %1562 = load i8, ptr %1561, align 2, !tbaa !66
  %1563 = zext i8 %1562 to i32
  %1564 = sub nsw i32 8, %1563
  store i32 %1564, ptr %37, align 4, !tbaa !20
  %1565 = load i32, ptr %35, align 4, !tbaa !20
  %1566 = icmp slt i32 %1565, 0
  br i1 %1566, label %1570, label %1567

1567:                                             ; preds = %1543
  %1568 = load i32, ptr %35, align 4, !tbaa !20
  %1569 = icmp sgt i32 %1568, 8
  br i1 %1569, label %1570, label %1571

1570:                                             ; preds = %1567, %1543
  store i32 0, ptr %35, align 4, !tbaa !20
  br label %1571

1571:                                             ; preds = %1570, %1567
  %1572 = load i32, ptr %36, align 4, !tbaa !20
  %1573 = icmp slt i32 %1572, 0
  br i1 %1573, label %1577, label %1574

1574:                                             ; preds = %1571
  %1575 = load i32, ptr %36, align 4, !tbaa !20
  %1576 = icmp sgt i32 %1575, 8
  br i1 %1576, label %1577, label %1578

1577:                                             ; preds = %1574, %1571
  store i32 0, ptr %36, align 4, !tbaa !20
  br label %1578

1578:                                             ; preds = %1577, %1574
  %1579 = load i32, ptr %37, align 4, !tbaa !20
  %1580 = icmp slt i32 %1579, 0
  br i1 %1580, label %1584, label %1581

1581:                                             ; preds = %1578
  %1582 = load i32, ptr %37, align 4, !tbaa !20
  %1583 = icmp sgt i32 %1582, 8
  br i1 %1583, label %1584, label %1585

1584:                                             ; preds = %1581, %1578
  store i32 0, ptr %37, align 4, !tbaa !20
  br label %1585

1585:                                             ; preds = %1584, %1581
  store i16 0, ptr %33, align 2, !tbaa !44
  br label %1586

1586:                                             ; preds = %1629, %1585
  %1587 = load i16, ptr %33, align 2, !tbaa !44
  %1588 = zext i16 %1587 to i32
  %1589 = load i16, ptr %34, align 2, !tbaa !44
  %1590 = zext i16 %1589 to i32
  %1591 = icmp slt i32 %1588, %1590
  br i1 %1591, label %1592, label %1632

1592:                                             ; preds = %1586
  %1593 = load i32, ptr %35, align 4, !tbaa !20
  %1594 = load ptr, ptr %2, align 8, !tbaa !5
  %1595 = getelementptr inbounds %struct.png_struct_def, ptr %1594, i32 0, i32 40
  %1596 = load ptr, ptr %1595, align 8, !tbaa !32
  %1597 = load i16, ptr %33, align 2, !tbaa !44
  %1598 = zext i16 %1597 to i64
  %1599 = getelementptr inbounds %struct.png_color_struct, ptr %1596, i64 %1598
  %1600 = getelementptr inbounds %struct.png_color_struct, ptr %1599, i32 0, i32 0
  %1601 = load i8, ptr %1600, align 1, !tbaa !34
  %1602 = zext i8 %1601 to i32
  %1603 = ashr i32 %1602, %1593
  %1604 = trunc i32 %1603 to i8
  store i8 %1604, ptr %1600, align 1, !tbaa !34
  %1605 = load i32, ptr %36, align 4, !tbaa !20
  %1606 = load ptr, ptr %2, align 8, !tbaa !5
  %1607 = getelementptr inbounds %struct.png_struct_def, ptr %1606, i32 0, i32 40
  %1608 = load ptr, ptr %1607, align 8, !tbaa !32
  %1609 = load i16, ptr %33, align 2, !tbaa !44
  %1610 = zext i16 %1609 to i64
  %1611 = getelementptr inbounds %struct.png_color_struct, ptr %1608, i64 %1610
  %1612 = getelementptr inbounds %struct.png_color_struct, ptr %1611, i32 0, i32 1
  %1613 = load i8, ptr %1612, align 1, !tbaa !36
  %1614 = zext i8 %1613 to i32
  %1615 = ashr i32 %1614, %1605
  %1616 = trunc i32 %1615 to i8
  store i8 %1616, ptr %1612, align 1, !tbaa !36
  %1617 = load i32, ptr %37, align 4, !tbaa !20
  %1618 = load ptr, ptr %2, align 8, !tbaa !5
  %1619 = getelementptr inbounds %struct.png_struct_def, ptr %1618, i32 0, i32 40
  %1620 = load ptr, ptr %1619, align 8, !tbaa !32
  %1621 = load i16, ptr %33, align 2, !tbaa !44
  %1622 = zext i16 %1621 to i64
  %1623 = getelementptr inbounds %struct.png_color_struct, ptr %1620, i64 %1622
  %1624 = getelementptr inbounds %struct.png_color_struct, ptr %1623, i32 0, i32 2
  %1625 = load i8, ptr %1624, align 1, !tbaa !37
  %1626 = zext i8 %1625 to i32
  %1627 = ashr i32 %1626, %1617
  %1628 = trunc i32 %1627 to i8
  store i8 %1628, ptr %1624, align 1, !tbaa !37
  br label %1629

1629:                                             ; preds = %1592
  %1630 = load i16, ptr %33, align 2, !tbaa !44
  %1631 = add i16 %1630, 1
  store i16 %1631, ptr %33, align 2, !tbaa !44
  br label %1586, !llvm.loop !67

1632:                                             ; preds = %1586
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %33) #5
  br label %1633

1633:                                             ; preds = %1632, %1540, %1534
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @png_build_gamma_table(ptr noundef) #3

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

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = !{!10, !7, i64 630}
!10 = !{!"png_struct_def", !7, i64 0, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !7, i64 272, !7, i64 273, !11, i64 280, !11, i64 288, !11, i64 296, !12, i64 304, !6, i64 416, !11, i64 424, !13, i64 432, !13, i64 436, !13, i64 440, !13, i64 444, !13, i64 448, !11, i64 456, !11, i64 464, !11, i64 472, !11, i64 480, !11, i64 488, !11, i64 496, !11, i64 504, !11, i64 512, !6, i64 520, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !14, i64 568, !11, i64 592, !11, i64 600, !6, i64 608, !15, i64 616, !15, i64 618, !7, i64 620, !7, i64 625, !7, i64 626, !7, i64 627, !7, i64 628, !7, i64 629, !7, i64 630, !7, i64 631, !7, i64 632, !7, i64 633, !7, i64 634, !7, i64 635, !7, i64 636, !15, i64 638, !7, i64 640, !16, i64 644, !17, i64 648, !17, i64 658, !6, i64 672, !11, i64 680, !11, i64 688, !13, i64 696, !16, i64 700, !16, i64 704, !6, i64 712, !6, i64 720, !6, i64 728, !6, i64 736, !6, i64 744, !6, i64 752, !18, i64 760, !18, i64 765, !6, i64 776, !17, i64 784, !6, i64 800, !6, i64 808, !6, i64 816, !6, i64 824, !6, i64 832, !6, i64 840, !6, i64 848, !6, i64 856, !6, i64 864, !11, i64 872, !11, i64 880, !11, i64 888, !11, i64 896, !11, i64 904, !11, i64 912, !13, i64 920, !13, i64 924, !11, i64 928, !11, i64 936, !6, i64 944, !6, i64 952, !6, i64 960, !6, i64 968, !6, i64 976, !7, i64 984, !7, i64 985, !6, i64 992, !6, i64 1000, !6, i64 1008, !6, i64 1016, !6, i64 1024, !6, i64 1032, !11, i64 1040, !6, i64 1048, !6, i64 1056, !13, i64 1064, !6, i64 1072, !7, i64 1080, !15, i64 1082, !15, i64 1084, !15, i64 1086, !11, i64 1088, !11, i64 1096, !7, i64 1104, !7, i64 1105, !11, i64 1112, !11, i64 1120, !6, i64 1128, !6, i64 1136, !6, i64 1144, !6, i64 1152, !6, i64 1160, !6, i64 1168, !6, i64 1176, !7, i64 1184, !11, i64 1192, !11, i64 1200, !19, i64 1208, !11, i64 1240, !11, i64 1248, !6, i64 1256}
!11 = !{!"long", !7, i64 0}
!12 = !{!"z_stream_s", !6, i64 0, !13, i64 8, !11, i64 16, !6, i64 24, !13, i64 32, !11, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !13, i64 88, !11, i64 96, !11, i64 104}
!13 = !{!"int", !7, i64 0}
!14 = !{!"png_row_info_struct", !11, i64 0, !11, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!15 = !{!"short", !7, i64 0}
!16 = !{!"float", !7, i64 0}
!17 = !{!"png_color_16_struct", !7, i64 0, !15, i64 2, !15, i64 4, !15, i64 6, !15, i64 8}
!18 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!19 = !{!"png_unknown_chunk_t", !7, i64 0, !6, i64 8, !11, i64 16, !7, i64 24}
!20 = !{!13, !13, i64 0}
!21 = !{!10, !11, i64 296}
!22 = !{!10, !11, i64 280}
!23 = !{!10, !15, i64 650}
!24 = !{!10, !15, i64 652}
!25 = !{!10, !15, i64 654}
!26 = !{!10, !15, i64 656}
!27 = !{!10, !7, i64 631}
!28 = !{!10, !15, i64 792}
!29 = !{!10, !15, i64 790}
!30 = !{!10, !15, i64 788}
!31 = !{!10, !15, i64 786}
!32 = !{!10, !6, i64 608}
!33 = !{!10, !7, i64 648}
!34 = !{!35, !7, i64 0}
!35 = !{!"png_color_struct", !7, i64 0, !7, i64 1, !7, i64 2}
!36 = !{!35, !7, i64 1}
!37 = !{!35, !7, i64 2}
!38 = !{!10, !15, i64 618}
!39 = !{!10, !6, i64 776}
!40 = !{!7, !7, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{i64 0, i64 1, !40, i64 2, i64 2, !44, i64 4, i64 2, !44, i64 6, i64 2, !44, i64 8, i64 2, !44}
!44 = !{!15, !15, i64 0}
!45 = !{!10, !16, i64 704}
!46 = !{!10, !16, i64 700}
!47 = distinct !{!47, !42}
!48 = !{!10, !15, i64 616}
!49 = !{!10, !7, i64 640}
!50 = !{!10, !6, i64 712}
!51 = !{!10, !6, i64 728}
!52 = !{!53, !53, i64 0}
!53 = !{!"double", !7, i64 0}
!54 = !{!10, !16, i64 644}
!55 = !{i64 0, i64 1, !40, i64 1, i64 1, !40, i64 2, i64 1, !40}
!56 = !{!10, !6, i64 720}
!57 = distinct !{!57, !42}
!58 = !{!10, !15, i64 666}
!59 = !{!10, !15, i64 660}
!60 = !{!10, !15, i64 662}
!61 = !{!10, !15, i64 664}
!62 = distinct !{!62, !42}
!63 = distinct !{!63, !42}
!64 = !{!10, !7, i64 760}
!65 = !{!10, !7, i64 761}
!66 = !{!10, !7, i64 762}
!67 = distinct !{!67, !42}


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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @png_init_read_transformations(ptr noundef %0) local_unnamed_addr #2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 630
  %3 = load i8, ptr %2, align 2, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 296
  %5 = load i64, ptr %4, align 8, !tbaa !19
  %6 = and i64 %5, 256
  %.not = icmp ne i64 %6, 0
  %7 = and i8 %3, 2
  %.not391 = icmp eq i8 %7, 0
  %or.cond413 = select i1 %.not, i1 %.not391, i1 false
  br i1 %or.cond413, label %8, label %12

8:                                                ; preds = %1
  %9 = getelementptr inbounds i8, ptr %0, i64 280
  %10 = load i64, ptr %9, align 8, !tbaa !20
  %11 = or i64 %10, 2048
  store i64 %11, ptr %9, align 8, !tbaa !20
  br label %29

12:                                               ; preds = %1
  %13 = and i64 %5, 16768
  %or.cond415.not = icmp eq i64 %13, 16512
  br i1 %or.cond415.not, label %14, label %29

14:                                               ; preds = %12
  %15 = getelementptr inbounds i8, ptr %0, i64 650
  %16 = load i16, ptr %15, align 2, !tbaa !21
  %17 = getelementptr inbounds i8, ptr %0, i64 652
  %18 = load i16, ptr %17, align 4, !tbaa !22
  %19 = icmp eq i16 %16, %18
  br i1 %19, label %20, label %.thread

20:                                               ; preds = %14
  %21 = getelementptr inbounds i8, ptr %0, i64 654
  %22 = load i16, ptr %21, align 2, !tbaa !23
  %23 = icmp eq i16 %16, %22
  br i1 %23, label %24, label %.thread

24:                                               ; preds = %20
  %25 = getelementptr inbounds i8, ptr %0, i64 280
  %26 = load i64, ptr %25, align 8, !tbaa !20
  %27 = or i64 %26, 2048
  store i64 %27, ptr %25, align 8, !tbaa !20
  %28 = getelementptr inbounds i8, ptr %0, i64 656
  store i16 %16, ptr %28, align 8, !tbaa !24
  br label %.thread

29:                                               ; preds = %12, %8
  %30 = and i64 %5, 4352
  %or.cond416.not = icmp eq i64 %30, 4352
  br i1 %or.cond416.not, label %31, label %.thread

31:                                               ; preds = %29
  br i1 %.not391, label %32, label %86

32:                                               ; preds = %31
  %33 = getelementptr inbounds i8, ptr %0, i64 631
  %34 = load i8, ptr %33, align 1, !tbaa !25
  switch i8 %34, label %.thread [
    i8 1, label %35
    i8 2, label %50
    i8 4, label %65
    i8 8, label %80
    i8 16, label %80
  ]

35:                                               ; preds = %32
  %36 = getelementptr inbounds i8, ptr %0, i64 656
  %37 = load i16, ptr %36, align 8, !tbaa !24
  %38 = mul i16 %37, 255
  %39 = getelementptr inbounds i8, ptr %0, i64 650
  %40 = insertelement <4 x i16> poison, i16 %38, i64 0
  %41 = shufflevector <4 x i16> %40, <4 x i16> poison, <4 x i32> zeroinitializer
  store <4 x i16> %41, ptr %39, align 2, !tbaa !26
  %42 = and i64 %5, 33554432
  %.not400 = icmp eq i64 %42, 0
  br i1 %.not400, label %43, label %.thread

43:                                               ; preds = %35
  %44 = getelementptr inbounds i8, ptr %0, i64 792
  %45 = load i16, ptr %44, align 8, !tbaa !27
  %46 = mul i16 %45, 255
  %47 = getelementptr inbounds i8, ptr %0, i64 786
  %48 = insertelement <4 x i16> poison, i16 %46, i64 0
  %49 = shufflevector <4 x i16> %48, <4 x i16> poison, <4 x i32> zeroinitializer
  store <4 x i16> %49, ptr %47, align 2, !tbaa !26
  br label %.thread

50:                                               ; preds = %32
  %51 = getelementptr inbounds i8, ptr %0, i64 656
  %52 = load i16, ptr %51, align 8, !tbaa !24
  %53 = mul i16 %52, 85
  %54 = getelementptr inbounds i8, ptr %0, i64 650
  %55 = insertelement <4 x i16> poison, i16 %53, i64 0
  %56 = shufflevector <4 x i16> %55, <4 x i16> poison, <4 x i32> zeroinitializer
  store <4 x i16> %56, ptr %54, align 2, !tbaa !26
  %57 = and i64 %5, 33554432
  %.not399 = icmp eq i64 %57, 0
  br i1 %.not399, label %58, label %.thread

58:                                               ; preds = %50
  %59 = getelementptr inbounds i8, ptr %0, i64 792
  %60 = load i16, ptr %59, align 8, !tbaa !27
  %61 = mul i16 %60, 85
  %62 = getelementptr inbounds i8, ptr %0, i64 786
  %63 = insertelement <4 x i16> poison, i16 %61, i64 0
  %64 = shufflevector <4 x i16> %63, <4 x i16> poison, <4 x i32> zeroinitializer
  store <4 x i16> %64, ptr %62, align 2, !tbaa !26
  br label %.thread

65:                                               ; preds = %32
  %66 = getelementptr inbounds i8, ptr %0, i64 656
  %67 = load i16, ptr %66, align 8, !tbaa !24
  %68 = mul i16 %67, 17
  %69 = getelementptr inbounds i8, ptr %0, i64 650
  %70 = insertelement <4 x i16> poison, i16 %68, i64 0
  %71 = shufflevector <4 x i16> %70, <4 x i16> poison, <4 x i32> zeroinitializer
  store <4 x i16> %71, ptr %69, align 2, !tbaa !26
  %72 = and i64 %5, 33554432
  %.not398 = icmp eq i64 %72, 0
  br i1 %.not398, label %73, label %.thread

73:                                               ; preds = %65
  %74 = getelementptr inbounds i8, ptr %0, i64 792
  %75 = load i16, ptr %74, align 8, !tbaa !27
  %76 = mul i16 %75, 17
  %77 = getelementptr inbounds i8, ptr %0, i64 786
  %78 = insertelement <4 x i16> poison, i16 %76, i64 0
  %79 = shufflevector <4 x i16> %78, <4 x i16> poison, <4 x i32> zeroinitializer
  store <4 x i16> %79, ptr %77, align 2, !tbaa !26
  br label %.thread

80:                                               ; preds = %32, %32
  %81 = getelementptr inbounds i8, ptr %0, i64 656
  %82 = load i16, ptr %81, align 8, !tbaa !24
  %83 = getelementptr inbounds i8, ptr %0, i64 654
  store i16 %82, ptr %83, align 2, !tbaa !23
  %84 = getelementptr inbounds i8, ptr %0, i64 652
  store i16 %82, ptr %84, align 4, !tbaa !22
  %85 = getelementptr inbounds i8, ptr %0, i64 650
  store i16 %82, ptr %85, align 2, !tbaa !21
  br label %.thread

86:                                               ; preds = %31
  %87 = icmp eq i8 %3, 3
  br i1 %87, label %90, label %.thread423

.thread423:                                       ; preds = %86
  %88 = getelementptr inbounds i8, ptr %0, i64 658
  %89 = getelementptr inbounds i8, ptr %0, i64 648
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 2 dereferenceable(10) %88, ptr noundef nonnull align 8 dereferenceable(10) %89, i64 10, i1 false), !tbaa.struct !28
  br label %.thread480

90:                                               ; preds = %86
  %91 = getelementptr inbounds i8, ptr %0, i64 608
  %92 = load ptr, ptr %91, align 8, !tbaa !30
  %93 = getelementptr inbounds i8, ptr %0, i64 648
  %94 = load i8, ptr %93, align 8, !tbaa !31
  %95 = zext i8 %94 to i64
  %96 = getelementptr inbounds %struct.png_color_struct, ptr %92, i64 %95
  %97 = load i8, ptr %96, align 1, !tbaa !32
  %98 = zext i8 %97 to i16
  %99 = getelementptr inbounds i8, ptr %0, i64 650
  store i16 %98, ptr %99, align 2, !tbaa !21
  %100 = getelementptr inbounds %struct.png_color_struct, ptr %92, i64 %95, i32 1
  %101 = load i8, ptr %100, align 1, !tbaa !34
  %102 = zext i8 %101 to i16
  %103 = getelementptr inbounds i8, ptr %0, i64 652
  store i16 %102, ptr %103, align 4, !tbaa !22
  %104 = getelementptr inbounds %struct.png_color_struct, ptr %92, i64 %95, i32 2
  %105 = load i8, ptr %104, align 1, !tbaa !35
  %106 = zext i8 %105 to i16
  %107 = getelementptr inbounds i8, ptr %0, i64 654
  store i16 %106, ptr %107, align 2, !tbaa !23
  %108 = and i64 %5, 34078720
  %or.cond417 = icmp eq i64 %108, 524288
  br i1 %or.cond417, label %110, label %.thread422

.thread422:                                       ; preds = %90
  %109 = getelementptr inbounds i8, ptr %0, i64 658
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 2 dereferenceable(10) %109, ptr noundef nonnull align 8 dereferenceable(10) %93, i64 10, i1 false), !tbaa.struct !28
  br label %141

110:                                              ; preds = %90
  %111 = getelementptr inbounds i8, ptr %0, i64 618
  %112 = load i16, ptr %111, align 2, !tbaa !36
  %.not443 = icmp eq i16 %112, 0
  br i1 %.not443, label %.thread.thread, label %.lr.ph

.thread.thread:                                   ; preds = %110
  %113 = getelementptr inbounds i8, ptr %0, i64 658
  %114 = getelementptr inbounds i8, ptr %0, i64 648
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 2 dereferenceable(10) %113, ptr noundef nonnull align 8 dereferenceable(10) %114, i64 10, i1 false), !tbaa.struct !28
  br label %141

.lr.ph:                                           ; preds = %110
  %115 = getelementptr inbounds i8, ptr %0, i64 776
  %wide.trip.count = zext i16 %112 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %116 = icmp ult i16 %112, 4
  br i1 %116, label %.thread.loopexit.unr-lcssa, label %.lr.ph.new

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

117:                                              ; preds = %117, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %117 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %117 ]
  %118 = load ptr, ptr %115, align 8, !tbaa !37
  %119 = getelementptr inbounds i8, ptr %118, i64 %indvars.iv
  %120 = load i8, ptr %119, align 1, !tbaa !29
  %121 = xor i8 %120, -1
  store i8 %121, ptr %119, align 1, !tbaa !29
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %122 = load ptr, ptr %115, align 8, !tbaa !37
  %123 = getelementptr inbounds i8, ptr %122, i64 %indvars.iv.next
  %124 = load i8, ptr %123, align 1, !tbaa !29
  %125 = xor i8 %124, -1
  store i8 %125, ptr %123, align 1, !tbaa !29
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %126 = load ptr, ptr %115, align 8, !tbaa !37
  %127 = getelementptr inbounds i8, ptr %126, i64 %indvars.iv.next.1
  %128 = load i8, ptr %127, align 1, !tbaa !29
  %129 = xor i8 %128, -1
  store i8 %129, ptr %127, align 1, !tbaa !29
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %130 = load ptr, ptr %115, align 8, !tbaa !37
  %131 = getelementptr inbounds i8, ptr %130, i64 %indvars.iv.next.2
  %132 = load i8, ptr %131, align 1, !tbaa !29
  %133 = xor i8 %132, -1
  store i8 %133, ptr %131, align 1, !tbaa !29
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.thread.loopexit.unr-lcssa, label %117, !llvm.loop !38

.thread.loopexit.unr-lcssa:                       ; preds = %117, %.lr.ph
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %117 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.thread, label %.epil.preheader

.epil.preheader:                                  ; preds = %.thread.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %.thread.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.thread.loopexit.unr-lcssa ]
  %134 = load ptr, ptr %115, align 8, !tbaa !37
  %135 = getelementptr inbounds i8, ptr %134, i64 %indvars.iv.epil
  %136 = load i8, ptr %135, align 1, !tbaa !29
  %137 = xor i8 %136, -1
  store i8 %137, ptr %135, align 1, !tbaa !29
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.thread, label %.epil.preheader, !llvm.loop !40

.thread:                                          ; preds = %.thread.loopexit.unr-lcssa, %.epil.preheader, %24, %20, %14, %65, %73, %50, %58, %35, %43, %80, %32, %29
  %138 = getelementptr inbounds i8, ptr %0, i64 658
  %139 = getelementptr inbounds i8, ptr %0, i64 648
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 2 dereferenceable(10) %138, ptr noundef nonnull align 8 dereferenceable(10) %139, i64 10, i1 false), !tbaa.struct !28
  %140 = icmp eq i8 %3, 3
  br i1 %140, label %141, label %.thread480

141:                                              ; preds = %.thread.thread, %.thread422, %.thread
  %142 = getelementptr inbounds i8, ptr %0, i64 618
  %143 = load i16, ptr %142, align 2, !tbaa !36
  %.not403 = icmp eq i16 %143, 0
  br i1 %.not403, label %.thread480, label %144

144:                                              ; preds = %141
  %145 = getelementptr inbounds i8, ptr %0, i64 704
  %146 = load float, ptr %145, align 8, !tbaa !42
  %147 = getelementptr inbounds i8, ptr %0, i64 700
  %148 = load float, ptr %147, align 4, !tbaa !43
  %149 = fmul float %146, %148
  %150 = fpext float %149 to double
  %151 = fadd double %150, -1.000000e+00
  %152 = tail call double @llvm.fabs.f64(double %151)
  %153 = fcmp olt double %152, 5.000000e-02
  br i1 %153, label %.preheader, label %.thread480

.preheader:                                       ; preds = %144
  %154 = getelementptr inbounds i8, ptr %0, i64 776
  %155 = load ptr, ptr %154, align 8, !tbaa !37
  %wide.trip.count452 = zext i16 %143 to i64
  br label %.outer

.outer:                                           ; preds = %.thread475, %.preheader
  %indvars.iv449.ph = phi i64 [ %indvars.iv.next450477, %.thread475 ], [ 0, %.preheader ]
  %156 = phi i1 [ false, %.thread475 ], [ true, %.preheader ]
  br label %157

157:                                              ; preds = %.outer, %160
  %indvars.iv449 = phi i64 [ %indvars.iv.next450, %160 ], [ %indvars.iv449.ph, %.outer ]
  %158 = getelementptr inbounds i8, ptr %155, i64 %indvars.iv449
  %159 = load i8, ptr %158, align 1, !tbaa !29
  switch i8 %159, label %.thread475 [
    i8 0, label %160
    i8 -1, label %160
  ]

160:                                              ; preds = %157, %157
  %indvars.iv.next450 = add nuw nsw i64 %indvars.iv449, 1
  %exitcond453.not = icmp eq i64 %indvars.iv.next450, %wide.trip.count452
  br i1 %exitcond453.not, label %161, label %157, !llvm.loop !44

.thread475:                                       ; preds = %157
  %indvars.iv.next450477 = add nuw nsw i64 %indvars.iv449, 1
  %exitcond453.not478 = icmp eq i64 %indvars.iv.next450477, %wide.trip.count452
  br i1 %exitcond453.not478, label %.thread480, label %.outer, !llvm.loop !44

161:                                              ; preds = %160
  br i1 %156, label %162, label %.thread480

162:                                              ; preds = %161
  %163 = load i64, ptr %4, align 8, !tbaa !19
  %164 = and i64 %163, -8193
  store i64 %164, ptr %4, align 8, !tbaa !19
  br label %.thread480

.thread480:                                       ; preds = %.thread475, %.thread423, %161, %162, %144, %141, %.thread
  %165 = phi i1 [ true, %161 ], [ true, %162 ], [ true, %144 ], [ true, %141 ], [ false, %.thread ], [ false, %.thread423 ], [ true, %.thread475 ]
  %166 = load i64, ptr %4, align 8, !tbaa !19
  %167 = and i64 %166, 6299648
  %.not404 = icmp eq i64 %167, 0
  br i1 %.not404, label %545, label %168

168:                                              ; preds = %.thread480
  %169 = getelementptr inbounds i8, ptr %0, i64 700
  %170 = load float, ptr %169, align 4, !tbaa !43
  %171 = fcmp une float %170, 0.000000e+00
  br i1 %171, label %172, label %545

172:                                              ; preds = %168
  tail call void @png_build_gamma_table(ptr noundef nonnull %0)
  %173 = load i64, ptr %4, align 8, !tbaa !19
  %174 = and i64 %173, 128
  %.not406 = icmp eq i64 %174, 0
  br i1 %.not406, label %489, label %175

175:                                              ; preds = %172
  br i1 %165, label %176, label %390

176:                                              ; preds = %175
  %177 = getelementptr inbounds i8, ptr %0, i64 608
  %178 = load ptr, ptr %177, align 8, !tbaa !30
  %179 = getelementptr inbounds i8, ptr %0, i64 616
  %180 = load i16, ptr %179, align 8, !tbaa !45
  %181 = getelementptr inbounds i8, ptr %0, i64 640
  %182 = load i8, ptr %181, align 8, !tbaa !46
  switch i8 %182, label %224 [
    i8 2, label %183
    i8 1, label %209
    i8 3, label %214
  ]

183:                                              ; preds = %176
  %184 = getelementptr inbounds i8, ptr %0, i64 712
  %185 = load ptr, ptr %184, align 8, !tbaa !47
  %186 = getelementptr inbounds i8, ptr %0, i64 650
  %187 = load i16, ptr %186, align 2, !tbaa !21
  %188 = zext i16 %187 to i64
  %189 = getelementptr inbounds i8, ptr %185, i64 %188
  %190 = load i8, ptr %189, align 1, !tbaa !29
  %191 = getelementptr inbounds i8, ptr %0, i64 652
  %192 = load i16, ptr %191, align 4, !tbaa !22
  %193 = zext i16 %192 to i64
  %194 = getelementptr inbounds i8, ptr %185, i64 %193
  %195 = load i8, ptr %194, align 1, !tbaa !29
  %196 = getelementptr inbounds i8, ptr %0, i64 654
  %197 = load i16, ptr %196, align 2, !tbaa !23
  %198 = zext i16 %197 to i64
  %199 = getelementptr inbounds i8, ptr %185, i64 %198
  %200 = load i8, ptr %199, align 1, !tbaa !29
  %201 = getelementptr inbounds i8, ptr %0, i64 728
  %202 = load ptr, ptr %201, align 8, !tbaa !48
  %203 = getelementptr inbounds i8, ptr %202, i64 %188
  %204 = load i8, ptr %203, align 1, !tbaa !29
  %205 = getelementptr inbounds i8, ptr %202, i64 %193
  %206 = load i8, ptr %205, align 1, !tbaa !29
  %207 = getelementptr inbounds i8, ptr %202, i64 %198
  %208 = load i8, ptr %207, align 1, !tbaa !29
  br label %282

209:                                              ; preds = %176
  %210 = getelementptr inbounds i8, ptr %0, i64 704
  %211 = load float, ptr %210, align 8, !tbaa !42
  %212 = fpext float %211 to double
  %213 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %212, i64 0
  br label %224

214:                                              ; preds = %176
  %215 = getelementptr inbounds i8, ptr %0, i64 644
  %216 = load float, ptr %215, align 4, !tbaa !49
  %217 = getelementptr inbounds i8, ptr %0, i64 704
  %218 = load float, ptr %217, align 8, !tbaa !42
  %219 = fmul float %216, %218
  %220 = insertelement <2 x float> poison, float %216, i64 0
  %221 = insertelement <2 x float> %220, float %219, i64 1
  %222 = fpext <2 x float> %221 to <2 x double>
  %223 = fdiv <2 x double> <double 1.000000e+00, double 1.000000e+00>, %222
  br label %224

224:                                              ; preds = %176, %214, %209
  %225 = phi <2 x double> [ %223, %214 ], [ %213, %209 ], [ <double 1.000000e+00, double 1.000000e+00>, %176 ]
  %226 = extractelement <2 x double> %225, i64 1
  %227 = fadd double %226, -1.000000e+00
  %228 = tail call double @llvm.fabs.f64(double %227)
  %229 = fcmp olt double %228, 5.000000e-02
  %230 = getelementptr inbounds i8, ptr %0, i64 650
  %231 = load i16, ptr %230, align 2, !tbaa !21
  br i1 %229, label %232, label %240

232:                                              ; preds = %224
  %233 = trunc i16 %231 to i8
  %234 = getelementptr inbounds i8, ptr %0, i64 652
  %235 = load i16, ptr %234, align 4, !tbaa !22
  %236 = trunc i16 %235 to i8
  %237 = getelementptr inbounds i8, ptr %0, i64 654
  %238 = load i16, ptr %237, align 2, !tbaa !23
  %239 = trunc i16 %238 to i8
  br label %260

240:                                              ; preds = %224
  %241 = uitofp i16 %231 to double
  %242 = fdiv double %241, 2.550000e+02
  %243 = tail call double @pow(double noundef %242, double noundef %226) #4
  %244 = tail call double @llvm.fmuladd.f64(double %243, double 2.550000e+02, double 5.000000e-01)
  %245 = fptoui double %244 to i8
  %246 = getelementptr inbounds i8, ptr %0, i64 652
  %247 = load i16, ptr %246, align 4, !tbaa !22
  %248 = uitofp i16 %247 to double
  %249 = fdiv double %248, 2.550000e+02
  %250 = tail call double @pow(double noundef %249, double noundef %226) #4
  %251 = tail call double @llvm.fmuladd.f64(double %250, double 2.550000e+02, double 5.000000e-01)
  %252 = fptoui double %251 to i8
  %253 = getelementptr inbounds i8, ptr %0, i64 654
  %254 = load i16, ptr %253, align 2, !tbaa !23
  %255 = uitofp i16 %254 to double
  %256 = fdiv double %255, 2.550000e+02
  %257 = tail call double @pow(double noundef %256, double noundef %226) #4
  %258 = tail call double @llvm.fmuladd.f64(double %257, double 2.550000e+02, double 5.000000e-01)
  %259 = fptoui double %258 to i8
  %.pre = load i16, ptr %230, align 2, !tbaa !21
  br label %260

260:                                              ; preds = %240, %232
  %261 = phi i16 [ %231, %232 ], [ %.pre, %240 ]
  %.sroa.0154.0 = phi i8 [ %233, %232 ], [ %245, %240 ]
  %.sroa.6.0 = phi i8 [ %236, %232 ], [ %252, %240 ]
  %.sroa.9.0 = phi i8 [ %239, %232 ], [ %259, %240 ]
  %262 = uitofp i16 %261 to double
  %263 = fdiv double %262, 2.550000e+02
  %264 = extractelement <2 x double> %225, i64 0
  %265 = tail call double @pow(double noundef %263, double noundef %264) #4
  %266 = tail call double @llvm.fmuladd.f64(double %265, double 2.550000e+02, double 5.000000e-01)
  %267 = fptoui double %266 to i8
  %268 = getelementptr inbounds i8, ptr %0, i64 652
  %269 = load i16, ptr %268, align 4, !tbaa !22
  %270 = uitofp i16 %269 to double
  %271 = fdiv double %270, 2.550000e+02
  %272 = tail call double @pow(double noundef %271, double noundef %264) #4
  %273 = tail call double @llvm.fmuladd.f64(double %272, double 2.550000e+02, double 5.000000e-01)
  %274 = fptoui double %273 to i8
  %275 = getelementptr inbounds i8, ptr %0, i64 654
  %276 = load i16, ptr %275, align 2, !tbaa !23
  %277 = uitofp i16 %276 to double
  %278 = fdiv double %277, 2.550000e+02
  %279 = tail call double @pow(double noundef %278, double noundef %264) #4
  %280 = tail call double @llvm.fmuladd.f64(double %279, double 2.550000e+02, double 5.000000e-01)
  %281 = fptoui double %280 to i8
  br label %282

282:                                              ; preds = %260, %183
  %.sroa.0152.0 = phi i8 [ %204, %183 ], [ %267, %260 ]
  %.sroa.5153.0 = phi i8 [ %206, %183 ], [ %274, %260 ]
  %.sroa.8.0 = phi i8 [ %208, %183 ], [ %281, %260 ]
  %.sroa.0154.1 = phi i8 [ %190, %183 ], [ %.sroa.0154.0, %260 ]
  %.sroa.6.1 = phi i8 [ %195, %183 ], [ %.sroa.6.0, %260 ]
  %.sroa.9.1 = phi i8 [ %200, %183 ], [ %.sroa.9.0, %260 ]
  %.not444 = icmp eq i16 %180, 0
  br i1 %.not444, label %._crit_edge, label %.lr.ph431

.lr.ph431:                                        ; preds = %282
  %283 = getelementptr inbounds i8, ptr %0, i64 618
  %284 = getelementptr inbounds i8, ptr %0, i64 776
  %285 = getelementptr inbounds i8, ptr %0, i64 712
  %286 = getelementptr inbounds i8, ptr %0, i64 728
  %287 = zext i8 %.sroa.0152.0 to i32
  %288 = getelementptr inbounds i8, ptr %0, i64 720
  %289 = zext i8 %.sroa.5153.0 to i32
  %290 = zext i8 %.sroa.8.0 to i32
  %wide.trip.count457 = zext i16 %180 to i64
  br label %291

291:                                              ; preds = %.lr.ph431, %386
  %indvars.iv454 = phi i64 [ 0, %.lr.ph431 ], [ %indvars.iv.next455, %386 ]
  %292 = load i16, ptr %283, align 2, !tbaa !36
  %293 = zext i16 %292 to i64
  %294 = icmp ult i64 %indvars.iv454, %293
  br i1 %294, label %295, label %369

295:                                              ; preds = %291
  %296 = load ptr, ptr %284, align 8, !tbaa !37
  %297 = getelementptr inbounds i8, ptr %296, i64 %indvars.iv454
  %298 = load i8, ptr %297, align 1, !tbaa !29
  switch i8 %298, label %301 [
    i8 -1, label %369
    i8 0, label %299
  ]

299:                                              ; preds = %295
  %300 = getelementptr inbounds %struct.png_color_struct, ptr %178, i64 %indvars.iv454
  store i8 %.sroa.0154.1, ptr %300, align 1, !tbaa !29
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %300, i64 1
  store i8 %.sroa.6.1, ptr %.sroa.6.0..sroa_idx, align 1, !tbaa !29
  %.sroa.9.0..sroa_idx = getelementptr inbounds i8, ptr %300, i64 2
  store i8 %.sroa.9.1, ptr %.sroa.9.0..sroa_idx, align 1, !tbaa !29
  br label %386

301:                                              ; preds = %295
  %302 = load ptr, ptr %286, align 8, !tbaa !48
  %303 = getelementptr inbounds %struct.png_color_struct, ptr %178, i64 %indvars.iv454
  %304 = load i8, ptr %303, align 1, !tbaa !32
  %305 = zext i8 %304 to i64
  %306 = getelementptr inbounds i8, ptr %302, i64 %305
  %307 = load i8, ptr %306, align 1, !tbaa !29
  %308 = zext i8 %307 to i32
  %309 = zext i8 %298 to i32
  %310 = mul nuw nsw i32 %308, %309
  %311 = xor i8 %298, -1
  %312 = zext i8 %311 to i32
  %313 = mul nuw nsw i32 %312, %287
  %314 = add nuw nsw i32 %313, 128
  %315 = add nuw nsw i32 %314, %310
  %316 = lshr i32 %315, 8
  %317 = and i32 %316, 255
  %318 = add nuw nsw i32 %317, %315
  %319 = lshr i32 %318, 8
  %320 = load ptr, ptr %288, align 8, !tbaa !50
  %321 = and i32 %319, 255
  %322 = zext nneg i32 %321 to i64
  %323 = getelementptr inbounds i8, ptr %320, i64 %322
  %324 = load i8, ptr %323, align 1, !tbaa !29
  store i8 %324, ptr %303, align 1, !tbaa !32
  %325 = getelementptr inbounds i8, ptr %303, i64 1
  %326 = load i8, ptr %325, align 1, !tbaa !34
  %327 = zext i8 %326 to i64
  %328 = getelementptr inbounds i8, ptr %302, i64 %327
  %329 = load i8, ptr %328, align 1, !tbaa !29
  %330 = zext i8 %329 to i32
  %331 = load i8, ptr %297, align 1, !tbaa !29
  %332 = zext i8 %331 to i32
  %333 = mul nuw nsw i32 %332, %330
  %334 = xor i8 %331, -1
  %335 = zext i8 %334 to i32
  %336 = mul nuw nsw i32 %335, %289
  %337 = add nuw nsw i32 %336, 128
  %338 = add nuw nsw i32 %337, %333
  %339 = lshr i32 %338, 8
  %340 = and i32 %339, 255
  %341 = add nuw nsw i32 %340, %338
  %342 = lshr i32 %341, 8
  %343 = and i32 %342, 255
  %344 = zext nneg i32 %343 to i64
  %345 = getelementptr inbounds i8, ptr %320, i64 %344
  %346 = load i8, ptr %345, align 1, !tbaa !29
  store i8 %346, ptr %325, align 1, !tbaa !34
  %347 = getelementptr inbounds i8, ptr %303, i64 2
  %348 = load i8, ptr %347, align 1, !tbaa !35
  %349 = zext i8 %348 to i64
  %350 = getelementptr inbounds i8, ptr %302, i64 %349
  %351 = load i8, ptr %350, align 1, !tbaa !29
  %352 = zext i8 %351 to i32
  %353 = load i8, ptr %297, align 1, !tbaa !29
  %354 = zext i8 %353 to i32
  %355 = mul nuw nsw i32 %354, %352
  %356 = xor i8 %353, -1
  %357 = zext i8 %356 to i32
  %358 = mul nuw nsw i32 %357, %290
  %359 = add nuw nsw i32 %358, 128
  %360 = add nuw nsw i32 %359, %355
  %361 = lshr i32 %360, 8
  %362 = and i32 %361, 255
  %363 = add nuw nsw i32 %362, %360
  %364 = lshr i32 %363, 8
  %365 = and i32 %364, 255
  %366 = zext nneg i32 %365 to i64
  %367 = getelementptr inbounds i8, ptr %320, i64 %366
  %368 = load i8, ptr %367, align 1, !tbaa !29
  store i8 %368, ptr %347, align 1, !tbaa !35
  br label %386

369:                                              ; preds = %295, %291
  %370 = load ptr, ptr %285, align 8, !tbaa !47
  %371 = getelementptr inbounds %struct.png_color_struct, ptr %178, i64 %indvars.iv454
  %372 = load i8, ptr %371, align 1, !tbaa !32
  %373 = zext i8 %372 to i64
  %374 = getelementptr inbounds i8, ptr %370, i64 %373
  %375 = load i8, ptr %374, align 1, !tbaa !29
  store i8 %375, ptr %371, align 1, !tbaa !32
  %376 = getelementptr inbounds i8, ptr %371, i64 1
  %377 = load i8, ptr %376, align 1, !tbaa !34
  %378 = zext i8 %377 to i64
  %379 = getelementptr inbounds i8, ptr %370, i64 %378
  %380 = load i8, ptr %379, align 1, !tbaa !29
  store i8 %380, ptr %376, align 1, !tbaa !34
  %381 = getelementptr inbounds i8, ptr %371, i64 2
  %382 = load i8, ptr %381, align 1, !tbaa !35
  %383 = zext i8 %382 to i64
  %384 = getelementptr inbounds i8, ptr %370, i64 %383
  %385 = load i8, ptr %384, align 1, !tbaa !29
  store i8 %385, ptr %381, align 1, !tbaa !35
  br label %386

386:                                              ; preds = %369, %301, %299
  %indvars.iv.next455 = add nuw nsw i64 %indvars.iv454, 1
  %exitcond458.not = icmp eq i64 %indvars.iv.next455, %wide.trip.count457
  br i1 %exitcond458.not, label %._crit_edge, label %291, !llvm.loop !51

._crit_edge:                                      ; preds = %386, %282
  %387 = load i64, ptr %4, align 8, !tbaa !19
  %388 = and i64 %387, -270465
  %389 = or disjoint i64 %388, 262144
  br label %.sink.split

390:                                              ; preds = %175
  %391 = getelementptr inbounds i8, ptr %0, i64 631
  %392 = load i8, ptr %391, align 1, !tbaa !25
  %393 = zext nneg i8 %392 to i64
  %notmask = shl nsw i64 -1, %393
  %394 = xor i64 %notmask, -1
  %395 = uitofp nneg i64 %394 to double
  %396 = getelementptr inbounds i8, ptr %0, i64 640
  %397 = load i8, ptr %396, align 8, !tbaa !46
  switch i8 %397, label %419 [
    i8 1, label %398
    i8 2, label %403
    i8 3, label %409
  ]

398:                                              ; preds = %390
  %399 = getelementptr inbounds i8, ptr %0, i64 704
  %400 = load float, ptr %399, align 8, !tbaa !42
  %401 = fpext float %400 to double
  %402 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %401, i64 0
  br label %419

403:                                              ; preds = %390
  %404 = load <2 x float>, ptr %169, align 4, !tbaa !52
  %shift = shufflevector <2 x float> %404, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %405 = fmul <2 x float> %404, %shift
  %406 = shufflevector <2 x float> %404, <2 x float> %405, <2 x i32> <i32 0, i32 2>
  %407 = fpext <2 x float> %406 to <2 x double>
  %408 = fdiv <2 x double> <double 1.000000e+00, double 1.000000e+00>, %407
  br label %419

409:                                              ; preds = %390
  %410 = getelementptr inbounds i8, ptr %0, i64 644
  %411 = load float, ptr %410, align 4, !tbaa !49
  %412 = getelementptr inbounds i8, ptr %0, i64 704
  %413 = load float, ptr %412, align 8, !tbaa !42
  %414 = fmul float %411, %413
  %415 = insertelement <2 x float> poison, float %411, i64 0
  %416 = insertelement <2 x float> %415, float %414, i64 1
  %417 = fpext <2 x float> %416 to <2 x double>
  %418 = fdiv <2 x double> <double 1.000000e+00, double 1.000000e+00>, %417
  br label %419

419:                                              ; preds = %409, %403, %398, %390
  %420 = phi <2 x double> [ <double 1.000000e+00, double 1.000000e+00>, %390 ], [ %418, %409 ], [ %408, %403 ], [ %402, %398 ]
  %421 = getelementptr inbounds i8, ptr %0, i64 656
  %422 = load i16, ptr %421, align 8, !tbaa !24
  %423 = uitofp i16 %422 to double
  %424 = fdiv double %423, %395
  %425 = extractelement <2 x double> %420, i64 0
  %426 = tail call double @pow(double noundef %424, double noundef %425) #4
  %427 = tail call double @llvm.fmuladd.f64(double %426, double %395, double 5.000000e-01)
  %428 = fptoui double %427 to i16
  %429 = getelementptr inbounds i8, ptr %0, i64 666
  store i16 %428, ptr %429, align 2, !tbaa !53
  %430 = load i16, ptr %421, align 8, !tbaa !24
  %431 = uitofp i16 %430 to double
  %432 = fdiv double %431, %395
  %433 = extractelement <2 x double> %420, i64 1
  %434 = tail call double @pow(double noundef %432, double noundef %433) #4
  %435 = tail call double @llvm.fmuladd.f64(double %434, double %395, double 5.000000e-01)
  %436 = fptoui double %435 to i16
  store i16 %436, ptr %421, align 8, !tbaa !24
  %437 = getelementptr inbounds i8, ptr %0, i64 650
  %438 = load i16, ptr %437, align 2, !tbaa !21
  %439 = getelementptr inbounds i8, ptr %0, i64 652
  %440 = load i16, ptr %439, align 4, !tbaa !22
  %.not407 = icmp eq i16 %438, %440
  br i1 %.not407, label %441, label %444

441:                                              ; preds = %419
  %442 = getelementptr inbounds i8, ptr %0, i64 654
  %443 = load i16, ptr %442, align 2, !tbaa !23
  %.not408 = icmp eq i16 %438, %443
  %.not409 = icmp eq i16 %438, %436
  %or.cond418 = select i1 %.not408, i1 %.not409, i1 false
  br i1 %or.cond418, label %484, label %444

444:                                              ; preds = %441, %419
  %445 = uitofp i16 %438 to double
  %446 = fdiv double %445, %395
  %447 = tail call double @pow(double noundef %446, double noundef %425) #4
  %448 = tail call double @llvm.fmuladd.f64(double %447, double %395, double 5.000000e-01)
  %449 = fptoui double %448 to i16
  %450 = getelementptr inbounds i8, ptr %0, i64 660
  store i16 %449, ptr %450, align 2, !tbaa !54
  %451 = load i16, ptr %439, align 4, !tbaa !22
  %452 = uitofp i16 %451 to double
  %453 = fdiv double %452, %395
  %454 = tail call double @pow(double noundef %453, double noundef %425) #4
  %455 = tail call double @llvm.fmuladd.f64(double %454, double %395, double 5.000000e-01)
  %456 = fptoui double %455 to i16
  %457 = getelementptr inbounds i8, ptr %0, i64 662
  store i16 %456, ptr %457, align 2, !tbaa !55
  %458 = getelementptr inbounds i8, ptr %0, i64 654
  %459 = load i16, ptr %458, align 2, !tbaa !23
  %460 = uitofp i16 %459 to double
  %461 = fdiv double %460, %395
  %462 = tail call double @pow(double noundef %461, double noundef %425) #4
  %463 = tail call double @llvm.fmuladd.f64(double %462, double %395, double 5.000000e-01)
  %464 = fptoui double %463 to i16
  %465 = getelementptr inbounds i8, ptr %0, i64 664
  store i16 %464, ptr %465, align 2, !tbaa !56
  %466 = load i16, ptr %437, align 2, !tbaa !21
  %467 = uitofp i16 %466 to double
  %468 = fdiv double %467, %395
  %469 = tail call double @pow(double noundef %468, double noundef %433) #4
  %470 = tail call double @llvm.fmuladd.f64(double %469, double %395, double 5.000000e-01)
  %471 = fptoui double %470 to i16
  store i16 %471, ptr %437, align 2, !tbaa !21
  %472 = load i16, ptr %439, align 4, !tbaa !22
  %473 = uitofp i16 %472 to double
  %474 = fdiv double %473, %395
  %475 = tail call double @pow(double noundef %474, double noundef %433) #4
  %476 = tail call double @llvm.fmuladd.f64(double %475, double %395, double 5.000000e-01)
  %477 = fptoui double %476 to i16
  store i16 %477, ptr %439, align 4, !tbaa !22
  %478 = load i16, ptr %458, align 2, !tbaa !23
  %479 = uitofp i16 %478 to double
  %480 = fdiv double %479, %395
  %481 = tail call double @pow(double noundef %480, double noundef %433) #4
  %482 = tail call double @llvm.fmuladd.f64(double %481, double %395, double 5.000000e-01)
  %483 = fptoui double %482 to i16
  store i16 %483, ptr %458, align 2, !tbaa !23
  br label %.thread425

484:                                              ; preds = %441
  %485 = load i16, ptr %429, align 2, !tbaa !53
  %486 = getelementptr inbounds i8, ptr %0, i64 664
  store i16 %485, ptr %486, align 2, !tbaa !56
  %487 = getelementptr inbounds i8, ptr %0, i64 662
  store i16 %485, ptr %487, align 2, !tbaa !55
  %488 = getelementptr inbounds i8, ptr %0, i64 660
  store i16 %485, ptr %488, align 2, !tbaa !54
  store i16 %436, ptr %442, align 2, !tbaa !23
  store i16 %436, ptr %439, align 4, !tbaa !22
  store i16 %436, ptr %437, align 2, !tbaa !21
  br label %.thread425

489:                                              ; preds = %172
  br i1 %165, label %490, label %.thread425

490:                                              ; preds = %489
  %491 = getelementptr inbounds i8, ptr %0, i64 608
  %492 = load ptr, ptr %491, align 8, !tbaa !30
  %493 = getelementptr inbounds i8, ptr %0, i64 616
  %494 = load i16, ptr %493, align 8, !tbaa !45
  %.not445 = icmp eq i16 %494, 0
  br i1 %.not445, label %._crit_edge435, label %.lr.ph434

.lr.ph434:                                        ; preds = %490
  %495 = getelementptr inbounds i8, ptr %0, i64 712
  %496 = load ptr, ptr %495, align 8, !tbaa !47
  %wide.trip.count462 = zext i16 %494 to i64
  %xtraiter489 = and i64 %wide.trip.count462, 1
  %497 = icmp eq i16 %494, 1
  br i1 %497, label %._crit_edge435.loopexit.unr-lcssa, label %.lr.ph434.new

.lr.ph434.new:                                    ; preds = %.lr.ph434
  %unroll_iter492 = and i64 %wide.trip.count462, 65534
  br label %498

498:                                              ; preds = %498, %.lr.ph434.new
  %indvars.iv459 = phi i64 [ 0, %.lr.ph434.new ], [ %indvars.iv.next460.1, %498 ]
  %niter493 = phi i64 [ 0, %.lr.ph434.new ], [ %niter493.next.1, %498 ]
  %499 = getelementptr inbounds %struct.png_color_struct, ptr %492, i64 %indvars.iv459
  %500 = load i8, ptr %499, align 1, !tbaa !32
  %501 = zext i8 %500 to i64
  %502 = getelementptr inbounds i8, ptr %496, i64 %501
  %503 = load i8, ptr %502, align 1, !tbaa !29
  store i8 %503, ptr %499, align 1, !tbaa !32
  %504 = getelementptr inbounds i8, ptr %499, i64 1
  %505 = load i8, ptr %504, align 1, !tbaa !34
  %506 = zext i8 %505 to i64
  %507 = getelementptr inbounds i8, ptr %496, i64 %506
  %508 = load i8, ptr %507, align 1, !tbaa !29
  store i8 %508, ptr %504, align 1, !tbaa !34
  %509 = getelementptr inbounds i8, ptr %499, i64 2
  %510 = load i8, ptr %509, align 1, !tbaa !35
  %511 = zext i8 %510 to i64
  %512 = getelementptr inbounds i8, ptr %496, i64 %511
  %513 = load i8, ptr %512, align 1, !tbaa !29
  store i8 %513, ptr %509, align 1, !tbaa !35
  %indvars.iv.next460 = or disjoint i64 %indvars.iv459, 1
  %514 = getelementptr inbounds %struct.png_color_struct, ptr %492, i64 %indvars.iv.next460
  %515 = load i8, ptr %514, align 1, !tbaa !32
  %516 = zext i8 %515 to i64
  %517 = getelementptr inbounds i8, ptr %496, i64 %516
  %518 = load i8, ptr %517, align 1, !tbaa !29
  store i8 %518, ptr %514, align 1, !tbaa !32
  %519 = getelementptr inbounds i8, ptr %514, i64 1
  %520 = load i8, ptr %519, align 1, !tbaa !34
  %521 = zext i8 %520 to i64
  %522 = getelementptr inbounds i8, ptr %496, i64 %521
  %523 = load i8, ptr %522, align 1, !tbaa !29
  store i8 %523, ptr %519, align 1, !tbaa !34
  %524 = getelementptr inbounds i8, ptr %514, i64 2
  %525 = load i8, ptr %524, align 1, !tbaa !35
  %526 = zext i8 %525 to i64
  %527 = getelementptr inbounds i8, ptr %496, i64 %526
  %528 = load i8, ptr %527, align 1, !tbaa !29
  store i8 %528, ptr %524, align 1, !tbaa !35
  %indvars.iv.next460.1 = add nuw nsw i64 %indvars.iv459, 2
  %niter493.next.1 = add i64 %niter493, 2
  %niter493.ncmp.1 = icmp eq i64 %niter493.next.1, %unroll_iter492
  br i1 %niter493.ncmp.1, label %._crit_edge435.loopexit.unr-lcssa, label %498, !llvm.loop !57

._crit_edge435.loopexit.unr-lcssa:                ; preds = %498, %.lr.ph434
  %indvars.iv459.unr = phi i64 [ 0, %.lr.ph434 ], [ %indvars.iv.next460.1, %498 ]
  %lcmp.mod491.not = icmp eq i64 %xtraiter489, 0
  br i1 %lcmp.mod491.not, label %._crit_edge435, label %._crit_edge435.loopexit.epilog-lcssa

._crit_edge435.loopexit.epilog-lcssa:             ; preds = %._crit_edge435.loopexit.unr-lcssa
  %529 = getelementptr inbounds %struct.png_color_struct, ptr %492, i64 %indvars.iv459.unr
  %530 = load i8, ptr %529, align 1, !tbaa !32
  %531 = zext i8 %530 to i64
  %532 = getelementptr inbounds i8, ptr %496, i64 %531
  %533 = load i8, ptr %532, align 1, !tbaa !29
  store i8 %533, ptr %529, align 1, !tbaa !32
  %534 = getelementptr inbounds i8, ptr %529, i64 1
  %535 = load i8, ptr %534, align 1, !tbaa !34
  %536 = zext i8 %535 to i64
  %537 = getelementptr inbounds i8, ptr %496, i64 %536
  %538 = load i8, ptr %537, align 1, !tbaa !29
  store i8 %538, ptr %534, align 1, !tbaa !34
  %539 = getelementptr inbounds i8, ptr %529, i64 2
  %540 = load i8, ptr %539, align 1, !tbaa !35
  %541 = zext i8 %540 to i64
  %542 = getelementptr inbounds i8, ptr %496, i64 %541
  %543 = load i8, ptr %542, align 1, !tbaa !29
  store i8 %543, ptr %539, align 1, !tbaa !35
  br label %._crit_edge435

._crit_edge435:                                   ; preds = %._crit_edge435.loopexit.epilog-lcssa, %._crit_edge435.loopexit.unr-lcssa, %490
  %544 = and i64 %173, -8321
  br label %.sink.split

545:                                              ; preds = %168, %.thread480
  %546 = and i64 %166, 128
  %547 = icmp ne i64 %546, 0
  %or.cond = and i1 %165, %547
  br i1 %or.cond, label %548, label %624

548:                                              ; preds = %545
  %549 = getelementptr inbounds i8, ptr %0, i64 618
  %550 = load i16, ptr %549, align 2, !tbaa !36
  %551 = getelementptr inbounds i8, ptr %0, i64 608
  %552 = load ptr, ptr %551, align 8, !tbaa !30
  %553 = getelementptr inbounds i8, ptr %0, i64 650
  %554 = load i16, ptr %553, align 2, !tbaa !21
  %555 = trunc i16 %554 to i8
  %556 = getelementptr inbounds i8, ptr %0, i64 652
  %557 = load i16, ptr %556, align 4, !tbaa !22
  %558 = trunc i16 %557 to i8
  %559 = getelementptr inbounds i8, ptr %0, i64 654
  %560 = load i16, ptr %559, align 2, !tbaa !23
  %561 = trunc i16 %560 to i8
  %.not446 = icmp eq i16 %550, 0
  br i1 %.not446, label %._crit_edge439, label %.lr.ph438

.lr.ph438:                                        ; preds = %548
  %562 = getelementptr inbounds i8, ptr %0, i64 776
  %563 = and i16 %554, 255
  %564 = and i16 %557, 255
  %565 = and i16 %560, 255
  %wide.trip.count467 = zext i16 %550 to i64
  br label %566

566:                                              ; preds = %.lr.ph438, %620
  %indvars.iv464 = phi i64 [ 0, %.lr.ph438 ], [ %indvars.iv.next465, %620 ]
  %567 = load ptr, ptr %562, align 8, !tbaa !37
  %568 = getelementptr inbounds i8, ptr %567, i64 %indvars.iv464
  %569 = load i8, ptr %568, align 1, !tbaa !29
  switch i8 %569, label %572 [
    i8 0, label %570
    i8 -1, label %620
  ]

570:                                              ; preds = %566
  %571 = getelementptr inbounds %struct.png_color_struct, ptr %552, i64 %indvars.iv464
  store i8 %555, ptr %571, align 1, !tbaa !29
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %571, i64 1
  store i8 %558, ptr %.sroa.5.0..sroa_idx, align 1, !tbaa !29
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %571, i64 2
  store i8 %561, ptr %.sroa.7.0..sroa_idx, align 1, !tbaa !29
  br label %620

572:                                              ; preds = %566
  %573 = getelementptr inbounds %struct.png_color_struct, ptr %552, i64 %indvars.iv464
  %574 = load i8, ptr %573, align 1, !tbaa !32
  %575 = zext i8 %574 to i16
  %576 = zext i8 %569 to i16
  %577 = mul nuw i16 %575, %576
  %578 = xor i8 %569, -1
  %579 = zext i8 %578 to i16
  %580 = mul nuw i16 %563, %579
  %581 = add nuw i16 %580, 128
  %582 = add i16 %581, %577
  %583 = zext i16 %582 to i32
  %584 = lshr i32 %583, 8
  %585 = add nuw nsw i32 %584, %583
  %586 = lshr i32 %585, 8
  %587 = trunc i32 %586 to i8
  store i8 %587, ptr %573, align 1, !tbaa !32
  %588 = getelementptr inbounds i8, ptr %573, i64 1
  %589 = load i8, ptr %588, align 1, !tbaa !34
  %590 = zext i8 %589 to i16
  %591 = load i8, ptr %568, align 1, !tbaa !29
  %592 = zext i8 %591 to i16
  %593 = mul nuw i16 %592, %590
  %594 = xor i8 %591, -1
  %595 = zext i8 %594 to i16
  %596 = mul nuw i16 %564, %595
  %597 = add nuw i16 %596, 128
  %598 = add i16 %597, %593
  %599 = zext i16 %598 to i32
  %600 = lshr i32 %599, 8
  %601 = add nuw nsw i32 %600, %599
  %602 = lshr i32 %601, 8
  %603 = trunc i32 %602 to i8
  store i8 %603, ptr %588, align 1, !tbaa !34
  %604 = getelementptr inbounds i8, ptr %573, i64 2
  %605 = load i8, ptr %604, align 1, !tbaa !35
  %606 = zext i8 %605 to i16
  %607 = load i8, ptr %568, align 1, !tbaa !29
  %608 = zext i8 %607 to i16
  %609 = mul nuw i16 %608, %606
  %610 = xor i8 %607, -1
  %611 = zext i8 %610 to i16
  %612 = mul nuw i16 %565, %611
  %613 = add nuw i16 %612, 128
  %614 = add i16 %613, %609
  %615 = zext i16 %614 to i32
  %616 = lshr i32 %615, 8
  %617 = add nuw nsw i32 %616, %615
  %618 = lshr i32 %617, 8
  %619 = trunc i32 %618 to i8
  store i8 %619, ptr %604, align 1, !tbaa !35
  br label %620

620:                                              ; preds = %566, %570, %572
  %indvars.iv.next465 = add nuw nsw i64 %indvars.iv464, 1
  %exitcond468.not = icmp eq i64 %indvars.iv.next465, %wide.trip.count467
  br i1 %exitcond468.not, label %._crit_edge439.loopexit, label %566, !llvm.loop !58

._crit_edge439.loopexit:                          ; preds = %620
  %.pre474 = load i64, ptr %4, align 8, !tbaa !19
  br label %._crit_edge439

._crit_edge439:                                   ; preds = %._crit_edge439.loopexit, %548
  %621 = phi i64 [ %.pre474, %._crit_edge439.loopexit ], [ %166, %548 ]
  %622 = and i64 %621, -262273
  %623 = or disjoint i64 %622, 262144
  br label %.sink.split

.sink.split:                                      ; preds = %._crit_edge435, %._crit_edge, %._crit_edge439
  %.sink = phi i64 [ %623, %._crit_edge439 ], [ %389, %._crit_edge ], [ %544, %._crit_edge435 ]
  store i64 %.sink, ptr %4, align 8, !tbaa !19
  br label %624

624:                                              ; preds = %.sink.split, %545
  %625 = phi i64 [ %166, %545 ], [ %.sink, %.sink.split ]
  %626 = and i64 %625, 8
  %627 = icmp ne i64 %626, 0
  %or.cond3 = and i1 %165, %627
  br i1 %or.cond3, label %628, label %.thread425

628:                                              ; preds = %624
  %629 = getelementptr inbounds i8, ptr %0, i64 616
  %630 = load i16, ptr %629, align 8, !tbaa !45
  %631 = getelementptr inbounds i8, ptr %0, i64 760
  %632 = load i8, ptr %631, align 8, !tbaa !59
  %633 = zext i8 %632 to i32
  %634 = sub nsw i32 8, %633
  %635 = getelementptr inbounds i8, ptr %0, i64 761
  %636 = load i8, ptr %635, align 1, !tbaa !60
  %637 = zext i8 %636 to i32
  %638 = sub nsw i32 8, %637
  %639 = getelementptr inbounds i8, ptr %0, i64 762
  %640 = load i8, ptr %639, align 2, !tbaa !61
  %641 = zext i8 %640 to i32
  %642 = sub nsw i32 8, %641
  %643 = icmp ugt i8 %632, 8
  %spec.store.select = select i1 %643, i32 0, i32 %634
  %644 = icmp ugt i8 %636, 8
  %spec.store.select11 = select i1 %644, i32 0, i32 %638
  %645 = icmp ugt i8 %640, 8
  %spec.store.select10 = select i1 %645, i32 0, i32 %642
  %.not447 = icmp eq i16 %630, 0
  br i1 %.not447, label %.thread425, label %.lr.ph442

.lr.ph442:                                        ; preds = %628
  %646 = getelementptr inbounds i8, ptr %0, i64 608
  %647 = load ptr, ptr %646, align 8, !tbaa !30
  %wide.trip.count472 = zext i16 %630 to i64
  br label %648

648:                                              ; preds = %.lr.ph442, %648
  %indvars.iv469 = phi i64 [ 0, %.lr.ph442 ], [ %indvars.iv.next470, %648 ]
  %649 = getelementptr inbounds %struct.png_color_struct, ptr %647, i64 %indvars.iv469
  %650 = load i8, ptr %649, align 1, !tbaa !32
  %651 = zext i8 %650 to i32
  %652 = lshr i32 %651, %spec.store.select
  %653 = trunc nuw i32 %652 to i8
  store i8 %653, ptr %649, align 1, !tbaa !32
  %654 = getelementptr inbounds %struct.png_color_struct, ptr %647, i64 %indvars.iv469, i32 1
  %655 = load i8, ptr %654, align 1, !tbaa !34
  %656 = zext i8 %655 to i32
  %657 = lshr i32 %656, %spec.store.select11
  %658 = trunc nuw i32 %657 to i8
  store i8 %658, ptr %654, align 1, !tbaa !34
  %659 = getelementptr inbounds %struct.png_color_struct, ptr %647, i64 %indvars.iv469, i32 2
  %660 = load i8, ptr %659, align 1, !tbaa !35
  %661 = zext i8 %660 to i32
  %662 = lshr i32 %661, %spec.store.select10
  %663 = trunc nuw i32 %662 to i8
  store i8 %663, ptr %659, align 1, !tbaa !35
  %indvars.iv.next470 = add nuw nsw i64 %indvars.iv469, 1
  %exitcond473.not = icmp eq i64 %indvars.iv.next470, %wide.trip.count472
  br i1 %exitcond473.not, label %.thread425, label %648, !llvm.loop !62

.thread425:                                       ; preds = %648, %628, %489, %484, %444, %624
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @png_build_gamma_table(ptr noundef) local_unnamed_addr #2

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

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


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