; LLVM IR from drohmer/cgp :: library/third_party/src/lodepng (lodepng)

; 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.ColorTree = type { [16 x ptr], i32 }
%struct.LodePNGColorMode = type { i32, i32, ptr, i64, i32, i32, i32, i32 }
%struct.LodePNGColorProfile = type { i32, i32, i16, i16, i16, i32, i32, [1024 x i8], i32 }

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z15lodepng_get_bppPK16LodePNGColorMode(ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z22lodepng_can_have_alphaPK16LodePNGColorMode(ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL15color_tree_initP9ColorTree(ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i32 noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z25lodepng_get_color_profileP19LodePNGColorProfilePKhjjPK16LodePNGColorMode(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4) #1 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca %struct.ColorTree, align 8
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i16, align 2
  %23 = alloca i16, align 2
  %24 = alloca i16, align 2
  %25 = alloca i16, align 2
  %26 = alloca i16, align 2
  %27 = alloca i16, align 2
  %28 = alloca i16, align 2
  %29 = alloca i16, align 2
  %30 = alloca i32, align 4
  %31 = alloca i8, align 1
  %32 = alloca i8, align 1
  %33 = alloca i8, align 1
  %34 = alloca i8, align 1
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store i32 %3, ptr %9, align 4, !tbaa !9
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 136, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %39 = load i32, ptr %8, align 4, !tbaa !9
  %40 = zext i32 %39 to i64
  %41 = load i32, ptr %9, align 4, !tbaa !9
  %42 = zext i32 %41 to i64
  %43 = mul i64 %40, %42
  store i64 %43, ptr %14, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %44 = load ptr, ptr %10, align 8, !tbaa !5
  %45 = call noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef %44)
  %46 = icmp ne i32 %45, 0
  %47 = zext i1 %46 to i64
  %48 = select i1 %46, i32 1, i32 0
  store i32 %48, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %49 = load ptr, ptr %10, align 8, !tbaa !5
  %50 = call noundef i32 @_Z22lodepng_can_have_alphaPK16LodePNGColorMode(ptr noundef %49)
  %51 = icmp ne i32 %50, 0
  %52 = zext i1 %51 to i64
  %53 = select i1 %51, i32 0, i32 1
  store i32 %53, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %54 = load ptr, ptr %10, align 8, !tbaa !5
  %55 = call noundef i32 @_Z15lodepng_get_bppPK16LodePNGColorMode(ptr noundef %54)
  store i32 %55, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %56 = load i32, ptr %18, align 4, !tbaa !9
  %57 = icmp eq i32 %56, 1
  %58 = zext i1 %57 to i64
  %59 = select i1 %57, i32 1, i32 0
  store i32 %59, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 257, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  store i32 0, ptr %21, align 4, !tbaa !9
  %60 = load i32, ptr %18, align 4, !tbaa !9
  %61 = icmp ule i32 %60, 8
  br i1 %61, label %62, label %79

62:                                               ; preds = %5
  %63 = load i32, ptr %18, align 4, !tbaa !9
  %64 = icmp eq i32 %63, 1
  br i1 %64, label %65, label %66

65:                                               ; preds = %62
  br label %77

66:                                               ; preds = %62
  %67 = load i32, ptr %18, align 4, !tbaa !9
  %68 = icmp eq i32 %67, 2
  br i1 %68, label %69, label %70

69:                                               ; preds = %66
  br label %75

70:                                               ; preds = %66
  %71 = load i32, ptr %18, align 4, !tbaa !9
  %72 = icmp eq i32 %71, 4
  %73 = zext i1 %72 to i64
  %74 = select i1 %72, i32 16, i32 256
  br label %75

75:                                               ; preds = %70, %69
  %76 = phi i32 [ 4, %69 ], [ %74, %70 ]
  br label %77

77:                                               ; preds = %75, %65
  %78 = phi i32 [ 2, %65 ], [ %76, %75 ]
  store i32 %78, ptr %20, align 4, !tbaa !9
  br label %79

79:                                               ; preds = %77, %5
  call void @_ZL15color_tree_initP9ColorTree(ptr noundef %13)
  %80 = load ptr, ptr %10, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.LodePNGColorMode, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 4, !tbaa !13
  %83 = icmp eq i32 %82, 16
  br i1 %83, label %84, label %134

84:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #3
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %85

85:                                               ; preds = %130, %84
  %86 = load i64, ptr %12, align 8, !tbaa !11
  %87 = load i64, ptr %14, align 8, !tbaa !11
  %88 = icmp ne i64 %86, %87
  br i1 %88, label %89, label %133

89:                                               ; preds = %85
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = load i64, ptr %12, align 8, !tbaa !11
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %22, ptr noundef %23, ptr noundef %24, ptr noundef %25, ptr noundef %90, i64 noundef %91, ptr noundef %92)
  %93 = load i16, ptr %22, align 2, !tbaa !16
  %94 = zext i16 %93 to i32
  %95 = and i32 %94, 255
  %96 = load i16, ptr %22, align 2, !tbaa !16
  %97 = zext i16 %96 to i32
  %98 = ashr i32 %97, 8
  %99 = and i32 %98, 255
  %100 = icmp ne i32 %95, %99
  br i1 %100, label %128, label %101

101:                                              ; preds = %89
  %102 = load i16, ptr %23, align 2, !tbaa !16
  %103 = zext i16 %102 to i32
  %104 = and i32 %103, 255
  %105 = load i16, ptr %23, align 2, !tbaa !16
  %106 = zext i16 %105 to i32
  %107 = ashr i32 %106, 8
  %108 = and i32 %107, 255
  %109 = icmp ne i32 %104, %108
  br i1 %109, label %128, label %110

110:                                              ; preds = %101
  %111 = load i16, ptr %24, align 2, !tbaa !16
  %112 = zext i16 %111 to i32
  %113 = and i32 %112, 255
  %114 = load i16, ptr %24, align 2, !tbaa !16
  %115 = zext i16 %114 to i32
  %116 = ashr i32 %115, 8
  %117 = and i32 %116, 255
  %118 = icmp ne i32 %113, %117
  br i1 %118, label %128, label %119

119:                                              ; preds = %110
  %120 = load i16, ptr %25, align 2, !tbaa !16
  %121 = zext i16 %120 to i32
  %122 = and i32 %121, 255
  %123 = load i16, ptr %25, align 2, !tbaa !16
  %124 = zext i16 %123 to i32
  %125 = ashr i32 %124, 8
  %126 = and i32 %125, 255
  %127 = icmp ne i32 %122, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %119, %110, %101, %89
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %133

129:                                              ; preds = %119
  br label %130

130:                                              ; preds = %129
  %131 = load i64, ptr %12, align 8, !tbaa !11
  %132 = add i64 %131, 1
  store i64 %132, ptr %12, align 8, !tbaa !11
  br label %85, !llvm.loop !18

133:                                              ; preds = %128, %85
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #3
  br label %134

134:                                              ; preds = %133, %79
  %135 = load i32, ptr %21, align 4, !tbaa !9
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %137, label %335

137:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #3
  store i16 0, ptr %26, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #3
  store i16 0, ptr %27, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #3
  store i16 0, ptr %28, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #3
  store i16 0, ptr %29, align 2, !tbaa !16
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %138, i32 0, i32 8
  store i32 16, ptr %139, align 4, !tbaa !20
  store i32 1, ptr %17, align 4, !tbaa !9
  store i32 1, ptr %19, align 4, !tbaa !9
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %140

140:                                              ; preds = %275, %137
  %141 = load i64, ptr %12, align 8, !tbaa !11
  %142 = load i64, ptr %14, align 8, !tbaa !11
  %143 = icmp ne i64 %141, %142
  br i1 %143, label %144, label %278

144:                                              ; preds = %140
  %145 = load ptr, ptr %7, align 8, !tbaa !5
  %146 = load i64, ptr %12, align 8, !tbaa !11
  %147 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %29, ptr noundef %145, i64 noundef %146, ptr noundef %147)
  %148 = load i32, ptr %15, align 4, !tbaa !9
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %165, label %150

150:                                              ; preds = %144
  %151 = load i16, ptr %26, align 2, !tbaa !16
  %152 = zext i16 %151 to i32
  %153 = load i16, ptr %27, align 2, !tbaa !16
  %154 = zext i16 %153 to i32
  %155 = icmp ne i32 %152, %154
  br i1 %155, label %162, label %156

156:                                              ; preds = %150
  %157 = load i16, ptr %26, align 2, !tbaa !16
  %158 = zext i16 %157 to i32
  %159 = load i16, ptr %28, align 2, !tbaa !16
  %160 = zext i16 %159 to i32
  %161 = icmp ne i32 %158, %160
  br i1 %161, label %162, label %165

162:                                              ; preds = %156, %150
  %163 = load ptr, ptr %6, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %163, i32 0, i32 0
  store i32 1, ptr %164, align 4, !tbaa !22
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %165

165:                                              ; preds = %162, %156, %144
  %166 = load i32, ptr %16, align 4, !tbaa !9
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %261, label %168

168:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %169 = load i16, ptr %26, align 2, !tbaa !16
  %170 = zext i16 %169 to i32
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %171, i32 0, i32 2
  %173 = load i16, ptr %172, align 4, !tbaa !23
  %174 = zext i16 %173 to i32
  %175 = icmp eq i32 %170, %174
  br i1 %175, label %176, label %192

176:                                              ; preds = %168
  %177 = load i16, ptr %27, align 2, !tbaa !16
  %178 = zext i16 %177 to i32
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %179, i32 0, i32 3
  %181 = load i16, ptr %180, align 2, !tbaa !24
  %182 = zext i16 %181 to i32
  %183 = icmp eq i32 %178, %182
  br i1 %183, label %184, label %192

184:                                              ; preds = %176
  %185 = load i16, ptr %28, align 2, !tbaa !16
  %186 = zext i16 %185 to i32
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %187, i32 0, i32 4
  %189 = load i16, ptr %188, align 4, !tbaa !25
  %190 = zext i16 %189 to i32
  %191 = icmp eq i32 %186, %190
  br label %192

192:                                              ; preds = %184, %176, %168
  %193 = phi i1 [ false, %176 ], [ false, %168 ], [ %191, %184 ]
  %194 = zext i1 %193 to i32
  store i32 %194, ptr %30, align 4, !tbaa !9
  %195 = load i16, ptr %29, align 2, !tbaa !16
  %196 = zext i16 %195 to i32
  %197 = icmp ne i32 %196, 65535
  br i1 %197, label %198, label %215

198:                                              ; preds = %192
  %199 = load i16, ptr %29, align 2, !tbaa !16
  %200 = zext i16 %199 to i32
  %201 = icmp ne i32 %200, 0
  br i1 %201, label %210, label %202

202:                                              ; preds = %198
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %203, i32 0, i32 1
  %205 = load i32, ptr %204, align 4, !tbaa !26
  %206 = icmp ne i32 %205, 0
  br i1 %206, label %207, label %215

207:                                              ; preds = %202
  %208 = load i32, ptr %30, align 4, !tbaa !9
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %215, label %210

210:                                              ; preds = %207, %198
  %211 = load ptr, ptr %6, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %211, i32 0, i32 5
  store i32 1, ptr %212, align 4, !tbaa !27
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %213, i32 0, i32 1
  store i32 0, ptr %214, align 4, !tbaa !26
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %260

215:                                              ; preds = %207, %202, %192
  %216 = load i16, ptr %29, align 2, !tbaa !16
  %217 = zext i16 %216 to i32
  %218 = icmp eq i32 %217, 0
  br i1 %218, label %219, label %241

219:                                              ; preds = %215
  %220 = load ptr, ptr %6, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %220, i32 0, i32 5
  %222 = load i32, ptr %221, align 4, !tbaa !27
  %223 = icmp ne i32 %222, 0
  br i1 %223, label %241, label %224

224:                                              ; preds = %219
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %225, i32 0, i32 1
  %227 = load i32, ptr %226, align 4, !tbaa !26
  %228 = icmp ne i32 %227, 0
  br i1 %228, label %241, label %229

229:                                              ; preds = %224
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %230, i32 0, i32 1
  store i32 1, ptr %231, align 4, !tbaa !26
  %232 = load i16, ptr %26, align 2, !tbaa !16
  %233 = load ptr, ptr %6, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %233, i32 0, i32 2
  store i16 %232, ptr %234, align 4, !tbaa !23
  %235 = load i16, ptr %27, align 2, !tbaa !16
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %236, i32 0, i32 3
  store i16 %235, ptr %237, align 2, !tbaa !24
  %238 = load i16, ptr %28, align 2, !tbaa !16
  %239 = load ptr, ptr %6, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %239, i32 0, i32 4
  store i16 %238, ptr %240, align 4, !tbaa !25
  br label %259

241:                                              ; preds = %224, %219, %215
  %242 = load i16, ptr %29, align 2, !tbaa !16
  %243 = zext i16 %242 to i32
  %244 = icmp eq i32 %243, 65535
  br i1 %244, label %245, label %258

245:                                              ; preds = %241
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %246, i32 0, i32 1
  %248 = load i32, ptr %247, align 4, !tbaa !26
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %258

250:                                              ; preds = %245
  %251 = load i32, ptr %30, align 4, !tbaa !9
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %253, label %258

253:                                              ; preds = %250
  %254 = load ptr, ptr %6, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %254, i32 0, i32 5
  store i32 1, ptr %255, align 4, !tbaa !27
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %256, i32 0, i32 1
  store i32 0, ptr %257, align 4, !tbaa !26
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %253, %250, %245, %241
  br label %259

259:                                              ; preds = %258, %229
  br label %260

260:                                              ; preds = %259, %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  br label %261

261:                                              ; preds = %260, %165
  %262 = load i32, ptr %16, align 4, !tbaa !9
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %264, label %274

264:                                              ; preds = %261
  %265 = load i32, ptr %17, align 4, !tbaa !9
  %266 = icmp ne i32 %265, 0
  br i1 %266, label %267, label %274

267:                                              ; preds = %264
  %268 = load i32, ptr %15, align 4, !tbaa !9
  %269 = icmp ne i32 %268, 0
  br i1 %269, label %270, label %274

270:                                              ; preds = %267
  %271 = load i32, ptr %19, align 4, !tbaa !9
  %272 = icmp ne i32 %271, 0
  br i1 %272, label %273, label %274

273:                                              ; preds = %270
  br label %278

274:                                              ; preds = %270, %267, %264, %261
  br label %275

275:                                              ; preds = %274
  %276 = load i64, ptr %12, align 8, !tbaa !11
  %277 = add i64 %276, 1
  store i64 %277, ptr %12, align 8, !tbaa !11
  br label %140, !llvm.loop !28

278:                                              ; preds = %273, %140
  %279 = load ptr, ptr %6, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %279, i32 0, i32 1
  %281 = load i32, ptr %280, align 4, !tbaa !26
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %283, label %334

283:                                              ; preds = %278
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %284, i32 0, i32 5
  %286 = load i32, ptr %285, align 4, !tbaa !27
  %287 = icmp ne i32 %286, 0
  br i1 %287, label %334, label %288

288:                                              ; preds = %283
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %289

289:                                              ; preds = %330, %288
  %290 = load i64, ptr %12, align 8, !tbaa !11
  %291 = load i64, ptr %14, align 8, !tbaa !11
  %292 = icmp ne i64 %290, %291
  br i1 %292, label %293, label %333

293:                                              ; preds = %289
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = load i64, ptr %12, align 8, !tbaa !11
  %296 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %29, ptr noundef %294, i64 noundef %295, ptr noundef %296)
  %297 = load i16, ptr %29, align 2, !tbaa !16
  %298 = zext i16 %297 to i32
  %299 = icmp ne i32 %298, 0
  br i1 %299, label %300, label %329

300:                                              ; preds = %293
  %301 = load i16, ptr %26, align 2, !tbaa !16
  %302 = zext i16 %301 to i32
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %303, i32 0, i32 2
  %305 = load i16, ptr %304, align 4, !tbaa !23
  %306 = zext i16 %305 to i32
  %307 = icmp eq i32 %302, %306
  br i1 %307, label %308, label %329

308:                                              ; preds = %300
  %309 = load i16, ptr %27, align 2, !tbaa !16
  %310 = zext i16 %309 to i32
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %311, i32 0, i32 3
  %313 = load i16, ptr %312, align 2, !tbaa !24
  %314 = zext i16 %313 to i32
  %315 = icmp eq i32 %310, %314
  br i1 %315, label %316, label %329

316:                                              ; preds = %308
  %317 = load i16, ptr %28, align 2, !tbaa !16
  %318 = zext i16 %317 to i32
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %319, i32 0, i32 4
  %321 = load i16, ptr %320, align 4, !tbaa !25
  %322 = zext i16 %321 to i32
  %323 = icmp eq i32 %318, %322
  br i1 %323, label %324, label %329

324:                                              ; preds = %316
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %325, i32 0, i32 5
  store i32 1, ptr %326, align 4, !tbaa !27
  %327 = load ptr, ptr %6, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %327, i32 0, i32 1
  store i32 0, ptr %328, align 4, !tbaa !26
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %329

329:                                              ; preds = %324, %316, %308, %300, %293
  br label %330

330:                                              ; preds = %329
  %331 = load i64, ptr %12, align 8, !tbaa !11
  %332 = add i64 %331, 1
  store i64 %332, ptr %12, align 8, !tbaa !11
  br label %289, !llvm.loop !29

333:                                              ; preds = %289
  br label %334

334:                                              ; preds = %333, %283, %278
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #3
  br label %695

335:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #3
  store i8 0, ptr %31, align 1, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #3
  store i8 0, ptr %32, align 1, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #3
  store i8 0, ptr %33, align 1, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #3
  store i8 0, ptr %34, align 1, !tbaa !30
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %336

336:                                              ; preds = %594, %335
  %337 = load i64, ptr %12, align 8, !tbaa !11
  %338 = load i64, ptr %14, align 8, !tbaa !11
  %339 = icmp ne i64 %337, %338
  br i1 %339, label %340, label %597

340:                                              ; preds = %336
  %341 = load ptr, ptr %7, align 8, !tbaa !5
  %342 = load i64, ptr %12, align 8, !tbaa !11
  %343 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %34, ptr noundef %341, i64 noundef %342, ptr noundef %343)
  %344 = load i32, ptr %19, align 4, !tbaa !9
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %364, label %346

346:                                              ; preds = %340
  %347 = load ptr, ptr %6, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %347, i32 0, i32 8
  %349 = load i32, ptr %348, align 4, !tbaa !20
  %350 = icmp ult i32 %349, 8
  br i1 %350, label %351, label %364

351:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  %352 = load i8, ptr %31, align 1, !tbaa !30
  %353 = call noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext %352)
  store i32 %353, ptr %35, align 4, !tbaa !9
  %354 = load i32, ptr %35, align 4, !tbaa !9
  %355 = load ptr, ptr %6, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %355, i32 0, i32 8
  %357 = load i32, ptr %356, align 4, !tbaa !20
  %358 = icmp ugt i32 %354, %357
  br i1 %358, label %359, label %363

359:                                              ; preds = %351
  %360 = load i32, ptr %35, align 4, !tbaa !9
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %361, i32 0, i32 8
  store i32 %360, ptr %362, align 4, !tbaa !20
  br label %363

363:                                              ; preds = %359, %351
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  br label %364

364:                                              ; preds = %363, %346, %340
  %365 = load ptr, ptr %6, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %365, i32 0, i32 8
  %367 = load i32, ptr %366, align 4, !tbaa !20
  %368 = load i32, ptr %18, align 4, !tbaa !9
  %369 = icmp uge i32 %367, %368
  %370 = zext i1 %369 to i32
  store i32 %370, ptr %19, align 4, !tbaa !9
  %371 = load i32, ptr %15, align 4, !tbaa !9
  %372 = icmp ne i32 %371, 0
  br i1 %372, label %396, label %373

373:                                              ; preds = %364
  %374 = load i8, ptr %31, align 1, !tbaa !30
  %375 = zext i8 %374 to i32
  %376 = load i8, ptr %32, align 1, !tbaa !30
  %377 = zext i8 %376 to i32
  %378 = icmp ne i32 %375, %377
  br i1 %378, label %385, label %379

379:                                              ; preds = %373
  %380 = load i8, ptr %31, align 1, !tbaa !30
  %381 = zext i8 %380 to i32
  %382 = load i8, ptr %33, align 1, !tbaa !30
  %383 = zext i8 %382 to i32
  %384 = icmp ne i32 %381, %383
  br i1 %384, label %385, label %396

385:                                              ; preds = %379, %373
  %386 = load ptr, ptr %6, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %386, i32 0, i32 0
  store i32 1, ptr %387, align 4, !tbaa !22
  store i32 1, ptr %15, align 4, !tbaa !9
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %388, i32 0, i32 8
  %390 = load i32, ptr %389, align 4, !tbaa !20
  %391 = icmp ult i32 %390, 8
  br i1 %391, label %392, label %395

392:                                              ; preds = %385
  %393 = load ptr, ptr %6, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %393, i32 0, i32 8
  store i32 8, ptr %394, align 4, !tbaa !20
  br label %395

395:                                              ; preds = %392, %385
  br label %396

396:                                              ; preds = %395, %379, %364
  %397 = load i32, ptr %16, align 4, !tbaa !9
  %398 = icmp ne i32 %397, 0
  br i1 %398, label %511, label %399

399:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  %400 = load i8, ptr %31, align 1, !tbaa !30
  %401 = zext i8 %400 to i32
  %402 = load ptr, ptr %6, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %402, i32 0, i32 2
  %404 = load i16, ptr %403, align 4, !tbaa !23
  %405 = zext i16 %404 to i32
  %406 = icmp eq i32 %401, %405
  br i1 %406, label %407, label %423

407:                                              ; preds = %399
  %408 = load i8, ptr %32, align 1, !tbaa !30
  %409 = zext i8 %408 to i32
  %410 = load ptr, ptr %6, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %410, i32 0, i32 3
  %412 = load i16, ptr %411, align 2, !tbaa !24
  %413 = zext i16 %412 to i32
  %414 = icmp eq i32 %409, %413
  br i1 %414, label %415, label %423

415:                                              ; preds = %407
  %416 = load i8, ptr %33, align 1, !tbaa !30
  %417 = zext i8 %416 to i32
  %418 = load ptr, ptr %6, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %418, i32 0, i32 4
  %420 = load i16, ptr %419, align 4, !tbaa !25
  %421 = zext i16 %420 to i32
  %422 = icmp eq i32 %417, %421
  br label %423

423:                                              ; preds = %415, %407, %399
  %424 = phi i1 [ false, %407 ], [ false, %399 ], [ %422, %415 ]
  %425 = zext i1 %424 to i32
  store i32 %425, ptr %36, align 4, !tbaa !9
  %426 = load i8, ptr %34, align 1, !tbaa !30
  %427 = zext i8 %426 to i32
  %428 = icmp ne i32 %427, 255
  br i1 %428, label %429, label %454

429:                                              ; preds = %423
  %430 = load i8, ptr %34, align 1, !tbaa !30
  %431 = zext i8 %430 to i32
  %432 = icmp ne i32 %431, 0
  br i1 %432, label %441, label %433

433:                                              ; preds = %429
  %434 = load ptr, ptr %6, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %434, i32 0, i32 1
  %436 = load i32, ptr %435, align 4, !tbaa !26
  %437 = icmp ne i32 %436, 0
  br i1 %437, label %438, label %454

438:                                              ; preds = %433
  %439 = load i32, ptr %36, align 4, !tbaa !9
  %440 = icmp ne i32 %439, 0
  br i1 %440, label %454, label %441

441:                                              ; preds = %438, %429
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %442, i32 0, i32 5
  store i32 1, ptr %443, align 4, !tbaa !27
  %444 = load ptr, ptr %6, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %444, i32 0, i32 1
  store i32 0, ptr %445, align 4, !tbaa !26
  store i32 1, ptr %16, align 4, !tbaa !9
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %446, i32 0, i32 8
  %448 = load i32, ptr %447, align 4, !tbaa !20
  %449 = icmp ult i32 %448, 8
  br i1 %449, label %450, label %453

450:                                              ; preds = %441
  %451 = load ptr, ptr %6, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %451, i32 0, i32 8
  store i32 8, ptr %452, align 4, !tbaa !20
  br label %453

453:                                              ; preds = %450, %441
  br label %510

454:                                              ; preds = %438, %433, %423
  %455 = load i8, ptr %34, align 1, !tbaa !30
  %456 = zext i8 %455 to i32
  %457 = icmp eq i32 %456, 0
  br i1 %457, label %458, label %483

458:                                              ; preds = %454
  %459 = load ptr, ptr %6, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %459, i32 0, i32 5
  %461 = load i32, ptr %460, align 4, !tbaa !27
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %483, label %463

463:                                              ; preds = %458
  %464 = load ptr, ptr %6, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %464, i32 0, i32 1
  %466 = load i32, ptr %465, align 4, !tbaa !26
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %483, label %468

468:                                              ; preds = %463
  %469 = load ptr, ptr %6, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %469, i32 0, i32 1
  store i32 1, ptr %470, align 4, !tbaa !26
  %471 = load i8, ptr %31, align 1, !tbaa !30
  %472 = zext i8 %471 to i16
  %473 = load ptr, ptr %6, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %473, i32 0, i32 2
  store i16 %472, ptr %474, align 4, !tbaa !23
  %475 = load i8, ptr %32, align 1, !tbaa !30
  %476 = zext i8 %475 to i16
  %477 = load ptr, ptr %6, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %477, i32 0, i32 3
  store i16 %476, ptr %478, align 2, !tbaa !24
  %479 = load i8, ptr %33, align 1, !tbaa !30
  %480 = zext i8 %479 to i16
  %481 = load ptr, ptr %6, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %481, i32 0, i32 4
  store i16 %480, ptr %482, align 4, !tbaa !25
  br label %509

483:                                              ; preds = %463, %458, %454
  %484 = load i8, ptr %34, align 1, !tbaa !30
  %485 = zext i8 %484 to i32
  %486 = icmp eq i32 %485, 255
  br i1 %486, label %487, label %508

487:                                              ; preds = %483
  %488 = load ptr, ptr %6, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %488, i32 0, i32 1
  %490 = load i32, ptr %489, align 4, !tbaa !26
  %491 = icmp ne i32 %490, 0
  br i1 %491, label %492, label %508

492:                                              ; preds = %487
  %493 = load i32, ptr %36, align 4, !tbaa !9
  %494 = icmp ne i32 %493, 0
  br i1 %494, label %495, label %508

495:                                              ; preds = %492
  %496 = load ptr, ptr %6, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %496, i32 0, i32 5
  store i32 1, ptr %497, align 4, !tbaa !27
  %498 = load ptr, ptr %6, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %498, i32 0, i32 1
  store i32 0, ptr %499, align 4, !tbaa !26
  store i32 1, ptr %16, align 4, !tbaa !9
  %500 = load ptr, ptr %6, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %500, i32 0, i32 8
  %502 = load i32, ptr %501, align 4, !tbaa !20
  %503 = icmp ult i32 %502, 8
  br i1 %503, label %504, label %507

504:                                              ; preds = %495
  %505 = load ptr, ptr %6, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %505, i32 0, i32 8
  store i32 8, ptr %506, align 4, !tbaa !20
  br label %507

507:                                              ; preds = %504, %495
  br label %508

508:                                              ; preds = %507, %492, %487, %483
  br label %509

509:                                              ; preds = %508, %468
  br label %510

510:                                              ; preds = %509, %453
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  br label %511

511:                                              ; preds = %510, %396
  %512 = load i32, ptr %17, align 4, !tbaa !9
  %513 = icmp ne i32 %512, 0
  br i1 %513, label %580, label %514

514:                                              ; preds = %511
  %515 = load i8, ptr %31, align 1, !tbaa !30
  %516 = load i8, ptr %32, align 1, !tbaa !30
  %517 = load i8, ptr %33, align 1, !tbaa !30
  %518 = load i8, ptr %34, align 1, !tbaa !30
  %519 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef %13, i8 noundef zeroext %515, i8 noundef zeroext %516, i8 noundef zeroext %517, i8 noundef zeroext %518)
  %520 = icmp ne i32 %519, 0
  br i1 %520, label %579, label %521

521:                                              ; preds = %514
  %522 = load i8, ptr %31, align 1, !tbaa !30
  %523 = load i8, ptr %32, align 1, !tbaa !30
  %524 = load i8, ptr %33, align 1, !tbaa !30
  %525 = load i8, ptr %34, align 1, !tbaa !30
  %526 = load ptr, ptr %6, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %526, i32 0, i32 6
  %528 = load i32, ptr %527, align 4, !tbaa !31
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef %13, i8 noundef zeroext %522, i8 noundef zeroext %523, i8 noundef zeroext %524, i8 noundef zeroext %525, i32 noundef %528)
  %529 = load ptr, ptr %6, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %529, i32 0, i32 6
  %531 = load i32, ptr %530, align 4, !tbaa !31
  %532 = icmp ult i32 %531, 256
  br i1 %532, label %533, label %568

533:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  %534 = load ptr, ptr %6, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %534, i32 0, i32 7
  %536 = getelementptr inbounds [1024 x i8], ptr %535, i64 0, i64 0
  store ptr %536, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %537 = load ptr, ptr %6, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %537, i32 0, i32 6
  %539 = load i32, ptr %538, align 4, !tbaa !31
  store i32 %539, ptr %38, align 4, !tbaa !9
  %540 = load i8, ptr %31, align 1, !tbaa !30
  %541 = load ptr, ptr %37, align 8, !tbaa !5
  %542 = load i32, ptr %38, align 4, !tbaa !9
  %543 = mul i32 %542, 4
  %544 = add i32 %543, 0
  %545 = zext i32 %544 to i64
  %546 = getelementptr inbounds i8, ptr %541, i64 %545
  store i8 %540, ptr %546, align 1, !tbaa !30
  %547 = load i8, ptr %32, align 1, !tbaa !30
  %548 = load ptr, ptr %37, align 8, !tbaa !5
  %549 = load i32, ptr %38, align 4, !tbaa !9
  %550 = mul i32 %549, 4
  %551 = add i32 %550, 1
  %552 = zext i32 %551 to i64
  %553 = getelementptr inbounds i8, ptr %548, i64 %552
  store i8 %547, ptr %553, align 1, !tbaa !30
  %554 = load i8, ptr %33, align 1, !tbaa !30
  %555 = load ptr, ptr %37, align 8, !tbaa !5
  %556 = load i32, ptr %38, align 4, !tbaa !9
  %557 = mul i32 %556, 4
  %558 = add i32 %557, 2
  %559 = zext i32 %558 to i64
  %560 = getelementptr inbounds i8, ptr %555, i64 %559
  store i8 %554, ptr %560, align 1, !tbaa !30
  %561 = load i8, ptr %34, align 1, !tbaa !30
  %562 = load ptr, ptr %37, align 8, !tbaa !5
  %563 = load i32, ptr %38, align 4, !tbaa !9
  %564 = mul i32 %563, 4
  %565 = add i32 %564, 3
  %566 = zext i32 %565 to i64
  %567 = getelementptr inbounds i8, ptr %562, i64 %566
  store i8 %561, ptr %567, align 1, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  br label %568

568:                                              ; preds = %533, %521
  %569 = load ptr, ptr %6, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %569, i32 0, i32 6
  %571 = load i32, ptr %570, align 4, !tbaa !31
  %572 = add i32 %571, 1
  store i32 %572, ptr %570, align 4, !tbaa !31
  %573 = load ptr, ptr %6, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %573, i32 0, i32 6
  %575 = load i32, ptr %574, align 4, !tbaa !31
  %576 = load i32, ptr %20, align 4, !tbaa !9
  %577 = icmp uge i32 %575, %576
  %578 = zext i1 %577 to i32
  store i32 %578, ptr %17, align 4, !tbaa !9
  br label %579

579:                                              ; preds = %568, %514
  br label %580

580:                                              ; preds = %579, %511
  %581 = load i32, ptr %16, align 4, !tbaa !9
  %582 = icmp ne i32 %581, 0
  br i1 %582, label %583, label %593

583:                                              ; preds = %580
  %584 = load i32, ptr %17, align 4, !tbaa !9
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %586, label %593

586:                                              ; preds = %583
  %587 = load i32, ptr %15, align 4, !tbaa !9
  %588 = icmp ne i32 %587, 0
  br i1 %588, label %589, label %593

589:                                              ; preds = %586
  %590 = load i32, ptr %19, align 4, !tbaa !9
  %591 = icmp ne i32 %590, 0
  br i1 %591, label %592, label %593

592:                                              ; preds = %589
  br label %597

593:                                              ; preds = %589, %586, %583, %580
  br label %594

594:                                              ; preds = %593
  %595 = load i64, ptr %12, align 8, !tbaa !11
  %596 = add i64 %595, 1
  store i64 %596, ptr %12, align 8, !tbaa !11
  br label %336, !llvm.loop !32

597:                                              ; preds = %592, %336
  %598 = load ptr, ptr %6, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %598, i32 0, i32 1
  %600 = load i32, ptr %599, align 4, !tbaa !26
  %601 = icmp ne i32 %600, 0
  br i1 %601, label %602, label %661

602:                                              ; preds = %597
  %603 = load ptr, ptr %6, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %603, i32 0, i32 5
  %605 = load i32, ptr %604, align 4, !tbaa !27
  %606 = icmp ne i32 %605, 0
  br i1 %606, label %661, label %607

607:                                              ; preds = %602
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %608

608:                                              ; preds = %657, %607
  %609 = load i64, ptr %12, align 8, !tbaa !11
  %610 = load i64, ptr %14, align 8, !tbaa !11
  %611 = icmp ne i64 %609, %610
  br i1 %611, label %612, label %660

612:                                              ; preds = %608
  %613 = load ptr, ptr %7, align 8, !tbaa !5
  %614 = load i64, ptr %12, align 8, !tbaa !11
  %615 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %34, ptr noundef %613, i64 noundef %614, ptr noundef %615)
  %616 = load i8, ptr %34, align 1, !tbaa !30
  %617 = zext i8 %616 to i32
  %618 = icmp ne i32 %617, 0
  br i1 %618, label %619, label %656

619:                                              ; preds = %612
  %620 = load i8, ptr %31, align 1, !tbaa !30
  %621 = zext i8 %620 to i32
  %622 = load ptr, ptr %6, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %622, i32 0, i32 2
  %624 = load i16, ptr %623, align 4, !tbaa !23
  %625 = zext i16 %624 to i32
  %626 = icmp eq i32 %621, %625
  br i1 %626, label %627, label %656

627:                                              ; preds = %619
  %628 = load i8, ptr %32, align 1, !tbaa !30
  %629 = zext i8 %628 to i32
  %630 = load ptr, ptr %6, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %630, i32 0, i32 3
  %632 = load i16, ptr %631, align 2, !tbaa !24
  %633 = zext i16 %632 to i32
  %634 = icmp eq i32 %629, %633
  br i1 %634, label %635, label %656

635:                                              ; preds = %627
  %636 = load i8, ptr %33, align 1, !tbaa !30
  %637 = zext i8 %636 to i32
  %638 = load ptr, ptr %6, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %638, i32 0, i32 4
  %640 = load i16, ptr %639, align 4, !tbaa !25
  %641 = zext i16 %640 to i32
  %642 = icmp eq i32 %637, %641
  br i1 %642, label %643, label %656

643:                                              ; preds = %635
  %644 = load ptr, ptr %6, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %644, i32 0, i32 5
  store i32 1, ptr %645, align 4, !tbaa !27
  %646 = load ptr, ptr %6, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %646, i32 0, i32 1
  store i32 0, ptr %647, align 4, !tbaa !26
  store i32 1, ptr %16, align 4, !tbaa !9
  %648 = load ptr, ptr %6, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %648, i32 0, i32 8
  %650 = load i32, ptr %649, align 4, !tbaa !20
  %651 = icmp ult i32 %650, 8
  br i1 %651, label %652, label %655

652:                                              ; preds = %643
  %653 = load ptr, ptr %6, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %653, i32 0, i32 8
  store i32 8, ptr %654, align 4, !tbaa !20
  br label %655

655:                                              ; preds = %652, %643
  br label %656

656:                                              ; preds = %655, %635, %627, %619, %612
  br label %657

657:                                              ; preds = %656
  %658 = load i64, ptr %12, align 8, !tbaa !11
  %659 = add i64 %658, 1
  store i64 %659, ptr %12, align 8, !tbaa !11
  br label %608, !llvm.loop !33

660:                                              ; preds = %608
  br label %661

661:                                              ; preds = %660, %602, %597
  %662 = load ptr, ptr %6, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %662, i32 0, i32 2
  %664 = load i16, ptr %663, align 4, !tbaa !23
  %665 = zext i16 %664 to i32
  %666 = shl i32 %665, 8
  %667 = load ptr, ptr %6, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %667, i32 0, i32 2
  %669 = load i16, ptr %668, align 4, !tbaa !23
  %670 = zext i16 %669 to i32
  %671 = add nsw i32 %670, %666
  %672 = trunc i32 %671 to i16
  store i16 %672, ptr %668, align 4, !tbaa !23
  %673 = load ptr, ptr %6, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %673, i32 0, i32 3
  %675 = load i16, ptr %674, align 2, !tbaa !24
  %676 = zext i16 %675 to i32
  %677 = shl i32 %676, 8
  %678 = load ptr, ptr %6, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %678, i32 0, i32 3
  %680 = load i16, ptr %679, align 2, !tbaa !24
  %681 = zext i16 %680 to i32
  %682 = add nsw i32 %681, %677
  %683 = trunc i32 %682 to i16
  store i16 %683, ptr %679, align 2, !tbaa !24
  %684 = load ptr, ptr %6, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %684, i32 0, i32 4
  %686 = load i16, ptr %685, align 4, !tbaa !25
  %687 = zext i16 %686 to i32
  %688 = shl i32 %687, 8
  %689 = load ptr, ptr %6, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.LodePNGColorProfile, ptr %689, i32 0, i32 4
  %691 = load i16, ptr %690, align 4, !tbaa !25
  %692 = zext i16 %691 to i32
  %693 = add nsw i32 %692, %688
  %694 = trunc i32 %693 to i16
  store i16 %694, ptr %690, align 4, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #3
  br label %695

695:                                              ; preds = %661, %334
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef %13)
  %696 = load i32, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 136, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  ret i32 %696
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !10, i64 4}
!14 = !{!"_ZTS16LodePNGColorMode", !15, i64 0, !10, i64 4, !6, i64 8, !12, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36}
!15 = !{!"_ZTS16LodePNGColorType", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"short", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !10, i64 1048}
!21 = !{!"_ZTS19LodePNGColorProfile", !10, i64 0, !10, i64 4, !17, i64 8, !17, i64 10, !17, i64 12, !10, i64 16, !10, i64 20, !7, i64 24, !10, i64 1048}
!22 = !{!21, !10, i64 0}
!23 = !{!21, !17, i64 8}
!24 = !{!21, !17, i64 10}
!25 = !{!21, !17, i64 12}
!26 = !{!21, !10, i64 4}
!27 = !{!21, !10, i64 16}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}
!30 = !{!7, !7, i64 0}
!31 = !{!21, !10, i64 20}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}


; 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.ColorTree = type { [16 x ptr], i32 }

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z15lodepng_get_bppPK16LodePNGColorMode(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z22lodepng_can_have_alphaPK16LodePNGColorMode(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL15color_tree_initP9ColorTree(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z25lodepng_get_color_profileP19LodePNGColorProfilePKhjjPK16LodePNGColorMode(ptr nocapture noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4) local_unnamed_addr #1 {
  %6 = alloca %struct.ColorTree, align 8
  %7 = alloca i16, align 2
  %8 = alloca i16, align 2
  %9 = alloca i16, align 2
  %10 = alloca i16, align 2
  %11 = alloca i16, align 2
  %12 = alloca i16, align 2
  %13 = alloca i16, align 2
  %14 = alloca i16, align 2
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 136, ptr nonnull %6) #3
  %19 = zext i32 %2 to i64
  %20 = zext i32 %3 to i64
  %21 = mul nuw i64 %20, %19
  %22 = tail call noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef %4)
  %.not = icmp ne i32 %22, 0
  %23 = zext i1 %.not to i32
  %24 = tail call noundef i32 @_Z22lodepng_can_have_alphaPK16LodePNGColorMode(ptr noundef %4)
  %.not184 = icmp eq i32 %24, 0
  %25 = zext i1 %.not184 to i32
  %26 = tail call noundef i32 @_Z15lodepng_get_bppPK16LodePNGColorMode(ptr noundef %4)
  %27 = icmp eq i32 %26, 1
  %28 = icmp ugt i32 %26, 8
  %brmerge = or i1 %28, %27
  %.mux = select i1 %28, i32 257, i32 2
  br i1 %brmerge, label %34, label %29

29:                                               ; preds = %5
  %30 = icmp eq i32 %26, 2
  br i1 %30, label %34, label %31

31:                                               ; preds = %29
  %32 = icmp eq i32 %26, 4
  %33 = select i1 %32, i32 16, i32 256
  br label %34

34:                                               ; preds = %5, %29, %31
  %.0176 = phi i32 [ %.mux, %5 ], [ %33, %31 ], [ 4, %29 ]
  call void @_ZL15color_tree_initP9ColorTree(ptr noundef nonnull %6)
  %35 = getelementptr inbounds i8, ptr %4, i64 4
  %36 = load i32, ptr %35, align 4, !tbaa !5
  %37 = icmp eq i32 %36, 16
  br i1 %37, label %38, label %.thread

38:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %10) #3
  %.not185246 = icmp eq i64 %21, 0
  br i1 %.not185246, label %._crit_edge, label %.lr.ph

39:                                               ; preds = %55
  %40 = add nuw i64 %.0247, 1
  %.not185 = icmp eq i64 %40, %21
  br i1 %.not185, label %._crit_edge, label %.lr.ph, !llvm.loop !13

.lr.ph:                                           ; preds = %38, %39
  %.0247 = phi i64 [ %40, %39 ], [ 0, %38 ]
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %1, i64 noundef %.0247, ptr noundef %4)
  %41 = load i16, ptr %7, align 2, !tbaa !15
  %42 = zext i16 %41 to i32
  %43 = and i32 %42, 255
  %44 = lshr i32 %42, 8
  %.not186 = icmp eq i32 %43, %44
  br i1 %.not186, label %45, label %60

45:                                               ; preds = %.lr.ph
  %46 = load i16, ptr %8, align 2, !tbaa !15
  %47 = zext i16 %46 to i32
  %48 = and i32 %47, 255
  %49 = lshr i32 %47, 8
  %.not187 = icmp eq i32 %48, %49
  br i1 %.not187, label %50, label %60

50:                                               ; preds = %45
  %51 = load i16, ptr %9, align 2, !tbaa !15
  %52 = zext i16 %51 to i32
  %53 = and i32 %52, 255
  %54 = lshr i32 %52, 8
  %.not188 = icmp eq i32 %53, %54
  br i1 %.not188, label %55, label %60

55:                                               ; preds = %50
  %56 = load i16, ptr %10, align 2, !tbaa !15
  %57 = zext i16 %56 to i32
  %58 = and i32 %57, 255
  %59 = lshr i32 %57, 8
  %.not189 = icmp eq i32 %58, %59
  br i1 %.not189, label %39, label %60

._crit_edge:                                      ; preds = %39, %38
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %7) #3
  br label %.thread

60:                                               ; preds = %55, %50, %45, %.lr.ph
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %11) #3
  store i16 0, ptr %11, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %12) #3
  store i16 0, ptr %12, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #3
  store i16 0, ptr %13, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %14) #3
  store i16 0, ptr %14, align 2, !tbaa !15
  %61 = getelementptr inbounds i8, ptr %0, i64 1048
  store i32 16, ptr %61, align 4, !tbaa !17
  %62 = getelementptr inbounds i8, ptr %0, i64 8
  %63 = getelementptr inbounds i8, ptr %0, i64 10
  %64 = getelementptr inbounds i8, ptr %0, i64 12
  %65 = getelementptr inbounds i8, ptr %0, i64 4
  %66 = getelementptr inbounds i8, ptr %0, i64 16
  br label %67

67:                                               ; preds = %60, %.thread231
  %.1250 = phi i64 [ 0, %60 ], [ %103, %.thread231 ]
  %.0162249 = phi i32 [ %23, %60 ], [ %.1163, %.thread231 ]
  %.0166248 = phi i32 [ %25, %60 ], [ %.2168234, %.thread231 ]
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef %1, i64 noundef %.1250, ptr noundef %4)
  %.not207 = icmp eq i32 %.0162249, 0
  br i1 %.not207, label %68, label %73

68:                                               ; preds = %67
  %69 = load i16, ptr %11, align 2, !tbaa !15
  %70 = load i16, ptr %12, align 2, !tbaa !15
  %.not208 = icmp eq i16 %69, %70
  %71 = load i16, ptr %13, align 2
  %.not209 = icmp eq i16 %69, %71
  %or.cond219 = select i1 %.not208, i1 %.not209, i1 false
  br i1 %or.cond219, label %73, label %72

72:                                               ; preds = %68
  store i32 1, ptr %0, align 4, !tbaa !19
  br label %73

73:                                               ; preds = %68, %72, %67
  %74 = phi i1 [ true, %67 ], [ true, %72 ], [ false, %68 ]
  %.1163 = phi i32 [ 1, %67 ], [ 1, %72 ], [ 0, %68 ]
  %.not210 = icmp eq i32 %.0166248, 0
  br i1 %.not210, label %75, label %102

75:                                               ; preds = %73
  %76 = load i16, ptr %11, align 2, !tbaa !15
  %77 = load i16, ptr %62, align 4, !tbaa !20
  %78 = icmp eq i16 %76, %77
  br i1 %78, label %79, label %87

79:                                               ; preds = %75
  %80 = load i16, ptr %12, align 2, !tbaa !15
  %81 = load i16, ptr %63, align 2, !tbaa !21
  %82 = icmp eq i16 %80, %81
  br i1 %82, label %83, label %87

83:                                               ; preds = %79
  %84 = load i16, ptr %13, align 2, !tbaa !15
  %85 = load i16, ptr %64, align 4, !tbaa !22
  %86 = icmp eq i16 %84, %85
  br label %87

87:                                               ; preds = %83, %79, %75
  %88 = phi i1 [ false, %79 ], [ false, %75 ], [ %86, %83 ]
  %89 = load i16, ptr %14, align 2, !tbaa !15
  switch i16 %89, label %.sink.split [
    i16 -1, label %99
    i16 0, label %90
  ]

90:                                               ; preds = %87
  %91 = load i32, ptr %65, align 4, !tbaa !23
  %92 = icmp eq i32 %91, 0
  %or.cond = select i1 %92, i1 true, i1 %88
  br i1 %or.cond, label %93, label %.sink.split

93:                                               ; preds = %90
  %94 = load i32, ptr %66, align 4, !tbaa !24
  %95 = or i32 %94, %91
  %brmerge266.not = icmp eq i32 %95, 0
  br i1 %brmerge266.not, label %96, label %.thread231

96:                                               ; preds = %93
  store i32 1, ptr %65, align 4, !tbaa !23
  store i16 %76, ptr %62, align 4, !tbaa !20
  %97 = load i16, ptr %12, align 2, !tbaa !15
  store i16 %97, ptr %63, align 2, !tbaa !21
  %98 = load i16, ptr %13, align 2, !tbaa !15
  store i16 %98, ptr %64, align 4, !tbaa !22
  br label %.thread231

99:                                               ; preds = %87
  %100 = load i32, ptr %65, align 4, !tbaa !23
  %101 = icmp ne i32 %100, 0
  %or.cond3 = select i1 %101, i1 %88, i1 false
  br i1 %or.cond3, label %.sink.split, label %.thread231

.sink.split:                                      ; preds = %99, %90, %87
  store i32 1, ptr %66, align 4, !tbaa !24
  store i32 0, ptr %65, align 4, !tbaa !23
  br label %102

102:                                              ; preds = %.sink.split, %73
  br i1 %74, label %104, label %.thread231

.thread231:                                       ; preds = %93, %96, %99, %102
  %.2168234 = phi i32 [ 1, %102 ], [ 0, %99 ], [ 0, %96 ], [ 0, %93 ]
  %103 = add i64 %.1250, 1
  %.not206 = icmp eq i64 %103, %21
  br i1 %.not206, label %104, label %67, !llvm.loop !25

104:                                              ; preds = %102, %.thread231
  %105 = load i32, ptr %65, align 4, !tbaa !23
  %.not215 = icmp eq i32 %105, 0
  br i1 %.not215, label %.loopexit245, label %106

106:                                              ; preds = %104
  %107 = load i32, ptr %66, align 4, !tbaa !24
  %.not216 = icmp eq i32 %107, 0
  br i1 %.not216, label %.preheader244, label %.loopexit245

.preheader244:                                    ; preds = %106, %122
  %.2251 = phi i64 [ %123, %122 ], [ 0, %106 ]
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef %1, i64 noundef %.2251, ptr noundef %4)
  %108 = load i16, ptr %14, align 2, !tbaa !15
  %.not218 = icmp eq i16 %108, 0
  br i1 %.not218, label %122, label %109

109:                                              ; preds = %.preheader244
  %110 = load i16, ptr %11, align 2, !tbaa !15
  %111 = load i16, ptr %62, align 4, !tbaa !20
  %112 = icmp eq i16 %110, %111
  br i1 %112, label %113, label %122

113:                                              ; preds = %109
  %114 = load i16, ptr %12, align 2, !tbaa !15
  %115 = load i16, ptr %63, align 2, !tbaa !21
  %116 = icmp eq i16 %114, %115
  br i1 %116, label %117, label %122

117:                                              ; preds = %113
  %118 = load i16, ptr %13, align 2, !tbaa !15
  %119 = load i16, ptr %64, align 4, !tbaa !22
  %120 = icmp eq i16 %118, %119
  br i1 %120, label %121, label %122

121:                                              ; preds = %117
  store i32 1, ptr %66, align 4, !tbaa !24
  store i32 0, ptr %65, align 4, !tbaa !23
  br label %122

122:                                              ; preds = %.preheader244, %109, %113, %117, %121
  %123 = add i64 %.2251, 1
  %.not217 = icmp eq i64 %123, %21
  br i1 %.not217, label %.loopexit245, label %.preheader244, !llvm.loop !26

.loopexit245:                                     ; preds = %122, %106, %104
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %12) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %11) #3
  br label %268

.thread:                                          ; preds = %34, %._crit_edge
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #3
  store i8 0, ptr %15, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #3
  store i8 0, ptr %16, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #3
  store i8 0, ptr %17, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #3
  store i8 0, ptr %18, align 1, !tbaa !27
  %.not191252 = icmp eq i64 %21, 0
  br i1 %.not191252, label %._crit_edge259, label %.lr.ph258

.lr.ph258:                                        ; preds = %.thread
  %124 = getelementptr inbounds i8, ptr %0, i64 1048
  %125 = getelementptr inbounds i8, ptr %0, i64 8
  %126 = getelementptr inbounds i8, ptr %0, i64 10
  %127 = getelementptr inbounds i8, ptr %0, i64 12
  %128 = getelementptr inbounds i8, ptr %0, i64 4
  %129 = getelementptr inbounds i8, ptr %0, i64 16
  %130 = getelementptr inbounds i8, ptr %0, i64 20
  %131 = getelementptr inbounds i8, ptr %0, i64 24
  br label %132

132:                                              ; preds = %.lr.ph258, %.thread238
  %.3257 = phi i64 [ 0, %.lr.ph258 ], [ %229, %.thread238 ]
  %.2164256 = phi i32 [ %23, %.lr.ph258 ], [ %.3165, %.thread238 ]
  %.3169255 = phi i32 [ %25, %.lr.ph258 ], [ %.5, %.thread238 ]
  %.0171254 = phi i32 [ 0, %.lr.ph258 ], [ %.1172243, %.thread238 ]
  %.0173.in253 = phi i1 [ %27, %.lr.ph258 ], [ %142, %.thread238 ]
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef %1, i64 noundef %.3257, ptr noundef %4)
  %.pre = load i32, ptr %124, align 4, !tbaa !17
  %133 = icmp ugt i32 %.pre, 7
  %or.cond267.not = select i1 %.0173.in253, i1 true, i1 %133
  br i1 %or.cond267.not, label %140, label %134

134:                                              ; preds = %132
  %135 = load i8, ptr %15, align 1, !tbaa !27
  %136 = call noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext %135)
  %137 = load i32, ptr %124, align 4, !tbaa !17
  %138 = icmp ugt i32 %136, %137
  br i1 %138, label %139, label %140

139:                                              ; preds = %134
  store i32 %136, ptr %124, align 4, !tbaa !17
  br label %140

140:                                              ; preds = %134, %139, %132
  %141 = phi i32 [ %137, %134 ], [ %136, %139 ], [ %.pre, %132 ]
  %142 = icmp uge i32 %141, %26
  %.not192 = icmp eq i32 %.2164256, 0
  br i1 %.not192, label %143, label %150

143:                                              ; preds = %140
  %144 = load i8, ptr %15, align 1, !tbaa !27
  %145 = load i8, ptr %16, align 1, !tbaa !27
  %.not193 = icmp eq i8 %144, %145
  %146 = load i8, ptr %17, align 1
  %.not194 = icmp eq i8 %144, %146
  %or.cond220 = select i1 %.not193, i1 %.not194, i1 false
  br i1 %or.cond220, label %150, label %147

147:                                              ; preds = %143
  store i32 1, ptr %0, align 4, !tbaa !19
  %148 = icmp ult i32 %141, 8
  br i1 %148, label %149, label %150

149:                                              ; preds = %147
  store i32 8, ptr %124, align 4, !tbaa !17
  br label %150

150:                                              ; preds = %143, %147, %149, %140
  %151 = phi i32 [ %141, %140 ], [ 8, %149 ], [ %141, %147 ], [ %141, %143 ]
  %152 = phi i1 [ true, %140 ], [ true, %149 ], [ true, %147 ], [ false, %143 ]
  %.3165 = phi i32 [ 1, %140 ], [ 1, %149 ], [ 1, %147 ], [ 0, %143 ]
  %.not195 = icmp eq i32 %.3169255, 0
  br i1 %.not195, label %153, label %.thread237

153:                                              ; preds = %150
  %154 = load i8, ptr %15, align 1, !tbaa !27
  %155 = load i16, ptr %125, align 4, !tbaa !20
  %156 = zext i8 %154 to i16
  %157 = icmp eq i16 %155, %156
  br i1 %157, label %158, label %168

158:                                              ; preds = %153
  %159 = load i8, ptr %16, align 1, !tbaa !27
  %160 = load i16, ptr %126, align 2, !tbaa !21
  %161 = zext i8 %159 to i16
  %162 = icmp eq i16 %160, %161
  br i1 %162, label %163, label %168

163:                                              ; preds = %158
  %164 = load i8, ptr %17, align 1, !tbaa !27
  %165 = load i16, ptr %127, align 4, !tbaa !22
  %166 = zext i8 %164 to i16
  %167 = icmp eq i16 %165, %166
  br label %168

168:                                              ; preds = %163, %158, %153
  %169 = phi i1 [ false, %158 ], [ false, %153 ], [ %167, %163 ]
  %170 = load i8, ptr %18, align 1, !tbaa !27
  switch i8 %170, label %174 [
    i8 -1, label %185
    i8 0, label %171
  ]

171:                                              ; preds = %168
  %172 = load i32, ptr %128, align 4, !tbaa !23
  %173 = icmp eq i32 %172, 0
  %or.cond11 = select i1 %173, i1 true, i1 %169
  br i1 %or.cond11, label %177, label %174

174:                                              ; preds = %168, %171
  store i32 1, ptr %129, align 4, !tbaa !24
  store i32 0, ptr %128, align 4, !tbaa !23
  %175 = icmp ult i32 %151, 8
  br i1 %175, label %176, label %.thread237

176:                                              ; preds = %174
  store i32 8, ptr %124, align 4, !tbaa !17
  br label %.thread237

177:                                              ; preds = %171
  %178 = load i32, ptr %129, align 4, !tbaa !24
  %179 = or i32 %178, %172
  %brmerge269.not = icmp eq i32 %179, 0
  br i1 %brmerge269.not, label %180, label %.thread237

180:                                              ; preds = %177
  store i32 1, ptr %128, align 4, !tbaa !23
  store i16 %156, ptr %125, align 4, !tbaa !20
  %181 = load i8, ptr %16, align 1, !tbaa !27
  %182 = zext i8 %181 to i16
  store i16 %182, ptr %126, align 2, !tbaa !21
  %183 = load i8, ptr %17, align 1, !tbaa !27
  %184 = zext i8 %183 to i16
  store i16 %184, ptr %127, align 4, !tbaa !22
  br label %.thread237

185:                                              ; preds = %168
  %186 = load i32, ptr %128, align 4, !tbaa !23
  %187 = icmp ne i32 %186, 0
  %or.cond13 = select i1 %187, i1 %169, i1 false
  br i1 %or.cond13, label %188, label %.thread237

188:                                              ; preds = %185
  store i32 1, ptr %129, align 4, !tbaa !24
  store i32 0, ptr %128, align 4, !tbaa !23
  %189 = icmp ult i32 %151, 8
  br i1 %189, label %190, label %.thread237

190:                                              ; preds = %188
  store i32 8, ptr %124, align 4, !tbaa !17
  br label %.thread237

.thread237:                                       ; preds = %177, %176, %174, %185, %190, %188, %180, %150
  %191 = phi i1 [ true, %150 ], [ true, %176 ], [ true, %174 ], [ true, %190 ], [ true, %188 ], [ false, %185 ], [ false, %180 ], [ false, %177 ]
  %.5 = phi i32 [ 1, %150 ], [ 1, %176 ], [ 1, %174 ], [ 1, %190 ], [ 1, %188 ], [ 0, %185 ], [ 0, %180 ], [ 0, %177 ]
  %.not200 = icmp eq i32 %.0171254, 0
  br i1 %.not200, label %192, label %227

192:                                              ; preds = %.thread237
  %193 = load i8, ptr %15, align 1, !tbaa !27
  %194 = load i8, ptr %16, align 1, !tbaa !27
  %195 = load i8, ptr %17, align 1, !tbaa !27
  %196 = load i8, ptr %18, align 1, !tbaa !27
  %197 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef nonnull %6, i8 noundef zeroext %193, i8 noundef zeroext %194, i8 noundef zeroext %195, i8 noundef zeroext %196)
  %.not201 = icmp eq i32 %197, 0
  br i1 %.not201, label %198, label %.thread238

198:                                              ; preds = %192
  %199 = load i8, ptr %15, align 1, !tbaa !27
  %200 = load i8, ptr %16, align 1, !tbaa !27
  %201 = load i8, ptr %17, align 1, !tbaa !27
  %202 = load i8, ptr %18, align 1, !tbaa !27
  %203 = load i32, ptr %130, align 4, !tbaa !28
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef nonnull %6, i8 noundef zeroext %199, i8 noundef zeroext %200, i8 noundef zeroext %201, i8 noundef zeroext %202, i32 noundef %203)
  %204 = load i32, ptr %130, align 4, !tbaa !28
  %205 = icmp ult i32 %204, 256
  br i1 %205, label %206, label %223

206:                                              ; preds = %198
  %207 = load i8, ptr %15, align 1, !tbaa !27
  %208 = shl nuw nsw i32 %204, 2
  %209 = zext nneg i32 %208 to i64
  %210 = getelementptr inbounds i8, ptr %131, i64 %209
  store i8 %207, ptr %210, align 1, !tbaa !27
  %211 = load i8, ptr %16, align 1, !tbaa !27
  %212 = or disjoint i32 %208, 1
  %213 = zext nneg i32 %212 to i64
  %214 = getelementptr inbounds i8, ptr %131, i64 %213
  store i8 %211, ptr %214, align 1, !tbaa !27
  %215 = load i8, ptr %17, align 1, !tbaa !27
  %216 = or disjoint i32 %208, 2
  %217 = zext nneg i32 %216 to i64
  %218 = getelementptr inbounds i8, ptr %131, i64 %217
  store i8 %215, ptr %218, align 1, !tbaa !27
  %219 = load i8, ptr %18, align 1, !tbaa !27
  %220 = or disjoint i32 %208, 3
  %221 = zext nneg i32 %220 to i64
  %222 = getelementptr inbounds i8, ptr %131, i64 %221
  store i8 %219, ptr %222, align 1, !tbaa !27
  br label %223

223:                                              ; preds = %206, %198
  %224 = add i32 %204, 1
  store i32 %224, ptr %130, align 4, !tbaa !28
  %225 = icmp uge i32 %224, %.0176
  %226 = zext i1 %225 to i32
  br label %227

227:                                              ; preds = %223, %.thread237
  %.1172 = phi i32 [ 1, %.thread237 ], [ %226, %223 ]
  %228 = icmp ne i32 %.1172, 0
  %or.cond15 = and i1 %191, %228
  %or.cond17 = and i1 %152, %or.cond15
  %or.cond19 = select i1 %or.cond17, i1 %142, i1 false
  br i1 %or.cond19, label %._crit_edge259, label %.thread238

.thread238:                                       ; preds = %192, %227
  %.1172243 = phi i32 [ %.1172, %227 ], [ 0, %192 ]
  %229 = add nuw i64 %.3257, 1
  %.not191 = icmp eq i64 %229, %21
  br i1 %.not191, label %._crit_edge259, label %132, !llvm.loop !29

._crit_edge259:                                   ; preds = %.thread238, %227, %.thread
  %230 = getelementptr inbounds i8, ptr %0, i64 4
  %231 = load i32, ptr %230, align 4, !tbaa !23
  %.not202 = icmp eq i32 %231, 0
  br i1 %.not202, label %.loopexit, label %232

232:                                              ; preds = %._crit_edge259
  %233 = getelementptr inbounds i8, ptr %0, i64 16
  %234 = load i32, ptr %233, align 4, !tbaa !24
  %.not203 = icmp ne i32 %234, 0
  %or.cond264 = or i1 %.not203, %.not191252
  br i1 %or.cond264, label %.loopexit, label %.lr.ph263

.lr.ph263:                                        ; preds = %232
  %235 = getelementptr inbounds i8, ptr %0, i64 8
  %236 = getelementptr inbounds i8, ptr %0, i64 10
  %237 = getelementptr inbounds i8, ptr %0, i64 12
  %238 = getelementptr inbounds i8, ptr %0, i64 1048
  br label %239

239:                                              ; preds = %.lr.ph263, %260
  %.4262 = phi i64 [ 0, %.lr.ph263 ], [ %261, %260 ]
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef %1, i64 noundef %.4262, ptr noundef %4)
  %240 = load i8, ptr %18, align 1, !tbaa !27
  %.not205 = icmp eq i8 %240, 0
  br i1 %.not205, label %260, label %241

241:                                              ; preds = %239
  %242 = load i8, ptr %15, align 1, !tbaa !27
  %243 = load i16, ptr %235, align 4, !tbaa !20
  %244 = zext i8 %242 to i16
  %245 = icmp eq i16 %243, %244
  br i1 %245, label %246, label %260

246:                                              ; preds = %241
  %247 = load i8, ptr %16, align 1, !tbaa !27
  %248 = load i16, ptr %236, align 2, !tbaa !21
  %249 = zext i8 %247 to i16
  %250 = icmp eq i16 %248, %249
  br i1 %250, label %251, label %260

251:                                              ; preds = %246
  %252 = load i8, ptr %17, align 1, !tbaa !27
  %253 = load i16, ptr %237, align 4, !tbaa !22
  %254 = zext i8 %252 to i16
  %255 = icmp eq i16 %253, %254
  br i1 %255, label %256, label %260

256:                                              ; preds = %251
  store i32 1, ptr %233, align 4, !tbaa !24
  store i32 0, ptr %230, align 4, !tbaa !23
  %257 = load i32, ptr %238, align 4, !tbaa !17
  %258 = icmp ult i32 %257, 8
  br i1 %258, label %259, label %260

259:                                              ; preds = %256
  store i32 8, ptr %238, align 4, !tbaa !17
  br label %260

260:                                              ; preds = %239, %241, %246, %251, %259, %256
  %261 = add nuw i64 %.4262, 1
  %.not204 = icmp eq i64 %261, %21
  br i1 %.not204, label %.loopexit, label %239, !llvm.loop !30

.loopexit:                                        ; preds = %260, %232, %._crit_edge259
  %262 = getelementptr inbounds i8, ptr %0, i64 8
  %263 = load <2 x i16>, ptr %262, align 4, !tbaa !15
  %264 = mul <2 x i16> %263, <i16 257, i16 257>
  store <2 x i16> %264, ptr %262, align 4, !tbaa !15
  %265 = getelementptr inbounds i8, ptr %0, i64 12
  %266 = load i16, ptr %265, align 4, !tbaa !22
  %267 = mul i16 %266, 257
  store i16 %267, ptr %265, align 4, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #3
  br label %268

268:                                              ; preds = %.loopexit, %.loopexit245
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef nonnull %6)
  call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %6) #3
  ret i32 0
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 4}
!6 = !{!"_ZTS16LodePNGColorMode", !7, i64 0, !10, i64 4, !11, i64 8, !12, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36}
!7 = !{!"_ZTS16LodePNGColorType", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !8, i64 0}
!17 = !{!18, !10, i64 1048}
!18 = !{!"_ZTS19LodePNGColorProfile", !10, i64 0, !10, i64 4, !16, i64 8, !16, i64 10, !16, i64 12, !10, i64 16, !10, i64 20, !8, i64 24, !10, i64 1048}
!19 = !{!18, !10, i64 0}
!20 = !{!18, !16, i64 8}
!21 = !{!18, !16, i64 10}
!22 = !{!18, !16, i64 12}
!23 = !{!18, !10, i64 4}
!24 = !{!18, !10, i64 16}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = !{!8, !8, i64 0}
!28 = !{!18, !10, i64 20}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}


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