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

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

%struct.png_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, ptr, i8, i8, i32, i32, i32, %struct.z_stream_s, ptr, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_row_info_struct, i32, i32, ptr, i16, i16, [5 x i8], i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i8, float, %struct.png_color_16_struct, %struct.png_color_16_struct, ptr, i32, i32, i32, float, float, ptr, ptr, ptr, ptr, ptr, ptr, %struct.png_color_8_struct, %struct.png_color_8_struct, ptr, %struct.png_color_16_struct, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i64, i64, i64, i32, i32, i64, i64, ptr, ptr, ptr, ptr, ptr, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, i32, ptr, i8, i16, i16, i16, i32, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i32, i32, i32, %struct.png_unknown_chunk_t, i32, i32, ptr, i32 }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.png_row_info_struct = type { i32, i64, i8, i8, i8, i8 }
%struct.png_color_8_struct = type { i8, i8, i8, i8, i8 }
%struct.png_color_16_struct = type { i8, i16, i16, i16, i16 }
%struct.png_unknown_chunk_t = type { [5 x i8], ptr, i64, i8 }

; 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 50
  %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 15
  %44 = load i32, ptr %43, align 4, !tbaa !21
  %45 = and i32 %44, 256
  %46 = icmp ne i32 %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 13
  %54 = load i32, ptr %53, align 4, !tbaa !22
  %55 = or i32 %54, 2048
  store i32 %55, ptr %53, align 4, !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 15
  %59 = load i32, ptr %58, align 4, !tbaa !21
  %60 = and i32 %59, 128
  %61 = icmp ne i32 %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 15
  %65 = load i32, ptr %64, align 4, !tbaa !21
  %66 = and i32 %65, 256
  %67 = icmp ne i32 %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 15
  %71 = load i32, ptr %70, align 4, !tbaa !21
  %72 = and i32 %71, 16384
  %73 = icmp ne i32 %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 60
  %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 60
  %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 60
  %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 60
  %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 13
  %101 = load i32, ptr %100, align 4, !tbaa !22
  %102 = or i32 %101, 2048
  store i32 %102, ptr %100, align 4, !tbaa !22
  %103 = load ptr, ptr %2, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.png_struct_def, ptr %103, i32 0, i32 60
  %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 60
  %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 15
  %114 = load i32, ptr %113, align 4, !tbaa !21
  %115 = and i32 %114, 256
  %116 = icmp ne i32 %115, 0
  br i1 %116, label %117, label %390

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

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 %294, 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 51
  %130 = load i8, ptr %129, align 1, !tbaa !27
  %131 = zext i8 %130 to i32
  switch i32 %131, label %293 [
    i32 1, label %132
    i32 2, label %181
    i32 4, label %230
    i32 8, label %279
    i32 16, label %279
  ]

132:                                              ; preds = %127
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.png_struct_def, ptr %133, i32 0, i32 60
  %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 60
  %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 60
  %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 60
  %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 60
  %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 15
  %155 = load i32, ptr %154, align 4, !tbaa !21
  %156 = zext i32 %155 to i64
  %157 = and i64 %156, 33554432
  %158 = icmp ne i64 %157, 0
  br i1 %158, label %180, label %159

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

180:                                              ; preds = %159, %132
  br label %293

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

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

229:                                              ; preds = %208, %181
  br label %293

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

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

278:                                              ; preds = %257, %230
  br label %293

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

293:                                              ; preds = %279, %278, %229, %180, %127
  br label %389

294:                                              ; preds = %123
  %295 = load i32, ptr %3, align 4, !tbaa !20
  %296 = icmp eq i32 %295, 3
  br i1 %296, label %297, label %388

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

349:                                              ; preds = %297
  %350 = load ptr, ptr %2, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.png_struct_def, ptr %350, i32 0, i32 15
  %352 = load i32, ptr %351, align 4, !tbaa !21
  %353 = zext i32 %352 to i64
  %354 = and i64 %353, 33554432
  %355 = icmp ne i64 %354, 0
  br i1 %355, label %386, label %356

356:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  %357 = load ptr, ptr %2, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.png_struct_def, ptr %357, i32 0, i32 43
  %359 = load i16, ptr %358, align 2, !tbaa !38
  %360 = zext i16 %359 to i32
  store i32 %360, ptr %5, align 4, !tbaa !20
  store i32 0, ptr %4, align 4, !tbaa !20
  br label %361

361:                                              ; preds = %382, %356
  %362 = load i32, ptr %4, align 4, !tbaa !20
  %363 = load i32, ptr %5, align 4, !tbaa !20
  %364 = icmp slt i32 %362, %363
  br i1 %364, label %365, label %385

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

382:                                              ; preds = %365
  %383 = load i32, ptr %4, align 4, !tbaa !20
  %384 = add nsw i32 %383, 1
  store i32 %384, ptr %4, align 4, !tbaa !20
  br label %361, !llvm.loop !41

385:                                              ; preds = %361
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  br label %386

386:                                              ; preds = %385, %349
  br label %387

387:                                              ; preds = %386, %297
  br label %388

388:                                              ; preds = %387, %294
  br label %389

389:                                              ; preds = %388, %293
  br label %390

390:                                              ; preds = %389, %117, %111
  %391 = load ptr, ptr %2, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.png_struct_def, ptr %391, i32 0, i32 61
  %393 = load ptr, ptr %2, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.png_struct_def, ptr %393, i32 0, i32 60
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %392, ptr align 8 %394, i64 10, i1 false), !tbaa.struct !43
  %395 = load i32, ptr %3, align 4, !tbaa !20
  %396 = icmp eq i32 %395, 3
  br i1 %396, label %397, label %457

397:                                              ; preds = %390
  %398 = load ptr, ptr %2, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.png_struct_def, ptr %398, i32 0, i32 43
  %400 = load i16, ptr %399, align 2, !tbaa !38
  %401 = zext i16 %400 to i32
  %402 = icmp ne i32 %401, 0
  br i1 %402, label %403, label %457

403:                                              ; preds = %397
  %404 = load ptr, ptr %2, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.png_struct_def, ptr %404, i32 0, i32 67
  %406 = load float, ptr %405, align 8, !tbaa !45
  %407 = load ptr, ptr %2, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.png_struct_def, ptr %407, i32 0, i32 66
  %409 = load float, ptr %408, align 4, !tbaa !46
  %410 = fmul float %406, %409
  %411 = fpext float %410 to double
  %412 = fsub double %411, 1.000000e+00
  %413 = call double @llvm.fabs.f64(double %412)
  %414 = fcmp olt double %413, 5.000000e-02
  br i1 %414, label %415, label %457

415:                                              ; preds = %403
  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 %416

416:                                              ; preds = %445, %415
  %417 = load i32, ptr %6, align 4, !tbaa !20
  %418 = load ptr, ptr %2, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.png_struct_def, ptr %418, i32 0, i32 43
  %420 = load i16, ptr %419, align 2, !tbaa !38
  %421 = zext i16 %420 to i32
  %422 = icmp slt i32 %417, %421
  br i1 %422, label %423, label %448

423:                                              ; preds = %416
  %424 = load ptr, ptr %2, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.png_struct_def, ptr %424, i32 0, i32 76
  %426 = load ptr, ptr %425, align 8, !tbaa !39
  %427 = load i32, ptr %6, align 4, !tbaa !20
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds i8, ptr %426, i64 %428
  %430 = load i8, ptr %429, align 1, !tbaa !40
  %431 = zext i8 %430 to i32
  %432 = icmp ne i32 %431, 0
  br i1 %432, label %433, label %444

433:                                              ; preds = %423
  %434 = load ptr, ptr %2, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.png_struct_def, ptr %434, i32 0, i32 76
  %436 = load ptr, ptr %435, align 8, !tbaa !39
  %437 = load i32, ptr %6, align 4, !tbaa !20
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds i8, ptr %436, i64 %438
  %440 = load i8, ptr %439, align 1, !tbaa !40
  %441 = zext i8 %440 to i32
  %442 = icmp ne i32 %441, 255
  br i1 %442, label %443, label %444

443:                                              ; preds = %433
  store i32 1, ptr %7, align 4, !tbaa !20
  br label %444

444:                                              ; preds = %443, %433, %423
  br label %445

445:                                              ; preds = %444
  %446 = load i32, ptr %6, align 4, !tbaa !20
  %447 = add nsw i32 %446, 1
  store i32 %447, ptr %6, align 4, !tbaa !20
  br label %416, !llvm.loop !47

448:                                              ; preds = %416
  %449 = load i32, ptr %7, align 4, !tbaa !20
  %450 = icmp eq i32 %449, 0
  br i1 %450, label %451, label %456

451:                                              ; preds = %448
  %452 = load ptr, ptr %2, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.png_struct_def, ptr %452, i32 0, i32 15
  %454 = load i32, ptr %453, align 4, !tbaa !21
  %455 = and i32 %454, -8193
  store i32 %455, ptr %453, align 4, !tbaa !21
  br label %456

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

457:                                              ; preds = %456, %403, %397, %390
  %458 = load ptr, ptr %2, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.png_struct_def, ptr %458, i32 0, i32 15
  %460 = load i32, ptr %459, align 4, !tbaa !21
  %461 = zext i32 %460 to i64
  %462 = and i64 %461, 6299648
  %463 = icmp ne i64 %462, 0
  br i1 %463, label %464, label %1311

464:                                              ; preds = %457
  %465 = load ptr, ptr %2, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.png_struct_def, ptr %465, i32 0, i32 66
  %467 = load float, ptr %466, align 4, !tbaa !46
  %468 = fpext float %467 to double
  %469 = fcmp une double %468, 0.000000e+00
  br i1 %469, label %470, label %1311

470:                                              ; preds = %464
  %471 = load ptr, ptr %2, align 8, !tbaa !5
  %472 = load ptr, ptr %2, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.png_struct_def, ptr %472, i32 0, i32 51
  %474 = load i8, ptr %473, align 1, !tbaa !27
  call void @png_build_gamma_table(ptr noundef %471, i8 noundef zeroext %474)
  %475 = load ptr, ptr %2, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.png_struct_def, ptr %475, i32 0, i32 15
  %477 = load i32, ptr %476, align 4, !tbaa !21
  %478 = and i32 %477, 128
  %479 = icmp ne i32 %478, 0
  br i1 %479, label %480, label %1234

480:                                              ; preds = %470
  %481 = load i32, ptr %3, align 4, !tbaa !20
  %482 = icmp eq i32 %481, 3
  br i1 %482, label %483, label %1001

483:                                              ; preds = %480
  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
  %484 = load ptr, ptr %2, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.png_struct_def, ptr %484, i32 0, i32 41
  %486 = load ptr, ptr %485, align 8, !tbaa !32
  store ptr %486, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %487 = load ptr, ptr %2, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.png_struct_def, ptr %487, i32 0, i32 42
  %489 = load i16, ptr %488, align 8, !tbaa !48
  %490 = zext i16 %489 to i32
  store i32 %490, ptr %11, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %491 = load ptr, ptr %2, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.png_struct_def, ptr %491, i32 0, i32 58
  %493 = load i8, ptr %492, align 8, !tbaa !49
  %494 = zext i8 %493 to i32
  %495 = icmp eq i32 %494, 2
  br i1 %495, label %496, label %563

496:                                              ; preds = %483
  %497 = load ptr, ptr %2, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.png_struct_def, ptr %497, i32 0, i32 68
  %499 = load ptr, ptr %498, align 8, !tbaa !50
  %500 = load ptr, ptr %2, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.png_struct_def, ptr %500, i32 0, i32 60
  %502 = getelementptr inbounds %struct.png_color_16_struct, ptr %501, i32 0, i32 1
  %503 = load i16, ptr %502, align 2, !tbaa !23
  %504 = zext i16 %503 to i64
  %505 = getelementptr inbounds i8, ptr %499, i64 %504
  %506 = load i8, ptr %505, align 1, !tbaa !40
  %507 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 0
  store i8 %506, ptr %507, align 1, !tbaa !34
  %508 = load ptr, ptr %2, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.png_struct_def, ptr %508, i32 0, i32 68
  %510 = load ptr, ptr %509, align 8, !tbaa !50
  %511 = load ptr, ptr %2, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.png_struct_def, ptr %511, i32 0, i32 60
  %513 = getelementptr inbounds %struct.png_color_16_struct, ptr %512, i32 0, i32 2
  %514 = load i16, ptr %513, align 4, !tbaa !24
  %515 = zext i16 %514 to i64
  %516 = getelementptr inbounds i8, ptr %510, i64 %515
  %517 = load i8, ptr %516, align 1, !tbaa !40
  %518 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 1
  store i8 %517, ptr %518, align 1, !tbaa !36
  %519 = load ptr, ptr %2, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.png_struct_def, ptr %519, i32 0, i32 68
  %521 = load ptr, ptr %520, align 8, !tbaa !50
  %522 = load ptr, ptr %2, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.png_struct_def, ptr %522, i32 0, i32 60
  %524 = getelementptr inbounds %struct.png_color_16_struct, ptr %523, i32 0, i32 3
  %525 = load i16, ptr %524, align 2, !tbaa !25
  %526 = zext i16 %525 to i64
  %527 = getelementptr inbounds i8, ptr %521, i64 %526
  %528 = load i8, ptr %527, align 1, !tbaa !40
  %529 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 2
  store i8 %528, ptr %529, align 1, !tbaa !37
  %530 = load ptr, ptr %2, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.png_struct_def, ptr %530, i32 0, i32 70
  %532 = load ptr, ptr %531, align 8, !tbaa !51
  %533 = load ptr, ptr %2, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.png_struct_def, ptr %533, i32 0, i32 60
  %535 = getelementptr inbounds %struct.png_color_16_struct, ptr %534, i32 0, i32 1
  %536 = load i16, ptr %535, align 2, !tbaa !23
  %537 = zext i16 %536 to i64
  %538 = getelementptr inbounds i8, ptr %532, i64 %537
  %539 = load i8, ptr %538, align 1, !tbaa !40
  %540 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 0
  store i8 %539, ptr %540, align 1, !tbaa !34
  %541 = load ptr, ptr %2, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.png_struct_def, ptr %541, i32 0, i32 70
  %543 = load ptr, ptr %542, align 8, !tbaa !51
  %544 = load ptr, ptr %2, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.png_struct_def, ptr %544, i32 0, i32 60
  %546 = getelementptr inbounds %struct.png_color_16_struct, ptr %545, i32 0, i32 2
  %547 = load i16, ptr %546, align 4, !tbaa !24
  %548 = zext i16 %547 to i64
  %549 = getelementptr inbounds i8, ptr %543, i64 %548
  %550 = load i8, ptr %549, align 1, !tbaa !40
  %551 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 1
  store i8 %550, ptr %551, align 1, !tbaa !36
  %552 = load ptr, ptr %2, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.png_struct_def, ptr %552, i32 0, i32 70
  %554 = load ptr, ptr %553, align 8, !tbaa !51
  %555 = load ptr, ptr %2, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.png_struct_def, ptr %555, i32 0, i32 60
  %557 = getelementptr inbounds %struct.png_color_16_struct, ptr %556, i32 0, i32 3
  %558 = load i16, ptr %557, align 2, !tbaa !25
  %559 = zext i16 %558 to i64
  %560 = getelementptr inbounds i8, ptr %554, i64 %559
  %561 = load i8, ptr %560, align 1, !tbaa !40
  %562 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 2
  store i8 %561, ptr %562, align 1, !tbaa !37
  br label %696

563:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %564 = load ptr, ptr %2, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.png_struct_def, ptr %564, i32 0, i32 58
  %566 = load i8, ptr %565, align 8, !tbaa !49
  %567 = zext i8 %566 to i32
  switch i32 %567, label %603 [
    i32 1, label %568
    i32 2, label %573
    i32 3, label %588
  ]

568:                                              ; preds = %563
  %569 = load ptr, ptr %2, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.png_struct_def, ptr %569, i32 0, i32 67
  %571 = load float, ptr %570, align 8, !tbaa !45
  %572 = fpext float %571 to double
  store double %572, ptr %13, align 8, !tbaa !52
  store double 1.000000e+00, ptr %14, align 8, !tbaa !52
  br label %604

573:                                              ; preds = %563
  %574 = load ptr, ptr %2, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.png_struct_def, ptr %574, i32 0, i32 66
  %576 = load float, ptr %575, align 4, !tbaa !46
  %577 = fpext float %576 to double
  %578 = fdiv double 1.000000e+00, %577
  store double %578, ptr %13, align 8, !tbaa !52
  %579 = load ptr, ptr %2, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.png_struct_def, ptr %579, i32 0, i32 66
  %581 = load float, ptr %580, align 4, !tbaa !46
  %582 = load ptr, ptr %2, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.png_struct_def, ptr %582, i32 0, i32 67
  %584 = load float, ptr %583, align 8, !tbaa !45
  %585 = fmul float %581, %584
  %586 = fpext float %585 to double
  %587 = fdiv double 1.000000e+00, %586
  store double %587, ptr %14, align 8, !tbaa !52
  br label %604

588:                                              ; preds = %563
  %589 = load ptr, ptr %2, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.png_struct_def, ptr %589, i32 0, i32 59
  %591 = load float, ptr %590, align 4, !tbaa !54
  %592 = fpext float %591 to double
  %593 = fdiv double 1.000000e+00, %592
  store double %593, ptr %13, align 8, !tbaa !52
  %594 = load ptr, ptr %2, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.png_struct_def, ptr %594, i32 0, i32 59
  %596 = load float, ptr %595, align 4, !tbaa !54
  %597 = load ptr, ptr %2, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.png_struct_def, ptr %597, i32 0, i32 67
  %599 = load float, ptr %598, align 8, !tbaa !45
  %600 = fmul float %596, %599
  %601 = fpext float %600 to double
  %602 = fdiv double 1.000000e+00, %601
  store double %602, ptr %14, align 8, !tbaa !52
  br label %604

603:                                              ; preds = %563
  store double 1.000000e+00, ptr %13, align 8, !tbaa !52
  store double 1.000000e+00, ptr %14, align 8, !tbaa !52
  br label %604

604:                                              ; preds = %603, %588, %573, %568
  %605 = load double, ptr %14, align 8, !tbaa !52
  %606 = fsub double %605, 1.000000e+00
  %607 = call double @llvm.fabs.f64(double %606)
  %608 = fcmp olt double %607, 5.000000e-02
  br i1 %608, label %609, label %628

609:                                              ; preds = %604
  %610 = load ptr, ptr %2, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.png_struct_def, ptr %610, i32 0, i32 60
  %612 = getelementptr inbounds %struct.png_color_16_struct, ptr %611, i32 0, i32 1
  %613 = load i16, ptr %612, align 2, !tbaa !23
  %614 = trunc i16 %613 to i8
  %615 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 0
  store i8 %614, ptr %615, align 1, !tbaa !34
  %616 = load ptr, ptr %2, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.png_struct_def, ptr %616, i32 0, i32 60
  %618 = getelementptr inbounds %struct.png_color_16_struct, ptr %617, i32 0, i32 2
  %619 = load i16, ptr %618, align 4, !tbaa !24
  %620 = trunc i16 %619 to i8
  %621 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 1
  store i8 %620, ptr %621, align 1, !tbaa !36
  %622 = load ptr, ptr %2, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.png_struct_def, ptr %622, i32 0, i32 60
  %624 = getelementptr inbounds %struct.png_color_16_struct, ptr %623, i32 0, i32 3
  %625 = load i16, ptr %624, align 2, !tbaa !25
  %626 = trunc i16 %625 to i8
  %627 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 2
  store i8 %626, ptr %627, align 1, !tbaa !37
  br label %662

628:                                              ; preds = %604
  %629 = load ptr, ptr %2, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.png_struct_def, ptr %629, i32 0, i32 60
  %631 = getelementptr inbounds %struct.png_color_16_struct, ptr %630, i32 0, i32 1
  %632 = load i16, ptr %631, align 2, !tbaa !23
  %633 = uitofp i16 %632 to double
  %634 = fdiv double %633, 2.550000e+02
  %635 = load double, ptr %14, align 8, !tbaa !52
  %636 = call double @pow(double noundef %634, double noundef %635) #5
  %637 = call double @llvm.fmuladd.f64(double %636, double 2.550000e+02, double 5.000000e-01)
  %638 = fptoui double %637 to i8
  %639 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 0
  store i8 %638, ptr %639, align 1, !tbaa !34
  %640 = load ptr, ptr %2, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.png_struct_def, ptr %640, i32 0, i32 60
  %642 = getelementptr inbounds %struct.png_color_16_struct, ptr %641, i32 0, i32 2
  %643 = load i16, ptr %642, align 4, !tbaa !24
  %644 = uitofp i16 %643 to double
  %645 = fdiv double %644, 2.550000e+02
  %646 = load double, ptr %14, align 8, !tbaa !52
  %647 = call double @pow(double noundef %645, double noundef %646) #5
  %648 = call double @llvm.fmuladd.f64(double %647, double 2.550000e+02, double 5.000000e-01)
  %649 = fptoui double %648 to i8
  %650 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 1
  store i8 %649, ptr %650, align 1, !tbaa !36
  %651 = load ptr, ptr %2, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.png_struct_def, ptr %651, i32 0, i32 60
  %653 = getelementptr inbounds %struct.png_color_16_struct, ptr %652, i32 0, i32 3
  %654 = load i16, ptr %653, align 2, !tbaa !25
  %655 = uitofp i16 %654 to double
  %656 = fdiv double %655, 2.550000e+02
  %657 = load double, ptr %14, align 8, !tbaa !52
  %658 = call double @pow(double noundef %656, double noundef %657) #5
  %659 = call double @llvm.fmuladd.f64(double %658, double 2.550000e+02, double 5.000000e-01)
  %660 = fptoui double %659 to i8
  %661 = getelementptr inbounds %struct.png_color_struct, ptr %8, i32 0, i32 2
  store i8 %660, ptr %661, align 1, !tbaa !37
  br label %662

662:                                              ; preds = %628, %609
  %663 = load ptr, ptr %2, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.png_struct_def, ptr %663, i32 0, i32 60
  %665 = getelementptr inbounds %struct.png_color_16_struct, ptr %664, i32 0, i32 1
  %666 = load i16, ptr %665, align 2, !tbaa !23
  %667 = uitofp i16 %666 to double
  %668 = fdiv double %667, 2.550000e+02
  %669 = load double, ptr %13, align 8, !tbaa !52
  %670 = call double @pow(double noundef %668, double noundef %669) #5
  %671 = call double @llvm.fmuladd.f64(double %670, double 2.550000e+02, double 5.000000e-01)
  %672 = fptoui double %671 to i8
  %673 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 0
  store i8 %672, ptr %673, align 1, !tbaa !34
  %674 = load ptr, ptr %2, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.png_struct_def, ptr %674, i32 0, i32 60
  %676 = getelementptr inbounds %struct.png_color_16_struct, ptr %675, i32 0, i32 2
  %677 = load i16, ptr %676, align 4, !tbaa !24
  %678 = uitofp i16 %677 to double
  %679 = fdiv double %678, 2.550000e+02
  %680 = load double, ptr %13, align 8, !tbaa !52
  %681 = call double @pow(double noundef %679, double noundef %680) #5
  %682 = call double @llvm.fmuladd.f64(double %681, double 2.550000e+02, double 5.000000e-01)
  %683 = fptoui double %682 to i8
  %684 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 1
  store i8 %683, ptr %684, align 1, !tbaa !36
  %685 = load ptr, ptr %2, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.png_struct_def, ptr %685, i32 0, i32 60
  %687 = getelementptr inbounds %struct.png_color_16_struct, ptr %686, i32 0, i32 3
  %688 = load i16, ptr %687, align 2, !tbaa !25
  %689 = uitofp i16 %688 to double
  %690 = fdiv double %689, 2.550000e+02
  %691 = load double, ptr %13, align 8, !tbaa !52
  %692 = call double @pow(double noundef %690, double noundef %691) #5
  %693 = call double @llvm.fmuladd.f64(double %692, double 2.550000e+02, double 5.000000e-01)
  %694 = fptoui double %693 to i8
  %695 = getelementptr inbounds %struct.png_color_struct, ptr %9, i32 0, i32 2
  store i8 %694, ptr %695, 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 %696

696:                                              ; preds = %662, %496
  store i32 0, ptr %12, align 4, !tbaa !20
  br label %697

697:                                              ; preds = %983, %696
  %698 = load i32, ptr %12, align 4, !tbaa !20
  %699 = load i32, ptr %11, align 4, !tbaa !20
  %700 = icmp slt i32 %698, %699
  br i1 %700, label %701, label %986

701:                                              ; preds = %697
  %702 = load i32, ptr %12, align 4, !tbaa !20
  %703 = load ptr, ptr %2, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.png_struct_def, ptr %703, i32 0, i32 43
  %705 = load i16, ptr %704, align 2, !tbaa !38
  %706 = zext i16 %705 to i32
  %707 = icmp slt i32 %702, %706
  br i1 %707, label %708, label %930

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

718:                                              ; preds = %708
  %719 = load ptr, ptr %2, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.png_struct_def, ptr %719, i32 0, i32 76
  %721 = load ptr, ptr %720, align 8, !tbaa !39
  %722 = load i32, ptr %12, align 4, !tbaa !20
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i8, ptr %721, i64 %723
  %725 = load i8, ptr %724, align 1, !tbaa !40
  %726 = zext i8 %725 to i32
  %727 = icmp eq i32 %726, 0
  br i1 %727, label %728, label %733

728:                                              ; preds = %718
  %729 = load ptr, ptr %10, align 8, !tbaa !5
  %730 = load i32, ptr %12, align 4, !tbaa !20
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds %struct.png_color_struct, ptr %729, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %732, ptr align 1 %8, i64 3, i1 false), !tbaa.struct !55
  br label %929

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

929:                                              ; preds = %733, %728
  br label %982

930:                                              ; preds = %708, %701
  %931 = load ptr, ptr %2, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.png_struct_def, ptr %931, i32 0, i32 68
  %933 = load ptr, ptr %932, align 8, !tbaa !50
  %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
  %939 = load i8, ptr %938, align 1, !tbaa !34
  %940 = zext i8 %939 to i64
  %941 = getelementptr inbounds i8, ptr %933, i64 %940
  %942 = load i8, ptr %941, align 1, !tbaa !40
  %943 = load ptr, ptr %10, align 8, !tbaa !5
  %944 = load i32, ptr %12, align 4, !tbaa !20
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds %struct.png_color_struct, ptr %943, i64 %945
  %947 = getelementptr inbounds %struct.png_color_struct, ptr %946, i32 0, i32 0
  store i8 %942, ptr %947, align 1, !tbaa !34
  %948 = load ptr, ptr %2, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.png_struct_def, ptr %948, i32 0, i32 68
  %950 = load ptr, ptr %949, align 8, !tbaa !50
  %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
  %956 = load i8, ptr %955, align 1, !tbaa !36
  %957 = zext i8 %956 to i64
  %958 = getelementptr inbounds i8, ptr %950, i64 %957
  %959 = load i8, ptr %958, align 1, !tbaa !40
  %960 = load ptr, ptr %10, align 8, !tbaa !5
  %961 = load i32, ptr %12, align 4, !tbaa !20
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds %struct.png_color_struct, ptr %960, i64 %962
  %964 = getelementptr inbounds %struct.png_color_struct, ptr %963, i32 0, i32 1
  store i8 %959, ptr %964, align 1, !tbaa !36
  %965 = load ptr, ptr %2, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.png_struct_def, ptr %965, i32 0, i32 68
  %967 = load ptr, ptr %966, align 8, !tbaa !50
  %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
  %973 = load i8, ptr %972, align 1, !tbaa !37
  %974 = zext i8 %973 to i64
  %975 = getelementptr inbounds i8, ptr %967, i64 %974
  %976 = load i8, ptr %975, align 1, !tbaa !40
  %977 = load ptr, ptr %10, align 8, !tbaa !5
  %978 = load i32, ptr %12, align 4, !tbaa !20
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds %struct.png_color_struct, ptr %977, i64 %979
  %981 = getelementptr inbounds %struct.png_color_struct, ptr %980, i32 0, i32 2
  store i8 %976, ptr %981, align 1, !tbaa !37
  br label %982

982:                                              ; preds = %930, %929
  br label %983

983:                                              ; preds = %982
  %984 = load i32, ptr %12, align 4, !tbaa !20
  %985 = add nsw i32 %984, 1
  store i32 %985, ptr %12, align 4, !tbaa !20
  br label %697, !llvm.loop !57

986:                                              ; preds = %697
  %987 = load ptr, ptr %2, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.png_struct_def, ptr %987, i32 0, i32 15
  %989 = load i32, ptr %988, align 4, !tbaa !21
  %990 = and i32 %989, -129
  store i32 %990, ptr %988, align 4, !tbaa !21
  %991 = load ptr, ptr %2, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.png_struct_def, ptr %991, i32 0, i32 15
  %993 = load i32, ptr %992, align 4, !tbaa !21
  %994 = and i32 %993, -8193
  store i32 %994, ptr %992, align 4, !tbaa !21
  %995 = load ptr, ptr %2, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.png_struct_def, ptr %995, i32 0, i32 15
  %997 = load i32, ptr %996, align 4, !tbaa !21
  %998 = zext i32 %997 to i64
  %999 = or i64 %998, 262144
  %1000 = trunc i64 %999 to i32
  store i32 %1000, ptr %996, align 4, !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 %1233

1001:                                             ; preds = %480
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %1002 = load ptr, ptr %2, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.png_struct_def, ptr %1002, i32 0, i32 51
  %1004 = load i8, ptr %1003, align 1, !tbaa !27
  %1005 = zext i8 %1004 to i32
  %1006 = shl i32 1, %1005
  %1007 = sub i32 %1006, 1
  %1008 = uitofp i32 %1007 to double
  store double %1008, 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
  %1009 = load ptr, ptr %2, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.png_struct_def, ptr %1009, i32 0, i32 58
  %1011 = load i8, ptr %1010, align 8, !tbaa !49
  %1012 = zext i8 %1011 to i32
  switch i32 %1012, label %1048 [
    i32 1, label %1013
    i32 2, label %1018
    i32 3, label %1033
  ]

1013:                                             ; preds = %1001
  %1014 = load ptr, ptr %2, align 8, !tbaa !5
  %1015 = getelementptr inbounds %struct.png_struct_def, ptr %1014, i32 0, i32 67
  %1016 = load float, ptr %1015, align 8, !tbaa !45
  %1017 = fpext float %1016 to double
  store double %1017, ptr %21, align 8, !tbaa !52
  store double 1.000000e+00, ptr %22, align 8, !tbaa !52
  br label %1048

1018:                                             ; preds = %1001
  %1019 = load ptr, ptr %2, align 8, !tbaa !5
  %1020 = getelementptr inbounds %struct.png_struct_def, ptr %1019, i32 0, i32 66
  %1021 = load float, ptr %1020, align 4, !tbaa !46
  %1022 = fpext float %1021 to double
  %1023 = fdiv double 1.000000e+00, %1022
  store double %1023, ptr %21, align 8, !tbaa !52
  %1024 = load ptr, ptr %2, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.png_struct_def, ptr %1024, i32 0, i32 66
  %1026 = load float, ptr %1025, align 4, !tbaa !46
  %1027 = load ptr, ptr %2, align 8, !tbaa !5
  %1028 = getelementptr inbounds %struct.png_struct_def, ptr %1027, i32 0, i32 67
  %1029 = load float, ptr %1028, align 8, !tbaa !45
  %1030 = fmul float %1026, %1029
  %1031 = fpext float %1030 to double
  %1032 = fdiv double 1.000000e+00, %1031
  store double %1032, ptr %22, align 8, !tbaa !52
  br label %1048

1033:                                             ; preds = %1001
  %1034 = load ptr, ptr %2, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.png_struct_def, ptr %1034, i32 0, i32 59
  %1036 = load float, ptr %1035, align 4, !tbaa !54
  %1037 = fpext float %1036 to double
  %1038 = fdiv double 1.000000e+00, %1037
  store double %1038, ptr %21, align 8, !tbaa !52
  %1039 = load ptr, ptr %2, align 8, !tbaa !5
  %1040 = getelementptr inbounds %struct.png_struct_def, ptr %1039, i32 0, i32 59
  %1041 = load float, ptr %1040, align 4, !tbaa !54
  %1042 = load ptr, ptr %2, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.png_struct_def, ptr %1042, i32 0, i32 67
  %1044 = load float, ptr %1043, align 8, !tbaa !45
  %1045 = fmul float %1041, %1044
  %1046 = fpext float %1045 to double
  %1047 = fdiv double 1.000000e+00, %1046
  store double %1047, ptr %22, align 8, !tbaa !52
  br label %1048

1048:                                             ; preds = %1033, %1018, %1013, %1001
  %1049 = load ptr, ptr %2, align 8, !tbaa !5
  %1050 = getelementptr inbounds %struct.png_struct_def, ptr %1049, i32 0, i32 60
  %1051 = getelementptr inbounds %struct.png_color_16_struct, ptr %1050, i32 0, i32 4
  %1052 = load i16, ptr %1051, align 8, !tbaa !26
  %1053 = uitofp i16 %1052 to double
  %1054 = load double, ptr %20, align 8, !tbaa !52
  %1055 = fdiv double %1053, %1054
  %1056 = load double, ptr %21, align 8, !tbaa !52
  %1057 = call double @pow(double noundef %1055, double noundef %1056) #5
  %1058 = load double, ptr %20, align 8, !tbaa !52
  %1059 = call double @llvm.fmuladd.f64(double %1057, double %1058, double 5.000000e-01)
  %1060 = fptoui double %1059 to i16
  %1061 = load ptr, ptr %2, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.png_struct_def, ptr %1061, i32 0, i32 61
  %1063 = getelementptr inbounds %struct.png_color_16_struct, ptr %1062, i32 0, i32 4
  store i16 %1060, ptr %1063, align 2, !tbaa !58
  %1064 = load ptr, ptr %2, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.png_struct_def, ptr %1064, i32 0, i32 60
  %1066 = getelementptr inbounds %struct.png_color_16_struct, ptr %1065, i32 0, i32 4
  %1067 = load i16, ptr %1066, align 8, !tbaa !26
  %1068 = uitofp i16 %1067 to double
  %1069 = load double, ptr %20, align 8, !tbaa !52
  %1070 = fdiv double %1068, %1069
  %1071 = load double, ptr %22, align 8, !tbaa !52
  %1072 = call double @pow(double noundef %1070, double noundef %1071) #5
  %1073 = load double, ptr %20, align 8, !tbaa !52
  %1074 = call double @llvm.fmuladd.f64(double %1072, double %1073, double 5.000000e-01)
  %1075 = fptoui double %1074 to i16
  %1076 = load ptr, ptr %2, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.png_struct_def, ptr %1076, i32 0, i32 60
  %1078 = getelementptr inbounds %struct.png_color_16_struct, ptr %1077, i32 0, i32 4
  store i16 %1075, ptr %1078, align 8, !tbaa !26
  %1079 = load ptr, ptr %2, align 8, !tbaa !5
  %1080 = getelementptr inbounds %struct.png_struct_def, ptr %1079, i32 0, i32 60
  %1081 = getelementptr inbounds %struct.png_color_16_struct, ptr %1080, i32 0, i32 1
  %1082 = load i16, ptr %1081, align 2, !tbaa !23
  %1083 = zext i16 %1082 to i32
  %1084 = load ptr, ptr %2, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.png_struct_def, ptr %1084, i32 0, i32 60
  %1086 = getelementptr inbounds %struct.png_color_16_struct, ptr %1085, i32 0, i32 2
  %1087 = load i16, ptr %1086, align 4, !tbaa !24
  %1088 = zext i16 %1087 to i32
  %1089 = icmp ne i32 %1083, %1088
  br i1 %1089, label %1114, label %1090

1090:                                             ; preds = %1048
  %1091 = load ptr, ptr %2, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.png_struct_def, ptr %1091, i32 0, i32 60
  %1093 = getelementptr inbounds %struct.png_color_16_struct, ptr %1092, i32 0, i32 1
  %1094 = load i16, ptr %1093, align 2, !tbaa !23
  %1095 = zext i16 %1094 to i32
  %1096 = load ptr, ptr %2, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.png_struct_def, ptr %1096, i32 0, i32 60
  %1098 = getelementptr inbounds %struct.png_color_16_struct, ptr %1097, i32 0, i32 3
  %1099 = load i16, ptr %1098, align 2, !tbaa !25
  %1100 = zext i16 %1099 to i32
  %1101 = icmp ne i32 %1095, %1100
  br i1 %1101, label %1114, label %1102

1102:                                             ; preds = %1090
  %1103 = load ptr, ptr %2, align 8, !tbaa !5
  %1104 = getelementptr inbounds %struct.png_struct_def, ptr %1103, i32 0, i32 60
  %1105 = getelementptr inbounds %struct.png_color_16_struct, ptr %1104, i32 0, i32 1
  %1106 = load i16, ptr %1105, align 2, !tbaa !23
  %1107 = zext i16 %1106 to i32
  %1108 = load ptr, ptr %2, align 8, !tbaa !5
  %1109 = getelementptr inbounds %struct.png_struct_def, ptr %1108, i32 0, i32 60
  %1110 = getelementptr inbounds %struct.png_color_16_struct, ptr %1109, i32 0, i32 4
  %1111 = load i16, ptr %1110, align 8, !tbaa !26
  %1112 = zext i16 %1111 to i32
  %1113 = icmp ne i32 %1107, %1112
  br i1 %1113, label %1114, label %1205

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

1205:                                             ; preds = %1102
  %1206 = load ptr, ptr %2, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.png_struct_def, ptr %1206, i32 0, i32 61
  %1208 = getelementptr inbounds %struct.png_color_16_struct, ptr %1207, i32 0, i32 4
  %1209 = load i16, ptr %1208, align 2, !tbaa !58
  %1210 = load ptr, ptr %2, align 8, !tbaa !5
  %1211 = getelementptr inbounds %struct.png_struct_def, ptr %1210, i32 0, i32 61
  %1212 = getelementptr inbounds %struct.png_color_16_struct, ptr %1211, i32 0, i32 3
  store i16 %1209, ptr %1212, align 2, !tbaa !61
  %1213 = load ptr, ptr %2, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.png_struct_def, ptr %1213, i32 0, i32 61
  %1215 = getelementptr inbounds %struct.png_color_16_struct, ptr %1214, i32 0, i32 2
  store i16 %1209, ptr %1215, align 2, !tbaa !60
  %1216 = load ptr, ptr %2, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.png_struct_def, ptr %1216, i32 0, i32 61
  %1218 = getelementptr inbounds %struct.png_color_16_struct, ptr %1217, i32 0, i32 1
  store i16 %1209, ptr %1218, align 2, !tbaa !59
  %1219 = load ptr, ptr %2, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.png_struct_def, ptr %1219, i32 0, i32 60
  %1221 = getelementptr inbounds %struct.png_color_16_struct, ptr %1220, i32 0, i32 4
  %1222 = load i16, ptr %1221, align 8, !tbaa !26
  %1223 = load ptr, ptr %2, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct.png_struct_def, ptr %1223, i32 0, i32 60
  %1225 = getelementptr inbounds %struct.png_color_16_struct, ptr %1224, i32 0, i32 3
  store i16 %1222, ptr %1225, align 2, !tbaa !25
  %1226 = load ptr, ptr %2, align 8, !tbaa !5
  %1227 = getelementptr inbounds %struct.png_struct_def, ptr %1226, i32 0, i32 60
  %1228 = getelementptr inbounds %struct.png_color_16_struct, ptr %1227, i32 0, i32 2
  store i16 %1222, ptr %1228, align 4, !tbaa !24
  %1229 = load ptr, ptr %2, align 8, !tbaa !5
  %1230 = getelementptr inbounds %struct.png_struct_def, ptr %1229, i32 0, i32 60
  %1231 = getelementptr inbounds %struct.png_color_16_struct, ptr %1230, i32 0, i32 1
  store i16 %1222, ptr %1231, align 2, !tbaa !23
  br label %1232

1232:                                             ; preds = %1205, %1114
  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 %1233

1233:                                             ; preds = %1232, %986
  br label %1310

1234:                                             ; preds = %470
  %1235 = load i32, ptr %3, align 4, !tbaa !20
  %1236 = icmp eq i32 %1235, 3
  br i1 %1236, label %1237, label %1309

1237:                                             ; preds = %1234
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %1238 = load ptr, ptr %2, align 8, !tbaa !5
  %1239 = getelementptr inbounds %struct.png_struct_def, ptr %1238, i32 0, i32 41
  %1240 = load ptr, ptr %1239, align 8, !tbaa !32
  store ptr %1240, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %1241 = load ptr, ptr %2, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct.png_struct_def, ptr %1241, i32 0, i32 42
  %1243 = load i16, ptr %1242, align 8, !tbaa !48
  %1244 = zext i16 %1243 to i32
  store i32 %1244, 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 %1245

1245:                                             ; preds = %1301, %1237
  %1246 = load i32, ptr %25, align 4, !tbaa !20
  %1247 = load i32, ptr %24, align 4, !tbaa !20
  %1248 = icmp slt i32 %1246, %1247
  br i1 %1248, label %1249, label %1304

1249:                                             ; preds = %1245
  %1250 = load ptr, ptr %2, align 8, !tbaa !5
  %1251 = getelementptr inbounds %struct.png_struct_def, ptr %1250, i32 0, i32 68
  %1252 = load ptr, ptr %1251, align 8, !tbaa !50
  %1253 = load ptr, ptr %23, align 8, !tbaa !5
  %1254 = load i32, ptr %25, align 4, !tbaa !20
  %1255 = sext i32 %1254 to i64
  %1256 = getelementptr inbounds %struct.png_color_struct, ptr %1253, i64 %1255
  %1257 = getelementptr inbounds %struct.png_color_struct, ptr %1256, i32 0, i32 0
  %1258 = load i8, ptr %1257, align 1, !tbaa !34
  %1259 = zext i8 %1258 to i64
  %1260 = getelementptr inbounds i8, ptr %1252, i64 %1259
  %1261 = load i8, ptr %1260, align 1, !tbaa !40
  %1262 = load ptr, ptr %23, align 8, !tbaa !5
  %1263 = load i32, ptr %25, align 4, !tbaa !20
  %1264 = sext i32 %1263 to i64
  %1265 = getelementptr inbounds %struct.png_color_struct, ptr %1262, i64 %1264
  %1266 = getelementptr inbounds %struct.png_color_struct, ptr %1265, i32 0, i32 0
  store i8 %1261, ptr %1266, align 1, !tbaa !34
  %1267 = load ptr, ptr %2, align 8, !tbaa !5
  %1268 = getelementptr inbounds %struct.png_struct_def, ptr %1267, i32 0, i32 68
  %1269 = load ptr, ptr %1268, align 8, !tbaa !50
  %1270 = load ptr, ptr %23, align 8, !tbaa !5
  %1271 = load i32, ptr %25, align 4, !tbaa !20
  %1272 = sext i32 %1271 to i64
  %1273 = getelementptr inbounds %struct.png_color_struct, ptr %1270, i64 %1272
  %1274 = getelementptr inbounds %struct.png_color_struct, ptr %1273, i32 0, i32 1
  %1275 = load i8, ptr %1274, align 1, !tbaa !36
  %1276 = zext i8 %1275 to i64
  %1277 = getelementptr inbounds i8, ptr %1269, i64 %1276
  %1278 = load i8, ptr %1277, align 1, !tbaa !40
  %1279 = load ptr, ptr %23, align 8, !tbaa !5
  %1280 = load i32, ptr %25, align 4, !tbaa !20
  %1281 = sext i32 %1280 to i64
  %1282 = getelementptr inbounds %struct.png_color_struct, ptr %1279, i64 %1281
  %1283 = getelementptr inbounds %struct.png_color_struct, ptr %1282, i32 0, i32 1
  store i8 %1278, ptr %1283, align 1, !tbaa !36
  %1284 = load ptr, ptr %2, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.png_struct_def, ptr %1284, i32 0, i32 68
  %1286 = load ptr, ptr %1285, align 8, !tbaa !50
  %1287 = load ptr, ptr %23, align 8, !tbaa !5
  %1288 = load i32, ptr %25, align 4, !tbaa !20
  %1289 = sext i32 %1288 to i64
  %1290 = getelementptr inbounds %struct.png_color_struct, ptr %1287, i64 %1289
  %1291 = getelementptr inbounds %struct.png_color_struct, ptr %1290, i32 0, i32 2
  %1292 = load i8, ptr %1291, align 1, !tbaa !37
  %1293 = zext i8 %1292 to i64
  %1294 = getelementptr inbounds i8, ptr %1286, i64 %1293
  %1295 = load i8, ptr %1294, align 1, !tbaa !40
  %1296 = load ptr, ptr %23, align 8, !tbaa !5
  %1297 = load i32, ptr %25, align 4, !tbaa !20
  %1298 = sext i32 %1297 to i64
  %1299 = getelementptr inbounds %struct.png_color_struct, ptr %1296, i64 %1298
  %1300 = getelementptr inbounds %struct.png_color_struct, ptr %1299, i32 0, i32 2
  store i8 %1295, ptr %1300, align 1, !tbaa !37
  br label %1301

1301:                                             ; preds = %1249
  %1302 = load i32, ptr %25, align 4, !tbaa !20
  %1303 = add nsw i32 %1302, 1
  store i32 %1303, ptr %25, align 4, !tbaa !20
  br label %1245, !llvm.loop !62

1304:                                             ; preds = %1245
  %1305 = load ptr, ptr %2, align 8, !tbaa !5
  %1306 = getelementptr inbounds %struct.png_struct_def, ptr %1305, i32 0, i32 15
  %1307 = load i32, ptr %1306, align 4, !tbaa !21
  %1308 = and i32 %1307, -8193
  store i32 %1308, ptr %1306, align 4, !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 %1309

1309:                                             ; preds = %1304, %1234
  br label %1310

1310:                                             ; preds = %1309, %1233
  br label %1546

1311:                                             ; preds = %464, %457
  %1312 = load ptr, ptr %2, align 8, !tbaa !5
  %1313 = getelementptr inbounds %struct.png_struct_def, ptr %1312, i32 0, i32 15
  %1314 = load i32, ptr %1313, align 4, !tbaa !21
  %1315 = and i32 %1314, 128
  %1316 = icmp ne i32 %1315, 0
  br i1 %1316, label %1317, label %1545

1317:                                             ; preds = %1311
  %1318 = load i32, ptr %3, align 4, !tbaa !20
  %1319 = icmp eq i32 %1318, 3
  br i1 %1319, label %1320, label %1545

1320:                                             ; preds = %1317
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %1321 = load ptr, ptr %2, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.png_struct_def, ptr %1321, i32 0, i32 43
  %1323 = load i16, ptr %1322, align 2, !tbaa !38
  %1324 = zext i16 %1323 to i32
  store i32 %1324, 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
  %1325 = load ptr, ptr %2, align 8, !tbaa !5
  %1326 = getelementptr inbounds %struct.png_struct_def, ptr %1325, i32 0, i32 41
  %1327 = load ptr, ptr %1326, align 8, !tbaa !32
  store ptr %1327, ptr %29, align 8, !tbaa !5
  %1328 = load ptr, ptr %2, align 8, !tbaa !5
  %1329 = getelementptr inbounds %struct.png_struct_def, ptr %1328, i32 0, i32 60
  %1330 = getelementptr inbounds %struct.png_color_16_struct, ptr %1329, i32 0, i32 1
  %1331 = load i16, ptr %1330, align 2, !tbaa !23
  %1332 = trunc i16 %1331 to i8
  %1333 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 0
  store i8 %1332, ptr %1333, align 1, !tbaa !34
  %1334 = load ptr, ptr %2, align 8, !tbaa !5
  %1335 = getelementptr inbounds %struct.png_struct_def, ptr %1334, i32 0, i32 60
  %1336 = getelementptr inbounds %struct.png_color_16_struct, ptr %1335, i32 0, i32 2
  %1337 = load i16, ptr %1336, align 4, !tbaa !24
  %1338 = trunc i16 %1337 to i8
  %1339 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 1
  store i8 %1338, ptr %1339, align 1, !tbaa !36
  %1340 = load ptr, ptr %2, align 8, !tbaa !5
  %1341 = getelementptr inbounds %struct.png_struct_def, ptr %1340, i32 0, i32 60
  %1342 = getelementptr inbounds %struct.png_color_16_struct, ptr %1341, i32 0, i32 3
  %1343 = load i16, ptr %1342, align 2, !tbaa !25
  %1344 = trunc i16 %1343 to i8
  %1345 = getelementptr inbounds %struct.png_color_struct, ptr %28, i32 0, i32 2
  store i8 %1344, ptr %1345, align 1, !tbaa !37
  store i32 0, ptr %26, align 4, !tbaa !20
  br label %1346

1346:                                             ; preds = %1531, %1320
  %1347 = load i32, ptr %26, align 4, !tbaa !20
  %1348 = load i32, ptr %27, align 4, !tbaa !20
  %1349 = icmp slt i32 %1347, %1348
  br i1 %1349, label %1350, label %1534

1350:                                             ; preds = %1346
  %1351 = load ptr, ptr %2, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.png_struct_def, ptr %1351, i32 0, i32 76
  %1353 = load ptr, ptr %1352, align 8, !tbaa !39
  %1354 = load i32, ptr %26, align 4, !tbaa !20
  %1355 = sext i32 %1354 to i64
  %1356 = getelementptr inbounds i8, ptr %1353, i64 %1355
  %1357 = load i8, ptr %1356, align 1, !tbaa !40
  %1358 = zext i8 %1357 to i32
  %1359 = icmp eq i32 %1358, 0
  br i1 %1359, label %1360, label %1365

1360:                                             ; preds = %1350
  %1361 = load ptr, ptr %29, align 8, !tbaa !5
  %1362 = load i32, ptr %26, align 4, !tbaa !20
  %1363 = sext i32 %1362 to i64
  %1364 = getelementptr inbounds %struct.png_color_struct, ptr %1361, i64 %1363
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1364, ptr align 1 %28, i64 3, i1 false), !tbaa.struct !55
  br label %1530

1365:                                             ; preds = %1350
  %1366 = load ptr, ptr %2, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.png_struct_def, ptr %1366, i32 0, i32 76
  %1368 = load ptr, ptr %1367, align 8, !tbaa !39
  %1369 = load i32, ptr %26, align 4, !tbaa !20
  %1370 = sext i32 %1369 to i64
  %1371 = getelementptr inbounds i8, ptr %1368, i64 %1370
  %1372 = load i8, ptr %1371, align 1, !tbaa !40
  %1373 = zext i8 %1372 to i32
  %1374 = icmp ne i32 %1373, 255
  br i1 %1374, label %1375, label %1529

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

1529:                                             ; preds = %1375, %1365
  br label %1530

1530:                                             ; preds = %1529, %1360
  br label %1531

1531:                                             ; preds = %1530
  %1532 = load i32, ptr %26, align 4, !tbaa !20
  %1533 = add nsw i32 %1532, 1
  store i32 %1533, ptr %26, align 4, !tbaa !20
  br label %1346, !llvm.loop !63

1534:                                             ; preds = %1346
  %1535 = load ptr, ptr %2, align 8, !tbaa !5
  %1536 = getelementptr inbounds %struct.png_struct_def, ptr %1535, i32 0, i32 15
  %1537 = load i32, ptr %1536, align 4, !tbaa !21
  %1538 = and i32 %1537, -129
  store i32 %1538, ptr %1536, align 4, !tbaa !21
  %1539 = load ptr, ptr %2, align 8, !tbaa !5
  %1540 = getelementptr inbounds %struct.png_struct_def, ptr %1539, i32 0, i32 15
  %1541 = load i32, ptr %1540, align 4, !tbaa !21
  %1542 = zext i32 %1541 to i64
  %1543 = or i64 %1542, 262144
  %1544 = trunc i64 %1543 to i32
  store i32 %1544, ptr %1540, align 4, !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 %1545

1545:                                             ; preds = %1534, %1317, %1311
  br label %1546

1546:                                             ; preds = %1545, %1310
  %1547 = load ptr, ptr %2, align 8, !tbaa !5
  %1548 = getelementptr inbounds %struct.png_struct_def, ptr %1547, i32 0, i32 15
  %1549 = load i32, ptr %1548, align 4, !tbaa !21
  %1550 = and i32 %1549, 8
  %1551 = icmp ne i32 %1550, 0
  br i1 %1551, label %1552, label %1645

1552:                                             ; preds = %1546
  %1553 = load i32, ptr %3, align 4, !tbaa !20
  %1554 = icmp eq i32 %1553, 3
  br i1 %1554, label %1555, label %1645

1555:                                             ; preds = %1552
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #5
  %1556 = load ptr, ptr %2, align 8, !tbaa !5
  %1557 = getelementptr inbounds %struct.png_struct_def, ptr %1556, i32 0, i32 42
  %1558 = load i16, ptr %1557, align 8, !tbaa !48
  store i16 %1558, ptr %34, align 2, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %1559 = load ptr, ptr %2, align 8, !tbaa !5
  %1560 = getelementptr inbounds %struct.png_struct_def, ptr %1559, i32 0, i32 74
  %1561 = getelementptr inbounds %struct.png_color_8_struct, ptr %1560, i32 0, i32 0
  %1562 = load i8, ptr %1561, align 8, !tbaa !64
  %1563 = zext i8 %1562 to i32
  %1564 = sub nsw i32 8, %1563
  store i32 %1564, ptr %35, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %1565 = load ptr, ptr %2, align 8, !tbaa !5
  %1566 = getelementptr inbounds %struct.png_struct_def, ptr %1565, i32 0, i32 74
  %1567 = getelementptr inbounds %struct.png_color_8_struct, ptr %1566, i32 0, i32 1
  %1568 = load i8, ptr %1567, align 1, !tbaa !65
  %1569 = zext i8 %1568 to i32
  %1570 = sub nsw i32 8, %1569
  store i32 %1570, ptr %36, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %1571 = load ptr, ptr %2, align 8, !tbaa !5
  %1572 = getelementptr inbounds %struct.png_struct_def, ptr %1571, i32 0, i32 74
  %1573 = getelementptr inbounds %struct.png_color_8_struct, ptr %1572, i32 0, i32 2
  %1574 = load i8, ptr %1573, align 2, !tbaa !66
  %1575 = zext i8 %1574 to i32
  %1576 = sub nsw i32 8, %1575
  store i32 %1576, ptr %37, align 4, !tbaa !20
  %1577 = load i32, ptr %35, align 4, !tbaa !20
  %1578 = icmp slt i32 %1577, 0
  br i1 %1578, label %1582, label %1579

1579:                                             ; preds = %1555
  %1580 = load i32, ptr %35, align 4, !tbaa !20
  %1581 = icmp sgt i32 %1580, 8
  br i1 %1581, label %1582, label %1583

1582:                                             ; preds = %1579, %1555
  store i32 0, ptr %35, align 4, !tbaa !20
  br label %1583

1583:                                             ; preds = %1582, %1579
  %1584 = load i32, ptr %36, align 4, !tbaa !20
  %1585 = icmp slt i32 %1584, 0
  br i1 %1585, label %1589, label %1586

1586:                                             ; preds = %1583
  %1587 = load i32, ptr %36, align 4, !tbaa !20
  %1588 = icmp sgt i32 %1587, 8
  br i1 %1588, label %1589, label %1590

1589:                                             ; preds = %1586, %1583
  store i32 0, ptr %36, align 4, !tbaa !20
  br label %1590

1590:                                             ; preds = %1589, %1586
  %1591 = load i32, ptr %37, align 4, !tbaa !20
  %1592 = icmp slt i32 %1591, 0
  br i1 %1592, label %1596, label %1593

1593:                                             ; preds = %1590
  %1594 = load i32, ptr %37, align 4, !tbaa !20
  %1595 = icmp sgt i32 %1594, 8
  br i1 %1595, label %1596, label %1597

1596:                                             ; preds = %1593, %1590
  store i32 0, ptr %37, align 4, !tbaa !20
  br label %1597

1597:                                             ; preds = %1596, %1593
  store i16 0, ptr %33, align 2, !tbaa !44
  br label %1598

1598:                                             ; preds = %1641, %1597
  %1599 = load i16, ptr %33, align 2, !tbaa !44
  %1600 = zext i16 %1599 to i32
  %1601 = load i16, ptr %34, align 2, !tbaa !44
  %1602 = zext i16 %1601 to i32
  %1603 = icmp slt i32 %1600, %1602
  br i1 %1603, label %1604, label %1644

1604:                                             ; preds = %1598
  %1605 = load i32, ptr %35, 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 41
  %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 0
  %1613 = load i8, ptr %1612, align 1, !tbaa !34
  %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 !34
  %1617 = load i32, ptr %36, 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 41
  %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 1
  %1625 = load i8, ptr %1624, align 1, !tbaa !36
  %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 !36
  %1629 = load i32, ptr %37, align 4, !tbaa !20
  %1630 = load ptr, ptr %2, align 8, !tbaa !5
  %1631 = getelementptr inbounds %struct.png_struct_def, ptr %1630, i32 0, i32 41
  %1632 = load ptr, ptr %1631, align 8, !tbaa !32
  %1633 = load i16, ptr %33, align 2, !tbaa !44
  %1634 = zext i16 %1633 to i64
  %1635 = getelementptr inbounds %struct.png_color_struct, ptr %1632, i64 %1634
  %1636 = getelementptr inbounds %struct.png_color_struct, ptr %1635, i32 0, i32 2
  %1637 = load i8, ptr %1636, align 1, !tbaa !37
  %1638 = zext i8 %1637 to i32
  %1639 = ashr i32 %1638, %1629
  %1640 = trunc i32 %1639 to i8
  store i8 %1640, ptr %1636, align 1, !tbaa !37
  br label %1641

1641:                                             ; preds = %1604
  %1642 = load i16, ptr %33, align 2, !tbaa !44
  %1643 = add i16 %1642, 1
  store i16 %1643, ptr %33, align 2, !tbaa !44
  br label %1598, !llvm.loop !67

1644:                                             ; preds = %1598
  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 %1645

1645:                                             ; preds = %1644, %1552, %1546
  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, i8 noundef zeroext) #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 590}
!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, !6, i64 272, !7, i64 280, !7, i64 281, !11, i64 284, !11, i64 288, !11, i64 292, !12, i64 296, !6, i64 408, !13, i64 416, !11, i64 424, !11, i64 428, !11, i64 432, !11, i64 436, !11, i64 440, !11, i64 444, !11, i64 448, !11, i64 452, !11, i64 456, !13, i64 464, !13, i64 472, !11, i64 480, !11, i64 484, !6, i64 488, !6, i64 496, !6, i64 504, !6, i64 512, !6, i64 520, !6, i64 528, !14, i64 536, !11, i64 560, !11, i64 564, !6, i64 568, !15, i64 576, !15, i64 578, !7, i64 580, !7, i64 585, !7, i64 586, !7, i64 587, !7, i64 588, !7, i64 589, !7, i64 590, !7, i64 591, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !15, i64 598, !7, i64 600, !16, i64 604, !17, i64 608, !17, i64 618, !6, i64 632, !11, i64 640, !11, i64 644, !11, i64 648, !16, i64 652, !16, i64 656, !6, i64 664, !6, i64 672, !6, i64 680, !6, i64 688, !6, i64 696, !6, i64 704, !18, i64 712, !18, i64 717, !6, i64 728, !17, i64 736, !6, i64 752, !6, i64 760, !6, i64 768, !6, i64 776, !6, i64 784, !6, i64 792, !6, i64 800, !6, i64 808, !6, i64 816, !11, i64 824, !11, i64 828, !13, i64 832, !13, i64 840, !13, i64 848, !13, i64 856, !11, i64 864, !11, i64 868, !13, i64 872, !13, i64 880, !6, i64 888, !6, i64 896, !6, i64 904, !6, i64 912, !6, i64 920, !7, i64 928, !7, i64 929, !6, i64 936, !6, i64 944, !6, i64 952, !6, i64 960, !6, i64 968, !6, i64 976, !11, i64 984, !6, i64 992, !6, i64 1000, !11, i64 1008, !6, i64 1016, !7, i64 1024, !15, i64 1026, !15, i64 1028, !15, i64 1030, !11, i64 1032, !11, i64 1036, !7, i64 1040, !6, i64 1048, !6, i64 1056, !6, i64 1064, !6, i64 1072, !6, i64 1080, !6, i64 1088, !6, i64 1096, !7, i64 1104, !11, i64 1108, !11, i64 1112, !11, i64 1116, !19, i64 1120, !11, i64 1152, !11, i64 1156, !6, i64 1160, !11, i64 1168}
!11 = !{!"int", !7, i64 0}
!12 = !{!"z_stream_s", !6, i64 0, !11, i64 8, !13, i64 16, !6, i64 24, !11, i64 32, !13, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !11, i64 88, !13, i64 96, !13, i64 104}
!13 = !{!"long", !7, i64 0}
!14 = !{!"png_row_info_struct", !11, i64 0, !13, 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, !13, i64 16, !7, i64 24}
!20 = !{!11, !11, i64 0}
!21 = !{!10, !11, i64 292}
!22 = !{!10, !11, i64 284}
!23 = !{!10, !15, i64 610}
!24 = !{!10, !15, i64 612}
!25 = !{!10, !15, i64 614}
!26 = !{!10, !15, i64 616}
!27 = !{!10, !7, i64 591}
!28 = !{!10, !15, i64 744}
!29 = !{!10, !15, i64 742}
!30 = !{!10, !15, i64 740}
!31 = !{!10, !15, i64 738}
!32 = !{!10, !6, i64 568}
!33 = !{!10, !7, i64 608}
!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 578}
!39 = !{!10, !6, i64 728}
!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 656}
!46 = !{!10, !16, i64 652}
!47 = distinct !{!47, !42}
!48 = !{!10, !15, i64 576}
!49 = !{!10, !7, i64 600}
!50 = !{!10, !6, i64 664}
!51 = !{!10, !6, i64 680}
!52 = !{!53, !53, i64 0}
!53 = !{!"double", !7, i64 0}
!54 = !{!10, !16, i64 604}
!55 = !{i64 0, i64 1, !40, i64 1, i64 1, !40, i64 2, i64 1, !40}
!56 = !{!10, !6, i64 672}
!57 = distinct !{!57, !42}
!58 = !{!10, !15, i64 626}
!59 = !{!10, !15, i64 620}
!60 = !{!10, !15, i64 622}
!61 = !{!10, !15, i64 624}
!62 = distinct !{!62, !42}
!63 = distinct !{!63, !42}
!64 = !{!10, !7, i64 712}
!65 = !{!10, !7, i64 713}
!66 = !{!10, !7, i64 714}
!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 590
  %3 = load i8, ptr %2, align 2, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 292
  %5 = load i32, ptr %4, align 4, !tbaa !19
  %6 = and i32 %5, 256
  %.not = icmp ne i32 %6, 0
  %7 = and i8 %3, 2
  %.not392 = icmp eq i8 %7, 0
  %or.cond414 = select i1 %.not, i1 %.not392, i1 false
  br i1 %or.cond414, label %8, label %12

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

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

14:                                               ; preds = %12
  %15 = getelementptr inbounds i8, ptr %0, i64 610
  %16 = load i16, ptr %15, align 2, !tbaa !21
  %17 = getelementptr inbounds i8, ptr %0, i64 612
  %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 614
  %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 284
  %26 = load i32, ptr %25, align 4, !tbaa !20
  %27 = or i32 %26, 2048
  store i32 %27, ptr %25, align 4, !tbaa !20
  %28 = getelementptr inbounds i8, ptr %0, i64 616
  store i16 %16, ptr %28, align 8, !tbaa !24
  br label %.thread

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

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

32:                                               ; preds = %31
  %33 = getelementptr inbounds i8, ptr %0, i64 591
  %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 616
  %37 = load i16, ptr %36, align 8, !tbaa !24
  %38 = mul i16 %37, 255
  %39 = getelementptr inbounds i8, ptr %0, i64 610
  %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 i32 %5, 33554432
  %.not401 = icmp eq i32 %42, 0
  br i1 %.not401, label %43, label %.thread

43:                                               ; preds = %35
  %44 = getelementptr inbounds i8, ptr %0, i64 744
  %45 = load i16, ptr %44, align 8, !tbaa !27
  %46 = mul i16 %45, 255
  %47 = getelementptr inbounds i8, ptr %0, i64 738
  %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 616
  %52 = load i16, ptr %51, align 8, !tbaa !24
  %53 = mul i16 %52, 85
  %54 = getelementptr inbounds i8, ptr %0, i64 610
  %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 i32 %5, 33554432
  %.not400 = icmp eq i32 %57, 0
  br i1 %.not400, label %58, label %.thread

58:                                               ; preds = %50
  %59 = getelementptr inbounds i8, ptr %0, i64 744
  %60 = load i16, ptr %59, align 8, !tbaa !27
  %61 = mul i16 %60, 85
  %62 = getelementptr inbounds i8, ptr %0, i64 738
  %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 616
  %67 = load i16, ptr %66, align 8, !tbaa !24
  %68 = mul i16 %67, 17
  %69 = getelementptr inbounds i8, ptr %0, i64 610
  %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 i32 %5, 33554432
  %.not399 = icmp eq i32 %72, 0
  br i1 %.not399, label %73, label %.thread

73:                                               ; preds = %65
  %74 = getelementptr inbounds i8, ptr %0, i64 744
  %75 = load i16, ptr %74, align 8, !tbaa !27
  %76 = mul i16 %75, 17
  %77 = getelementptr inbounds i8, ptr %0, i64 738
  %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 616
  %82 = load i16, ptr %81, align 8, !tbaa !24
  %83 = getelementptr inbounds i8, ptr %0, i64 614
  store i16 %82, ptr %83, align 2, !tbaa !23
  %84 = getelementptr inbounds i8, ptr %0, i64 612
  store i16 %82, ptr %84, align 4, !tbaa !22
  %85 = getelementptr inbounds i8, ptr %0, i64 610
  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 %.thread424

.thread424:                                       ; preds = %86
  %88 = getelementptr inbounds i8, ptr %0, i64 618
  %89 = getelementptr inbounds i8, ptr %0, i64 608
  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 %.thread481

90:                                               ; preds = %86
  %91 = getelementptr inbounds i8, ptr %0, i64 568
  %92 = load ptr, ptr %91, align 8, !tbaa !30
  %93 = getelementptr inbounds i8, ptr %0, i64 608
  %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 610
  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 612
  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 614
  store i16 %106, ptr %107, align 2, !tbaa !23
  %108 = and i32 %5, 34078720
  %or.cond418 = icmp eq i32 %108, 524288
  br i1 %or.cond418, label %110, label %.thread423

.thread423:                                       ; preds = %90
  %109 = getelementptr inbounds i8, ptr %0, i64 618
  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 578
  %112 = load i16, ptr %111, align 2, !tbaa !36
  %.not444 = icmp eq i16 %112, 0
  br i1 %.not444, label %.thread.thread, label %.lr.ph

.thread.thread:                                   ; preds = %110
  %113 = getelementptr inbounds i8, ptr %0, i64 618
  %114 = getelementptr inbounds i8, ptr %0, i64 608
  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 728
  %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 618
  %139 = getelementptr inbounds i8, ptr %0, i64 608
  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 %.thread481

141:                                              ; preds = %.thread.thread, %.thread423, %.thread
  %142 = getelementptr inbounds i8, ptr %0, i64 578
  %143 = load i16, ptr %142, align 2, !tbaa !36
  %.not404 = icmp eq i16 %143, 0
  br i1 %.not404, label %.thread481, label %144

144:                                              ; preds = %141
  %145 = getelementptr inbounds i8, ptr %0, i64 656
  %146 = load float, ptr %145, align 8, !tbaa !42
  %147 = getelementptr inbounds i8, ptr %0, i64 652
  %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 %.thread481

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

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

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

160:                                              ; preds = %157, %157
  %indvars.iv.next451 = add nuw nsw i64 %indvars.iv450, 1
  %exitcond454.not = icmp eq i64 %indvars.iv.next451, %wide.trip.count453
  br i1 %exitcond454.not, label %161, label %157, !llvm.loop !44

.thread476:                                       ; preds = %157
  %indvars.iv.next451478 = add nuw nsw i64 %indvars.iv450, 1
  %exitcond454.not479 = icmp eq i64 %indvars.iv.next451478, %wide.trip.count453
  br i1 %exitcond454.not479, label %.thread481, label %.outer, !llvm.loop !44

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

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

.thread481:                                       ; preds = %.thread476, %.thread424, %161, %162, %144, %141, %.thread
  %165 = phi i1 [ true, %161 ], [ true, %162 ], [ true, %144 ], [ true, %141 ], [ false, %.thread ], [ false, %.thread424 ], [ true, %.thread476 ]
  %166 = load i32, ptr %4, align 4, !tbaa !19
  %167 = and i32 %166, 6299648
  %.not405 = icmp eq i32 %167, 0
  br i1 %.not405, label %546, label %168

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

172:                                              ; preds = %168
  %173 = getelementptr inbounds i8, ptr %0, i64 591
  %174 = load i8, ptr %173, align 1, !tbaa !25
  tail call void @png_build_gamma_table(ptr noundef nonnull %0, i8 noundef zeroext %174)
  %175 = load i32, ptr %4, align 4, !tbaa !19
  %176 = and i32 %175, 128
  %.not407 = icmp eq i32 %176, 0
  br i1 %.not407, label %490, label %177

177:                                              ; preds = %172
  br i1 %165, label %178, label %392

178:                                              ; preds = %177
  %179 = getelementptr inbounds i8, ptr %0, i64 568
  %180 = load ptr, ptr %179, align 8, !tbaa !30
  %181 = getelementptr inbounds i8, ptr %0, i64 576
  %182 = load i16, ptr %181, align 8, !tbaa !45
  %183 = getelementptr inbounds i8, ptr %0, i64 600
  %184 = load i8, ptr %183, align 8, !tbaa !46
  switch i8 %184, label %226 [
    i8 2, label %185
    i8 1, label %211
    i8 3, label %216
  ]

185:                                              ; preds = %178
  %186 = getelementptr inbounds i8, ptr %0, i64 664
  %187 = load ptr, ptr %186, align 8, !tbaa !47
  %188 = getelementptr inbounds i8, ptr %0, i64 610
  %189 = load i16, ptr %188, align 2, !tbaa !21
  %190 = zext i16 %189 to i64
  %191 = getelementptr inbounds i8, ptr %187, i64 %190
  %192 = load i8, ptr %191, align 1, !tbaa !29
  %193 = getelementptr inbounds i8, ptr %0, i64 612
  %194 = load i16, ptr %193, align 4, !tbaa !22
  %195 = zext i16 %194 to i64
  %196 = getelementptr inbounds i8, ptr %187, i64 %195
  %197 = load i8, ptr %196, align 1, !tbaa !29
  %198 = getelementptr inbounds i8, ptr %0, i64 614
  %199 = load i16, ptr %198, align 2, !tbaa !23
  %200 = zext i16 %199 to i64
  %201 = getelementptr inbounds i8, ptr %187, i64 %200
  %202 = load i8, ptr %201, align 1, !tbaa !29
  %203 = getelementptr inbounds i8, ptr %0, i64 680
  %204 = load ptr, ptr %203, align 8, !tbaa !48
  %205 = getelementptr inbounds i8, ptr %204, i64 %190
  %206 = load i8, ptr %205, align 1, !tbaa !29
  %207 = getelementptr inbounds i8, ptr %204, i64 %195
  %208 = load i8, ptr %207, align 1, !tbaa !29
  %209 = getelementptr inbounds i8, ptr %204, i64 %200
  %210 = load i8, ptr %209, align 1, !tbaa !29
  br label %284

211:                                              ; preds = %178
  %212 = getelementptr inbounds i8, ptr %0, i64 656
  %213 = load float, ptr %212, align 8, !tbaa !42
  %214 = fpext float %213 to double
  %215 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %214, i64 0
  br label %226

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

226:                                              ; preds = %178, %216, %211
  %227 = phi <2 x double> [ %225, %216 ], [ %215, %211 ], [ <double 1.000000e+00, double 1.000000e+00>, %178 ]
  %228 = extractelement <2 x double> %227, i64 1
  %229 = fadd double %228, -1.000000e+00
  %230 = tail call double @llvm.fabs.f64(double %229)
  %231 = fcmp olt double %230, 5.000000e-02
  %232 = getelementptr inbounds i8, ptr %0, i64 610
  %233 = load i16, ptr %232, align 2, !tbaa !21
  br i1 %231, label %234, label %242

234:                                              ; preds = %226
  %235 = trunc i16 %233 to i8
  %236 = getelementptr inbounds i8, ptr %0, i64 612
  %237 = load i16, ptr %236, align 4, !tbaa !22
  %238 = trunc i16 %237 to i8
  %239 = getelementptr inbounds i8, ptr %0, i64 614
  %240 = load i16, ptr %239, align 2, !tbaa !23
  %241 = trunc i16 %240 to i8
  br label %262

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

262:                                              ; preds = %242, %234
  %263 = phi i16 [ %233, %234 ], [ %.pre, %242 ]
  %.sroa.0154.0 = phi i8 [ %235, %234 ], [ %247, %242 ]
  %.sroa.6.0 = phi i8 [ %238, %234 ], [ %254, %242 ]
  %.sroa.9.0 = phi i8 [ %241, %234 ], [ %261, %242 ]
  %264 = uitofp i16 %263 to double
  %265 = fdiv double %264, 2.550000e+02
  %266 = extractelement <2 x double> %227, i64 0
  %267 = tail call double @pow(double noundef %265, double noundef %266) #4
  %268 = tail call double @llvm.fmuladd.f64(double %267, double 2.550000e+02, double 5.000000e-01)
  %269 = fptoui double %268 to i8
  %270 = getelementptr inbounds i8, ptr %0, i64 612
  %271 = load i16, ptr %270, align 4, !tbaa !22
  %272 = uitofp i16 %271 to double
  %273 = fdiv double %272, 2.550000e+02
  %274 = tail call double @pow(double noundef %273, double noundef %266) #4
  %275 = tail call double @llvm.fmuladd.f64(double %274, double 2.550000e+02, double 5.000000e-01)
  %276 = fptoui double %275 to i8
  %277 = getelementptr inbounds i8, ptr %0, i64 614
  %278 = load i16, ptr %277, align 2, !tbaa !23
  %279 = uitofp i16 %278 to double
  %280 = fdiv double %279, 2.550000e+02
  %281 = tail call double @pow(double noundef %280, double noundef %266) #4
  %282 = tail call double @llvm.fmuladd.f64(double %281, double 2.550000e+02, double 5.000000e-01)
  %283 = fptoui double %282 to i8
  br label %284

284:                                              ; preds = %262, %185
  %.sroa.0152.0 = phi i8 [ %206, %185 ], [ %269, %262 ]
  %.sroa.5153.0 = phi i8 [ %208, %185 ], [ %276, %262 ]
  %.sroa.8.0 = phi i8 [ %210, %185 ], [ %283, %262 ]
  %.sroa.0154.1 = phi i8 [ %192, %185 ], [ %.sroa.0154.0, %262 ]
  %.sroa.6.1 = phi i8 [ %197, %185 ], [ %.sroa.6.0, %262 ]
  %.sroa.9.1 = phi i8 [ %202, %185 ], [ %.sroa.9.0, %262 ]
  %.not445 = icmp eq i16 %182, 0
  br i1 %.not445, label %._crit_edge, label %.lr.ph432

.lr.ph432:                                        ; preds = %284
  %285 = getelementptr inbounds i8, ptr %0, i64 578
  %286 = getelementptr inbounds i8, ptr %0, i64 728
  %287 = getelementptr inbounds i8, ptr %0, i64 664
  %288 = getelementptr inbounds i8, ptr %0, i64 680
  %289 = zext i8 %.sroa.0152.0 to i32
  %290 = getelementptr inbounds i8, ptr %0, i64 672
  %291 = zext i8 %.sroa.5153.0 to i32
  %292 = zext i8 %.sroa.8.0 to i32
  %wide.trip.count458 = zext i16 %182 to i64
  br label %293

293:                                              ; preds = %.lr.ph432, %388
  %indvars.iv455 = phi i64 [ 0, %.lr.ph432 ], [ %indvars.iv.next456, %388 ]
  %294 = load i16, ptr %285, align 2, !tbaa !36
  %295 = zext i16 %294 to i64
  %296 = icmp ult i64 %indvars.iv455, %295
  br i1 %296, label %297, label %371

297:                                              ; preds = %293
  %298 = load ptr, ptr %286, align 8, !tbaa !37
  %299 = getelementptr inbounds i8, ptr %298, i64 %indvars.iv455
  %300 = load i8, ptr %299, align 1, !tbaa !29
  switch i8 %300, label %303 [
    i8 -1, label %371
    i8 0, label %301
  ]

301:                                              ; preds = %297
  %302 = getelementptr inbounds %struct.png_color_struct, ptr %180, i64 %indvars.iv455
  store i8 %.sroa.0154.1, ptr %302, align 1, !tbaa !29
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %302, 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 %302, i64 2
  store i8 %.sroa.9.1, ptr %.sroa.9.0..sroa_idx, align 1, !tbaa !29
  br label %388

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

371:                                              ; preds = %297, %293
  %372 = load ptr, ptr %287, align 8, !tbaa !47
  %373 = getelementptr inbounds %struct.png_color_struct, ptr %180, i64 %indvars.iv455
  %374 = load i8, ptr %373, align 1, !tbaa !32
  %375 = zext i8 %374 to i64
  %376 = getelementptr inbounds i8, ptr %372, i64 %375
  %377 = load i8, ptr %376, align 1, !tbaa !29
  store i8 %377, ptr %373, align 1, !tbaa !32
  %378 = getelementptr inbounds i8, ptr %373, i64 1
  %379 = load i8, ptr %378, align 1, !tbaa !34
  %380 = zext i8 %379 to i64
  %381 = getelementptr inbounds i8, ptr %372, i64 %380
  %382 = load i8, ptr %381, align 1, !tbaa !29
  store i8 %382, ptr %378, align 1, !tbaa !34
  %383 = getelementptr inbounds i8, ptr %373, i64 2
  %384 = load i8, ptr %383, align 1, !tbaa !35
  %385 = zext i8 %384 to i64
  %386 = getelementptr inbounds i8, ptr %372, i64 %385
  %387 = load i8, ptr %386, align 1, !tbaa !29
  store i8 %387, ptr %383, align 1, !tbaa !35
  br label %388

388:                                              ; preds = %371, %303, %301
  %indvars.iv.next456 = add nuw nsw i64 %indvars.iv455, 1
  %exitcond459.not = icmp eq i64 %indvars.iv.next456, %wide.trip.count458
  br i1 %exitcond459.not, label %._crit_edge, label %293, !llvm.loop !51

._crit_edge:                                      ; preds = %388, %284
  %389 = load i32, ptr %4, align 4, !tbaa !19
  %390 = and i32 %389, -270465
  %391 = or disjoint i32 %390, 262144
  br label %.sink.split

392:                                              ; preds = %177
  %393 = load i8, ptr %173, align 1, !tbaa !25
  %394 = zext nneg i8 %393 to i32
  %notmask = shl nsw i32 -1, %394
  %395 = xor i32 %notmask, -1
  %396 = uitofp nneg i32 %395 to double
  %397 = getelementptr inbounds i8, ptr %0, i64 600
  %398 = load i8, ptr %397, align 8, !tbaa !46
  switch i8 %398, label %420 [
    i8 1, label %399
    i8 2, label %404
    i8 3, label %410
  ]

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

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

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

420:                                              ; preds = %410, %404, %399, %392
  %421 = phi <2 x double> [ <double 1.000000e+00, double 1.000000e+00>, %392 ], [ %419, %410 ], [ %409, %404 ], [ %403, %399 ]
  %422 = getelementptr inbounds i8, ptr %0, i64 616
  %423 = load i16, ptr %422, align 8, !tbaa !24
  %424 = uitofp i16 %423 to double
  %425 = fdiv double %424, %396
  %426 = extractelement <2 x double> %421, i64 0
  %427 = tail call double @pow(double noundef %425, double noundef %426) #4
  %428 = tail call double @llvm.fmuladd.f64(double %427, double %396, double 5.000000e-01)
  %429 = fptoui double %428 to i16
  %430 = getelementptr inbounds i8, ptr %0, i64 626
  store i16 %429, ptr %430, align 2, !tbaa !53
  %431 = load i16, ptr %422, align 8, !tbaa !24
  %432 = uitofp i16 %431 to double
  %433 = fdiv double %432, %396
  %434 = extractelement <2 x double> %421, i64 1
  %435 = tail call double @pow(double noundef %433, double noundef %434) #4
  %436 = tail call double @llvm.fmuladd.f64(double %435, double %396, double 5.000000e-01)
  %437 = fptoui double %436 to i16
  store i16 %437, ptr %422, align 8, !tbaa !24
  %438 = getelementptr inbounds i8, ptr %0, i64 610
  %439 = load i16, ptr %438, align 2, !tbaa !21
  %440 = getelementptr inbounds i8, ptr %0, i64 612
  %441 = load i16, ptr %440, align 4, !tbaa !22
  %.not408 = icmp eq i16 %439, %441
  br i1 %.not408, label %442, label %445

442:                                              ; preds = %420
  %443 = getelementptr inbounds i8, ptr %0, i64 614
  %444 = load i16, ptr %443, align 2, !tbaa !23
  %.not409 = icmp eq i16 %439, %444
  %.not410 = icmp eq i16 %439, %437
  %or.cond419 = select i1 %.not409, i1 %.not410, i1 false
  br i1 %or.cond419, label %485, label %445

445:                                              ; preds = %442, %420
  %446 = uitofp i16 %439 to double
  %447 = fdiv double %446, %396
  %448 = tail call double @pow(double noundef %447, double noundef %426) #4
  %449 = tail call double @llvm.fmuladd.f64(double %448, double %396, double 5.000000e-01)
  %450 = fptoui double %449 to i16
  %451 = getelementptr inbounds i8, ptr %0, i64 620
  store i16 %450, ptr %451, align 2, !tbaa !54
  %452 = load i16, ptr %440, align 4, !tbaa !22
  %453 = uitofp i16 %452 to double
  %454 = fdiv double %453, %396
  %455 = tail call double @pow(double noundef %454, double noundef %426) #4
  %456 = tail call double @llvm.fmuladd.f64(double %455, double %396, double 5.000000e-01)
  %457 = fptoui double %456 to i16
  %458 = getelementptr inbounds i8, ptr %0, i64 622
  store i16 %457, ptr %458, align 2, !tbaa !55
  %459 = getelementptr inbounds i8, ptr %0, i64 614
  %460 = load i16, ptr %459, align 2, !tbaa !23
  %461 = uitofp i16 %460 to double
  %462 = fdiv double %461, %396
  %463 = tail call double @pow(double noundef %462, double noundef %426) #4
  %464 = tail call double @llvm.fmuladd.f64(double %463, double %396, double 5.000000e-01)
  %465 = fptoui double %464 to i16
  %466 = getelementptr inbounds i8, ptr %0, i64 624
  store i16 %465, ptr %466, align 2, !tbaa !56
  %467 = load i16, ptr %438, align 2, !tbaa !21
  %468 = uitofp i16 %467 to double
  %469 = fdiv double %468, %396
  %470 = tail call double @pow(double noundef %469, double noundef %434) #4
  %471 = tail call double @llvm.fmuladd.f64(double %470, double %396, double 5.000000e-01)
  %472 = fptoui double %471 to i16
  store i16 %472, ptr %438, align 2, !tbaa !21
  %473 = load i16, ptr %440, align 4, !tbaa !22
  %474 = uitofp i16 %473 to double
  %475 = fdiv double %474, %396
  %476 = tail call double @pow(double noundef %475, double noundef %434) #4
  %477 = tail call double @llvm.fmuladd.f64(double %476, double %396, double 5.000000e-01)
  %478 = fptoui double %477 to i16
  store i16 %478, ptr %440, align 4, !tbaa !22
  %479 = load i16, ptr %459, align 2, !tbaa !23
  %480 = uitofp i16 %479 to double
  %481 = fdiv double %480, %396
  %482 = tail call double @pow(double noundef %481, double noundef %434) #4
  %483 = tail call double @llvm.fmuladd.f64(double %482, double %396, double 5.000000e-01)
  %484 = fptoui double %483 to i16
  store i16 %484, ptr %459, align 2, !tbaa !23
  br label %.thread426

485:                                              ; preds = %442
  %486 = load i16, ptr %430, align 2, !tbaa !53
  %487 = getelementptr inbounds i8, ptr %0, i64 624
  store i16 %486, ptr %487, align 2, !tbaa !56
  %488 = getelementptr inbounds i8, ptr %0, i64 622
  store i16 %486, ptr %488, align 2, !tbaa !55
  %489 = getelementptr inbounds i8, ptr %0, i64 620
  store i16 %486, ptr %489, align 2, !tbaa !54
  store i16 %437, ptr %443, align 2, !tbaa !23
  store i16 %437, ptr %440, align 4, !tbaa !22
  store i16 %437, ptr %438, align 2, !tbaa !21
  br label %.thread426

490:                                              ; preds = %172
  br i1 %165, label %491, label %.thread426

491:                                              ; preds = %490
  %492 = getelementptr inbounds i8, ptr %0, i64 568
  %493 = load ptr, ptr %492, align 8, !tbaa !30
  %494 = getelementptr inbounds i8, ptr %0, i64 576
  %495 = load i16, ptr %494, align 8, !tbaa !45
  %.not446 = icmp eq i16 %495, 0
  br i1 %.not446, label %._crit_edge436, label %.lr.ph435

.lr.ph435:                                        ; preds = %491
  %496 = getelementptr inbounds i8, ptr %0, i64 664
  %497 = load ptr, ptr %496, align 8, !tbaa !47
  %wide.trip.count463 = zext i16 %495 to i64
  %xtraiter490 = and i64 %wide.trip.count463, 1
  %498 = icmp eq i16 %495, 1
  br i1 %498, label %._crit_edge436.loopexit.unr-lcssa, label %.lr.ph435.new

.lr.ph435.new:                                    ; preds = %.lr.ph435
  %unroll_iter493 = and i64 %wide.trip.count463, 65534
  br label %499

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

._crit_edge436.loopexit.unr-lcssa:                ; preds = %499, %.lr.ph435
  %indvars.iv460.unr = phi i64 [ 0, %.lr.ph435 ], [ %indvars.iv.next461.1, %499 ]
  %lcmp.mod492.not = icmp eq i64 %xtraiter490, 0
  br i1 %lcmp.mod492.not, label %._crit_edge436, label %._crit_edge436.loopexit.epilog-lcssa

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

._crit_edge436:                                   ; preds = %._crit_edge436.loopexit.epilog-lcssa, %._crit_edge436.loopexit.unr-lcssa, %491
  %545 = and i32 %175, -8321
  br label %.sink.split

546:                                              ; preds = %168, %.thread481
  %547 = and i32 %166, 128
  %548 = icmp ne i32 %547, 0
  %or.cond = and i1 %165, %548
  br i1 %or.cond, label %549, label %625

549:                                              ; preds = %546
  %550 = getelementptr inbounds i8, ptr %0, i64 578
  %551 = load i16, ptr %550, align 2, !tbaa !36
  %552 = getelementptr inbounds i8, ptr %0, i64 568
  %553 = load ptr, ptr %552, align 8, !tbaa !30
  %554 = getelementptr inbounds i8, ptr %0, i64 610
  %555 = load i16, ptr %554, align 2, !tbaa !21
  %556 = trunc i16 %555 to i8
  %557 = getelementptr inbounds i8, ptr %0, i64 612
  %558 = load i16, ptr %557, align 4, !tbaa !22
  %559 = trunc i16 %558 to i8
  %560 = getelementptr inbounds i8, ptr %0, i64 614
  %561 = load i16, ptr %560, align 2, !tbaa !23
  %562 = trunc i16 %561 to i8
  %.not447 = icmp eq i16 %551, 0
  br i1 %.not447, label %._crit_edge440, label %.lr.ph439

.lr.ph439:                                        ; preds = %549
  %563 = getelementptr inbounds i8, ptr %0, i64 728
  %564 = and i16 %555, 255
  %565 = and i16 %558, 255
  %566 = and i16 %561, 255
  %wide.trip.count468 = zext i16 %551 to i64
  br label %567

567:                                              ; preds = %.lr.ph439, %621
  %indvars.iv465 = phi i64 [ 0, %.lr.ph439 ], [ %indvars.iv.next466, %621 ]
  %568 = load ptr, ptr %563, align 8, !tbaa !37
  %569 = getelementptr inbounds i8, ptr %568, i64 %indvars.iv465
  %570 = load i8, ptr %569, align 1, !tbaa !29
  switch i8 %570, label %573 [
    i8 0, label %571
    i8 -1, label %621
  ]

571:                                              ; preds = %567
  %572 = getelementptr inbounds %struct.png_color_struct, ptr %553, i64 %indvars.iv465
  store i8 %556, ptr %572, align 1, !tbaa !29
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %572, i64 1
  store i8 %559, ptr %.sroa.5.0..sroa_idx, align 1, !tbaa !29
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %572, i64 2
  store i8 %562, ptr %.sroa.7.0..sroa_idx, align 1, !tbaa !29
  br label %621

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

621:                                              ; preds = %567, %571, %573
  %indvars.iv.next466 = add nuw nsw i64 %indvars.iv465, 1
  %exitcond469.not = icmp eq i64 %indvars.iv.next466, %wide.trip.count468
  br i1 %exitcond469.not, label %._crit_edge440.loopexit, label %567, !llvm.loop !58

._crit_edge440.loopexit:                          ; preds = %621
  %.pre475 = load i32, ptr %4, align 4, !tbaa !19
  br label %._crit_edge440

._crit_edge440:                                   ; preds = %._crit_edge440.loopexit, %549
  %622 = phi i32 [ %.pre475, %._crit_edge440.loopexit ], [ %166, %549 ]
  %623 = and i32 %622, -262273
  %624 = or disjoint i32 %623, 262144
  br label %.sink.split

.sink.split:                                      ; preds = %._crit_edge436, %._crit_edge, %._crit_edge440
  %.sink = phi i32 [ %624, %._crit_edge440 ], [ %391, %._crit_edge ], [ %545, %._crit_edge436 ]
  store i32 %.sink, ptr %4, align 4, !tbaa !19
  br label %625

625:                                              ; preds = %.sink.split, %546
  %626 = phi i32 [ %166, %546 ], [ %.sink, %.sink.split ]
  %627 = and i32 %626, 8
  %628 = icmp ne i32 %627, 0
  %or.cond3 = and i1 %165, %628
  br i1 %or.cond3, label %629, label %.thread426

629:                                              ; preds = %625
  %630 = getelementptr inbounds i8, ptr %0, i64 576
  %631 = load i16, ptr %630, align 8, !tbaa !45
  %632 = getelementptr inbounds i8, ptr %0, i64 712
  %633 = load i8, ptr %632, align 8, !tbaa !59
  %634 = zext i8 %633 to i32
  %635 = sub nsw i32 8, %634
  %636 = getelementptr inbounds i8, ptr %0, i64 713
  %637 = load i8, ptr %636, align 1, !tbaa !60
  %638 = zext i8 %637 to i32
  %639 = sub nsw i32 8, %638
  %640 = getelementptr inbounds i8, ptr %0, i64 714
  %641 = load i8, ptr %640, align 2, !tbaa !61
  %642 = zext i8 %641 to i32
  %643 = sub nsw i32 8, %642
  %644 = icmp ugt i8 %633, 8
  %spec.store.select = select i1 %644, i32 0, i32 %635
  %645 = icmp ugt i8 %637, 8
  %spec.store.select11 = select i1 %645, i32 0, i32 %639
  %646 = icmp ugt i8 %641, 8
  %spec.store.select10 = select i1 %646, i32 0, i32 %643
  %.not448 = icmp eq i16 %631, 0
  br i1 %.not448, label %.thread426, label %.lr.ph443

.lr.ph443:                                        ; preds = %629
  %647 = getelementptr inbounds i8, ptr %0, i64 568
  %648 = load ptr, ptr %647, align 8, !tbaa !30
  %wide.trip.count473 = zext i16 %631 to i64
  br label %649

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

.thread426:                                       ; preds = %649, %629, %490, %485, %445, %625
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @png_build_gamma_table(ptr noundef, i8 noundef zeroext) 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 590}
!6 = !{!"png_struct_def", !7, i64 0, !9, i64 200, !9, i64 208, !9, i64 216, !9, i64 224, !9, i64 232, !9, i64 240, !9, i64 248, !9, i64 256, !9, i64 264, !9, i64 272, !7, i64 280, !7, i64 281, !10, i64 284, !10, i64 288, !10, i64 292, !11, i64 296, !9, i64 408, !12, i64 416, !10, i64 424, !10, i64 428, !10, i64 432, !10, i64 436, !10, i64 440, !10, i64 444, !10, i64 448, !10, i64 452, !10, i64 456, !12, i64 464, !12, i64 472, !10, i64 480, !10, i64 484, !9, i64 488, !9, i64 496, !9, i64 504, !9, i64 512, !9, i64 520, !9, i64 528, !13, i64 536, !10, i64 560, !10, i64 564, !9, i64 568, !14, i64 576, !14, i64 578, !7, i64 580, !7, i64 585, !7, i64 586, !7, i64 587, !7, i64 588, !7, i64 589, !7, i64 590, !7, i64 591, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !14, i64 598, !7, i64 600, !15, i64 604, !16, i64 608, !16, i64 618, !9, i64 632, !10, i64 640, !10, i64 644, !10, i64 648, !15, i64 652, !15, i64 656, !9, i64 664, !9, i64 672, !9, i64 680, !9, i64 688, !9, i64 696, !9, i64 704, !17, i64 712, !17, i64 717, !9, i64 728, !16, i64 736, !9, i64 752, !9, i64 760, !9, i64 768, !9, i64 776, !9, i64 784, !9, i64 792, !9, i64 800, !9, i64 808, !9, i64 816, !10, i64 824, !10, i64 828, !12, i64 832, !12, i64 840, !12, i64 848, !12, i64 856, !10, i64 864, !10, i64 868, !12, i64 872, !12, i64 880, !9, i64 888, !9, i64 896, !9, i64 904, !9, i64 912, !9, i64 920, !7, i64 928, !7, i64 929, !9, i64 936, !9, i64 944, !9, i64 952, !9, i64 960, !9, i64 968, !9, i64 976, !10, i64 984, !9, i64 992, !9, i64 1000, !10, i64 1008, !9, i64 1016, !7, i64 1024, !14, i64 1026, !14, i64 1028, !14, i64 1030, !10, i64 1032, !10, i64 1036, !7, i64 1040, !9, i64 1048, !9, i64 1056, !9, i64 1064, !9, i64 1072, !9, i64 1080, !9, i64 1088, !9, i64 1096, !7, i64 1104, !10, i64 1108, !10, i64 1112, !10, i64 1116, !18, i64 1120, !10, i64 1152, !10, i64 1156, !9, i64 1160, !10, i64 1168}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!"z_stream_s", !9, i64 0, !10, i64 8, !12, i64 16, !9, i64 24, !10, i64 32, !12, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !10, i64 88, !12, i64 96, !12, i64 104}
!12 = !{!"long", !7, i64 0}
!13 = !{!"png_row_info_struct", !10, i64 0, !12, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19}
!14 = !{!"short", !7, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = !{!"png_color_16_struct", !7, i64 0, !14, i64 2, !14, i64 4, !14, i64 6, !14, i64 8}
!17 = !{!"png_color_8_struct", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4}
!18 = !{!"png_unknown_chunk_t", !7, i64 0, !9, i64 8, !12, i64 16, !7, i64 24}
!19 = !{!6, !10, i64 292}
!20 = !{!6, !10, i64 284}
!21 = !{!6, !14, i64 610}
!22 = !{!6, !14, i64 612}
!23 = !{!6, !14, i64 614}
!24 = !{!6, !14, i64 616}
!25 = !{!6, !7, i64 591}
!26 = !{!14, !14, i64 0}
!27 = !{!6, !14, i64 744}
!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 568}
!31 = !{!6, !7, i64 608}
!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 578}
!37 = !{!6, !9, i64 728}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.unroll.disable"}
!42 = !{!6, !15, i64 656}
!43 = !{!6, !15, i64 652}
!44 = distinct !{!44, !39}
!45 = !{!6, !14, i64 576}
!46 = !{!6, !7, i64 600}
!47 = !{!6, !9, i64 664}
!48 = !{!6, !9, i64 680}
!49 = !{!6, !15, i64 604}
!50 = !{!6, !9, i64 672}
!51 = distinct !{!51, !39}
!52 = !{!15, !15, i64 0}
!53 = !{!6, !14, i64 626}
!54 = !{!6, !14, i64 620}
!55 = !{!6, !14, i64 622}
!56 = !{!6, !14, i64 624}
!57 = distinct !{!57, !39}
!58 = distinct !{!58, !39}
!59 = !{!6, !7, i64 712}
!60 = !{!6, !7, i64 713}
!61 = !{!6, !7, i64 714}
!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